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

Verilog Моделирование

Verilog — это язык описания оборудования, и разработчикам не требуется моделировать свои RTL-проекты, чтобы иметь возможность преобразовывать их в логические вентили. Так в чем же необходимость симуляции?

Моделирование — это метод применения различных входных воздействий к дизайну в разное время, чтобы проверить, ведет ли RTL-код предполагаемым образом. По сути, моделирование — это проверенный метод проверки надежности проекта. Это также похоже на то, как изготовленный чип будет использоваться в реальном мире и как он реагирует на различные входные данные.

Например, приведенная выше конструкция представляет детектор положительного фронта с входными тактовыми импульсами и сигналом, которые оцениваются через периодические интервалы, чтобы найти выход pe. как показано. Моделирование позволяет нам просматривать временную диаграмму связанных сигналов, чтобы понять, как на самом деле ведет себя описание проекта в Verilog.

Есть несколько компаний EDA, которые разрабатывают симуляторы. способный выяснить выходы для различных входов в дизайн. Verilog определяется с точки зрения отдельного события. Модель выполнения и разные симуляторы могут свободно использовать разные алгоритмы, чтобы предоставить пользователю согласованный набор результатов. Код Verilog разделен на несколько процессов и потоков и может оцениваться в разное время в ходе моделирования, что будет затронуто позже.

Пример

Тестовый стенд под названием tb представляет собой контейнер для модуля дизайна. Однако в этом примере мы не использовали экземпляры проекта. Есть две переменные или сигналы которым можно присвоить определенные значения в определенное время. clk представляет часы, которые генерируются в тестовом стенде. Это делается с помощью always утверждение, чередуя значение часов через каждые 5 нс. initial блок содержит набор операторов, которые присваивают разные значения обоим сигналам в разное время.

  
  
module tb;
  reg clk;
  reg sig;
 
  // Clock generation 
  // Process starts at time 0ns and loops after every 5ns
  always #5 clk = ~clk;   
 
  // Initial block : Process starts at time 0ns
  initial begin            
    // This system task will print out the signal values everytime they change
    $monitor("Time = %0t clk = %0d sig = %0d", $time, clk, sig);
    
    // Also called stimulus, we simply assign different values to the variables
    // after some simulation "delay"
    sig = 0;
    #5 clk = 0;        // Assign clk to 0 at time 5ns
    #15  sig = 1;      // Assign sig to 1 at time 20ns (#5 + #15)
    #20  sig = 0;      // Assign sig to 0 at time 40ns (#5 + #15 + #20)
    #15  sig = 1;      // Assign sig to 1 at time 55ns (#5 + #15 + #20 + #15)
    #10  sig = 0;      // Assign sig to 0 at time 65ns (#5 + #15 + #20 + #15 + #10)
    #20 $finish;       // Finish simulation at time 85ns
  end
endmodule

  

Симулятор выдает следующий результат после выполнения вышеуказанного тестового стенда.

Журнал моделирования
ncsim> run
Time = 0 clk = x sig = 0
Time = 5 clk = 0 sig = 0
Time = 10 clk = 1 sig = 0
Time = 15 clk = 0 sig = 0
Time = 20 clk = 1 sig = 1
Time = 25 clk = 0 sig = 1
Time = 30 clk = 1 sig = 1
Time = 35 clk = 0 sig = 1
Time = 40 clk = 1 sig = 0
Time = 45 clk = 0 sig = 0
Time = 50 clk = 1 sig = 0
Time = 55 clk = 0 sig = 1
Time = 60 clk = 1 sig = 1
Time = 65 clk = 0 sig = 0
Time = 70 clk = 1 sig = 0
Time = 75 clk = 0 sig = 0
Time = 80 clk = 1 sig = 0
Simulation complete via $finish(1) at time 85 NS + 0

Что такое имитационная волна?

Моделирование позволяет нам преобразовать проектные и тестовые сигналы в форму волны, которую можно представить графически для анализа и отладки функциональности проекта RTL. Показанная ниже форма сигнала получена с помощью инструмента EDA и показывает изменение каждого сигнала во времени и совпадает с временной диаграммой, показанной ранее.

Каждое изменение значения переменной или сети называется событием обновления. . А процессы чувствительны к событиям обновления. так что эти процессы оцениваются всякий раз, когда происходит событие обновления, и называется событием оценки. . Из-за возможности произвольной оценки нескольких процессов порядок изменений необходимо отслеживать в так называемой очереди событий. .

Естественно, они упорядочены по времени моделирования. Помещение нового события в очередь называется расписанием. . Время моделирования используется для обозначения значения времени, поддерживаемого симулятором для моделирования фактического времени, которое потребуется для моделируемой схемы. Значения времени для приведенного выше примера показаны в наносекундах ns на временной диаграмме.

  
  
module des;
	wire abc;
	wire a, b, c;
	
	assign abc = a & b | c;  // abc is updated via the assign statement (process) whenever a, b or c change -> update event
endmodule

  

Обновите Verilog и посмотрите пример!

Области в очереди событий

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

События Описание
Активный Происходит в текущее время симуляции и может обрабатываться в любом порядке
Неактивно Происходит в текущее время симуляции, но обрабатывается после завершения всех активных событий
Неблокирующий Оценивается в какой-то предыдущий момент времени, но назначение выполняется в текущее время моделирования после выполнения активных и неактивных событий
Монитор Обрабатывается после выполнения всех активных, неактивных и неблокирующих событий
Будущее Происходит в какой-то момент моделирования в будущем

В цикле моделирования обрабатываются все активные события. Стандарт гарантирует определенный порядок планирования за исключением нескольких случаев и. Например, операторы внутри блока begin-end будут выполняться только в том порядке, в котором они появляются.

  
  
module tb;
	reg [3:0] a;
	reg [3:0] b;
	
	initial begin		// Statements are executed one after the other at appropriate simulation times
		a = 5;			// At time 0ns, a is assigned 5
		b = 2;			// In the same simulation step (time 0ns), b is assigned 2
		
		#10 a = 7;		// When simulation advances to 10ns, a is assigned 7
	end
endmodule

  

очередь событий определяет это назначение для b должно произойти после присваивания a .


Verilog

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