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