SlideShare a Scribd company logo
1 of 55
Download to read offline
VERILOG
                4. Поведенческие
                    Verilog-модели


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

                д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ
2/9/2011                e-mail: hahanova@mail.ru             1
Цель лекции и содержание
 Цель – изучить основные конструкции и
  принципы построения моделей
  поведенческого уровня
 План
   а




    2/9/2011   д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   2
                    e-mail: hahanova@mail.ru
1 Поведенческие модели
 Поведенческие модели – это модели
  высокого   уровня,   которые    описывают
  алгоритм функционирования устройства без
  детализации на логические вентили или пути
  передач данных.

 Строятся на базе операторов:
  initial
  always

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

 module clock_gen;
     reg clock;    // определение регистровой переменной

  initial
       clock = 1'b0;    //Инициализация синхросигнала 0

  always     //Переключает clock с периодом 20
      #10 clock = ~ clock;

  initial
       #1000 $finish;
  endmodule



       2/9/2011           д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   5
                               e-mail: hahanova@mail.ru
Процедурные операторы назначения

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

Синтаксис:
 // Блокирующие
    register_identifier = expression;
 // Неблокирующие
    register_identifier <= expression;.

    2/9/2011          д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   6
                           e-mail: hahanova@mail.ru
Блокирующие процедурные операторы
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
Неблокирующие процедурные операторы

 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
Задание
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
Сравнение операторов
 // Блокирующие                        // Неблокирующие
 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
Управление процессом выполнения операторов


 Управление задержкой (delay control),
  использует символ #;
 Управление событием (event control),
  использует символ @;
 Управление значением (level-sensitive timing
  control), использует оператор wait




     2/9/2011     д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   11
                       e-mail: hahanova@mail.ru
Управление задержкой

 #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
Управление нулевой задержкой
 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
Управление событием

 Событие – это изменение значения регистра
  или цепи. Существует четыре типа
  событийного управления порядком
  выполнения операторов:
   обычное событийное управление (regular event
    control),
   именное событийное управление (named event
    control),
   событийное управление по ИЛИ (event OR control)
   с использованием оператора цикла repeat.

     2/9/2011      д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   14
                        e-mail: hahanova@mail.ru
Обычное событийное управление
 Для описания события используется символ @
 Для описания фронта используются ключевые слова
  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
Именное событийное управление
 // Декларация события
  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
Событийное управление по ИЛИ

 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
Временное управление значением

 Управление значением использует оператор 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
Внутриоператорный контроль
 Синтаксис:
    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
Задание
 В какой момент времени будет выполнен каждый оператор?
  Чему равны промежуточные и окончательные значения сигналов
  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
Оператор 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
Примеры использования оператора 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
Оператор 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
Модель мультиплексора 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
Пример. Модель 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
Операторы 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
Примеры использования casex и casez
// Пример 1                           // Пример 2
reg [3:0] encoding;                    reg [7:0] ir;
integer state;

casex (encoding)                       casez (ir)
    4'b1xxx: next_state=3;               8'b1???????: instruction1(ir);
    4'bx1xx: next_state=2;               8'b01??????: instruction2(ir);
    4'bxx1x: next_state=1;               8'b00010???: instruction3(ir);
    4'bxxx1: next_state=0;               8'b000001??: instruction4(ir);
    default: next_state=0;             endcase
endcase




     2/9/2011          д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ          27
                             e-mail: hahanova@mail.ru
Примеры использования 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
Константное выражение в операторе 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
Циклы.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
Циклы.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
Событийное управление 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
Последовательные и параллельные блоки

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

Синтаксис:
  // последовательный блок             //параллельный блок
     begin : name                      fork : name
     statement;                        statement;
     ...                               ...
     end                               join


    2/9/2011      д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ       33
                       e-mail: hahanova@mail.ru
Примеры блоков
//Пример 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
Блоки с именем
 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
Оператор 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
Процедурные операторы непрерывного
 назначения

 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
Пара 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
Пара 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
Примеры поведенческих моделей
устройств

 Модель 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
Пример поведенческой модели
 автомата
                                                             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
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
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
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
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
Контрольные вопросы и задания.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
Контрольные вопросы и задания.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
Контрольные вопросы и задания.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
Контрольные вопросы и задания.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
Контрольные вопросы и задания.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
Контрольные вопросы и задания.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
Контрольные вопросы и задания.7

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


    2/9/2011   д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   52
                    e-mail: hahanova@mail.ru
Контрольные вопросы и задания.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
Контрольные вопросы и задания.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
Контрольные вопросы и задания.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 переопределяя параметры в

More Related Content

What's hot

Statements in VHDL - Sequential Statements
Statements in VHDL - Sequential StatementsStatements in VHDL - Sequential Statements
Statements in VHDL - Sequential Statementsvitaliykulanov
 
Statements in VHDL - Concurrent Statements
Statements in VHDL - Concurrent StatementsStatements in VHDL - Concurrent Statements
Statements in VHDL - Concurrent Statementsvitaliykulanov
 
этапы написания программы
этапы написания программыэтапы написания программы
этапы написания программыИрина Чернова
 
4 4 pascal_urok_1
4 4 pascal_urok_14 4 pascal_urok_1
4 4 pascal_urok_1Ann Eres
 
Subprograms in VHDL, Functions in VHDL
Subprograms in VHDL, Functions in VHDLSubprograms in VHDL, Functions in VHDL
Subprograms in VHDL, Functions in VHDLvitaliykulanov
 
Subprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDLSubprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDLvitaliykulanov
 
javascript_part1
javascript_part1javascript_part1
javascript_part1sovest
 
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...Iosif Itkin
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияYandex
 
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...Iosif Itkin
 
Всё ли ты знаешь о JavaScript ООП?
Всё ли ты знаешь о JavaScript ООП?Всё ли ты знаешь о JavaScript ООП?
Всё ли ты знаешь о JavaScript ООП?Vitaly Hornik
 
Structural project description in VHDL
Structural project description in VHDLStructural project description in VHDL
Structural project description in VHDLvitaliykulanov
 
оператор присваивания и процедуры ввода и вывода
оператор присваивания и процедуры ввода и выводаоператор присваивания и процедуры ввода и вывода
оператор присваивания и процедуры ввода и выводаliza2209
 
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...corehard_by
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияYandex
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...Alexey Paznikov
 
язык програмирования
язык програмированияязык програмирования
язык програмированияOlegmingalev1997
 
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМПрограммирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМAlexandr Konfidentsialno
 

What's hot (19)

Statements in VHDL - Sequential Statements
Statements in VHDL - Sequential StatementsStatements in VHDL - Sequential Statements
Statements in VHDL - Sequential Statements
 
Statements in VHDL - Concurrent Statements
Statements in VHDL - Concurrent StatementsStatements in VHDL - Concurrent Statements
Statements in VHDL - Concurrent Statements
 
этапы написания программы
этапы написания программыэтапы написания программы
этапы написания программы
 
4 4 pascal_urok_1
4 4 pascal_urok_14 4 pascal_urok_1
4 4 pascal_urok_1
 
Subprograms in VHDL, Functions in VHDL
Subprograms in VHDL, Functions in VHDLSubprograms in VHDL, Functions in VHDL
Subprograms in VHDL, Functions in VHDL
 
Subprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDLSubprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDL
 
javascript_part1
javascript_part1javascript_part1
javascript_part1
 
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знания
 
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
 
Всё ли ты знаешь о JavaScript ООП?
Всё ли ты знаешь о JavaScript ООП?Всё ли ты знаешь о JavaScript ООП?
Всё ли ты знаешь о JavaScript ООП?
 
Structural project description in VHDL
Structural project description in VHDLStructural project description in VHDL
Structural project description in VHDL
 
Подпрограммы
ПодпрограммыПодпрограммы
Подпрограммы
 
оператор присваивания и процедуры ввода и вывода
оператор присваивания и процедуры ввода и выводаоператор присваивания и процедуры ввода и вывода
оператор присваивания и процедуры ввода и вывода
 
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знания
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
 
язык програмирования
язык програмированияязык програмирования
язык програмирования
 
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМПрограммирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
 

Viewers also liked

2011 general research
2011 general research2011 general research
2011 general research000175031
 
հաշվետվություն
հաշվետվությունհաշվետվություն
հաշվետվությունtatevtatev
 
Norsk pp
Norsk ppNorsk pp
Norsk pprikeng
 
Mostrari
MostrariMostrari
MostrariiesMola
 
Онлайн маркетинг микс
Онлайн маркетинг микс Онлайн маркетинг микс
Онлайн маркетинг микс Kameliq Ninakova
 
Drongo Festival - E-learning: balans tussen plezier en leren voor kinderen
Drongo Festival - E-learning: balans tussen plezier en leren voor kinderenDrongo Festival - E-learning: balans tussen plezier en leren voor kinderen
Drongo Festival - E-learning: balans tussen plezier en leren voor kinderenKees van Dieren
 
Obstetrics запорожан
Obstetrics   запорожанObstetrics   запорожан
Obstetrics запорожанIgor Nitsovych
 
Fiscal policy as a means to prevent depression
Fiscal policy as a means to prevent depressionFiscal policy as a means to prevent depression
Fiscal policy as a means to prevent depressionGaurav Sinha
 
Kulakov v.i. lekarstvennye_sredstva,_primenyaemye_v_akusherstve_i_ginekologii...
Kulakov v.i. lekarstvennye_sredstva,_primenyaemye_v_akusherstve_i_ginekologii...Kulakov v.i. lekarstvennye_sredstva,_primenyaemye_v_akusherstve_i_ginekologii...
Kulakov v.i. lekarstvennye_sredstva,_primenyaemye_v_akusherstve_i_ginekologii...Igor Nitsovych
 
հաշվետվություն
հաշվետվությունհաշվետվություն
հաշվետվությունtatevtatev
 
Cloud computing bpos & windows azure oss
Cloud computing   bpos & windows azure ossCloud computing   bpos & windows azure oss
Cloud computing bpos & windows azure ossAvni Gupta
 
Rosas san jordi
Rosas san jordiRosas san jordi
Rosas san jordiiesMola
 

Viewers also liked (20)

Frame2
Frame2Frame2
Frame2
 
Shefali company's profile 1
Shefali  company's profile 1Shefali  company's profile 1
Shefali company's profile 1
 
Gvvv quiz part 3
Gvvv quiz part 3Gvvv quiz part 3
Gvvv quiz part 3
 
2011 general research
2011 general research2011 general research
2011 general research
 
հաշվետվություն
հաշվետվությունհաշվետվություն
հաշվետվություն
 
Cacsodovoco
CacsodovocoCacsodovoco
Cacsodovoco
 
Norsk pp
Norsk ppNorsk pp
Norsk pp
 
Mostrari
MostrariMostrari
Mostrari
 
Онлайн маркетинг микс
Онлайн маркетинг микс Онлайн маркетинг микс
Онлайн маркетинг микс
 
Drongo Festival - E-learning: balans tussen plezier en leren voor kinderen
Drongo Festival - E-learning: balans tussen plezier en leren voor kinderenDrongo Festival - E-learning: balans tussen plezier en leren voor kinderen
Drongo Festival - E-learning: balans tussen plezier en leren voor kinderen
 
Obstetrics запорожан
Obstetrics   запорожанObstetrics   запорожан
Obstetrics запорожан
 
Fiscal policy as a means to prevent depression
Fiscal policy as a means to prevent depressionFiscal policy as a means to prevent depression
Fiscal policy as a means to prevent depression
 
MeEvaluation
MeEvaluation MeEvaluation
MeEvaluation
 
Kulakov v.i. lekarstvennye_sredstva,_primenyaemye_v_akusherstve_i_ginekologii...
Kulakov v.i. lekarstvennye_sredstva,_primenyaemye_v_akusherstve_i_ginekologii...Kulakov v.i. lekarstvennye_sredstva,_primenyaemye_v_akusherstve_i_ginekologii...
Kulakov v.i. lekarstvennye_sredstva,_primenyaemye_v_akusherstve_i_ginekologii...
 
հաշվետվություն
հաշվետվությունհաշվետվություն
հաշվետվություն
 
Cloud computing bpos & windows azure oss
Cloud computing   bpos & windows azure ossCloud computing   bpos & windows azure oss
Cloud computing bpos & windows azure oss
 
Building a Sustainable Business
Building a Sustainable BusinessBuilding a Sustainable Business
Building a Sustainable Business
 
Rosas san jordi
Rosas san jordiRosas san jordi
Rosas san jordi
 
Armen lox 2
Armen lox 2Armen lox 2
Armen lox 2
 
Intensive Culture & Season Extension
Intensive Culture & Season ExtensionIntensive Culture & Season Extension
Intensive Culture & Season Extension
 

More from Irina Hahanova

апкс 2011 08_verilog_макросы
апкс 2011 08_verilog_макросыапкс 2011 08_verilog_макросы
апкс 2011 08_verilog_макросыIrina Hahanova
 
апкс 2011 07_синтез_verilog
апкс 2011 07_синтез_verilogапкс 2011 07_синтез_verilog
апкс 2011 07_синтез_verilogIrina Hahanova
 
цсноп 2 11_4_архитектуры памяти
цсноп 2 11_4_архитектуры памятицсноп 2 11_4_архитектуры памяти
цсноп 2 11_4_архитектуры памятиIrina Hahanova
 
цсноп 2 11_3_проект памяти
цсноп 2 11_3_проект памятицсноп 2 11_3_проект памяти
цсноп 2 11_3_проект памятиIrina Hahanova
 
цсноп 2 11_1_vital
цсноп 2 11_1_vitalцсноп 2 11_1_vital
цсноп 2 11_1_vitalIrina Hahanova
 
апкс 2011 06_проектирование арифметических устройств
апкс 2011 06_проектирование арифметических устройствапкс 2011 06_проектирование арифметических устройств
апкс 2011 06_проектирование арифметических устройствIrina Hahanova
 
апкс 2011 05_verilog
апкс 2011 05_verilogапкс 2011 05_verilog
апкс 2011 05_verilogIrina Hahanova
 
апкс 2011 04_verilog_продолж
апкс 2011 04_verilog_продолжапкс 2011 04_verilog_продолж
апкс 2011 04_verilog_продолжIrina Hahanova
 
апкс 2011 03_verilog
апкс 2011 03_verilogапкс 2011 03_verilog
апкс 2011 03_verilogIrina Hahanova
 
апкс 2011 02_verilog
апкс 2011 02_verilogапкс 2011 02_verilog
апкс 2011 02_verilogIrina Hahanova
 
апкс 2011 01_введение
апкс 2011 01_введениеапкс 2011 01_введение
апкс 2011 01_введениеIrina Hahanova
 
моап 2011 02_active_1
моап 2011 02_active_1моап 2011 02_active_1
моап 2011 02_active_1Irina Hahanova
 
моап 2011 01_введение
моап 2011 01_введениемоап 2011 01_введение
моап 2011 01_введениеIrina Hahanova
 

More from Irina Hahanova (16)

апкс 2011 08_verilog_макросы
апкс 2011 08_verilog_макросыапкс 2011 08_verilog_макросы
апкс 2011 08_verilog_макросы
 
апкс 2011 07_синтез_verilog
апкс 2011 07_синтез_verilogапкс 2011 07_синтез_verilog
апкс 2011 07_синтез_verilog
 
цсноп 2 11_4_архитектуры памяти
цсноп 2 11_4_архитектуры памятицсноп 2 11_4_архитектуры памяти
цсноп 2 11_4_архитектуры памяти
 
цсноп 2 11_3_проект памяти
цсноп 2 11_3_проект памятицсноп 2 11_3_проект памяти
цсноп 2 11_3_проект памяти
 
цсноп 2 11_1_vital
цсноп 2 11_1_vitalцсноп 2 11_1_vital
цсноп 2 11_1_vital
 
апкс 2011 06_проектирование арифметических устройств
апкс 2011 06_проектирование арифметических устройствапкс 2011 06_проектирование арифметических устройств
апкс 2011 06_проектирование арифметических устройств
 
апкс 2011 05_verilog
апкс 2011 05_verilogапкс 2011 05_verilog
апкс 2011 05_verilog
 
апкс 2011 04_verilog_продолж
апкс 2011 04_verilog_продолжапкс 2011 04_verilog_продолж
апкс 2011 04_verilog_продолж
 
апкс 2011 03_verilog
апкс 2011 03_verilogапкс 2011 03_verilog
апкс 2011 03_verilog
 
апкс 2011 02_verilog
апкс 2011 02_verilogапкс 2011 02_verilog
апкс 2011 02_verilog
 
апкс 2011 01_введение
апкс 2011 01_введениеапкс 2011 01_введение
апкс 2011 01_введение
 
моап 2011 05
моап 2011 05моап 2011 05
моап 2011 05
 
моап 2011 04
моап 2011 04моап 2011 04
моап 2011 04
 
моап 2011 03
моап 2011 03моап 2011 03
моап 2011 03
 
моап 2011 02_active_1
моап 2011 02_active_1моап 2011 02_active_1
моап 2011 02_active_1
 
моап 2011 01_введение
моап 2011 01_введениемоап 2011 01_введение
моап 2011 01_введение
 

апкс 2011 04_verilog

  • 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
  • 5. ALWAYS  module clock_gen; reg clock; // определение регистровой переменной initial clock = 1'b0; //Инициализация синхросигнала 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; 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
  • 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}) 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
  • 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 // Пример 2 reg [3:0] encoding; reg [7:0] ir; integer state; casex (encoding) casez (ir) 4'b1xxx: next_state=3; 8'b1???????: instruction1(ir); 4'bx1xx: next_state=2; 8'b01??????: instruction2(ir); 4'bxx1x: next_state=1; 8'b00010???: instruction3(ir); 4'bxxx1: next_state=0; 8'b000001??: instruction4(ir); default: next_state=0; endcase endcase 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 27 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
  • 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 = 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 переопределяя параметры в