Upload
irina-hahanova
View
696
Download
4
Embed Size (px)
Citation preview
2/9/2011д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ
e-mail: [email protected] 1
4. Поведенческие Verilog-модели
Автоматизация проектирования компьютерных систем
VERILOG
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
2
Цель лекции и содержание
Цель – изучить основные конструкции и принципы построения моделей поведенческого уровня
План а
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
3
1 Поведенческие модели
Поведенческие модели – это модели высокого уровня, которые описывают алгоритм функционирования устройства без детализации на логические вентили или пути передач данных.
Строятся на базе операторов:initialalways
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
4
INITIALmodule stimulus;
reg x, y, a, b; // определение регистровых переменных
initialbegin
#5 a = 1'b1; // a получит значение 1 в момент времени 5 #25 b = 1'b0; // b получит значение 0 в момент времени 30
end
initialbegin
#10 x = 1'b0; // x получит значение 0 в момент времени 10#25 y = 1'b1; // y получит значение 1 в момент времени 35
end
initial#50 $finish; // завершение моделирование
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
5
ALWAYS
module clock_gen; reg clock; // определение регистровой переменной
initialclock = 1'b0; //Инициализация синхросигнала 0
always //Переключает clock с периодом 20 #10 clock = ~ clock;
initial#1000 $finish;
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
6
Процедурные операторы назначения
Процедурные операторы назначения сигнала используются в конструкциях initial и alway, и применяются для присвоения значений переменным класса register: reg, integer, real, realtime и time.
Синтаксис:// Блокирующие
register_identifier = expression;// Неблокирующие
register_identifier <= expression;.
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
7
Блокирующие процедурные операторы
reg x, y, z;reg [15:0] reg_a, reg_b;integer count;
initialbegin
x=0; y=1; z=1; // time 0count=0; // time 0reg_a=16'b0; reg_b = reg_a; // time 0#15 reg_a[2]=1'b1; // time 15#10 reg_b[15:13]={x, y, z} // time 25count=count+1; // time 25
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
8
Неблокирующие процедурные операторы
reg x, y, z;reg [15:0] reg_a, reg_b;integer count;
initialbegin
x=0; y=1; z=1; count=0;reg_a=16'b0; reg_b = reg_a;#15 reg_a[2] <= 1'b1; // time 15#10 reg_b[15:13] <= {x, y, z} // time 10count <= count+1; // time 0
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
9
Заданиеreg a,b;Initial
begina = 1’b0;b = 1’b0;
#2 a = 1’b1;#3 b = 1’b1;#1 a = 1’b0;#100 $stop;end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
10
Сравнение операторов
// Блокирующиеalways @(posedge clock)
a = b;always @(posedge clock)
b = a;
// Неблокирующиеalways @(posedge clock)
a <= b;always @(posedge clock)
b <= a;
always @(posedge clock)begintmp_a = a; //сохранение значения a в переменной tmp_atmp_b = b; //сохранение значения b в переменной tmp_ba = tmp_b; // присвоение переменной a
// значения переменной tmp_bb = tmp_a; // присвоение переменной b
// значения переменной tmp_aend
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
11
Управление процессом выполнения операторов
Управление задержкой (delay control), использует символ #;
Управление событием (event control), использует символ @;
Управление значением (level-sensitive timingcontrol), использует оператор wait
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
12
Управление задержкой
#NUMBER | #identifier | #(min:typ:max) Пример
reg x, y;initialbegin
x=0; #10 y = 1;#y x=x+1;
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
13
Управление нулевой задержкой
initialbegin
x=0;y=0;
endinitialbegin
#0 x=1;#0 y=1;
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
14
Управление событием
Событие – это изменение значения регистра или цепи. Существует четыре типа событийного управления порядком выполнения операторов: обычное событийное управление (regular event
control), именное событийное управление (named event
control), событийное управление по ИЛИ (event OR control)с использованием оператора цикла repeat.
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
15
Обычное событийное управление
Для описания события используется символ @ Для описания фронта используются ключевые слова
posedge и negedge.
Из\В 0 1 x z
0 No edge posedge posedge posedge
1 negedge No edge negedge negedge x negedge posedge No edge No edge z negedge posedge No edge No edge
Примеры:@(clock) q=d;@(posedge clock) q=d;@(negedge clock) q=d;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
16
Именное событийное управление
// Декларация событияevent event_identifier { , event_identifier } ;
//Переключение события-> event_identifier ;
Пример:event received_data; // определено событие с именем received_data
always @(posedge clock)begin
if (last_data_packet)->received_data;
end
always @(received_data);
data_buf = {data_pkt[0],data_pkt[1],data_pkt[2],data_pkt[3]}
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
17
Событийное управление по ИЛИ
always @(reset or clock or d)
beginif (reset)
q=1'b0;else
q=d;end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
18
Временное управление значением
Управление значением использует оператор wait. Оператор выполняется, если какое-то условие принимает значение истины.
wait (expression) statement_or_null
Пример:begin
wait (!enable) #10 a = b;#10 c = d;
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
19
Внутриоператорный контроль
Синтаксис: reg_lvalue = [ delay_control | event_control | repeat_event_control ] expression ;
reg_lvalue <= [delay_control | event_control | repeat_event_contro] expression ;
reg x, y, z; initialbegin
x=0; z=0;y = #5 x + z;
end
initialbegin
x=0; z=0;temp_xz = x + z;#5 y = x + z;
end
=
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
20
Задание В какой момент времени будет выполнен каждый оператор?
Чему равны промежуточные и окончательные значения сигналов a, b, c, d?1. initial
begina = 1'b0;b = #10 1'b1;c = #5 1'b0;d = #20 {a, b, c};
end2. initial
begina<=1'b0;b<=#10 1'b1;c<=#5 1'b0;d<=#20 {a, b, c};
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
21
Оператор IF // Тип 1
if (expression) true_statement;
// Тип 2if (expression) true_statement;else false_statement;
// Тип 3if (expression1) true_statement1;else if (expression2) true_statement2;else if (expression3) true_statement3; else default_statement; false_statement;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
22
Примеры использования оператора if
// Пример 1if (index > 0)
if (rega > regb) result = rega;
else result = regb;/* ветвь else принадлежит предыдущему оператору if*/
// Пример 2if (index > 0) begin
if (rega > regb)result = rega;
endelse result = regb;
// Пример 3 с использованием else ifif (a)
b = 4; else if (d)
b = 5;else
b = 1;
// Пример 4if (a) begin
counter = counter + 1;data_out = counter;end
elsedata_out = 8’bz;
// Пример 5if ( counter > 10)/* (нулевой оператор)*/
;else
counter = counter + 1;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
23
Оператор case
Синтаксис:case (expression)
expression: statement1;expression {, expression}: statement2;
. . .default [:] default_statement;
endcase Пример
reg [1:0] address;case (address)
2’b00 : statement1;2’b01, 2’b10 : statement2;default : statement3;
endcase
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
24
Модель мультиплексора 4 в 1 с использованием оператора case module mux4_to_1 (out, i0, i1, i2, i3, s1, s0);
//Декларация портовoutput out;input i0, i1, i2, i3;input s1, s0;reg out; // определение регистровой переменной выхода
// для использования ее в операторе always
always @(s1 or s0 or i0 or i1 or i2 or i3)case ({s1,s2})
2'd0 : out = i0;2'd1 : out = i1;2'd2 : out = i2;2'd3 : out = i3;default : $display("Invalid control signals");
endcaseendmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
25
Пример. Модель ALUmodule alu_beh
(output reg [3:0] c, output reg s, input [3:0] a, b, input [1:0] f);
always @(*)begin
case (f)2’b00: c = a + b;2’b01: c = a - b;2’b10: c = a & b;2’b11: c = a | b;
endcaseend
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
26
Операторы casez и casex
Синтаксис: casez (expression)
expression: statement1;expression {, expression}: statement2;
. . .default: default_statement;
endcase casex (expression)
expression: statement1;expression {, expression}: statement2;
. . .default: default_statement;
endcase
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
27
Примеры использования casex и casez
// Пример 1reg [3:0] encoding;integer state;
casex (encoding)4'b1xxx: next_state=3;4'bx1xx: next_state=2;4'bxx1x: next_state=1;4'bxxx1: next_state=0;default: next_state=0;
endcase
// Пример 2reg [7:0] ir;
casez (ir)8'b1???????: instruction1(ir);8'b01??????: instruction2(ir);8'b00010???: instruction3(ir);8'b000001??: instruction4(ir);
endcase
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
28
Примеры использования casex и casez
// Пример 3reg [7:0] r, mask;mask = 8'bx0x0x0x0; casex (r ^ mask) // r ^ mask=8'bx1x0x1x0 для r=8'b01100110
8'b001100xx: stat1;8'b1100xx00: stat2;8'b00xx0011: stat3;8'bxx010100: stat4;
endcase
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
29
Константное выражение в операторе case
reg [2:0] encode ;case (1)
encode[2] : $display(“Select Line 2”) ;encode[1] : $display(“Select Line 1”) ;encode[0] : $display(“Select Line 0”) ;default $display(“Error: One of the bitsexpected ON”);
endcase
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
30
Циклы.1
while (expression) statement; forever statement; repeat (expression) statement; for (assignment; expression; assignment) statement;
// Пример 1integer counter;initial
for(count=0; count<128; count=count+1) ... ;
// Пример 2initialbegin
clock=1'b0;forever #10 clock = ~clock; // генерирует синхросигнал
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
31
Циклы.2 // Пример 3
integer count;initial begin
count = 0;repeat(128) //цикл выполняется 128 разbegin
$display(“Count = %d”, count);count = count + 1;
endend
// Пример 4while (tempreg) begin
if (tempreg[0])count = count + 1;tempreg = tempreg >> 1;
endend
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
32
Событийное управление c repeat
a <= repeat(5) @(posedge clk) data;
Clk
data
a
1 2 3 4 5
// С блокирующим оператором a = repeat(num) @(clk) data;
// В примере используется сумма двух переменныхa <= repeat(a+b) @(posedge phi1 or negedge phi2) data;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
33
Последовательные и параллельные блоки
Последовательные или begin - end блоки Параллельные или fork - join блоки.
Синтаксис:// последовательный блок //параллельный блок
begin : name fork : namestatement; statement;... ...end join
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
34
Примеры блоков//Пример 1 fork
#50 r = 1'b0;#100 r = 1'b1;#150 r = 1'b0;#200 r = 1'b1;#250 -> end_wave;
join
// Пример 2 initialbegin
x = 1'b0;fork
#5 y = 1'b1;#10 z = {x, y};
join#20 w = {y, x};
end
// Пример 3 begin
fork@Aevent;@Bevent;
joinareg = breg;end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
35
Блоки с именем
module top;initialbegin: block1 // последоват. блок с именем block1
integer i; // иерархическое имя top.blok1.i. . .
end
initialfork: block2 // параллельный блок с именем block2
reg i; // иерархическое имя top.block2.i. . . join
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
36
Оператор Disable
// обнаруживает первый бит со значением 1reg [15:0] flag; integer i;initialbegin
flag = 16'b0010_0000_0000_0000; i = 0;begin: block1
while (i<=16)begin
if (flag [i])begin$display ("Encountered a TRUE bit at element
number %d", i);disable block1;
endi = i + 1;
endend
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
37
Процедурные операторы непрерывного назначения
assign reg_lvalue = expression ; deassign reg_lvalue ;
force reg_lvalue = expression ;force net_lvalue = expression ;release reg_lvalue ;release net_lvalue ;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
38
Пара assign - deassign module dff (q, qbar, d, clear, preset, clock);
output q, qbar;input d, clear, preset, clock;reg q, qbar;
always @(clear or preset)if (!clear)
assign q = 0; // сброс в 0, если clear = 0else if (!preset)
assign q = 1; // установка в 1, если preset = 0else
deassign q; // отмена действия оператора assign, // если clear = 1 и preset=1
always @(posedge clock)begin
q = d; // прямой выходqbar = ~d; // инверсный выход
endendmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
39
Пара force и release module test;
reg a, b, c, d;wire e;and and1 (e, a, b, c);
initialbegin
$monitor("%d d=%b,e=%b", $stime, d, e);d = a & b & c;a = 1; b = 0; c = 1;#10;force d = (a | b | c);force e = (a | b | c);#10 $stop;release d;release e;#10 $finish;
endendmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
40
Примеры поведенческих моделей устройств
Модель 4-разрядного счетчикаmodule counter
(output reg [3:0] Q, input clock, clear);
always @(posedge clear or negedge clock)begin
if (clear)Q = 4'd0;
elseQ = (Q + 1) % 10; // в некоторых случаях
// оператор по модулю можно не использовать end
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
41
Пример поведенческой модели автомата
Main Highway
Cou
ntry
R
oad
S2
S1
x=1
x=0
S0
S4
S3
x=0x=1
Hwy CntryS0 G RS1 Y RS2 R RS3 R GS4 R Y
State Signals
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
42
Verilog-модель автомата (1)// создание текстовых макросов для выходных функций автомата`define RED 2'd0 //красный цвет светофора`define YELLOW 2'd1 //желтый цвет светофора `define GREEN 2'd2 //зеленый цвет светофора
//состояния автомата HWY CNTRY`define S0 3'd0 // GREEN RED`define S1 3'd1 // YELLOW RED`define S2 3'd2 //RED RED`define S3 3'd3 // RED GREEN`define S4 3'd4 // RED YELLOW
// Задержки`define Y2RDELAY 3 //Задержка переключения из желтого в красный `define R2GDELAY 2 // Задержка переключения из красного в зеленый
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
43
Verilog-модель автомата (2) module sig_control(hwy, cntry, X, clock, clear);
//Описание входных и выходных портовoutput [1:0] hwy, cntry;reg [1:0] hwy, cntry;input X;input clock, clear;
// Внутренние переменные текущего и будущего состояний автомата
reg [2:0] state, next_state;
// Инициализация состояния автомата и значений выходовinitialbegin
state = `S0; next_state = `S0;hwy = `GREEN; cntry = `RED;
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
44
Verilog-модель автомата (3) // обновление значения состояния автомата
// по переднему фронту синхросигнала always @(posedge clock)
state = next_state;
always @(state) begincase (state)
`S0: begin hwy = `GREEN;cntry = `RED; end`S1: begin hwy = `YELLOW; cntry = `RED; end`S2: begin hwy = `RED; cntry = `RED; end`S3: begin hwy = `RED; cntry = `GREEN; end`S4: begin hwy = `RED; cntry = `YELLOW; end
endcaseend
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
45
Verilog-модель автомата (4)always @(state or clear or X) beginif (clear) next_state = `S0;else
case (state) `S0: if (X) next_state = `S1;
else next_state = `S0;`S1:begin
repeat (`Y2RDELAY) @(posedge clock); next_state = `S2;end
`S2:beginrepeat (`R2GDELAY) @(posedge clock); next_state = `S2;
end`S3:if (X) next_state = `S1;
else next_state = `S0;`S4:begin
repeat (`Y2RDELAY) @(posedge clock); next_state = `S2;end
default: next_state = `S0;endcase
endendmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
46
Контрольные вопросы и задания.11. Какая из временных диаграмм
будет получена в результате моделирования следующего кода?
initial clock = 1’b0;always #10 clock = ~clock;initial #80 $finish;
2. Какой оператор будет выполнен, если ir= …?
reg [7:0] ir;casez (ir)8'b1???????: instruction1(ir);8'b01??????: instruction2(ir);8'b00010???: instruction3(ir);8'b000001??: instruction4(ir);
endcase
3. Какой оператор будет выполнен, если r= …?
reg [7:0] r, mask;mask = 8'bx0x0x0x0; casex (r ^ mask)
8'b001100xx: stat1;8'b1100xx00: stat2;8'b00xx0011: stat3;8'bxx010100: stat4;
endcase
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
47
Контрольные вопросы и задания.21. Чему будет равна переменная result после выполнения следующих
операторов, если rega =…? reg [15:0] rega;reg [9:0] result;case (rega)
16’d0: result = 10’b0111111111;16’d1: result = 10’b1011111111;16’d2: result = 10’b1101111111;16’d3: result = 10’b1110111111;16’d4: result = 10’b1111011111;16’d5: result = 10’b1111101111;16’d6: result = 10’b1111110111;16’d7: result = 10’b1111111011;16’d8: result = 10’b1111111101;16’d9: result = 10’b1111111110;
default result = ‘bx;endcase
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
48
Контрольные вопросы и задания.31. Создать синхросигнал, равный 0 в начальный
момент времени и переключающийся через каждые 30 единиц времени. Использовать для этого цикл forever.
2. В какой момент времени будет выполнен каждый оператор? Чему равны промежуточные и окончательные значения сигналов a, b, c, d?
1. initialbegin
a = 1'b0;b = #10 1'b1;c = #5 1'b0;d = #20 {a, b, c};
end
2. initialbegin
a<=1'b0;b<=#10 1'b1;c<=#5 1'b0;d<=#20 {a, b, c};
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
49
Контрольные вопросы и задания.41. Какой порядок выполнения
операторов в следующем Verilog-коде? Указать окончательные значения сигналов a, b, c, d.
initialbegina=1'b0;#0 с = b;
endbeginb = 1'b1;#0 d = a;
end
3. Указать конечное значение d в следующем примере:
initialbeginb = 1'b1; c = 1'b0;#10 b = 1'b0;
end
initialbegind = #25 (b|c);
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
50
Контрольные вопросы и задания.51. Какое сообщение будет выведено оператором
$display, если encode = 3'b111?reg [2:0] encode ;case (1)
encode[2] : $display("Select Line 2") ;encode[1] : $display("Select Line 1") ;encode[0] : $display("Select Line 0") ;
default $display("Error: One of the bits expected ON" );endcase
2. Результат выполнения следующих операторов?initial x = 1'b0;initial repeat (3) @(posedge clk) x=~x;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
51
Контрольные вопросы и задания.6
1. Какой сигнал будет сгенерирован после выполнения следующих операторов?
initialbegin
clock=1'b0;forever #20 clock = ~clock;
end2. Какой результат выполнения оператора, если num = 2?
a = repeat(num) @(clk) data;Clk
data
a
1 2 3 4 5
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
52
Контрольные вопросы и задания.7
Используя оператор repeat, создайте задержку выполнения оператора a = a + 1 в 20 положительных фронтов сигнала clk. Какой вид управления применен в следующем операторе?Y=#10 a+b;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
53
Контрольные вопросы и задания.8 Вычислить результат моделирования следующих блокирующих и
неблокирующих операторов.module e
(output out);reg a,b,c;reg d,e,f;
initial begin$monitor ("time=%d a=%d b=%d c=%d e=%d \n",$time,a,b,c,d,e):a=0; b=1; c=0; d=0; e=1;#30 $finish;
endalways c = #5 ~c;always @(posedge c) begin
a = b;b = a;d<= e;e <= d;
endendmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
54
Контрольные вопросы и задания.9 Когда закончится выполнение следующих вложенных
последовательных и параллельных блоков? В каком порядке они будутвыполнены?
Initial beginx = 1'b0;#5 y = 1'b0;fork
#20 a = x;#15 b = y;
join#40 x = 1'b0;fork
#10 p = x;begin
#10 a = y;#30 b = x;
end#5 m = y;
joinend
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: [email protected]
55
Контрольные вопросы и задания.101. Построить модель полного сумматора, применяя стандартные
логические элементы Verilog. Построить тестовый модуль, используя оператор force, назначить выходу значение (a & b & c_in) в промежуток времени 15-35 единиц.
2. Однобитовый сумматор определен логическими элементами и задержками:
module fulladd(sum, c_out, a, b, c_in);parameter d_sum = 0, d_cout = 0;//Декларация портовoutput sum, c_out;input a, b, c_in;// Внутренние линииwire s1, c1, c2;
// Копии стандартных элементовxor (s1, a, b);and (c1, a, b);xor #(d_sum) (sum, s1, c_in);and (c2, s1, c_in);or #(d_cout) (c_out, c2, c1);endmodule
Используя однобитовый сумматор, разработать структурную модель 4-разрядного сумматора fulladd4. Установить следующие значения параметров для копий модулей:
а) Построить структурную модель fulladd4, используя оператор defparam для изменения значений параметров.
б) Построить структурную модель fulladd4 переопределяя параметры в