В этом разделе описывается использовать функции 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