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

Verilog Inter и внутренняя задержка назначения

Операторы задержки Verilog могут иметь задержки, указанные либо в левой, либо в правой части оператора присваивания.

Задержки между назначениями

  
  
	// Delay is specified on the left side
	#<delay> <LHS> = <RHS>

  

взаимное назначение Оператор задержки имеет значение задержки в левой части оператора присваивания. Это указывает на то, что сам оператор выполняется после задержка истекает, и это наиболее часто используемая форма управления задержкой.

  
  
module tb;
  reg  a, b, c, q;
  
  initial begin
    $monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);
    
    // Initialize all signals to 0 at time 0
    a <= 0;
    b <= 0;
    c <= 0;
    q <= 0;
    
    // Inter-assignment delay: Wait for #5 time units
    // and then assign a and c to 1. Note that 'a' and 'c'
    // gets updated at the end of current timestep
    #5  a <= 1;
    	c <= 1;
    
    // Inter-assignment delay: Wait for #5 time units
    // and then assign 'q' with whatever value RHS gets
    // evaluated to
    #5 q <= a & b | c;

    #20;
  end
  
endmodule

  

Обратите внимание, что q становится равным 1 в единицах времени 10, потому что выражение оценивается в единицах времени 10, а RHS, представляющая собой комбинацию a, b и c, оценивается как 1.

Журнал моделирования
xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.

Задержки внутри задания

  
  
	// Delay is specified on the right side
	<LHS> = #<delay> <RHS>

  

внутреннее задание задержка - это та, где есть задержка на правой стороне оператора присваивания. Это указывает на то, что оператор оценивается, и значения всех сигналов на RHS захватываются в первую очередь. Затем он присваивается результирующему сигналу только после задержка истекает.

  
  
module tb;
  reg  a, b, c, q;
  
  initial begin
    $monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);
  
	// Initialize all signals to 0 at time 0  
    a <= 0;
    b <= 0;
    c <= 0;
    q <= 0;
    
    // Inter-assignment delay: Wait for #5 time units
    // and then assign a and c to 1. Note that 'a' and 'c'
    // gets updated at the end of current timestep
    #5  a <= 1;
    	c <= 1;

    // Intra-assignment delay: First execute the statement
    // then wait for 5 time units and then assign the evaluated
    // value to q
    q <= #5 a & b | c;
    
    #20;
  end
endmodule

  

Обратите внимание, что присвоение q отсутствует в журнале!

Журнал моделирования
xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
xmsim: *W,RNQUIE: Simulation is complete.

Это связано с тем, что в 5 единицах времени a и c назначаются с использованием неблокирующих операторов. И поведение неблокирующего операторы таковы, что RHS оценивается, но присваивается переменной только в конце этого временного шага.

Таким образом, значения a и c оцениваются как 1, но еще не присваиваются, когда выполняется следующий неблокирующий оператор, который является оператором q. Таким образом, когда оценивается правая часть q, a и c по-прежнему имеют старое значение 0 и, следовательно, $monitor не обнаруживает изменения для отображения инструкции.

Чтобы увидеть это изменение, давайте изменим операторы присваивания на a и c с неблокирующих на блокирующие.

  
  
	...
	
	// Non-blocking changed to blocking and rest of the
	// code remains the same
    #5  a = 1;
    	c = 1;
    
    q <= #5 a & b | c;
    
   	...

  
Журнал моделирования
xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.


Verilog

  1. Введение в Верилог
  2. Учебник Verilog
  3. Конкатенация Verilog
  4. Верилог Задания
  5. Блокировка и неблокировка Verilog
  6. Верилог-функции
  7. Верилог Задача
  8. Контроль задержки Verilog
  9. Задержка ворот Verilog
  10. Генератор часов Verilog