Я пытаюсь преобразовать некоторый код Verilog, который производит более медленные часы из более быстрых часов для модуля UART.Оригинальный код verilog основан на модуле на сайте fpga4fun.com, и это моя попытка перевести его для моего VHDL-дизайна.
entity baud_generator is
generic(
f_clk : integer := 50000000; -- default: 50 MHz
baud : integer := 115200; -- default: 115,200 baud
accum_width : integer := 16;
accum_inc : integer := (baud sll accum_width) / f_clk
);
port(
clock : in std_logic;
reset_n : in std_logic;
enable : in std_logic;
baud_clock : out std_logic
);
end entity baud_generator;
Однако мой компилятор Aldec-HDLt, как следующая строка:
accum_inc : natural := (baud sll accum_width) / f_clk
Вот точное сообщение об ошибке:
# Error: COMP96_0300: baud_generator.vhd : (20, 52): Cannot reference "f_clk" until the interface list is complete.
# Error: COMP96_0300: baud_generator.vhd : (20, 28): Cannot reference "baud" until the interface list is complete.
# Error: COMP96_0071: baud_generator.vhd : (20, 28): Operator "sll" is not defined for such operands.
# Error: COMP96_0104: baud_generator.vhd : (20, 27): Undefined type of expression.
# Error: COMP96_0077: baud_generator.vhd : (20, 27): Assignment target incompatible with right side. Expected type 'INTEGER'.
В Verilog, у меня есть что-то вроде этого:это то, что мне нужно изменить в этой строке, чтобы сделать компилятор счастливым?Можно ли использовать дженерики, соединенные таким образом?