То, что я пытаюсь сделать, довольно просто, просто генерирую импульс от основного счетчика. Мой код показан ниже. Мой вопрос: есть ли эффективный способ сравнения std_logic_vector и целого числа? Мне нужно только сравнить их в этом единственном экземпляре в процессе. Кроме того, можете ли вы выполнить арифметику для 4-битного сигнала, как показано в моем коде? Вам нужна конкретная библиотека?
signal Top16: std_logic; -- 1 clk spike at 16x baud rate
signal Div16: std_logic_vector(3 downto 0);
DIVISOR: natural := 120 -- Can be 120 or 60, depending on user preference.
------------------------------------------------------------------------
process (RST, LCLK_MULT_BUFG)
begin
if RST='1' then
Top16 <= '0'; --1 bit signal
Div16 <= x"0"; -- 4 bit signal
elsif rising_edge(LCLK_MULT_BUFG) then
Top16 <= '0';
if Div16 = Divisor then -----> signal to integer comparison?
Div16 <= 0;
Top16 <= '1';
else
Div16 <= Div16 + 1; -----arithmetic on std_logic_vector??
end if;
end if;
ИЗМЕНИТЬ:
Количество битов в Div16 std_logic_vector будет варьироваться в зависимости от выбранного размера Divisor (показано ниже). Как это правильно оформить? Какие библиотеки понадобятся?
DIVISOR: natural := 120 -- Can be 120 or 60, depending on user preference.
constant COUNTER_BITS : natural := integer(ceil(log2(real(DIVISOR))));
signal Div16: std_logic_vector(COUNTER_BITS);