апкс 2011 04_verilog

Preview:

Citation preview

2/9/2011д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ

e-mail: hahanova@mail.ru 1

4. Поведенческие Verilog-модели

Автоматизация проектирования компьютерных систем

VERILOG

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: hahanova@mail.ru

2

Цель лекции и содержание

Цель – изучить основные конструкции и принципы построения моделей поведенческого уровня

План а

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: hahanova@mail.ru

3

1 Поведенческие модели

Поведенческие модели – это модели высокого уровня, которые описывают алгоритм функционирования устройства без детализации на логические вентили или пути передач данных.

Строятся на базе операторов:initialalways

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

6

Процедурные операторы назначения

Процедурные операторы назначения сигнала используются в конструкциях initial и alway, и применяются для присвоения значений переменным класса register: reg, integer, real, realtime и time.

Синтаксис:// Блокирующие

register_identifier = expression;// Неблокирующие

register_identifier <= expression;.

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

11

Управление процессом выполнения операторов

Управление задержкой (delay control), использует символ #;

Управление событием (event control), использует символ @;

Управление значением (level-sensitive timingcontrol), использует оператор wait

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: hahanova@mail.ru

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: hahanova@mail.ru

13

Управление нулевой задержкой

initialbegin

x=0;y=0;

endinitialbegin

#0 x=1;#0 y=1;

end

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: hahanova@mail.ru

14

Управление событием

Событие – это изменение значения регистра или цепи. Существует четыре типа событийного управления порядком выполнения операторов: обычное событийное управление (regular event

control), именное событийное управление (named event

control), событийное управление по ИЛИ (event OR control)с использованием оператора цикла repeat.

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: hahanova@mail.ru

17

Событийное управление по ИЛИ

always @(reset or clock or d)

beginif (reset)

q=1'b0;else

q=d;end

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ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; 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: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: 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");

endcaseendmodule

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: 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 bitsexpected ON”);

endcase

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

33

Последовательные и параллельные блоки

Последовательные или begin - end блоки Параллельные или fork - join блоки.

Синтаксис:// последовательный блок //параллельный блок

begin : name fork : namestatement; statement;... ...end join

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: 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 = 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: hahanova@mail.ru

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: 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;

elseQ = (Q + 1) % 10; // в некоторых случаях

// оператор по модулю можно не использовать end

endmodule

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: hahanova@mail.ru

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: 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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ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;

// Инициализация состояния автомата и значений выходовinitialbegin

state = `S0; next_state = `S0;hwy = `GREEN; cntry = `RED;

end

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

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: hahanova@mail.ru

52

Контрольные вопросы и задания.7

Используя оператор repeat, создайте задержку выполнения оператора a = a + 1 в 20 положительных фронтов сигнала clk. Какой вид управления применен в следующем операторе?Y=#10 a+b;

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ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;

endalways c = #5 ~c;always @(posedge c) begin

a = b;b = a;d<= e;e <= d;

endendmodule

2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭe-mail: hahanova@mail.ru

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: hahanova@mail.ru

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 переопределяя параметры в

Recommended