1. VERILOG
4. Поведенческие
Verilog-модели
Автоматизация проектирования
компьютерных систем
д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ
2/9/2011 e-mail: hahanova@mail.ru 1
2. Цель лекции и содержание
Цель – изучить основные конструкции и
принципы построения моделей
поведенческого уровня
План
а
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 2
e-mail: hahanova@mail.ru
3. 1 Поведенческие модели
Поведенческие модели – это модели
высокого уровня, которые описывают
алгоритм функционирования устройства без
детализации на логические вентили или пути
передач данных.
Строятся на базе операторов:
initial
always
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 3
e-mail: hahanova@mail.ru
4. INITIAL
module stimulus;
reg x, y, a, b; // определение регистровых переменных
initial
begin
#5 a = 1'b1; // a получит значение 1 в момент времени 5
#25 b = 1'b0; // b получит значение 0 в момент времени 30
end
initial
begin
#10 x = 1'b0; // x получит значение 0 в момент времени 10
#25 y = 1'b1; // y получит значение 1 в момент времени 35
end
initial
#50 $finish; // завершение моделирование
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 4
e-mail: hahanova@mail.ru
6. Процедурные операторы назначения
Процедурные операторы назначения сигнала
используются в конструкциях initial и alway, и
применяются для присвоения значений переменным
класса register: reg, integer, real, realtime и time.
Синтаксис:
// Блокирующие
register_identifier = expression;
// Неблокирующие
register_identifier <= expression;.
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 6
e-mail: hahanova@mail.ru
7. Блокирующие процедурные операторы
reg x, y, z;
reg [15:0] reg_a, reg_b;
integer count;
initial
begin
x=0; y=1; z=1; // time 0
count=0; // time 0
reg_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 25
count=count+1; // time 25
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 7
e-mail: hahanova@mail.ru
8. Неблокирующие процедурные операторы
reg x, y, z;
reg [15:0] reg_a, reg_b;
integer count;
initial
begin
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 10
count <= count+1; // time 0
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 8
e-mail: hahanova@mail.ru
9. Задание
reg a,b;
Initial
begin
a = 1’b0;
b = 1’b0;
#2 a = 1’b1;
#3 b = 1’b1;
#1 a = 1’b0;
#100 $stop;
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 9
e-mail: hahanova@mail.ru
10. Сравнение операторов
// Блокирующие // Неблокирующие
always @(posedge clock) always @(posedge clock)
a = b; a <= b;
always @(posedge clock) always @(posedge clock)
b = a; b <= a;
always @(posedge clock)
begin
tmp_a = a; //сохранение значения a в переменной tmp_a
tmp_b = b; //сохранение значения b в переменной tmp_b
a = tmp_b; // присвоение переменной a
// значения переменной tmp_b
b = tmp_a; // присвоение переменной b
// значения переменной tmp_a
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 10
e-mail: hahanova@mail.ru
11. Управление процессом выполнения операторов
Управление задержкой (delay control),
использует символ #;
Управление событием (event control),
использует символ @;
Управление значением (level-sensitive timing
control), использует оператор wait
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 11
e-mail: hahanova@mail.ru
12. Управление задержкой
#NUMBER | #identifier | #(min:typ:max)
Пример
reg x, y;
initial
begin
x=0;
#10 y = 1;
#y x=x+1;
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 12
e-mail: hahanova@mail.ru
13. Управление нулевой задержкой
initial
begin
x=0;
y=0;
end
initial
begin
#0 x=1;
#0 y=1;
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 13
e-mail: hahanova@mail.ru
14. Управление событием
Событие – это изменение значения регистра
или цепи. Существует четыре типа
событийного управления порядком
выполнения операторов:
обычное событийное управление (regular event
control),
именное событийное управление (named event
control),
событийное управление по ИЛИ (event OR control)
с использованием оператора цикла repeat.
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 14
e-mail: hahanova@mail.ru
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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 15
e-mail: hahanova@mail.ru
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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 16
e-mail: hahanova@mail.ru
17. Событийное управление по ИЛИ
always @(reset or clock or d)
begin
if (reset)
q=1'b0;
else
q=d;
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 17
e-mail: hahanova@mail.ru
18. Временное управление значением
Управление значением использует оператор wait.
Оператор выполняется, если какое-то условие
принимает значение истины.
wait (expression) statement_or_null
Пример:
begin
wait (!enable) #10 a = b;
#10 c = d;
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 18
e-mail: hahanova@mail.ru
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; initial
initial begin
begin
x=0; z=0;
= x=0; z=0;
temp_xz = x + z;
y = #5 x + z; #5 y = x + z;
end end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 19
e-mail: hahanova@mail.ru
20. Задание
В какой момент времени будет выполнен каждый оператор?
Чему равны промежуточные и окончательные значения сигналов
a, b, c, d?
1. initial
begin
a = 1'b0;
b = #10 1'b1;
c = #5 1'b0;
d = #20 {a, b, c};
end
2. initial
begin
a<=1'b0;
b<=#10 1'b1;
c<=#5 1'b0;
d<=#20 {a, b, c};
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 20
e-mail: hahanova@mail.ru
21. Оператор IF
// Тип 1
if (expression) true_statement;
// Тип 2
if (expression) true_statement;
else false_statement;
// Тип 3
if (expression1) true_statement1;
else if (expression2) true_statement2;
else if (expression3) true_statement3;
else default_statement; false_statement;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 21
e-mail: hahanova@mail.ru
22. Примеры использования оператора if
// Пример 1 // Пример 4
if (index > 0)
if (rega > regb) if (a) begin
result = rega; counter = counter + 1;
else result = regb;/* ветвь data_out = counter;
else принадлежит предыдущему end
оператору if*/
else
// Пример 2 data_out = 8’bz;
if (index > 0) begin
if (rega > regb) // Пример 5
result = rega;
end if ( counter > 10)/* (нулевой
else result = regb; оператор)*/
;
// Пример 3 с использованием else if
if (a) else
b = 4; counter = counter + 1;
else if (d)
b = 5;
else
b = 1;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 22
e-mail: hahanova@mail.ru
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");
endcase
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 24
e-mail: hahanova@mail.ru
25. Пример. Модель ALU
module 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;
endcase
end
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 25
e-mail: hahanova@mail.ru
28. Примеры использования casex и casez
// Пример 3
reg [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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 28
e-mail: hahanova@mail.ru
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 bits
expected ON”);
endcase
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 29
e-mail: hahanova@mail.ru
30. Циклы.1
while (expression) statement;
forever statement;
repeat (expression) statement;
for (assignment; expression; assignment) statement;
// Пример 1
integer counter;
initial
for(count=0; count<128; count=count+1) ... ;
// Пример 2
initial
begin
clock=1'b0;
forever #10 clock = ~clock; // генерирует синхросигнал
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 30
e-mail: hahanova@mail.ru
31. Циклы.2
// Пример 3
integer count;
initial begin
count = 0;
repeat(128) //цикл выполняется 128 раз
begin
$display(“Count = %d”, count);
count = count + 1;
end
end
// Пример 4
while (tempreg)
begin
if (tempreg[0])
count = count + 1;
tempreg = tempreg >> 1;
end
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 31
e-mail: hahanova@mail.ru
32. Событийное управление c repeat
a <= repeat(5) @(posedge clk) data;
1 2 3 4 5
Clk
data
a
// С блокирующим оператором
a = repeat(num) @(clk) data;
// В примере используется сумма двух переменных
a <= repeat(a+b) @(posedge phi1 or negedge phi2) data;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 32
e-mail: hahanova@mail.ru
33. Последовательные и параллельные блоки
Последовательные или begin - end блоки
Параллельные или fork - join блоки.
Синтаксис:
// последовательный блок //параллельный блок
begin : name fork : name
statement; statement;
... ...
end join
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 33
e-mail: hahanova@mail.ru
34. Примеры блоков
//Пример 1 // Пример 3
fork
#50 r = 1'b0; begin
#100 r = 1'b1; fork
#150 r = 1'b0; @Aevent;
#200 r = 1'b1;
#250 -> end_wave; @Bevent;
join join
// Пример 2 areg = breg;
initial end
begin
x = 1'b0;
fork
#5 y = 1'b1;
#10 z = {x, y};
join
#20 w = {y, x};
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 34
e-mail: hahanova@mail.ru
35. Блоки с именем
module top;
initial
begin: block1 // последоват. блок с именем block1
integer i; // иерархическое имя top.blok1.i
...
end
initial
fork: block2 // параллельный блок с именем block2
reg i; // иерархическое имя top.block2.i
...
join
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 35
e-mail: hahanova@mail.ru
36. Оператор Disable
// обнаруживает первый бит со значением 1
reg [15:0] flag;
integer i;
initial
begin
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;
end
i = i + 1;
end
end
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 36
e-mail: hahanova@mail.ru
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 = 0
else if (!preset)
assign q = 1; // установка в 1, если preset = 0
else
deassign q; // отмена действия оператора assign,
// если clear = 1 и preset=1
always @(posedge clock)
begin
q = d; // прямой выход
qbar = ~d; // инверсный выход
end
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 38
e-mail: hahanova@mail.ru
39. Пара force и release
module test;
reg a, b, c, d;
wire e;
and and1 (e, a, b, c);
initial
begin
$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;
end
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 39
e-mail: hahanova@mail.ru
40. Примеры поведенческих моделей
устройств
Модель 4-разрядного счетчика
module counter
(output reg [3:0] Q, input clock, clear);
always @(posedge clear or negedge clock)
begin
if (clear)
Q = 4'd0;
else
Q = (Q + 1) % 10; // в некоторых случаях
// оператор по модулю можно не использовать
end
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 40
e-mail: hahanova@mail.ru
41. Пример поведенческой модели
автомата
x=0
Road
S0
x=1
S4 S1
Main Highway x=0
x=1
Country
S3 S2
Signals
State
Hwy Cntry
S0 G R
S1 Y R
S2 R R
S3 R G
S4 R Y
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 41
e-mail: hahanova@mail.ru
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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 42
e-mail: hahanova@mail.ru
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;
// Инициализация состояния автомата и значений выходов
initial
begin
state = `S0; next_state = `S0;
hwy = `GREEN; cntry = `RED;
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 43
e-mail: hahanova@mail.ru
44. Verilog-модель автомата (3)
// обновление значения состояния автомата
// по переднему фронту синхросигнала
always @(posedge clock)
state = next_state;
always @(state)
begin
case (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
endcase
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 44
e-mail: hahanova@mail.ru
45. Verilog-модель автомата (4)
always @(state or clear or X) begin
if (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:begin
repeat (`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
end
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 45
e-mail: hahanova@mail.ru
46. Контрольные вопросы и задания.1
1. Какая из временных диаграмм 3. Какой оператор будет выполнен,
будет получена в результате если r= …?
моделирования следующего reg [7:0] r, mask;
кода? mask = 8'bx0x0x0x0;
initial clock = 1’b0; casex (r ^ mask)
always #10 clock = ~clock; 8'b001100xx: stat1;
initial #80 $finish; 8'b1100xx00: stat2;
2. Какой оператор будет выполнен, 8'b00xx0011: stat3;
если ir= …? 8'bxx010100: stat4;
reg [7:0] ir; endcase
casez (ir)
8'b1???????: instruction1(ir);
8'b01??????: instruction2(ir);
8'b00010???: instruction3(ir);
8'b000001??: instruction4(ir);
endcase
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 46
e-mail: hahanova@mail.ru
47. Контрольные вопросы и задания.2
1. Чему будет равна переменная 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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 47
e-mail: hahanova@mail.ru
48. Контрольные вопросы и задания.3
1. Создать синхросигнал, равный 0 в начальный
момент времени и переключающийся через
каждые 30 единиц времени. Использовать для
этого цикл forever.
2. В какой момент времени будет выполнен каждый
оператор? Чему равны промежуточные и
окончательные значения сигналов a, b, c, d?
1. initial 2. initial
begin begin
a = 1'b0; a<=1'b0;
b = #10 1'b1; b<=#10 1'b1;
c = #5 1'b0; c<=#5 1'b0;
d = #20 {a, b, c}; d<=#20 {a, b, c};
end end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 48
e-mail: hahanova@mail.ru
49. Контрольные вопросы и задания.4
1. Какой порядок выполнения 3. Указать конечное значение d
операторов в следующем в следующем примере:
Verilog-коде? Указать initial
окончательные значения begin
сигналов a, b, c, d. b = 1'b1;
initial c = 1'b0;
begin #10 b = 1'b0;
a=1'b0; end
#0 с = b;
end initial
begin begin
b = 1'b1; d = #25 (b|c);
#0 d = a; end
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 49
e-mail: hahanova@mail.ru
50. Контрольные вопросы и задания.5
1. Какое сообщение будет выведено оператором
$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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 50
e-mail: hahanova@mail.ru
51. Контрольные вопросы и задания.6
1. Какой сигнал будет сгенерирован после выполнения
следующих операторов?
initial
begin
clock=1'b0;
forever #20 clock = ~clock;
end
2. Какой результат выполнения оператора, если num = 2?
a = repeat(num) @(clk) data; 1 2 3 4 5
Clk
data
a
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 51
e-mail: hahanova@mail.ru
52. Контрольные вопросы и задания.7
Используя оператор repeat, создайте
задержку выполнения оператора a = a +
1 в 20 положительных фронтов сигнала
clk.
Какой вид управления применен в
следующем операторе?
Y=#10 a+b;
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 52
e-mail: hahanova@mail.ru
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;
end
always c = #5 ~c;
always @(posedge c) begin
a = b;
b = a;
d<= e;
e <= d;
end
endmodule
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 53
e-mail: hahanova@mail.ru
54. Контрольные вопросы и задания.9
Когда закончится выполнение следующих вложенных
последовательных и параллельных блоков? В каком порядке они будут
выполнены?
Initial begin
x = 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;
join
end
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 54
e-mail: hahanova@mail.ru
55. Контрольные вопросы и задания.10
1. Построить модель полного сумматора, применяя стандартные
логические элементы 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 для
2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 55
изменения значений параметров. e-mail: hahanova@mail.ru
б) Построить структурную модель fulladd4 переопределяя параметры в