2016-09-25 4 views
1

У меня есть этот код:VHDL код делителя частоты

architecture Behavioral of BlockName is 
    signal t: std_logic; 
    signal c : std_logic_vector (1 downto 0); 
begin 
    process (reset, clk) begin 
    if (reset = '1') then 
     t <= '0'; 
     c <= (others=>'0'); 
    elsif clk'event and clk='l' then 
     if (c = din) then 
     t <= NOT(t); 
     c <= (others=>'0'); 
     else 
     c <= c + 1; 
     end if; 
    end if; 
    end process; 
    dout <= t; 
end Behavioral; 

роль Этот код является разделить частоту, когда он получает входной сигнал (часы + значение) и выводит разделенную частоту.

Теперь мои вопросы:

  1. Что это значит? c <= (others=>'0');
  2. Какая стоимость не может быть здесь t <= NOT(t);? последнее значение t? <= Работает как =?
+2

Просто вставьте код здесь, не делайте его изображением – harold

ответ

2
  1. c <= (others=>'0'); эквивалентно c <= "00";
  2. t <= not(t);t сопоставляющего противоположные текущего значения в t.
  3. = - сравнение равенства в VHDL.
  4. <= - назначение сигнала в VHDL.
+1

'c <= (others=> '0');' является оператором присваивания с выражением правой руки, которое представляет собой массив [aggregate] (http: // vhdl. renerta.com/mobile/source/vhd00002.htm) с типом и длиной, предоставленной контекстом, значение, зависящее от * ассоциации * элементов массива со значениями элементов. 'other' как выбор здесь для каждого элемента std_logic_vector с длиной' c', и это выражение связывает значение '0' с каждым элементом этого std_logic_vector. Подтип (ограничение диапазона индекса) будет преобразован в подтип 'c' во время назначения. – user1155120

+0

'NOT' является унарным логическим оператором [который имеет наивысший приоритет] (http://vhdl.renerta.com/source/vhd00047.htm). Круглые скобки вокруг 't' здесь не нужны. «<=» является составным разделителем, лексическим элементом, требуемым как часть инструкции присваивания сигнала. Он также используется в качестве имени оператора для реляционного оператора «меньше или равно». «=» также является оператором отношения равенства. В VHDL назначение сигнала осуществляется через [назначение сигнала] (http://vhdl.renerta.com/source/vhd00063.htm) оператор не через оператора. Операторы выполняют функции на операндах типа, возвращающего значение типа. – user1155120

0

так как «C» берется как вектор и хранит каждый его бит с нулем 'c < = (others =>' 0 ');' , а понятие блокирующих и неблокирующих сигналов отсутствует в VHDL. здесь '=' используется для сравнения, а '< =' используется для назначения сигнала. В вашем коде 't' объявляется как сигнал, и сигнал будет обновляться в конце каждой итерации блока процесса. поэтому в заявлении 't < = NOT (t);' значение t по-прежнему остается старым значением и будет обновляться в конце текущего тикания моделирования.

Смежные вопросы