SlideShare a Scribd company logo
VERILOG




   2. Основные понятия и конструкции
               языка Verilog


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

                д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ
2/9/2011                e-mail: hahanova@mail.ru            1
Цель лекции и содержание
Цель – знакомство с базовыми конструкциями
  языка Verilog
План
  1.    Модуль – базовая единица языка Verilog.
  2.    Уровни абстракции описания моделей
  3.    Лексические соглашения
  4.    Классы и типы данных
  5.    Описание портов модуля
  6.    Параметры
  7.    Директивы компилятора
  8.    Стандартные логические элементы
  9.    Определенные пользователем примитивы
  10.   Задержки

        2/9/2011        д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   2
                             e-mail: hahanova@mail.ru
Язык Описания аппаратуры: Verilog
   1984 -1985 гг. Филип Мурби                Стандарты
    (Philip Moorby) разрабатывает
    язык Verilog, который                        IEEE Std 1364-95.
    принадлежит фирме Gateway                    IEEE Std 1364-2001
    Design Automatiion.                           значительно переработанный
   1985-1987гг. Рост популярности                по сравнению с предыдущим.
    Verilog.
   1990 г.Фирма Cadence покупает                IEEE Std 1364-2005 добавил
    Gateway и делает язык Verilog                 небольшие исправления,
    общедоступным                                 уточнения.
   1993 г. 85% всех ASIC-проектов            Verilog проще для анализа
    разрабатывается с помощью                  использования.
    Verilog                                   Получил признание в
   1995 г. Создается IEEE-1364 -              проектировании ASIC схем,
    стандарт языка Verilog                     особенно для проектов низкого
   2000 г. Более 10000                        уровня.
    разработчиков SUN, Apple и                Наиболее популярен в
    Motorola работают на Verilog               Северной Америке и Азии,
   2001 г. Стандарт 1364- 2001                особенно в Японии.
    “Verilog- 2001”                            Непопулярен в Европе.


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




  2/9/2011   д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   4
                  e-mail: hahanova@mail.ru
1 Модуль – базовая единица языка Verilog

Синтаксис модуля:
  module identifier (ports_list) ;           module identifier
      ports_declaration ;                     (ports_declaration_list) ;
      module_body ;                                 module_body ;
  endmodule                                   endmodule
       Пример описания модуля:
       module module_1(a, b, c) ;                      • module module_2
              input [3: 0] a, b ;                      •    (input [3: 0] a, b,
              output [3: 0] c;                               output [3: 0] c);
              assign c = a & b;                                assign c = a & b;
         endmodule                                       endmodule




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


 поведенческий (или алгоритмический)
 dataflow-уровень (уровень передачи
  данных)
 вентильный уровень
 транзисторный уровень (switch-level)



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

 D-триггер
                                       module dff
  module dff (clk, d, q);
      input clk, d;                      (input clk, d,
      output q;                           output reg q);
      reg q;
  always @(posedge clk)                always @(posedge clk)
      q = d;                               q = d;
  endmodule                             endmodule
      2/9/2011        д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ     7
                           e-mail: hahanova@mail.ru
Dataflow-уровень
Dataflow – описывает процесс изменения данных
  при их передаче между регистрами
Модель мультиплексора 4-в-1, заданного уравнением.
  Out  Sel1' Sel0' In0  Sel1' Sel0 In1 Sel1 Sel0' In2  Sel1 Sel0 In3
    module mux4_to_1
      //Декларация портов
      (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               д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ              8
                                      e-mail: hahanova@mail.ru
Вентильный уровень
 Модели вентильного уровня задаются логическими
  элементами и соединениями между ними.
Модель мультиплексора 4-в-1
  вентильного уровня                           In0
                                                                       Y0
 module mux_4_to_1                            Sel1
                                                            NotSel1
   (output Out,
   input In0, In1, In2, In3, Sel1, Sel0);      In1
                                                                       Y1
    wire NotSel0, NotSel1;                                   NotSel0
    wire Y0, Y1, Y2, Y3;                      Sel0                              Out
                                               In2
                                                                       Y2
   and (Y1, In1, NotSel1, NotSel0);
   not (NotSel0, Sel0);
   and (Y3, In3, Sel1, Sel0);                  In3
   or (Out, Y0, Y1, Y2, Y3);                                           Y3

   and (Y0, In0, NotSel1, NotSel0);
   not (NotSel1, Sel1);
   and (Y2, In2, Sel1, NotSel0);
 endmodule
         2/9/2011              д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ         9
                                    e-mail: hahanova@mail.ru
Транзисторный уровень
               my_nor                                          my_nor
           a                                                    Vdd
                        out
           b                                                        pwr

module my_nor(out, a, b);
          (output out,
          input a,b);                                               c
     wire c;
//создание линий питания и земли                                           out
          supply1 pwr;
          supply0 gnd;
// реализации pmos-транзисторов                      a                         b
pmos (c, pwr, b);
pmos (out, c, a);
// реализации nmos-транзистор
nmos (out, gnd, a);                                                gnd
nmos (out, gnd, b);
endmodule
    2/9/2011            д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ              10
                              e-mail: hahanova@mail.ru
4 Лексические соглашения
Идентификатор имен в Verilog:
 Может состоять из букв, цифр, $, символа
  подчеркивания(_).
 Должен начинаться с буквы или символа
  подчеркивания.
 Не может содержать пробелы.
 Чувствителен к регистру символов.

Например,
  reg enable;                           wire _ready;
  integer group_a;                      reg and5;
  tri clk$1;

      2/9/2011       д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   11
                          e-mail: hahanova@mail.ru
Целочисленные значения
                               Синтаксис :
                       [sign] [size] 'base number
   где sign – знак, size - число битов для представления значения number,
    base – система счисления: d или D десятичная, h или H
    шестнадцатеричная, o или O восьмеричная, b или B двоичная.

      Примеры
    15'h f         'o 17               'd 15          10'd 20
     ‘b 1111       'b 1_1_1_1          -5'b1_1011     8'h z
    8'b0 (8'b00000000)       8'b1 (8'b00000001)       4'b10?? (4'b10zz)
    8'bz (8'bzzzzzzzz)       8'bx (8'bxxxxxxxx)       8'h4? (8'b0100zzzz)
    12'h13x        // значение последних 4 битов неизвестно
    4'd-2          // неправильное описание
    -8'd3          // отрицательное число,
                   // представлено дополнительным кодом 8-ю разрядами

         2/9/2011              д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ         12
                                    e-mail: hahanova@mail.ru
Вещественные значения
                     Синтаксис:
sign unsigned_number.unsigned_number
sign unsigned_number.unsigned_number e sign unsigned_number
sign unsigned_number.unsigned_number E sign unsigned_number


  Пример
   17.5        10e5
   0.5         0.5694_e-5
   1_000_000.0



    2/9/2011         д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   13
                          e-mail: hahanova@mail.ru
Строковые значения
Строковые значения в Verilog записываются в
двойных кавычках.
  var = “Hello world!”;

В строках могут быть использованы
специальные символы:
   •   n – новая строка
   •   t – табуляция
   •     – символ 
   •   ” – символ “ .

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




             Логический
                                        Значение
              уровень
                 0         логический 0, условие false
                 1         логический 1, условие true
                 x         неизвестное значение
                 z         высокий импеданс

  2/9/2011           д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   15
                          e-mail: hahanova@mail.ru
Типы данных класса цепи (net)
net_type [range] [delay3] list_of_net_identifiers ;

Типы данных
 wire/tri – линия
 wand/triand и wor/trior – линии с И и ИЛИ элементом
 supply0, supply1, tri0, tri1, trireg – описание элементов
  низкого уровня
     wire/tri        wand/triand        wor/trior                  Примеры
     0 1 x      z      0 1 x z           0 1 x z                   wire a;
                                                                   wire b, c;
 0   0 x x      0    0 0 0 0 0         0 0 1 x 0
                                                                   wire d = 1'b0;
 1   x 1 x      1    1 0 1 x 1         1 1 1 1 1
                                                                   tri tristate_buffer;
 x   x x x      x    x 0 x x x         x x 1 x x
                                                                   wand #5 sig_1;
 z   0 1 x      z    z 0 1 x z         z 0 1 x z
                                                                   trireg (small) t;
          2/9/2011                 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ                   16
                                        e-mail: hahanova@mail.ru
Регистровый класс данных
 reg [range] list_of_identifiers;
  integer list_of_identifiers; // 32 разряда, знак.
  real list_of_identifiers;
  time list_of_identifiers; // 64 разряда, беззнак
  realtime list_of_identifiers;

   Примеры:
   reg reset;                   integer i;
    time t;                     real r;
    realtime rt1, rt2;

      2/9/2011           д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   17
                              e-mail: hahanova@mail.ru
Векторы
                       Синтаксис
 net_type [msb : lsb] list_of_net_identifiers;
 reg [msb : lsb] list_of_register_identifiers;

  Примеры:
    reg [3:0] addr; // 4-разрядный регистр addr
    wire [-3:4] d;      // переменная d размером 8 битов состоит
                       // из элементов: d[-3] (msb), d[-2], d[-1], d[0],
                       // d[1], d[2], d[3], d[4] (lsb).
    tri [5:0] x, y, z;
    busA[7]             // элемент шины busA с индексом 7


   2/9/2011             д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ          18
                             e-mail: hahanova@mail.ru
Знаковые векторы
                     Синтаксис
net_type signed [msb : lsb] list_of_net_identifiers;
reg signed [msb : lsb] list_of_register_identifiers;

 Пример

reg signed [3:0] signed_reg;

// старший бит рассматривается как знак
// задает 4-битовый вектор, который может
// принимать значения в диапазоне от -8 до 7

    2/9/2011         д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   19
                          e-mail: hahanova@mail.ru
Массивы
 reg width identifier depth;
  integer | time identifier length;

 Примеры деклараций массивов:
     integer count[0:7]             // массив из 8 слов целого типа
     reg [4:0] port_id [0:7];       //массив из 8 пятиразрядных слов
     count[5];                      // 5-й элемент массива
     port_id[3];                    // 3-й элемент массива port_id
     reg [7:0] mem [3:0], r;
     mem[0] = 7;
     r = mem[3];

     reg arrayb[7:0][0:255]; // декларация двумерного
                             // масссива однобитовых регистровf
     wire w_array[7:0][5:0]; // декларация массива линий
      2/9/2011             д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ      20
                                e-mail: hahanova@mail.ru
Описание портов модуля (старый стиль)
 Синтаксис модуля для декларации портов и
  переменных:
    module name_of_module ( port, port, … ) ;
      [input_declaration]   Пример декларации портов
      [output_declaration]  module module_1(a, b, c) ;
      [inout_declaration]          input [3: 0] a, b ;
      [net_declaration]            output [3: 0] c;
      [reg_declaration]        ...
      [time_declaration]    endmodule
      [integer_declaration]
      [real_declaration]    module module_1(a, b, c) ;
                                   input [3: 0] a, b ;
     other module_body ;
                                   output [3: 0] c;
    endmodule                      wire [3: 0] a, b ;
                                             reg [3: 0] c;
                                             ...
                                endmodule
                      д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ
     2/9/2011                                                21
                          e-mail: hahanova@mail.ru
Описание портов модуля (новый стиль)
 Синтаксис модуля для декларации портов и
  переменных:
    module name_of_module
      ([input_declaration], Пример декларации портов
      [output_declaration], module module_1
      [inout_declaration]);        (input [3: 0] a, b,
      [net_declaration]            output [3: 0] c);
      [reg_declaration]        ...
      [time_declaration]    endmodule
      [integer_declaration]
      [real_declaration]    module module_1
                                   (input [3: 0] a, b,
     other module_body ;
                                   output reg [3: 0] c);
    endmodule                      ...
                               endmodule

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


             input                   output
               net                    reg/net
 reg/net                                                net
                inout          net
                               net

  2/9/2011       д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ         23
                      e-mail: hahanova@mail.ru
Структурные модели
                                  Синтаксис:
module_name [parameter_assignment] instance_name (list_of_connections);

   Соединение по порядку                    Пропущенный порт
   module dff (clk, d, q);                  dff inst_1 (clock, , net_1);
       input clk, d;
       output q; reg q;                        Соединение по имени
          ...                               module top;
   endmodule                                        reg data, clock;
                                                    wire q_out, net_1;
   module top;
             reg data, clock;               dff inst_1 (.d(data), .q(net_1), .clk(clock));
             wire q_out, net_1;             dff inst_2 (.clk(clock), .d(net_1), .q(q_out));
   dff inst_1 (clock, data, net_1);         endmodule
   dff inst_2 (clock, net_1, q_out);
   endmodule
        2/9/2011               д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ                 24
                                    e-mail: hahanova@mail.ru
Массив копий модулей
module my_module
   (input a, b, output c);
  assign c = a & b;
endmodule

module top (input [3:0] a, b,
             output [3:0] c);
  // создает 4 копии модуля my_module
  my_module inst [3:0] (a,b,c);
endmodule

   2/9/2011          д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   25
                          e-mail: hahanova@mail.ru
Иерархические имена
 Объекты модуля top будут иметь следующие
  иерархические имена:
   top.a, top.b, top.c, top.inst,

 Объекты модуля my_module представляются
  списком:
   top.inst.a, top.inst.b, top.inst.c.



     2/9/2011   д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   26
                     e-mail: hahanova@mail.ru
Параметры.1
                                    Синтаксис:
parameter [ signed ] [ range ] identifier = const_expr {, identifier = const_expr};
parameter integer identifier = const_expr{, identifier = const_expr};
parameter real identifier = const_expr{, identifier = const_expr};
parameter realtime identifier = const_expr{, identifier = const_expr};
parameter time identifier = const_expr{, identifier = const_expr};

 Примеры определения параметров:
   parameter lsb = 7;
   parameter size = 8 , word = 32 ;
   parameter number = 3.92, frequency = 100;
   parameter clk_cycle = frequency / 2;
   parameter byte_size = 8, byte_mask = byte_size - 1;
   parameter signed [3:0] mux_selector = 0;
   parameter real r1 = 3.5e17;

         2/9/2011               д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ            27
                                     e-mail: hahanova@mail.ru
Параметры.2
 Пример использования параметров
 // Старый стиль
    module my_module (Clk, D, Q) ;
     parameter width = 2, delay = 10;
     input [width - 1:0] D; input Clk; output [width:0] Q;
    assign #delay Q = D;
    endmodule
 // Новый стиль
  module my_module (Clk, D, Q)
     #(parameter width = 2, delay = 10)
     (input [width - 1:0] D, input Clk,
     output [width:0] Q);
    assign #delay Q = D;
  endmodule


      2/9/2011             д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   28
                                e-mail: hahanova@mail.ru
Переопределение параметров
 в операторе реализации                    с помощью оператора
  копии модуля                               defparam
                                           module top;
module top;                                       reg Clk;
  reg Clk ;                                       reg [7:0] D;
  reg [7:0] D ;                                   wire [7:0] Q;
  wire [7:0] Q ;                             my_module inst_1(Clk, D, Q)
                                           endmodule
my_module #(7, 25)                         module override;
      inst_1(Clk, D, Q) ;                    defparam top.inst_1.width = 7;
endmodule                                  endmodule



        2/9/2011            д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ        29
                                 e-mail: hahanova@mail.ru
Директивы компилятора.1
Для определения текстовых макросов.
`define <text_macro_name> <MACRO_TEXT>

  Например:
  `define TESTEQ1 4’b1101 // определен текстовый макрос 1101
  `define myzero 0

  //использование текстового макроса myzero
  //в любом месте Verilog-кода вместо нуля
  assign mysig = `myzero;

  `define WORDSIZE 64

  reg [`WORDSIZE-1 : 0] data_bus;

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

  `define max(a,b) ((a) > (b) ? (a): (b))

  n = `max(p+q, r+s);




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

`ifdef и `endif
   `ifdef MYVAR
        module if_MYVAR_is_declared;
                ...
    endmodule
    `else
        module if_MYVAR_is_not_declared;
                ...
        endmodule
    `endif

      2/9/2011       д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   32
                          e-mail: hahanova@mail.ru
Директивы компилятора.4
 Для использования информации, содержащейся в
  другом файле:
  `include “path/file-name-to-be-included”
 Для описания единиц измерения и точности
  вычисления параметров времени
   `timescale time_unit / time_precision
    Допустимые численные значения: 1, 10 и 100;
    Единицы измерения s, ms, us, ns, ps и fs.
   Например,
    `timescale 10 ns / 100 ps
    assign #5 Q = D; // Q получит значение D через 50 ns


      2/9/2011           д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   33
                              e-mail: hahanova@mail.ru
Вентильные модели
                                                                a
                                                                    #5
                                                                b        e
                                                                             #4   out
                                                                c




                             a
                                    #5
                              b              e
                                                  #4      out
                              c

 a
          #5
 b              e
                    #4            out
 c




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


buf              and          or                xor                  bufif1   notif1




not              nand         nor               xnor                 bufif0   notif0



           B
           C                               A          wire A, B, C, D, E;
           D                                          and (A, B, C, D, E);
           E
                        and
      2/9/2011                д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ                     35
                                    e-mail: hahanova@mail.ru
Таблицы истинности тристабильных вентилей

             Control                   Control
bufif0                 bufif1
         0    1 x z                0    1 x z                 Символ L означает,
 D   0   0    z L L    D      0    z    0 L L                 что выход может
 a   1   1    z H H    a      1    z    1 H H                 принимать одно из
                                                              двух значений 0 и Z,
 t   x   x    z x x    t      x    z    x x x
                                                              символ H – 1 и Z.
 a   z   x    z x x    a      z    z    x x x                 Задержки символов
                                                              H и L подобны
             Control                   Control                задержкам при
notif0                 notif1
         0    1 x z                0    1 x z                 переходе в X.
 D   0   1    z H H    D      0    z    1 H H
 a   1   0    z L L    a      1    z    0 L L
 t   x   x    z x x    t      x    z    x x x
 a   z   x    z x x    a      z    z    x x x

     2/9/2011              д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ                 36
                                e-mail: hahanova@mail.ru
Пример модели вентильного уровня (Вариант 1)

Модель мультиплексора 4-в-1 вентильного уровня
module mux_4_to_1 (Out, In0, In1, In2, In3, Sel1, Sel0);
       output Out;
       input In0, In1, In2, In3, Sel1, Sel0;
       wire NotSel0, NotSel1; In0
                                                                   Y0
       wire Y0, Y1, Y2, Y3;       Sel1
                                                    NotSel1
and (Y1, In1, NotSel1, NotSel0);      In1
not (NotSel0, Sel0);                                               Y1
and (Y3, In3, Sel1, Sel0);                          NotSel0
                                     Sel0                                    Out
or (Out, Y0, Y1, Y2, Y3);
                                      In2
and (Y0, In0, NotSel1, NotSel0);                                   Y2
not (NotSel1, Sel1);
and (Y2, In2, Sel1, NotSel0);
                                      In3
endmodule                                                          Y3


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

 Модель мультиплексора 4-в-1 вентильного уровня
 module mux_4_to_1
        ( output Out, input In0, In1, In2, In3, Sel1, Sel0) ;
                                       In0
   wire NotSel0, NotSel1;             Sel1
                                                                     Y0
   wire Y0, Y1, Y2, Y3;                               NotSel1

                                       In1
  and (Y0, In0, NotSel1, NotSel0),                                   Y1
       (Y1, In1, NotSel1, NotSel0),                   NotSel0
       (Y2, In2, Sel1, NotSel0),      Sel0                                     Out
                                       In2
       (Y3, In3, Sel1, Sel0);                                        Y2
  not (NotSel0, Sel0),
      (NotSel1, Sel1);
                                       In3
  or (Out, Y0, Y1, Y2, Y3);                                          Y3
 endmodule

        2/9/2011              д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ        38
                                   e-mail: hahanova@mail.ru
Определенные пользователем примитивы(UDP)

                    Синтаксис
primitive udp_name ( port_list ) ;
             output output_port;
             input list_of_imputs;
initial output_port = value;
table
 combinational_input_list : output_value;
 sequential_input_list: current_state: next_state;
endtable
endprimitive
     2/9/2011       д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   39
                         e-mail: hahanova@mail.ru
Примеры описания UDP
Примитив мультиплексора 2-в 1                       Примитив D-триггера
primitive Mux2to1 (Out, Sel, In0, In1) ;          primitive d_ff (q, d, clk, clr) ;
              output Out;                                          output q; reg q;
                                                                   input d, clk, clr;
              input Sel, In0, In1;
                                                  initial q=0;
// нет инициализации                              table
table                                             // d clk clr : q : q+
 // Sel In0 In1 : Out                             // --------------------------------
    0 0 ? : 0;                                       ? ?         0 : ? : 0;
                                                     0 r          1 : ? : 0;
    0 1 ? : 1;
                                                     1 r          1 : ? : 1;
    1 ? 0 : 0;                                       ? n         1 : ? : - ;
    1 ? 1 : 1;                                       *     ?      1 : ? : -;
    x ? ? : x;                                       ? ?          *     : ? : -;
endtable                                          endtable
endprimitive                                      endprimitive

         2/9/2011               д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ                    40
                                     e-mail: hahanova@mail.ru
Символы таблиц состояний в UDP
Символ               Интерпретация                                     Комментарий
  0      Логический 0
  1      Логическая 1
  x      Неизвестное значение
  b      Заменяет 0 и 1                                     Не разрешается для выходов
  ?      Заменяет 0, 1 и x
   -     Отсутствие изменений                 Разрешается использование только с
                                              выходами последовательностных UDP
      Следующие символы используются только для входов последовательностных UDP
 (v w) Переключение из значения v в w         Значения v и w могут быть равны 0, 1, b и ?
   *      Эквивалентно (??)                   Любое изменение значения
   r      Эквивалентно (01)                   Передний фронт
    f     Эквивалентно (10)                   Задний фронт
   p      Эквивалентно (01), ( 0x), ( x1)     Положительный фронт
   n      Эквивалентно (1 0 ), (1 x), (x0)    Отрицательный фронт



         2/9/2011               д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ                     41
                                     e-mail: hahanova@mail.ru
Пример использования UDP
                    Q0             Q1                  Q2            Q3


                CLR           CLR                 CLR            CLR
                J Clk K       J Clk K             J Clk K        J Clk K
          Clr
          Clk
                                                                   JK3
                                                    JK2
                                 JK1
          En

 module Count4En (Q, Clr, Clk, En);
      output [3:0] Q; wire [3:0] Q;
      input   Clr, Clk, En;
 wire JK1, JK2, JK3;
      JKMS Bit0 (Q[0], Clr, Clk, En, En);
      JKMS Bit1 (Q[1], Clr, Clk, JK1, JK1);
      JKMS Bit2 (Q[2], Clr, Clk, JK2, JK2);
      JKMS Bit3 (Q[3], Clr, Clk, JK3, JK3);
      and (JK1, Q[0], En); and (JK2, Q[1], JK1); and (JK3, Q[2], JK2);
 endmodule
     2/9/2011             д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ             42
                               e-mail: hahanova@mail.ru
Задержки элементов
                                                                           1
 Задержка переднего                  0, х или z
  фронта (rise delay)
                                                             t_rise
 Задержка заднего                   1, х или z
  фронта (fall delay)                                                 0

                                                         t_fall
 Задержка отключения
  (turn-off)                          1, 0, х                     z


    2/9/2011      д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ                43
                       e-mail: hahanova@mail.ru
Описание задержек элементов
 При описании логических элементов задержка
   указывается после его имени в формате:
  #(delay) | #(rise_delay, fall_delay) | #(rise_delay,
   fall_delay, turn-off_delay)
 Каждое значение задержки может быть задано:
   # (number)| # (identifier)| # ( mintypmax: mintypmax: mintypmax)
 Примеры описания задержек:
     and #(5) a1(out, i1, i2);
     and #(4, 6) a2(out, i1, i2); // rise_delay=4, fall_delay=6,
                                  // turn-off_delay=4
     `timescale 1 ns / 1 ps . . .
     and #(3, 4, 5) a3(out, i1, i2); // rise_delay=3 ns, fall_delay=4 ns,
                                 // turn-off_delay=5 ns
     and #(4:5:6) a1(out, i1, i2);
     and #(3:4:5, 5:6:7) a2(out, i1, i2);
     and #(2:3:4, 3:4:5, 4:5:6) a3(out, i1, i2);
      2/9/2011            д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ       44
                               e-mail: hahanova@mail.ru
Пример использования задержек
`timescale 1 ns / 1 ps
                                                module D
                                 a
module D(out, a, b, c);                #5
                                  b           e
// декларация входных портов
                                                   #4    out
    output out;                   c
    input a, b, c;
    wire e; // внутренняя линия
           // реализация копии примитивов вентилей
and #(5) a1(e, a, b); // задержка вентиля 5 ед. времени
or #(4) o1(out, e, c); // задержка вентиля 4 ед. времени
endmodule
       2/9/2011        д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   45
                            e-mail: hahanova@mail.ru
Тестирование модели
`timescale 1ns/1ps
module stimulus_simple;
          reg A, B, C;      // Декларация внутренних переменных
          wire OUT;
    D d1(OUT, A, B, C); // Реализация копии модуля
  initial // Формирование тестовых последовательностей
   begin
    A = 1'b0; B = 1'b0; C = 1'b0;
    #10 A = 1'b1; // А=1 в 10 ns
    #5 B = 1'b1; // B=1 в 15 ns
    #5 A = 1'b0; // А=0 в 20 ns
    #10 $finish; // Моделирование
           // закончится в 30 ns

end
endmodule



        2/9/2011            д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   46
                                 e-mail: hahanova@mail.ru
Контрольные вопросы и задания (1)
1.    Какой из языков лучше подходит для создания сложных иерархичных
      проектов цифровых устройств?
2.    Какой организацией был разработан стандарт языка Verilog?
3.    Что описывают модели поведенческого уровня описывают?
4.    Что описывают модели dataflow-уровня описывают?
5.    Что описывают модели поведенческого уровня описывают?
6.    Что описывают модели вентильного уровня описывают?
7.    Какие классы переменных существуют в Verilog ?
8.    Какой из идентификаторов не является правильным Verilog–
      идентификатором?
9.    Какое описание соответствует 8-битовому вектору типа линия?
10.   Какая из деклараций описывает память из 20 элементов целого типа?
11.   Какое описание соответствует памяти из 20 слов целого типа?
12.   Записан следующий оператор присваивания: A=23456; Какой формат
      имеет данное число в Verilog HDL?
13.   Какое выражение описывает 16-битовое двоичное число?
14.   Какой элемент вектора (reg [7:0] bus) содержит самый старший бит
      значения?
          2/9/2011          д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ    47
                                 e-mail: hahanova@mail.ru
Контрольные вопросы и задания
1. Указать название стандартного примитива.
2. Сколько выходов может иметь
   определенный пользователем примитив?
3. Как описывается поведение определенного
   пользователем примитива?
4. Чему будут равны задержки следующим
   образом описанного элемента?
   and #(5) a1(out, i1, i2);


     2/9/2011    д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   48
                      e-mail: hahanova@mail.ru
Контрольные вопросы и задания (2)
1.   К переменной какого типа может быть подключен выход
     модуля при построении структурных моделей устройств?
2.   Указать название стандартного примитива.
3.   Сколько выходов может иметь определенный пользователем
     примитив?
4.   Как описывается поведение определенного пользователем
     примитива?
5.   Как можно переопределить значение параметра?
6.   Каким образом может быть переопределено значение
     параметра?
7.   Чему будет равно значение параметров для копии inst модуля
     my_module?
     module my_module (Clk, D, Q) ;
        parameter width = 16, delay = 7;
        ...
        my_module #(32, 7) inst (Clk, D, Q) ;

         2/9/2011             д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ   49
                                   e-mail: hahanova@mail.ru
Контрольные вопросы и задания (3)
   1. Написать декларацию модуля для следующего 4-разрядного
    регистра с именем shift_reg. Описать входные порты без внутренней
    реализации устройства.
 2. Создать модуль верхнего уровня         reg_in [3:0]
stimulus со следующими переменными:                       shift_reg
REG_IN(4 бита) и CLK(1-бит) типа reg и                   (4 разряда) reg_out [3:0]
REG_OUT(4 бита) типа wire. Создать в       clock
нем копию модуля shift_reg с именем sr1.
Использовать способ соединения портов по порядку.
 3. Выполнить предыдущее задание, используя для соединения портов
    – соединение по имени.
 4. Записать иерархическое имя переменных REG_IN и REG_OUT.
 5. Написать иерархическое имя для копии компонента sr1. Написать
    иерархическое имя для копии его портов.



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

More Related Content

PDF
моап 2011 04
PDF
Тодуа. Методы разработки интерпретатора языка Рефал-2
PPTX
Structural project description in VHDL
PDF
апкс 2011 07_синтез_verilog
PPTX
Subprograms in VHDL, Procedures in VHDL
PDF
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
PPTX
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
PDF
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
моап 2011 04
Тодуа. Методы разработки интерпретатора языка Рефал-2
Structural project description in VHDL
апкс 2011 07_синтез_verilog
Subprograms in VHDL, Procedures in VHDL
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...

What's hot (18)

PPTX
основы програмирования Pascal
PDF
Основы программирования на ruby
PDF
Управляющие структуры в Ruby: условия
PDF
Динамическое программирование на ruby
PDF
апкс 2011 05_verilog
PDF
Scala Magic, Alexander Podhaliusin
PPTX
C language lect_05_introduction
PPTX
C++ idioms
PDF
Ruby строки
PDF
Инкапсуляция и полиморфизм в ruby
PDF
C++ Базовый. Занятие 04.
PPTX
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
PPT
практика 4
PDF
C++ Базовый. Занятие 01.
PDF
Probabilistic Verification in Computational Systems Design
PDF
C++ осень 2013 лекция 2
PPTX
десант презентация
основы програмирования Pascal
Основы программирования на ruby
Управляющие структуры в Ruby: условия
Динамическое программирование на ruby
апкс 2011 05_verilog
Scala Magic, Alexander Podhaliusin
C language lect_05_introduction
C++ idioms
Ruby строки
Инкапсуляция и полиморфизм в ruby
C++ Базовый. Занятие 04.
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
практика 4
C++ Базовый. Занятие 01.
Probabilistic Verification in Computational Systems Design
C++ осень 2013 лекция 2
десант презентация
Ad

Viewers also liked (20)

PPT
La relacio nord sud
PDF
Current state-of-php
PPTX
Norsk pp
PPTX
հաշվետվություն
PPTX
Cloud computing bpos & windows azure oss
PDF
апкс 2011 04_verilog_продолж
PPT
Nõukogude autod
PDF
At Your Service: A Path to Brand Leadership and Good Business in Your Community
PPT
Missa brevis
PPT
A árbore. Tagore.
PDF
Obstetrics запорожан
PPT
Comm 439 TIME FINAL PRESENTATION
PPTX
UPDATED K making connections
PPT
Media alta
PDF
Limon4kids
PPTX
Ang biblia
PPTX
Pink pantehrs
PDF
апкс 2011 08_verilog_макросы
PPTX
PPTX
nuevas tecnologias
La relacio nord sud
Current state-of-php
Norsk pp
հաշվետվություն
Cloud computing bpos & windows azure oss
апкс 2011 04_verilog_продолж
Nõukogude autod
At Your Service: A Path to Brand Leadership and Good Business in Your Community
Missa brevis
A árbore. Tagore.
Obstetrics запорожан
Comm 439 TIME FINAL PRESENTATION
UPDATED K making connections
Media alta
Limon4kids
Ang biblia
Pink pantehrs
апкс 2011 08_verilog_макросы
nuevas tecnologias
Ad

Similar to апкс 2011 02_verilog (11)

PDF
цсноп 2 11_1_vital
PDF
Павел Павлов - Scala для профессионалов - Joker 2013
PDF
моап 2011 01_введение
PDF
цсноп 2 11_3_проект памяти
PPTX
Введение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
PDF
Введение в Clojure (Margincon 2010)
PPT
двоичное кодирвоание
PDF
апкс 2011 04_verilog
PDF
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
PDF
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
цсноп 2 11_1_vital
Павел Павлов - Scala для профессионалов - Joker 2013
моап 2011 01_введение
цсноп 2 11_3_проект памяти
Введение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в Clojure (Margincon 2010)
двоичное кодирвоание
апкс 2011 04_verilog
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2

More from Irina Hahanova (7)

PDF
цсноп 2 11_4_архитектуры памяти
PDF
апкс 2011 06_проектирование арифметических устройств
PDF
апкс 2011 03_verilog
PDF
апкс 2011 01_введение
PDF
моап 2011 05
PDF
моап 2011 03
PDF
моап 2011 02_active_1
цсноп 2 11_4_архитектуры памяти
апкс 2011 06_проектирование арифметических устройств
апкс 2011 03_verilog
апкс 2011 01_введение
моап 2011 05
моап 2011 03
моап 2011 02_active_1

апкс 2011 02_verilog

  • 1. VERILOG 2. Основные понятия и конструкции языка Verilog Автоматизация проектирования компьютерных систем д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 2/9/2011 e-mail: hahanova@mail.ru 1
  • 2. Цель лекции и содержание Цель – знакомство с базовыми конструкциями языка Verilog План 1. Модуль – базовая единица языка Verilog. 2. Уровни абстракции описания моделей 3. Лексические соглашения 4. Классы и типы данных 5. Описание портов модуля 6. Параметры 7. Директивы компилятора 8. Стандартные логические элементы 9. Определенные пользователем примитивы 10. Задержки 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 2 e-mail: hahanova@mail.ru
  • 3. Язык Описания аппаратуры: Verilog  1984 -1985 гг. Филип Мурби  Стандарты (Philip Moorby) разрабатывает язык Verilog, который  IEEE Std 1364-95. принадлежит фирме Gateway  IEEE Std 1364-2001 Design Automatiion. значительно переработанный  1985-1987гг. Рост популярности по сравнению с предыдущим. Verilog.  1990 г.Фирма Cadence покупает  IEEE Std 1364-2005 добавил Gateway и делает язык Verilog небольшие исправления, общедоступным уточнения.  1993 г. 85% всех ASIC-проектов  Verilog проще для анализа разрабатывается с помощью использования. Verilog  Получил признание в  1995 г. Создается IEEE-1364 - проектировании ASIC схем, стандарт языка Verilog особенно для проектов низкого  2000 г. Более 10000 уровня. разработчиков SUN, Apple и  Наиболее популярен в Motorola работают на Verilog Северной Америке и Азии,  2001 г. Стандарт 1364- 2001 особенно в Японии. “Verilog- 2001” Непопулярен в Европе. 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 3 e-mail: hahanova@mail.ru
  • 4. Диаграмма стандартов Verilog 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 4 e-mail: hahanova@mail.ru
  • 5. 1 Модуль – базовая единица языка Verilog Синтаксис модуля: module identifier (ports_list) ; module identifier ports_declaration ; (ports_declaration_list) ; module_body ; module_body ; endmodule endmodule Пример описания модуля: module module_1(a, b, c) ; • module module_2 input [3: 0] a, b ; • (input [3: 0] a, b, output [3: 0] c; output [3: 0] c); assign c = a & b; assign c = a & b; endmodule endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 5 e-mail: hahanova@mail.ru
  • 6. 2. Уровни абстракции моделей  поведенческий (или алгоритмический)  dataflow-уровень (уровень передачи данных)  вентильный уровень  транзисторный уровень (switch-level) 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 6 e-mail: hahanova@mail.ru
  • 7. Поведенческий уровень  Поведенческий или алгоритмический – это верхний уровень описания проектов, отражающий алгоритм их функционирования без деталей реализации  D-триггер module dff module dff (clk, d, q); input clk, d; (input clk, d, output q; output reg q); reg q; always @(posedge clk) always @(posedge clk) q = d; q = d; endmodule endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 7 e-mail: hahanova@mail.ru
  • 8. Dataflow-уровень Dataflow – описывает процесс изменения данных при их передаче между регистрами Модель мультиплексора 4-в-1, заданного уравнением. Out  Sel1' Sel0' In0  Sel1' Sel0 In1 Sel1 Sel0' In2  Sel1 Sel0 In3 module mux4_to_1 //Декларация портов (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 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 8 e-mail: hahanova@mail.ru
  • 9. Вентильный уровень  Модели вентильного уровня задаются логическими элементами и соединениями между ними. Модель мультиплексора 4-в-1 вентильного уровня In0 Y0 module mux_4_to_1 Sel1 NotSel1 (output Out, input In0, In1, In2, In3, Sel1, Sel0); In1 Y1 wire NotSel0, NotSel1; NotSel0 wire Y0, Y1, Y2, Y3; Sel0 Out In2 Y2 and (Y1, In1, NotSel1, NotSel0); not (NotSel0, Sel0); and (Y3, In3, Sel1, Sel0); In3 or (Out, Y0, Y1, Y2, Y3); Y3 and (Y0, In0, NotSel1, NotSel0); not (NotSel1, Sel1); and (Y2, In2, Sel1, NotSel0); endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 9 e-mail: hahanova@mail.ru
  • 10. Транзисторный уровень my_nor my_nor a Vdd out b pwr module my_nor(out, a, b); (output out, input a,b); c wire c; //создание линий питания и земли out supply1 pwr; supply0 gnd; // реализации pmos-транзисторов a b pmos (c, pwr, b); pmos (out, c, a); // реализации nmos-транзистор nmos (out, gnd, a); gnd nmos (out, gnd, b); endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 10 e-mail: hahanova@mail.ru
  • 11. 4 Лексические соглашения Идентификатор имен в Verilog:  Может состоять из букв, цифр, $, символа подчеркивания(_).  Должен начинаться с буквы или символа подчеркивания.  Не может содержать пробелы.  Чувствителен к регистру символов. Например, reg enable; wire _ready; integer group_a; reg and5; tri clk$1; 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 11 e-mail: hahanova@mail.ru
  • 12. Целочисленные значения Синтаксис : [sign] [size] 'base number  где sign – знак, size - число битов для представления значения number, base – система счисления: d или D десятичная, h или H шестнадцатеричная, o или O восьмеричная, b или B двоичная.  Примеры 15'h f 'o 17 'd 15 10'd 20 ‘b 1111 'b 1_1_1_1 -5'b1_1011 8'h z 8'b0 (8'b00000000) 8'b1 (8'b00000001) 4'b10?? (4'b10zz) 8'bz (8'bzzzzzzzz) 8'bx (8'bxxxxxxxx) 8'h4? (8'b0100zzzz) 12'h13x // значение последних 4 битов неизвестно 4'd-2 // неправильное описание -8'd3 // отрицательное число, // представлено дополнительным кодом 8-ю разрядами 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 12 e-mail: hahanova@mail.ru
  • 13. Вещественные значения Синтаксис: sign unsigned_number.unsigned_number sign unsigned_number.unsigned_number e sign unsigned_number sign unsigned_number.unsigned_number E sign unsigned_number  Пример 17.5 10e5 0.5 0.5694_e-5 1_000_000.0 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 13 e-mail: hahanova@mail.ru
  • 14. Строковые значения Строковые значения в Verilog записываются в двойных кавычках. var = “Hello world!”; В строках могут быть использованы специальные символы: • n – новая строка • t – табуляция • – символ • ” – символ “ . 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 14 e-mail: hahanova@mail.ru
  • 15. 5. Классы и типы данных Классы данных Логический Значение уровень 0 логический 0, условие false 1 логический 1, условие true x неизвестное значение z высокий импеданс 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 15 e-mail: hahanova@mail.ru
  • 16. Типы данных класса цепи (net) net_type [range] [delay3] list_of_net_identifiers ; Типы данных  wire/tri – линия  wand/triand и wor/trior – линии с И и ИЛИ элементом  supply0, supply1, tri0, tri1, trireg – описание элементов низкого уровня wire/tri wand/triand wor/trior Примеры 0 1 x z 0 1 x z 0 1 x z wire a; wire b, c; 0 0 x x 0 0 0 0 0 0 0 0 1 x 0 wire d = 1'b0; 1 x 1 x 1 1 0 1 x 1 1 1 1 1 1 tri tristate_buffer; x x x x x x 0 x x x x x 1 x x wand #5 sig_1; z 0 1 x z z 0 1 x z z 0 1 x z trireg (small) t; 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 16 e-mail: hahanova@mail.ru
  • 17. Регистровый класс данных  reg [range] list_of_identifiers; integer list_of_identifiers; // 32 разряда, знак. real list_of_identifiers; time list_of_identifiers; // 64 разряда, беззнак realtime list_of_identifiers;  Примеры: reg reset; integer i; time t; real r; realtime rt1, rt2; 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 17 e-mail: hahanova@mail.ru
  • 18. Векторы Синтаксис net_type [msb : lsb] list_of_net_identifiers; reg [msb : lsb] list_of_register_identifiers;  Примеры: reg [3:0] addr; // 4-разрядный регистр addr wire [-3:4] d; // переменная d размером 8 битов состоит // из элементов: d[-3] (msb), d[-2], d[-1], d[0], // d[1], d[2], d[3], d[4] (lsb). tri [5:0] x, y, z; busA[7] // элемент шины busA с индексом 7 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 18 e-mail: hahanova@mail.ru
  • 19. Знаковые векторы Синтаксис net_type signed [msb : lsb] list_of_net_identifiers; reg signed [msb : lsb] list_of_register_identifiers;  Пример reg signed [3:0] signed_reg; // старший бит рассматривается как знак // задает 4-битовый вектор, который может // принимать значения в диапазоне от -8 до 7 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 19 e-mail: hahanova@mail.ru
  • 20. Массивы  reg width identifier depth; integer | time identifier length;  Примеры деклараций массивов: integer count[0:7] // массив из 8 слов целого типа reg [4:0] port_id [0:7]; //массив из 8 пятиразрядных слов count[5]; // 5-й элемент массива port_id[3]; // 3-й элемент массива port_id reg [7:0] mem [3:0], r; mem[0] = 7; r = mem[3]; reg arrayb[7:0][0:255]; // декларация двумерного // масссива однобитовых регистровf wire w_array[7:0][5:0]; // декларация массива линий 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 20 e-mail: hahanova@mail.ru
  • 21. Описание портов модуля (старый стиль)  Синтаксис модуля для декларации портов и переменных: module name_of_module ( port, port, … ) ; [input_declaration] Пример декларации портов [output_declaration] module module_1(a, b, c) ; [inout_declaration] input [3: 0] a, b ; [net_declaration] output [3: 0] c; [reg_declaration] ... [time_declaration] endmodule [integer_declaration] [real_declaration] module module_1(a, b, c) ; input [3: 0] a, b ; other module_body ; output [3: 0] c; endmodule wire [3: 0] a, b ; reg [3: 0] c; ... endmodule д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 2/9/2011 21 e-mail: hahanova@mail.ru
  • 22. Описание портов модуля (новый стиль)  Синтаксис модуля для декларации портов и переменных: module name_of_module ([input_declaration], Пример декларации портов [output_declaration], module module_1 [inout_declaration]); (input [3: 0] a, b, [net_declaration] output [3: 0] c); [reg_declaration] ... [time_declaration] endmodule [integer_declaration] [real_declaration] module module_1 (input [3: 0] a, b, other module_body ; output reg [3: 0] c); endmodule ... endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 22 e-mail: hahanova@mail.ru
  • 23. Правило соединения портов input output net reg/net reg/net net inout net net 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 23 e-mail: hahanova@mail.ru
  • 24. Структурные модели Синтаксис: module_name [parameter_assignment] instance_name (list_of_connections); Соединение по порядку Пропущенный порт module dff (clk, d, q); dff inst_1 (clock, , net_1); input clk, d; output q; reg q; Соединение по имени ... module top; endmodule reg data, clock; wire q_out, net_1; module top; reg data, clock; dff inst_1 (.d(data), .q(net_1), .clk(clock)); wire q_out, net_1; dff inst_2 (.clk(clock), .d(net_1), .q(q_out)); dff inst_1 (clock, data, net_1); endmodule dff inst_2 (clock, net_1, q_out); endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 24 e-mail: hahanova@mail.ru
  • 25. Массив копий модулей module my_module (input a, b, output c); assign c = a & b; endmodule module top (input [3:0] a, b, output [3:0] c); // создает 4 копии модуля my_module my_module inst [3:0] (a,b,c); endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 25 e-mail: hahanova@mail.ru
  • 26. Иерархические имена  Объекты модуля top будут иметь следующие иерархические имена: top.a, top.b, top.c, top.inst,  Объекты модуля my_module представляются списком: top.inst.a, top.inst.b, top.inst.c. 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 26 e-mail: hahanova@mail.ru
  • 27. Параметры.1 Синтаксис: parameter [ signed ] [ range ] identifier = const_expr {, identifier = const_expr}; parameter integer identifier = const_expr{, identifier = const_expr}; parameter real identifier = const_expr{, identifier = const_expr}; parameter realtime identifier = const_expr{, identifier = const_expr}; parameter time identifier = const_expr{, identifier = const_expr};  Примеры определения параметров: parameter lsb = 7; parameter size = 8 , word = 32 ; parameter number = 3.92, frequency = 100; parameter clk_cycle = frequency / 2; parameter byte_size = 8, byte_mask = byte_size - 1; parameter signed [3:0] mux_selector = 0; parameter real r1 = 3.5e17; 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 27 e-mail: hahanova@mail.ru
  • 28. Параметры.2  Пример использования параметров  // Старый стиль module my_module (Clk, D, Q) ; parameter width = 2, delay = 10; input [width - 1:0] D; input Clk; output [width:0] Q; assign #delay Q = D; endmodule  // Новый стиль module my_module (Clk, D, Q) #(parameter width = 2, delay = 10) (input [width - 1:0] D, input Clk, output [width:0] Q); assign #delay Q = D; endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 28 e-mail: hahanova@mail.ru
  • 29. Переопределение параметров  в операторе реализации  с помощью оператора копии модуля defparam module top; module top; reg Clk; reg Clk ; reg [7:0] D; reg [7:0] D ; wire [7:0] Q; wire [7:0] Q ; my_module inst_1(Clk, D, Q) endmodule my_module #(7, 25) module override; inst_1(Clk, D, Q) ; defparam top.inst_1.width = 7; endmodule endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 29 e-mail: hahanova@mail.ru
  • 30. Директивы компилятора.1 Для определения текстовых макросов. `define <text_macro_name> <MACRO_TEXT> Например: `define TESTEQ1 4’b1101 // определен текстовый макрос 1101 `define myzero 0 //использование текстового макроса myzero //в любом месте Verilog-кода вместо нуля assign mysig = `myzero; `define WORDSIZE 64 reg [`WORDSIZE-1 : 0] data_bus; 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 30 e-mail: hahanova@mail.ru
  • 31. Директивы компилятора.2  Макросы могут содержать параметры и могут быть использованы для реализации функций `define max(a,b) ((a) > (b) ? (a): (b)) n = `max(p+q, r+s); 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 31 e-mail: hahanova@mail.ru
  • 32. Директивы компилятора.3  Для проведения условной компиляции: `ifdef и `endif `ifdef MYVAR module if_MYVAR_is_declared; ... endmodule `else module if_MYVAR_is_not_declared; ... endmodule `endif 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 32 e-mail: hahanova@mail.ru
  • 33. Директивы компилятора.4  Для использования информации, содержащейся в другом файле: `include “path/file-name-to-be-included”  Для описания единиц измерения и точности вычисления параметров времени  `timescale time_unit / time_precision Допустимые численные значения: 1, 10 и 100; Единицы измерения s, ms, us, ns, ps и fs.  Например, `timescale 10 ns / 100 ps assign #5 Q = D; // Q получит значение D через 50 ns 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 33 e-mail: hahanova@mail.ru
  • 34. Вентильные модели a #5 b e #4 out c a #5 b e #4 out c a #5 b e #4 out c 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 34 e-mail: hahanova@mail.ru
  • 35. Стандартные логические элементы buf and or xor bufif1 notif1 not nand nor xnor bufif0 notif0 B C A wire A, B, C, D, E; D and (A, B, C, D, E); E and 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 35 e-mail: hahanova@mail.ru
  • 36. Таблицы истинности тристабильных вентилей Control Control bufif0 bufif1 0 1 x z 0 1 x z Символ L означает, D 0 0 z L L D 0 z 0 L L что выход может a 1 1 z H H a 1 z 1 H H принимать одно из двух значений 0 и Z, t x x z x x t x z x x x символ H – 1 и Z. a z x z x x a z z x x x Задержки символов H и L подобны Control Control задержкам при notif0 notif1 0 1 x z 0 1 x z переходе в X. D 0 1 z H H D 0 z 1 H H a 1 0 z L L a 1 z 0 L L t x x z x x t x z x x x a z x z x x a z z x x x 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 36 e-mail: hahanova@mail.ru
  • 37. Пример модели вентильного уровня (Вариант 1) Модель мультиплексора 4-в-1 вентильного уровня module mux_4_to_1 (Out, In0, In1, In2, In3, Sel1, Sel0); output Out; input In0, In1, In2, In3, Sel1, Sel0; wire NotSel0, NotSel1; In0 Y0 wire Y0, Y1, Y2, Y3; Sel1 NotSel1 and (Y1, In1, NotSel1, NotSel0); In1 not (NotSel0, Sel0); Y1 and (Y3, In3, Sel1, Sel0); NotSel0 Sel0 Out or (Out, Y0, Y1, Y2, Y3); In2 and (Y0, In0, NotSel1, NotSel0); Y2 not (NotSel1, Sel1); and (Y2, In2, Sel1, NotSel0); In3 endmodule Y3 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 37 e-mail: hahanova@mail.ru
  • 38. Пример модели вентильного уровня (Вариант 2) Модель мультиплексора 4-в-1 вентильного уровня module mux_4_to_1 ( output Out, input In0, In1, In2, In3, Sel1, Sel0) ; In0 wire NotSel0, NotSel1; Sel1 Y0 wire Y0, Y1, Y2, Y3; NotSel1 In1 and (Y0, In0, NotSel1, NotSel0), Y1 (Y1, In1, NotSel1, NotSel0), NotSel0 (Y2, In2, Sel1, NotSel0), Sel0 Out In2 (Y3, In3, Sel1, Sel0); Y2 not (NotSel0, Sel0), (NotSel1, Sel1); In3 or (Out, Y0, Y1, Y2, Y3); Y3 endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 38 e-mail: hahanova@mail.ru
  • 39. Определенные пользователем примитивы(UDP) Синтаксис primitive udp_name ( port_list ) ; output output_port; input list_of_imputs; initial output_port = value; table combinational_input_list : output_value; sequential_input_list: current_state: next_state; endtable endprimitive 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 39 e-mail: hahanova@mail.ru
  • 40. Примеры описания UDP Примитив мультиплексора 2-в 1 Примитив D-триггера primitive Mux2to1 (Out, Sel, In0, In1) ; primitive d_ff (q, d, clk, clr) ; output Out; output q; reg q; input d, clk, clr; input Sel, In0, In1; initial q=0; // нет инициализации table table // d clk clr : q : q+ // Sel In0 In1 : Out // -------------------------------- 0 0 ? : 0; ? ? 0 : ? : 0; 0 r 1 : ? : 0; 0 1 ? : 1; 1 r 1 : ? : 1; 1 ? 0 : 0; ? n 1 : ? : - ; 1 ? 1 : 1; * ? 1 : ? : -; x ? ? : x; ? ? * : ? : -; endtable endtable endprimitive endprimitive 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 40 e-mail: hahanova@mail.ru
  • 41. Символы таблиц состояний в UDP Символ Интерпретация Комментарий 0 Логический 0 1 Логическая 1 x Неизвестное значение b Заменяет 0 и 1 Не разрешается для выходов ? Заменяет 0, 1 и x - Отсутствие изменений Разрешается использование только с выходами последовательностных UDP Следующие символы используются только для входов последовательностных UDP (v w) Переключение из значения v в w Значения v и w могут быть равны 0, 1, b и ? * Эквивалентно (??) Любое изменение значения r Эквивалентно (01) Передний фронт f Эквивалентно (10) Задний фронт p Эквивалентно (01), ( 0x), ( x1) Положительный фронт n Эквивалентно (1 0 ), (1 x), (x0) Отрицательный фронт 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 41 e-mail: hahanova@mail.ru
  • 42. Пример использования UDP Q0 Q1 Q2 Q3 CLR CLR CLR CLR J Clk K J Clk K J Clk K J Clk K Clr Clk JK3 JK2 JK1 En module Count4En (Q, Clr, Clk, En); output [3:0] Q; wire [3:0] Q; input Clr, Clk, En; wire JK1, JK2, JK3; JKMS Bit0 (Q[0], Clr, Clk, En, En); JKMS Bit1 (Q[1], Clr, Clk, JK1, JK1); JKMS Bit2 (Q[2], Clr, Clk, JK2, JK2); JKMS Bit3 (Q[3], Clr, Clk, JK3, JK3); and (JK1, Q[0], En); and (JK2, Q[1], JK1); and (JK3, Q[2], JK2); endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 42 e-mail: hahanova@mail.ru
  • 43. Задержки элементов 1  Задержка переднего 0, х или z фронта (rise delay) t_rise  Задержка заднего 1, х или z фронта (fall delay) 0 t_fall  Задержка отключения (turn-off) 1, 0, х z 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 43 e-mail: hahanova@mail.ru
  • 44. Описание задержек элементов  При описании логических элементов задержка указывается после его имени в формате: #(delay) | #(rise_delay, fall_delay) | #(rise_delay, fall_delay, turn-off_delay)  Каждое значение задержки может быть задано: # (number)| # (identifier)| # ( mintypmax: mintypmax: mintypmax)  Примеры описания задержек: and #(5) a1(out, i1, i2); and #(4, 6) a2(out, i1, i2); // rise_delay=4, fall_delay=6, // turn-off_delay=4 `timescale 1 ns / 1 ps . . . and #(3, 4, 5) a3(out, i1, i2); // rise_delay=3 ns, fall_delay=4 ns, // turn-off_delay=5 ns and #(4:5:6) a1(out, i1, i2); and #(3:4:5, 5:6:7) a2(out, i1, i2); and #(2:3:4, 3:4:5, 4:5:6) a3(out, i1, i2); 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 44 e-mail: hahanova@mail.ru
  • 45. Пример использования задержек `timescale 1 ns / 1 ps module D a module D(out, a, b, c); #5 b e // декларация входных портов #4 out output out; c input a, b, c; wire e; // внутренняя линия // реализация копии примитивов вентилей and #(5) a1(e, a, b); // задержка вентиля 5 ед. времени or #(4) o1(out, e, c); // задержка вентиля 4 ед. времени endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 45 e-mail: hahanova@mail.ru
  • 46. Тестирование модели `timescale 1ns/1ps module stimulus_simple; reg A, B, C; // Декларация внутренних переменных wire OUT; D d1(OUT, A, B, C); // Реализация копии модуля initial // Формирование тестовых последовательностей begin A = 1'b0; B = 1'b0; C = 1'b0; #10 A = 1'b1; // А=1 в 10 ns #5 B = 1'b1; // B=1 в 15 ns #5 A = 1'b0; // А=0 в 20 ns #10 $finish; // Моделирование // закончится в 30 ns end endmodule 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 46 e-mail: hahanova@mail.ru
  • 47. Контрольные вопросы и задания (1) 1. Какой из языков лучше подходит для создания сложных иерархичных проектов цифровых устройств? 2. Какой организацией был разработан стандарт языка Verilog? 3. Что описывают модели поведенческого уровня описывают? 4. Что описывают модели dataflow-уровня описывают? 5. Что описывают модели поведенческого уровня описывают? 6. Что описывают модели вентильного уровня описывают? 7. Какие классы переменных существуют в Verilog ? 8. Какой из идентификаторов не является правильным Verilog– идентификатором? 9. Какое описание соответствует 8-битовому вектору типа линия? 10. Какая из деклараций описывает память из 20 элементов целого типа? 11. Какое описание соответствует памяти из 20 слов целого типа? 12. Записан следующий оператор присваивания: A=23456; Какой формат имеет данное число в Verilog HDL? 13. Какое выражение описывает 16-битовое двоичное число? 14. Какой элемент вектора (reg [7:0] bus) содержит самый старший бит значения? 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 47 e-mail: hahanova@mail.ru
  • 48. Контрольные вопросы и задания 1. Указать название стандартного примитива. 2. Сколько выходов может иметь определенный пользователем примитив? 3. Как описывается поведение определенного пользователем примитива? 4. Чему будут равны задержки следующим образом описанного элемента? and #(5) a1(out, i1, i2); 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 48 e-mail: hahanova@mail.ru
  • 49. Контрольные вопросы и задания (2) 1. К переменной какого типа может быть подключен выход модуля при построении структурных моделей устройств? 2. Указать название стандартного примитива. 3. Сколько выходов может иметь определенный пользователем примитив? 4. Как описывается поведение определенного пользователем примитива? 5. Как можно переопределить значение параметра? 6. Каким образом может быть переопределено значение параметра? 7. Чему будет равно значение параметров для копии inst модуля my_module? module my_module (Clk, D, Q) ; parameter width = 16, delay = 7; ... my_module #(32, 7) inst (Clk, D, Q) ; 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 49 e-mail: hahanova@mail.ru
  • 50. Контрольные вопросы и задания (3)  1. Написать декларацию модуля для следующего 4-разрядного регистра с именем shift_reg. Описать входные порты без внутренней реализации устройства.  2. Создать модуль верхнего уровня reg_in [3:0] stimulus со следующими переменными: shift_reg REG_IN(4 бита) и CLK(1-бит) типа reg и (4 разряда) reg_out [3:0] REG_OUT(4 бита) типа wire. Создать в clock нем копию модуля shift_reg с именем sr1. Использовать способ соединения портов по порядку.  3. Выполнить предыдущее задание, используя для соединения портов – соединение по имени.  4. Записать иерархическое имя переменных REG_IN и REG_OUT.  5. Написать иерархическое имя для копии компонента sr1. Написать иерархическое имя для копии его портов. 2/9/2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 50 e-mail: hahanova@mail.ru