Разрезание бита и битная конкатенация

В этом разделе описывается использовать функции bitsliceget и bitconcat, чтобы получить доступ и управлять секционированными микропроцессорами (поля) в фиксированной точке или целочисленном слове. Как пример, рассмотрите операцию свопинга верхнего и более низкого 4-битного откусывания 8-битного байта. Следующий пример выполняет эту задачу, не обращаясь к традиционным методам маски-и-сдвига.

function y = fcn(u)
% NIBBLE SWAP 
y = bitconcat( …
      bitsliceget(u, 4, 1), 
      bitsliceget(u, 8, 5));

bitsliceget и bitconcat функционируют карта непосредственно, чтобы резать и concat операторы и в VHDL® и в Verilog®.

Следующий листинг показывает соответствующий сгенерированный код VHDL.

ENTITY fcn IS
    PORT (
        clk : IN std_logic; 
        clk_enable : IN std_logic; 
        reset : IN std_logic;
        u : IN std_logic_vector(7 DOWNTO 0);
        y : OUT std_logic_vector(7 DOWNTO 0));
END nibble_swap_7b;


ARCHITECTURE fsm_SFHDL OF fcn IS


BEGIN
    -- NIBBLE SWAP
    y <= u(3 DOWNTO 0) & u(7 DOWNTO 4);
END fsm_SFHDL;

Следующий листинг показывает соответствующий сгенерированный код Verilog.

module fcn (clk, clk_enable, reset, u, y );
    input clk;
    input clk_enable;
    input reset;
    input [7:0] u;
    output [7:0] y;

    // NIBBLE SWAP
    assign y = {u[3:0], u[7:4]};

endmodule

Связанные примеры

Больше о