• Like
апкс 2011 04_verilog
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

апкс 2011 04_verilog

  • 668 views
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
668
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
8
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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. INITIALmodule stimulus; reg x, y, a, b; // определение регистровых переменныхinitial begin #5 a = 1b1; // a получит значение 1 в момент времени 5 #25 b = 1b0; // b получит значение 0 в момент времени 30 endinitial begin #10 x = 1b0; // x получит значение 0 в момент времени 10 #25 y = 1b1; // y получит значение 1 в момент времени 35 endinitial #50 $finish; // завершение моделированиеendmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 4 e-mail: hahanova@mail.ru
  • 5. ALWAYS module clock_gen; reg clock; // определение регистровой переменной initial clock = 1b0; //Инициализация синхросигнала 0 always //Переключает clock с периодом 20 #10 clock = ~ clock; initial #1000 $finish; endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 5 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;initialbegin x=0; y=1; z=1; // time 0 count=0; // time 0 reg_a=16b0; reg_b = reg_a; // time 0 #15 reg_a[2]=1b1; // time 15 #10 reg_b[15:13]={x, y, z} // time 25 count=count+1; // time 25end 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=16b0; reg_b = reg_a; #15 reg_a[2] <= 1b1; // 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=1b0; 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 = 1b0; b = #10 1b1; c = #5 1b0; d = #20 {a, b, c}; end 2. initial begin a<=1b0; b<=#10 1b1; c<=#5 1b0; 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
  • 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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 23 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}) 2d0 : out = i0; 2d1 : out = i1; 2d2 : out = i2; 2d3 : 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
  • 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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 26 e-mail: hahanova@mail.ru
  • 27. Примеры использования casex и casez// Пример 1 // Пример 2reg [3:0] encoding; reg [7:0] ir;integer state;casex (encoding) casez (ir) 4b1xxx: next_state=3; 8b1???????: instruction1(ir); 4bx1xx: next_state=2; 8b01??????: instruction2(ir); 4bxx1x: next_state=1; 8b00010???: instruction3(ir); 4bxxx1: next_state=0; 8b000001??: instruction4(ir); default: next_state=0; endcaseendcase 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 27 e-mail: hahanova@mail.ru
  • 28. Примеры использования casex и casez // Пример 3 reg [7:0] r, mask; mask = 8bx0x0x0x0; casex (r ^ mask) // r ^ mask=8bx1x0x1x0 для r=8b01100110 8b001100xx: stat1; 8b1100xx00: stat2; 8b00xx0011: stat3; 8bxx010100: 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=1b0; 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 // Пример 3fork #50 r = 1b0; begin #100 r = 1b1; fork #150 r = 1b0; @Aevent; #200 r = 1b1; #250 -> end_wave; @Bevent;join join// Пример 2 areg = breg;initial endbegin x = 1b0; fork #5 y = 1b1; #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 = 16b0010_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
  • 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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 37 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 = 4d0; else Q = (Q + 1) % 10; // в некоторых случаях // оператор по модулю можно не использовать end endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 40 e-mail: hahanova@mail.ru
  • 41. Пример поведенческой модели автомата x=0 Road S0 x=1 S4 S1Main 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 2d0 //красный цвет светофора`define YELLOW 2d1 //желтый цвет светофора`define GREEN 2d2 //зеленый цвет светофора //состояния автомата HWY CNTRY`define S0 3d0 // GREEN RED`define S1 3d1 // YELLOW RED`define S2 3d2 //RED RED`define S3 3d3 // RED GREEN`define S4 3d4 // 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. Контрольные вопросы и задания.11. Какая из временных диаграмм 3. Какой оператор будет выполнен, будет получена в результате если r= …? моделирования следующего reg [7:0] r, mask; кода? mask = 8bx0x0x0x0; initial clock = 1’b0; casex (r ^ mask) always #10 clock = ~clock; 8b001100xx: stat1; initial #80 $finish; 8b1100xx00: stat2;2. Какой оператор будет выполнен, 8b00xx0011: stat3; если ir= …? 8bxx010100: stat4; reg [7:0] ir; endcase casez (ir) 8b1???????: instruction1(ir); 8b01??????: instruction2(ir); 8b00010???: instruction3(ir); 8b000001??: instruction4(ir); endcase 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 46 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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 47 e-mail: hahanova@mail.ru
  • 48. Контрольные вопросы и задания.31. Создать синхросигнал, равный 0 в начальный момент времени и переключающийся через каждые 30 единиц времени. Использовать для этого цикл forever.2. В какой момент времени будет выполнен каждый оператор? Чему равны промежуточные и окончательные значения сигналов a, b, c, d? 1. initial 2. initial begin begin a = 1b0; a<=1b0; b = #10 1b1; b<=#10 1b1; c = #5 1b0; c<=#5 1b0; d = #20 {a, b, c}; d<=#20 {a, b, c}; end end 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 48 e-mail: hahanova@mail.ru
  • 49. Контрольные вопросы и задания.41. Какой порядок выполнения 3. Указать конечное значение d операторов в следующем в следующем примере: Verilog-коде? Указать initial окончательные значения begin сигналов a, b, c, d. b = 1b1; initial c = 1b0; begin #10 b = 1b0; a=1b0; end #0 с = b; end initial begin begin b = 1b1; d = #25 (b|c); #0 d = a; end end 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 49 e-mail: hahanova@mail.ru
  • 50. Контрольные вопросы и задания.51. Какое сообщение будет выведено оператором $display, если encode = 3b111? 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" ); endcase2. Результат выполнения следующих операторов? initial x = 1b0; initial repeat (3) @(posedge clk) x=~x; 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 50 e-mail: hahanova@mail.ru
  • 51. Контрольные вопросы и задания.61. Какой сигнал будет сгенерирован после выполнения следующих операторов? initial begin clock=1b0; forever #20 clock = ~clock; end2. Какой результат выполнения оператора, если 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 = 1b0; #5 y = 1b0; fork #20 a = x; #15 b = y; join #40 x = 1b0; 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. Контрольные вопросы и задания.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 для 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 55 изменения значений параметров. e-mail: hahanova@mail.ru б) Построить структурную модель fulladd4 переопределяя параметры в