Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Verilog

D-защелка

Триггер захватывает данные на своем входе по положительному или отрицательному фронту тактового сигнала. Важно отметить, что все, что происходит с данными после фронта тактового сигнала до следующего фронта тактового сигнала, не будет отражено в выводе. защелка с другой стороны, не захватывает край тактового сигнала, вместо этого выход следует за входом, пока активен вывод разрешения.

Дизайн

В этом примере мы создадим защелку с тремя входами и одним выходом. Ввод d обозначает данные, которые могут быть 0 или 1, rstn означает активный-низкий сброс и en означает включение, которое используется для привязки входных данных к выходным. Сброс, являющийся активным-низким, просто означает, что элемент дизайна будет сброшен, когда этот вход станет 0, или, другими словами, сброс активен, когда его значение низкое. Значение вывода q определяется входными данными d , ru и rstn .

  
  
module d_latch (  input d,           // 1-bit input pin for data
                  input en,          // 1-bit input pin for enabling the latch
                  input rstn,        // 1-bit input pin for active-low reset
                  output reg q);     // 1-bit output pin for data output
 
   // This always block is "always" triggered whenever en/rstn/d changes
   // If reset is asserted then output will be zero
   // Else as long as enable is high, output q follows input d
   always @ (en or rstn or d)
      if (!rstn)
         q <= 0;
      else
         if (en)
            q <= d;
endmodule

  

Обратите внимание, что список чувствительности к always Блок содержит все сигналы, необходимые для обновления вывода. Этот блок будет срабатывать всякий раз, когда любой из сигналов в списке чувствительности меняет свое значение. Также q получит значение d только тогда, когда en высокий и, следовательно, является положительным защелка.

Схема

Тестовый стенд

  
  
module tb_latch;
   // Declare variables that can be used to drive values to the design
   reg d;  
   reg en;
   reg rstn;
   reg [2:0] delay;
   reg [1:0] delay2;
   integer i;
   
   // Instantiate design and connect design ports with TB signals
   d_latch  dl0 ( .d (d),
                  .en (en),
                  .rstn (rstn),
                  .q (q));

   // This initial block forms the stimulus to test the design
   initial begin
      $monitor ("[%0t] en=%0b d=%0b q=%0b", $time, en, d, q);
   
      // 1. Initialize testbench variables
      d <= 0;
      en <= 0;
      rstn <= 0;
      
      // 2. Release reset
      #10 rstn <= 1;
      
      // 3. Randomly change d and enable
      for (i = 0; i < 5; i=i+1) begin
         delay = $random;
         delay2 = $random;
         #(delay2) en <= ~en;
         #(delay) d <= i;
      end
   end
endmodule

  

Чтобы наш тестовый стенд подтверждал и отменял сигналы более случайным образом, мы объявили reg переменная с именем задержка размером 3 бита, так что он может принимать любое значение от 0 до 7. Тогда задержка переменная используется для задержки назначения d и ru чтобы получить разные узоры в каждом цикле.

Вывод

Журнал моделирования
ncsim> run
[0] en=0 d=0 q=0
[11] en=1 d=0 q=0
[18] en=0 d=0 q=0
[19] en=0 d=1 q=0
[20] en=1 d=1 q=1
[25] en=1 d=0 q=0
[27] en=0 d=0 q=0
[32] en=0 d=1 q=0
[33] en=1 d=1 q=1
[34] en=1 d=0 q=0
ncsim: *W,RNQUIE: Simulation is complete.

Нажмите на изображение, чтобы увеличить его.


Verilog

  1. Усилитель с общим эмиттером
  2. Простой операционный усилитель
  3. Прецизионный повторитель напряжения
  4. Базовый ввод и вывод C#
  5. Базовый ввод/вывод C++
  6. C Вход Выход (ввод/вывод)
  7. Ввод, вывод и импорт Python
  8. Базовый ввод и вывод Java
  9. Базовый ввод/вывод C++:пример Cout, Cin, Cerr
  10. C - Вход и выход