SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

основы програмирования Pascal
основы програмирования Pascalосновы програмирования Pascal
основы програмирования Pascalliza2209
 
Основы программирования на ruby
Основы программирования на rubyОсновы программирования на ruby
Основы программирования на rubyEvgeny Smirnov
 
Управляющие структуры в Ruby: условия
Управляющие структуры в Ruby: условияУправляющие структуры в Ruby: условия
Управляющие структуры в Ruby: условияEvgeny Smirnov
 
Динамическое программирование на ruby
Динамическое программирование на rubyДинамическое программирование на ruby
Динамическое программирование на rubyEvgeny Smirnov
 
апкс 2011 05_verilog
апкс 2011 05_verilogапкс 2011 05_verilog
апкс 2011 05_verilogIrina Hahanova
 
Scala Magic, Alexander Podhaliusin
Scala Magic, Alexander PodhaliusinScala Magic, Alexander Podhaliusin
Scala Magic, Alexander PodhaliusinVasil Remeniuk
 
C language lect_05_introduction
C language lect_05_introductionC language lect_05_introduction
C language lect_05_introductionRoman Brovko
 
Инкапсуляция и полиморфизм в ruby
Инкапсуляция и полиморфизм в rubyИнкапсуляция и полиморфизм в ruby
Инкапсуляция и полиморфизм в rubyEvgeny Smirnov
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.Igor Shkulipa
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis Tsvettsih
 
практика 4
практика 4практика 4
практика 4student_kai
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.Igor Shkulipa
 
Probabilistic Verification in Computational Systems Design
Probabilistic Verification in Computational Systems DesignProbabilistic Verification in Computational Systems Design
Probabilistic Verification in Computational Systems DesignIosif Itkin
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2Technopark
 

Was ist angesagt? (18)

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

Andere mochten auch

La relacio nord sud
La relacio nord sudLa relacio nord sud
La relacio nord sudiesMola
 
Norsk pp
Norsk ppNorsk pp
Norsk pprikeng
 
հաշվետվություն
հաշվետվությունհաշվետվություն
հաշվետվությունtatevtatev
 
Cloud computing bpos & windows azure oss
Cloud computing   bpos & windows azure ossCloud computing   bpos & windows azure oss
Cloud computing bpos & windows azure ossAvni Gupta
 
апкс 2011 04_verilog_продолж
апкс 2011 04_verilog_продолжапкс 2011 04_verilog_продолж
апкс 2011 04_verilog_продолжIrina Hahanova
 
At Your Service: A Path to Brand Leadership and Good Business in Your Community
At Your Service: A Path to Brand Leadership and Good Business in Your CommunityAt Your Service: A Path to Brand Leadership and Good Business in Your Community
At Your Service: A Path to Brand Leadership and Good Business in Your CommunitytheGrapevine411
 
Obstetrics запорожан
Obstetrics   запорожанObstetrics   запорожан
Obstetrics запорожанIgor Nitsovych
 
Comm 439 TIME FINAL PRESENTATION
Comm 439 TIME FINAL PRESENTATIONComm 439 TIME FINAL PRESENTATION
Comm 439 TIME FINAL PRESENTATIONskoltun
 
UPDATED K making connections
UPDATED K making connectionsUPDATED K making connections
UPDATED K making connectionsAmanda Iler
 
Media alta
Media altaMedia alta
Media altavedmoga
 
апкс 2011 08_verilog_макросы
апкс 2011 08_verilog_макросыапкс 2011 08_verilog_макросы
апкс 2011 08_verilog_макросыIrina Hahanova
 

Andere mochten auch (20)

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

Ähnlich wie апкс 2011 02_verilog

цсноп 2 11_1_vital
цсноп 2 11_1_vitalцсноп 2 11_1_vital
цсноп 2 11_1_vitalIrina Hahanova
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
моап 2011 01_введение
моап 2011 01_введениемоап 2011 01_введение
моап 2011 01_введениеIrina Hahanova
 
цсноп 2 11_3_проект памяти
цсноп 2 11_3_проект памятицсноп 2 11_3_проект памяти
цсноп 2 11_3_проект памятиIrina Hahanova
 
Введение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в реверс-инжиниринг вредоносного ПО - Сергей ХарюкВведение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в реверс-инжиниринг вредоносного ПО - Сергей ХарюкHackIT Ukraine
 
Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Alex Ott
 
апкс 2011 04_verilog
апкс 2011 04_verilogапкс 2011 04_verilog
апкс 2011 04_verilogIrina Hahanova
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...Mail.ru Group
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 

Ähnlich wie апкс 2011 02_verilog (11)

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

Mehr von Irina Hahanova

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

Mehr von Irina Hahanova (7)

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

апкс 2011 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