VERILOG




 3. Dataflow уровень описания моделей



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

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


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



                               out=ab+c

             a
                 #5
             b        e
                             #4         out
             c




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

Синтаксис:
 assign [drive_strength] [delay] net_value =
 expression {,net_value = expression};

Примеры:
 assign out=i1&i2;
 assign addr[15:0]=addr1[15:0]^addr2[15:0];
 assign {c_out, sum[3:0]}=a[3:0]+b[3:0]+c_in;

    2/9/2011      д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   4
                       e-mail: hahanova@mail.ru
Оператор непрерывного назначения.2
     //Обычная форма
     wire out;
     assign out = i1 & i2;
     //Упрощенная формой
     wire out = i1 & i2;

 Задержки в операторе назначения
     wire out;
     assign #10 out = i1 & i2;                    //Обычная форма

     wire #10 out = i1 & i2;                      //Упрощенная форма

 Задержку линии можно также указать в момент ее декларации:.
     wire #10 out;                   //Описание задержки линии
     assign out = i1 & i2;           // значение линии out будет
                                     // присвоено через 10 единиц времени
       2/9/2011                д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ         5
                                    e-mail: hahanova@mail.ru
Приоритеты операторов
                 Оператор                  Описание
              + - ! ~                 Унарные
              * / %                   Арифметические
              + - (binary)            Бинарные
              << >> <<< >>>           Сдвига
              < <= > = >              Отношения
              == != === !==           Равенства
              & ~&                    and nand
              ^ ~^ ^~                 xor xnor
              | ~|                    or nor
              &&                      Логическое and
              ||                      Логическое or
              ?:                      Условный оператор
   2/9/2011           д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   6
                           e-mail: hahanova@mail.ru
Операторы Verilog
                                    Операторы Verilog
                  Арифметические                          Побитовые
             Оператор         Описание            Оператор         Описание
               a+b       a плюс b                    ~b              not
               a-b       a минус b                  a&b              and
               a*b       a умножить на b            a |b              or
               a/b       a разделить на b           a^b              xor
              a%b        a по модулю b
              a ** b     Степень                a ^~ b, a ~^ b            xnor

                     Отношения                                Равенства
             Оператор         Описание            Оператор             Описание
               a<b        меньше                    a == b         равно
               a>b        больше                    a != b         не равно
              a <= b      меньше или равно         a ===b          равно
              a => b      больше или равно         a !== b         не равно

                                        Логические
                              Оператор             Описание
                               a && b         a and b
                                 a || b       a or b
                                  !a          not a

  2/9/2011                      д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ              7
                                     e-mail: hahanova@mail.ru
Арифметические операторы
 Если хотя бы один бит операнда равен x, то
  результат равен x
    in1 = 4'b110x;
    in2 = 4'b1010;
    sum = in1 + in2; // результат операции сложения – 4'bx
 Результат операции по модулю представляет собой
  остаток от деления двух чисел. Знак результата
  совпадает со знаком первого операнда.
    10 % 3 // результат 1, остаток от деления 10 на 3 равен 1
    17 % 3 // результат 2, остаток от деления 17 на 3 равен 2
    12 % 3 // результат 0, нет остатка от деления
    -7 % 3 // результат -1, знак первого операнда
    11 % -3 // результат 2
    -4’d12 % 3 // результат 1, т.к. -4’d12 = 4'b0100%3 = 1

      2/9/2011         д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ     8
                            e-mail: hahanova@mail.ru
Операторы логические, отношения и равенства

   Логические операторы
    A=3; B=0;
    A&&B=0          A||B=1            !A=0                     !B=1
    A = 2'b0x; B = 2'b10; // Операнд с элементом x
    A && B = x            // эквивалентно (x && 1)

   Операторы отношения
    reg [3:0] a, b; a = 4’b1100; b = 4’b0110;
    a < b // равняется логическому 0          a > 8 // равняется логической 1
    a <= b // равняется логическому 0         a >= 10 // равняется логической 1
    a < 4’b1zzz // результат равен x a < 4’b1x01 // результат равен x

   Операторы равенства
          reg [3:0] a, b; a = 4’b1100; b = 4’b101x;
    a == 4’b1100 // истина – логическая 1 a != 4’b1100 // ложь – логический 0
    b == 4’b101x // результат равен x          b != 4’b101x // результат равен x
    b === 4’b101x // истина – логическая 1 b !== 4’b101x // ложь – логический 0



          2/9/2011             д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ          9
                                    e-mail: hahanova@mail.ru
Побитовые операторы
                                                                      ~^
& 0 1 x         z      ^ 0 1 x         z        |   0 1 x       z          0 1 x          z   ~ 0 1 x    z
                                                                      ^~
0   0   0   0   0      0   0   1   x   x       0    0   1   x   x      0   1      0   x   x     1 0 X X
1   0   1   x   x      1   1   0   x   x       1    1   1   1   1      1   0      1   x   x
x   0   x   x   x      x   x   x   x   x       x    x   1   x   x      x   x      x   x   x
z   0   x   x   x      z   x   x   x   x       z    x   1   x   x      z   x      x   x   x

    reg [7:0] a, b;       a = 8’b1010xzxz;    b = 8’b10010011;
    a&b        // поразрядное И, результат 8’b100000xx;
    a|b         // поразрядное ИЛИ, результат 8’b1011xx11;
    a^b         // поразрядное по модулю 2, результат 8’b0011xxxx;
    a ~^ b      // поразрядное по модулю 2 с инверсией выхода,
                // результат 8’b1100xxxx;
    ~a          // поразрядная инверсия, результат 8’b0101xxxx;


            2/9/2011                       д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ                     10
                                                e-mail: hahanova@mail.ru
Операторы редукции
 Операторы редукции или свертки
 & (and), ~& (nand), | (or), ~| (nor), ^ (xor), ^~ или
  ~^ (xnor)

   Пример
     • &x         // 1&0&1&0=1'b0
     • |x         // 1|0|1|0=1'b1
     • ^x         // 1^0^1^0=1'b0.

      2/9/2011       д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   11
                          e-mail: hahanova@mail.ru
Операторы сдвига
Операторы сдвига                            Операторы сдвига
     //x=4'b1100                  Оператор             Описание
     y=x>>1 //y=4'b0110             a << b      Сдвиг влево
     y=x<<1 // y=4'b1000            a >> b      Сдвиг вправо
     y=x<<2 //y=4'b0000            a <<< b      Знаковый сдвиг влево
                                    a >>> b      Знаковый сдвиг вправо
   reg [3:0] a; a = 4’b1111;
   a << 3 = 4’b1000          a >> 3 = 4’b0001
   a << 1’bz = 4’bxxxx       a >> 1’bx = 4’bxxxx

   reg [7:0] r8;
   r8 = a >>> b; // Сдвиг a вправо на b разрядов,
                 // старшие биты заполняются значением a[7]
       2/9/2011          д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ        12
                              e-mail: hahanova@mail.ru
Оператор конкатенации
 Синтаксис:
  {expression | multiplier{expression},
     expression | multiplier{expression}, . . .}
 Примеры.
   //A=1'b1, B=2'b00, C=2'b10, D3'b110
   Y={B, C}               //Y=4'b0010
   Y={A, B, C, D, 3'b001} //Y=11'b10010110001
   Y={2{B}, C}            //Y=6'b000010
   Y={3{A}, 2{B}, C}      //Y=9'b111000010
     2/9/2011       д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   13
                         e-mail: hahanova@mail.ru
Оператор условного назначение

                            Синтаксис:
 condition_expr ? true_expr: false_expr;
      mux_2to_1
In0
                   Out   module mux_2to_1 (out, In0, In1, Sel);
In1                             output Out;
                                input In0, In1, Sel;
        Sel
                         assign out = Sel ? In1 : In0;
                         endmodule




        2/9/2011             д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   14
                                  e-mail: hahanova@mail.ru
Две модели мультиплексора 4 в 1
 // Модель 1
 module mux4_to_1 (out, i0, i1, i2, i3, s1, s0);
      output out;
      input i0, i1, i2, i3;
      input s1, s0;

    //Вложенный условный оператор
   assign out = s1 ? (s0 ? i3 : i2) : (s0 ? i1 : i0);
 endmodule

 // Модель 2
 module mux4_to_1 (out, i0, i1, i2, i3, s1, s0);
      output out;
      input i0, i1, i2, i3; // входы данных
      input s1, s0;        // управляющие входы
     assign out = (~s1 & ~s0 & i0) | (~s1 & s0 & i1) |
           (s1 & ~s0 & i2) | (s1 & s0 & i3);
 endmodule

      2/9/2011               д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   15
                                  e-mail: hahanova@mail.ru
Системные задачи и функции.1
 Системная задача $display служит для вывода
  информации на экран.
  $display | $displayb | $displayh | $displayo (p1, p2, p3, ...) ;
           Символ       Описание формата
           %d or %D     Десятичный формат
           %b or %B     Двоичный формат
           %h or %H     Шестнадцатиричный формат
           %o or %O     Восьмеричный формат
           %c or %C     Символы в формате ASCII
           %v or %V     Интенсивности сигнала класса net
           %m or %M     Иерархическое имя
           %s or %S     В виде строки
           %t or %T     Текущий формат времени
      2/9/2011            д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ       16
                               e-mail: hahanova@mail.ru
Системные задачи и функции.2
 Задача $monitor предлагает механизм для
  наблюдения за изменениями сигнала.
  $monitor | $monitorb | $monitorh | $monitoro (p1, p2, p3, ...) ;
  $monitoron;       // влючить мониторинг
  $monitoroff;      // выключить мониторинг .


 Пример
    initial  // блок инициализации
    begin
      $monitor($time, "clock = %b, reset = %b", clock, reset);
    end


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

           $stop [(n)];
            $finish [(n)];

 Режимы диагностических сообщений задач $stop и $finish

           n                    Сообщ ение
           0   Отсутствует
           1   Время моделирования
               Время моделированияи и работы CPU,
           2
               размер используемой памяти

    2/9/2011          д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   18
                           e-mail: hahanova@mail.ru
Системные задачи и функции.4
$printtimescale [ ( hierarchical_name ) ] ;
                                                         Пример:
      // функции
                                                         `timescale 1 ms / 1 us
integer $time                                            module a_dat;
integer $stime                                           initial
real $realtime                                                  $printtimescale;
                                                         endmodule
Задача $printtimescale – выводит единицы измерения и
точность вычисления времени для указанного модуля
hierarchical_name. Системные функции $time и $stime
возвращают текущее время моделирования в виде 64- и 32-
битового целого числа, а функция $realtime – в вещественном
формате.



     2/9/2011            д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ                  19
                              e-mail: hahanova@mail.ru
Работа с файлами
 $fopen и $fclose
   integer multi_channel_descriptor = $fopen ( " file_name " );
       | integer fd = $fopen ( " file_name ", type );
   $fclose ( multi_channel_descriptor );
                                                       Screen+Log      File Otput
       | $fclose (fd);
                                                            $display   $fdisplay
 Пример                                        $write                 $fwrite
   integer file1, file2;                        $strobe                $fstrobe
   initial begin                                $monitor               $fmonitor
         file1 = $fopen("file1");
         file2 = $fopen("file2");
         $display("The number used for file 1 is %0d", file1);
         ...
         $fclose(file1);$fclose(file2);
   end

          2/9/2011              д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ                20
                                     e-mail: hahanova@mail.ru
Функции работы с файлами
 Чтение символов (байта)
   c = $fgetc ( fd );
   code = $ungetc ( c, fd );
 Чтение строки str из файла fd
   integer code = $fgets ( str, fd );
 Чтение форматируемых данных
   integer code = $fscanf ( fd, format, args );
     • // чтение из файла, заданного fd
   integer code = $sscanf ( str, format, args );

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

   integer code = $fread( myreg, fd);
   integer code = $fread( mem, fd);
   integer code = $fread( mem, fd, start);
   integer code = $fread( mem, fd, start, count);
   integer code = $fread( mem, fd, , count);




       2/9/2011      д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   22
                          e-mail: hahanova@mail.ru
Загрузка памяти из файла
 $readmemb ( " file_name " , memory_name [ ,
  start_addr [ , finish_addr ] ] ) ;
 | $readmemh ( " file_name " , memory_name [ ,
  start_addr [ , finish_addr ] ] ) ;
 Примеры
   reg [7:0] mem[1:256];

   initial $readmemh("mem.data", mem);
   initial $readmemh("mem.data", mem, 16);
   initial $readmemh("mem.data", mem, 128, 1);

     2/9/2011        д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   23
                          e-mail: hahanova@mail.ru
$random()
 Размер возвращаемых значенй соответствует
  типу integer.

 Пример использования функции $random.
    parameter SEED = 33;
    reg [31:0] vector;
  always @(posedge clock)
     vector = $random (SEED);



     2/9/2011      д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   24
                        e-mail: hahanova@mail.ru
Контрольные вопросы и задания.1
1.  Что означает оператор a === b в Verilog?
2.  Что означает оператор a !== b в Verilog?
3.  Чему будет равен результат операции Y = {3{A}}, где A = 2’b1?
4.  Чему равен результат операции X|Y для переменных X =
    5’b10101, Y = 5’b00111?
5. Чему равен результат операции X&Y для переменных X =
    5’b10101, Y = 5’b00111?
6. Чему равен результат операции X^Y для переменных X =
    5’b10101, Y = 5’b00111?
7. Чему равен результат операции &X для X = 5’b10101?
8. Чему равен результат операции |X для X = 5’b10101?
9. Чему равен результат операции Y={A, B, C, D, 3’B101} для
    A=1’b1, B=1’b0, C=2’b11, D=2’b00?
10. Чему равен результат операции e = {2{1'b1,a,1'b0}} для
    a=4'b0110?
      2/9/2011          д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   25
                             e-mail: hahanova@mail.ru
Контрольные вопросы и задания.2
   Синхронный счетчик может быть построен с использованием двухступенчатого
    JK-триггера. Ниже представлена вентильная схема JK-триггера. Если clear = 0,
    то триггер устанавливается в нулевое состояние. Первая ступень триггера
    сохраняет значения по положительному фронту сигнала clock, вторая – по
    отрицательному. Разработать ее Verilog-модели вентильного и dataflow-уровня.


                       a                                                     J   K   qn+1
        J                      y
                                                 c                           0   0   qn
                                                                      q      0   1    0
                                                                             1   0    1
    clear                                                                    1   1   q'n

                                                                      qbar
                                                 d
       K                       ybar
                       b

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



                                 qbar
                   #1
 set                                               set         reset   qn+1
                                                     0          0      qn
                                                     0          1      0
                                                     1          0      1
                                                     1          1      ?
        2/9/2011        д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ             27
                             e-mail: hahanova@mail.ru

апкс 2011 03_verilog

  • 1.
    VERILOG 3. Dataflowуровень описания моделей Автоматизация проектирования компьютерных систем д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 2/9/2011 e-mail: hahanova@mail.ru 1
  • 2.
    Цель лекции исодержание  Цель – изучить принципы построения моделей вентильного и dataflow уровней  План 1. Стандартные логические элементы 2. Определенные пользователем примитивы 3. Задержки 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 2 e-mail: hahanova@mail.ru
  • 3.
    Dataflow-модели out=ab+c a #5 b e #4 out c 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 3 e-mail: hahanova@mail.ru
  • 4.
    Оператор непрерывного назначения.1 Синтаксис: assign [drive_strength] [delay] net_value = expression {,net_value = expression}; Примеры: assign out=i1&i2; assign addr[15:0]=addr1[15:0]^addr2[15:0]; assign {c_out, sum[3:0]}=a[3:0]+b[3:0]+c_in; 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 4 e-mail: hahanova@mail.ru
  • 5.
    Оператор непрерывного назначения.2 //Обычная форма wire out; assign out = i1 & i2; //Упрощенная формой wire out = i1 & i2;  Задержки в операторе назначения wire out; assign #10 out = i1 & i2; //Обычная форма wire #10 out = i1 & i2; //Упрощенная форма  Задержку линии можно также указать в момент ее декларации:. wire #10 out; //Описание задержки линии assign out = i1 & i2; // значение линии out будет // присвоено через 10 единиц времени 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 5 e-mail: hahanova@mail.ru
  • 6.
    Приоритеты операторов Оператор Описание + - ! ~ Унарные * / % Арифметические + - (binary) Бинарные << >> <<< >>> Сдвига < <= > = > Отношения == != === !== Равенства & ~& and nand ^ ~^ ^~ xor xnor | ~| or nor && Логическое and || Логическое or ?: Условный оператор 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 6 e-mail: hahanova@mail.ru
  • 7.
    Операторы Verilog Операторы Verilog Арифметические Побитовые Оператор Описание Оператор Описание a+b a плюс b ~b not a-b a минус b a&b and a*b a умножить на b a |b or a/b a разделить на b a^b xor a%b a по модулю b a ** b Степень a ^~ b, a ~^ b xnor Отношения Равенства Оператор Описание Оператор Описание a<b меньше a == b равно a>b больше a != b не равно a <= b меньше или равно a ===b равно a => b больше или равно a !== b не равно Логические Оператор Описание a && b a and b a || b a or b !a not a 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 7 e-mail: hahanova@mail.ru
  • 8.
    Арифметические операторы  Еслихотя бы один бит операнда равен x, то результат равен x in1 = 4'b110x; in2 = 4'b1010; sum = in1 + in2; // результат операции сложения – 4'bx  Результат операции по модулю представляет собой остаток от деления двух чисел. Знак результата совпадает со знаком первого операнда. 10 % 3 // результат 1, остаток от деления 10 на 3 равен 1 17 % 3 // результат 2, остаток от деления 17 на 3 равен 2 12 % 3 // результат 0, нет остатка от деления -7 % 3 // результат -1, знак первого операнда 11 % -3 // результат 2 -4’d12 % 3 // результат 1, т.к. -4’d12 = 4'b0100%3 = 1 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 8 e-mail: hahanova@mail.ru
  • 9.
    Операторы логические, отношенияи равенства  Логические операторы A=3; B=0; A&&B=0 A||B=1 !A=0 !B=1 A = 2'b0x; B = 2'b10; // Операнд с элементом x A && B = x // эквивалентно (x && 1)  Операторы отношения reg [3:0] a, b; a = 4’b1100; b = 4’b0110; a < b // равняется логическому 0 a > 8 // равняется логической 1 a <= b // равняется логическому 0 a >= 10 // равняется логической 1 a < 4’b1zzz // результат равен x a < 4’b1x01 // результат равен x  Операторы равенства reg [3:0] a, b; a = 4’b1100; b = 4’b101x; a == 4’b1100 // истина – логическая 1 a != 4’b1100 // ложь – логический 0 b == 4’b101x // результат равен x b != 4’b101x // результат равен x b === 4’b101x // истина – логическая 1 b !== 4’b101x // ложь – логический 0 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 9 e-mail: hahanova@mail.ru
  • 10.
    Побитовые операторы ~^ & 0 1 x z ^ 0 1 x z | 0 1 x z 0 1 x z ~ 0 1 x z ^~ 0 0 0 0 0 0 0 1 x x 0 0 1 x x 0 1 0 x x 1 0 X X 1 0 1 x x 1 1 0 x x 1 1 1 1 1 1 0 1 x x x 0 x x x x x x x x x x 1 x x x x x x x z 0 x x x z x x x x z x 1 x x z x x x x reg [7:0] a, b; a = 8’b1010xzxz; b = 8’b10010011; a&b // поразрядное И, результат 8’b100000xx; a|b // поразрядное ИЛИ, результат 8’b1011xx11; a^b // поразрядное по модулю 2, результат 8’b0011xxxx; a ~^ b // поразрядное по модулю 2 с инверсией выхода, // результат 8’b1100xxxx; ~a // поразрядная инверсия, результат 8’b0101xxxx; 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 10 e-mail: hahanova@mail.ru
  • 11.
    Операторы редукции  Операторыредукции или свертки  & (and), ~& (nand), | (or), ~| (nor), ^ (xor), ^~ или ~^ (xnor) Пример • &x // 1&0&1&0=1'b0 • |x // 1|0|1|0=1'b1 • ^x // 1^0^1^0=1'b0. 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 11 e-mail: hahanova@mail.ru
  • 12.
    Операторы сдвига Операторы сдвига Операторы сдвига  //x=4'b1100 Оператор Описание  y=x>>1 //y=4'b0110 a << b Сдвиг влево  y=x<<1 // y=4'b1000 a >> b Сдвиг вправо  y=x<<2 //y=4'b0000 a <<< b Знаковый сдвиг влево a >>> b Знаковый сдвиг вправо  reg [3:0] a; a = 4’b1111;  a << 3 = 4’b1000 a >> 3 = 4’b0001  a << 1’bz = 4’bxxxx a >> 1’bx = 4’bxxxx  reg [7:0] r8;  r8 = a >>> b; // Сдвиг a вправо на b разрядов,  // старшие биты заполняются значением a[7] 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 12 e-mail: hahanova@mail.ru
  • 13.
    Оператор конкатенации  Синтаксис: {expression | multiplier{expression}, expression | multiplier{expression}, . . .}  Примеры. //A=1'b1, B=2'b00, C=2'b10, D3'b110 Y={B, C} //Y=4'b0010 Y={A, B, C, D, 3'b001} //Y=11'b10010110001 Y={2{B}, C} //Y=6'b000010 Y={3{A}, 2{B}, C} //Y=9'b111000010 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 13 e-mail: hahanova@mail.ru
  • 14.
    Оператор условного назначение Синтаксис: condition_expr ? true_expr: false_expr; mux_2to_1 In0 Out module mux_2to_1 (out, In0, In1, Sel); In1 output Out; input In0, In1, Sel; Sel assign out = Sel ? In1 : In0; endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 14 e-mail: hahanova@mail.ru
  • 15.
    Две модели мультиплексора4 в 1 // Модель 1 module mux4_to_1 (out, i0, i1, i2, i3, s1, s0); output out; input i0, i1, i2, i3; input s1, s0; //Вложенный условный оператор assign out = s1 ? (s0 ? i3 : i2) : (s0 ? i1 : i0); endmodule // Модель 2 module mux4_to_1 (out, i0, i1, i2, i3, s1, s0); output out; input i0, i1, i2, i3; // входы данных input s1, s0; // управляющие входы assign out = (~s1 & ~s0 & i0) | (~s1 & s0 & i1) | (s1 & ~s0 & i2) | (s1 & s0 & i3); endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 15 e-mail: hahanova@mail.ru
  • 16.
    Системные задачи ифункции.1  Системная задача $display служит для вывода информации на экран. $display | $displayb | $displayh | $displayo (p1, p2, p3, ...) ; Символ Описание формата %d or %D Десятичный формат %b or %B Двоичный формат %h or %H Шестнадцатиричный формат %o or %O Восьмеричный формат %c or %C Символы в формате ASCII %v or %V Интенсивности сигнала класса net %m or %M Иерархическое имя %s or %S В виде строки %t or %T Текущий формат времени 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 16 e-mail: hahanova@mail.ru
  • 17.
    Системные задачи ифункции.2  Задача $monitor предлагает механизм для наблюдения за изменениями сигнала. $monitor | $monitorb | $monitorh | $monitoro (p1, p2, p3, ...) ; $monitoron; // влючить мониторинг $monitoroff; // выключить мониторинг .  Пример initial // блок инициализации begin $monitor($time, "clock = %b, reset = %b", clock, reset); end 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 17 e-mail: hahanova@mail.ru
  • 18.
    Системные задачи ифункции.3  $stop [(n)]; $finish [(n)]; Режимы диагностических сообщений задач $stop и $finish n Сообщ ение 0 Отсутствует 1 Время моделирования Время моделированияи и работы CPU, 2 размер используемой памяти 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 18 e-mail: hahanova@mail.ru
  • 19.
    Системные задачи ифункции.4 $printtimescale [ ( hierarchical_name ) ] ; Пример: // функции `timescale 1 ms / 1 us integer $time module a_dat; integer $stime initial real $realtime $printtimescale; endmodule Задача $printtimescale – выводит единицы измерения и точность вычисления времени для указанного модуля hierarchical_name. Системные функции $time и $stime возвращают текущее время моделирования в виде 64- и 32- битового целого числа, а функция $realtime – в вещественном формате. 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 19 e-mail: hahanova@mail.ru
  • 20.
    Работа с файлами $fopen и $fclose  integer multi_channel_descriptor = $fopen ( " file_name " );  | integer fd = $fopen ( " file_name ", type );  $fclose ( multi_channel_descriptor ); Screen+Log File Otput  | $fclose (fd); $display $fdisplay  Пример $write $fwrite integer file1, file2; $strobe $fstrobe initial begin $monitor $fmonitor file1 = $fopen("file1"); file2 = $fopen("file2"); $display("The number used for file 1 is %0d", file1); ... $fclose(file1);$fclose(file2); end 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 20 e-mail: hahanova@mail.ru
  • 21.
    Функции работы сфайлами  Чтение символов (байта)  c = $fgetc ( fd );  code = $ungetc ( c, fd );  Чтение строки str из файла fd  integer code = $fgets ( str, fd );  Чтение форматируемых данных  integer code = $fscanf ( fd, format, args ); • // чтение из файла, заданного fd  integer code = $sscanf ( str, format, args ); 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 21 e-mail: hahanova@mail.ru
  • 22.
    Чтение двоичных данныхиз файла  integer code = $fread( myreg, fd);  integer code = $fread( mem, fd);  integer code = $fread( mem, fd, start);  integer code = $fread( mem, fd, start, count);  integer code = $fread( mem, fd, , count); 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 22 e-mail: hahanova@mail.ru
  • 23.
    Загрузка памяти изфайла  $readmemb ( " file_name " , memory_name [ , start_addr [ , finish_addr ] ] ) ;  | $readmemh ( " file_name " , memory_name [ , start_addr [ , finish_addr ] ] ) ;  Примеры  reg [7:0] mem[1:256];  initial $readmemh("mem.data", mem);  initial $readmemh("mem.data", mem, 16);  initial $readmemh("mem.data", mem, 128, 1); 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 23 e-mail: hahanova@mail.ru
  • 24.
    $random()  Размер возвращаемыхзначенй соответствует типу integer.  Пример использования функции $random. parameter SEED = 33; reg [31:0] vector; always @(posedge clock) vector = $random (SEED); 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 24 e-mail: hahanova@mail.ru
  • 25.
    Контрольные вопросы изадания.1 1. Что означает оператор a === b в Verilog? 2. Что означает оператор a !== b в Verilog? 3. Чему будет равен результат операции Y = {3{A}}, где A = 2’b1? 4. Чему равен результат операции X|Y для переменных X = 5’b10101, Y = 5’b00111? 5. Чему равен результат операции X&Y для переменных X = 5’b10101, Y = 5’b00111? 6. Чему равен результат операции X^Y для переменных X = 5’b10101, Y = 5’b00111? 7. Чему равен результат операции &X для X = 5’b10101? 8. Чему равен результат операции |X для X = 5’b10101? 9. Чему равен результат операции Y={A, B, C, D, 3’B101} для A=1’b1, B=1’b0, C=2’b11, D=2’b00? 10. Чему равен результат операции e = {2{1'b1,a,1'b0}} для a=4'b0110? 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 25 e-mail: hahanova@mail.ru
  • 26.
    Контрольные вопросы изадания.2  Синхронный счетчик может быть построен с использованием двухступенчатого JK-триггера. Ниже представлена вентильная схема JK-триггера. Если clear = 0, то триггер устанавливается в нулевое состояние. Первая ступень триггера сохраняет значения по положительному фронту сигнала clock, вторая – по отрицательному. Разработать ее Verilog-модели вентильного и dataflow-уровня. a J K qn+1 J y c 0 0 qn q 0 1 0 1 0 1 clear 1 1 q'n qbar d K ybar b clock cbar 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 26 e-mail: hahanova@mail.ru
  • 27.
    reset q #1 qbar #1 set set reset qn+1 0 0 qn 0 1 0 1 0 1 1 1 ? 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 27 e-mail: hahanova@mail.ru