Сначала Verilog:
function [ADDR_WIDTH-1:0] gray_conv;
input [ADDR_WIDTH-1:0] in;
begin
gray_conv = {in[ADDR_WIDTH-1],
in[ADDR_WIDTH-2:0] ^ in[ADDR_WIDTH-1:1]};
end
endfunction
Вот моя попытка преобразовать функцию серого кода Verilog в vhdl:
library ieee;
use ieee.std_logic_1164.all;
entity bus_fifo_async is
generic(
ADDR_WIDTH : integer := 3;
DATA_WIDTH : integer := 32
);
port(
wr_rst_i : in std_logic;
wr_clk_i : in std_logic
);
end entity;
architecture rtl of fifty_shades_of_vhdl is
function gray_conv(din: std_logic_vector(ADDR_WIDTH-1 downto 0))
return std_logic_vector(ADDR_WIDTH-1 downto 0) is
begin
return ( din(ADDR_WIDTH-1) & (din(ADDR_WIDTH-2 downto 0)
xor din(ADDR_WIDTH-1 downto 1)));
end function;
begin
end architecture;
Компилятор VHDL "barfs" на меня ... говорит ##$ @ # $. vhdl: 44: 35: ограничение индекса здесь не разрешено.