Академический Документы
Профессиональный Документы
Культура Документы
In1
Y1
#8
NotSel0
Sel0 #10 Out
In2 #2
Y2
#8
In3
Y3
#8
.
Рисунок 1.1 – Схема мультиплексора 4 в 1
Модель уровня dataflow выполняет реализацию схемы с помощью оператора assign в виде
булевых уравнений или условного оператора. В операторе assign значение получают
переменные, имеющие тип данных класса цепи (net). Пример реализации модели
мультиплексора уровня dataflow представлена листингом 1.2.
Листинг 1.2 – Модель уровня dataflow-модель
//Пример модели уровня передачи данных(data flow) задание а
module mux4_to_1 (out, i0, i1, i2, i3, s1, s0);
//Декларация портов
output out;
input i0, i1, i2, i3;
input s1, s0;
assign out = (~s1&~s0&i0)|(~s1&s0&i1)|(s1&~s0&i2)|(s1&s0&i3);
endmodule
Поведенческие модели строятся на основе операторов initial и always, при том первый из
них преимущественно используется для создания testbench. В этих операторах получать
значения могут только переменные регистрового типа. Поэтому выходы счетчика
COUNTER (листинг 1.5) и регистра Q (Листинг 1.6) имеют тип reg. Конструкции posedge S и
negedge S обозначают передний и задний фронт сигнала S, соответственно.
Листинг 1.5 содержит поведенческую модель счетчика, который выполняет счет на увеличение с
шагом 1. Разрядность счетчика задается параметром SIZE и по умолчанию равна 4. Сброс в
нулевое значение выполняется асинхронным входом RESET, когда RESET=1.
Пример модели 4-х разрядного сдвигового регистра представлен листингом 1.6. В данном коде
циклический сдвиг вправо на один разряд, когда Sh=1 и R=1, реализуется с помощью оператора
конкатенации Q = {Q[0], Q[3:1]}. Если Sh=0 и R=1, выполняется параллельная загрузка данных в
регистр со входа D. Для сброса регистра в ноль используется инверсный асинхронный вход R.
Листинг 1.5 – Поведенческая модель счетчика
// Пример модели счетчика
module counter
#(parameter SIZE = 'd4)
( input CLK, RESET,
output reg [SIZE-1:0] COUNTER);
always @(posedge CLK or posedge RESET) begin
if (RESET) COUNTER = 'd0;
else COUNTER = COUNTER + 'd1;
end
endmodule
Листинг 1.6 – Поведенческая модель регистра регистра асинхронным
сбросом и циклическим сдвигом вправо
Verilog позволяет создавать иерархические модели, в которых описания более высокого
уровня могут включать ссылки на компоненты более низкого уровня иерархии. При этом
используется структурный стиль описания. Листинг 1.6 представляет собой Verilog-код
устройства, состоящего из двух D-триггеров (см. листинг 1.2). Имена inst_1 и inst_1
являются индивидуальными метками каждой копии компонента dff в устройстве top.
Следующие за метками списки содержат имена фактических сигналов, которые будут
соединены с указанными в заголовке модуля dff портами.
module testbench;
reg clock;
reg[31:0] in1, in2;
reg[63:0] out;
// Тестируемый модуль
multiplier mult(clock, in1, in2, out);
initial begin
// Тестовые данные.
in1 = 4;
in2 = 20;
$finish();
end
endmodule
Note: the $finish command actually terminates the simulation whereas $stop.
Merely.Pauses Ниже приведен пример формирования тактового импульса с
использованием конструкции always .Заметим, что вообще говоря для этих целей
удобнее использовать циклы
module pulse;
reg clock
endmodule