SlideShare ist ein Scribd-Unternehmen logo
1 von 52
Downloaden Sie, um offline zu lesen
8. Синтезируемые Verilog-
    модели цифровых устройств

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

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




    13.03.2011   Хаханова И.В, каф.АПВТ, ХНУРЭ   2
                     e-mail: hahanova@mail.ru
Комбинационные элементы




  13.03.2011   Хаханова И.В, каф.АПВТ, ХНУРЭ   3
                   e-mail: hahanova@mail.ru
Мультиплексор 4 в 1 с использованием IF

module mux (input a,b,c,d, input [1:0] s, output reg o);
always @(a, b, c, d, s)                      [0]
   begin                                     [1]


     if (s == 2'b00) o = a;                      o6

     else if (s == 2'b01) oa= b;
     else if (s == 2'b10) o = c;                                      e
                                                                      d
     else o = d;                             [0]
                                             [1]                      e
   end                                           o7
                                                                      d
                                                                          o
                                                                      e
endmodule                   c
                                                                      d
                            b                                         e
                            d                                         d

                                                                      o
                                                      [1]
                                           [1]
                                   [1:0]   [0]
                        s[1:0]
                                                 o8         un1_s_1


        13.03.2011               Хаханова И.В, каф.АПВТ, ХНУРЭ                4
                                     e-mail: hahanova@mail.ru
Мультиплексор 4 в 1 с использованием
 CASE
module mux
  (input a,b,c,d, input [1:0] s,
   output reg o);                                            [0]
                                                             [1]
always @(a, b, c, d, s)                                             o6
  begin
                                     a
    case (s)
                                                                            e
    2'b00 : o      =   a;                                    [0]
                                                                            d
                                                             [1]            e
    2'b01 : o      =   b;                                                   d
                                                                                o
                                                                    o7      e
    2'b10 : o      =   c;                                                   d
                                     c
    default :      o   = d;          b                                      e
                                     d                                      d
  endcase                                         [1]                       o
                                          [1:0]   [0]
                                 s[1:0]                      [1]
end                                                     o8         un1_o8
endmodule

      13.03.2011              Хаханова И.В, каф.АПВТ, ХНУРЭ                     5
                                  e-mail: hahanova@mail.ru
Мультиплексор на тристабильных буферах
                                                   [3:0]   [3]
                                          s[3:0]
module mux                                    a                           o

  (input a,b,c,d,                                                un3_o

   input [3:0] s,                                          [2]


   output o);                                 b

                                                                 un8_o


  assign o = s[3] ? a :1'bz;                               [1]


  assign o = s[2] ? b :1'bz;                  c

                                                                 un13_o
  assign o = s[1] ? c :1'bz;
  assign o = s[0] ? d :1'bz;                               [0]

                                              d
endmodule
                                                                 un18_o

       13.03.2011       Хаханова И.В, каф.АПВТ, ХНУРЭ                         6
                            e-mail: hahanova@mail.ru
Дешифратор (One-Hot)
                                                                                                              res[7:0]
module mux
   (input [2:0] sel, output reg [7:0] res);                          [1]
                                                                     [2]
                                                             [2:0]   [0]
                                                  sel[2:0]
always @(sel, res)                                                         res40


   case (sel)                                                        [0]
                                                                     [2]
                                                                     [1]

       3'b000 : res = 8'b00000001;                                         res39
                                                                                   [2]

                                                                                    un1_res40
                                                                                                un1_res40_1


       3'b001 : res = 8'b00000010;
                                                                     [2]                        [0]

       3'b010 : res = 8'b00000100;                                   [0]
                                                                     [1]
                                                                                                [1]
                                                                                                [2]

                                                                           res38                      res37
       3'b011 : res = 8'b00001000;
       3'b100 : res = 8'b00010000;
                                                                                                [1]
                                                                                                [0]
                                                                                                [2]

                                                                                                      res36
       3'b101 : res = 8'b00100000;
       3'b110 : res = 8'b01000000;                                                              [0]
                                                                                                [1]
                                                                                                [2]



       default : res = 8'b10000000;                                                                   res35



   endcase                                                                                      [0]
                                                                                                [1]
                                                                                                [2]



endmodule                                                                                             res34


          13.03.2011             Хаханова И.В, каф.АПВТ, ХНУРЭ                                                7
                                     e-mail: hahanova@mail.ru
Дешифратор ONE-COLD
                                                                                                         res[7:0]




module dec (sel, res);                                                       [1]
                                                                             [2]
                                                                     [2:0]   [0]
                                                          sel[2:0]

input [2:0] sel; output [7:0] res;
                                                                                           [2]
                                                                                   res40
                                                                                           un1_res40_1



reg [7:0] res;                                                               [0]
                                                                             [2]
                                                                             [1]




always @(sel)
                                                                                   res39    un1_res40




   case (sel)
                                                                             [2]
                                                                             [0]
                                                                             [1]

                                                                                   res38    un1_res39
       3'b000 : res = 8'b11111110;
       3'b001 : res = 8'b11111101;
                                                                                            un1_res38

       3'b010 : res = 8'b11111011;
                                                                             [0]


       3'b011 : res = 8'b11110111;                                           [1]
                                                                             [2]

                                                                                            un1_res37
                                                                                   res37

       3'b100 : res = 8'b11101111;
                                                                             [1]


       3'b101 : res = 8'b11011111;                                           [0]
                                                                             [2]

                                                                                            un1_res36
                                                                                   res36
       3'b110 : res = 8'b10111111;
                                                                             [0]

       default : res = 8'b01111111;                                          [1]
                                                                             [2]

                                                                                   res35    un1_res35

   endcase
                                                                             [0]



endmodule
                                                                             [1]
                                                                             [2]

                                                                                   res34    un1_res34



      13.03.2011               Хаханова И.В, каф.АПВТ, ХНУРЭ                                               8
                                   e-mail: hahanova@mail.ru
Дешифратор на операторе case
                                                                                        00
                                                                                             res[7:0]


module mux (sel, res);
                                                                          [0]
   (input [2:0] sel,                                              [2:0]
                                                                          [2]
                                                                          [1]
                                                       sel[2:0]
    output reg [7:0] res);                                                      res35

always @(sel, res)                                                        [2]


   case (sel)
                                                                          [0]
                                                                          [1]

                                                                                res34
   3'b000 : res = 8'b00000001;
   3'b001 : res = 8'b00000010;                                            [0]
                                                                          [1]

   3'b010 : res = 8'b00000100;                                            [2]

                                                                                res33
   3'b011 : res = 8'b00001000;
   3'b100 : res = 8'b00010000;                                            [1]
                                                                          [0]
                                                                          [2]

   3'b101 : res = 8'b00100000;                                                  res32

   // 110 and 111 selector values are unused
                                                                          [0]
   default : res = 8'bxxxxxxxx;                                           [1]
                                                                          [2]


endcase                                                                         res31

endmodule                                                                 [0]
                                                                          [1]
                                                                          [2]

          13.03.2011             Хаханова И.В, каф.АПВТ, ХНУРЭ                  res30                   9
                                     e-mail: hahanova@mail.ru
Устройства сдвига
Xilinx проектирует логические схемы сдвига как комбинационную схему
    с двумя входами и 1 выходом
   Первый вход - сдвигаемые данные
   Второй вход - определяет число разрядов, на которые выполняется
    сдвиг
На выход поступает результат операции сдвига.
Следует использовать один тип операции сдвига.
Значение n для операции сдвига должно увеличиваться или
   уменьшаться только на 1 для каждого последующего двоичного
   значения селектора.
Значение n может быть только положительным
Все значения селектора должны присутствовать




      13.03.2011         Хаханова И.В, каф.АПВТ, ХНУРЭ                10
                             e-mail: hahanova@mail.ru
Комбинационное устройство сдвига 1
module lshift
   (input [7:0] DI, input [1:0] SEL,
    output reg [7:0] SO);
always @(DI, SEL)
   case (SEL)
         2'b00 : SO <= DI;
         2'b01 : SO <= DI << 1;
         2'b10 : SO <= DI << 2;
         default : SO <= DI << 3;
   endcase
endmodule



         13.03.2011            Хаханова И.В, каф.АПВТ, ХНУРЭ   11
                                   e-mail: hahanova@mail.ru
Комбинационное устройство сдвига 2
                                [0]
                                [1]

                                      SO21



                                                                        e
                                                              [7:0]
                                                                        d
                                [0]
                                [1]                                     e
                                                 [6:0]
                                                                        d       [7:0] [7:0]
                                                   =0                                         SO[7:0]
                                      SO22                              e
           [7:0]                                 [5:0]                  d
 DI[7:0]
                                                  =00
                                                                        e
                                                                        d
                                                 [4:0]
                                                =000
                   [1]                                                SO[7:0]
           [1:0]   [0]
SEL[1:0]                        [1]

                         SO23    un1_SO23


           13.03.2011             Хаханова И.В, каф.АПВТ, ХНУРЭ                                    12
                                      e-mail: hahanova@mail.ru
Арифметические устройства
 Сумматоры:
   С переносом из младшего разряда
   С переносом в старший разряд
   С переносом из младшего и в старший разряд
 Устройство вычитания
 Сумматор/вычитатель
 Компаратор (=, /=,<, <=, >, >=)
 Устройство умножения
 Устройство деления
Сложение, вычитание, сравнение и умножение разрешено для
  знаковых и беззнаковых чисел


       13.03.2011      Хаханова И.В, каф.АПВТ, ХНУРЭ       13
                           e-mail: hahanova@mail.ru
Сумматор (беззнаковый) 1
 Без переноса                                                     С переносом из мл. раз.
 module adder                                                     module adder
                                                                     (input [7:0] A, B, input CI,
    (input [7:0] A, B,
                                                                      output [7:0] SUM);
    output [7:0] SUM);
                                                                  assign SUM = A + B + CI;
 assign SUM = A + B;                                              endmodule
 endmodule
                                                                           [7:0]   [7:0]
         [7:0]   [7:0]
                                                                  A[7:0]
A[7:0]
         [7:0]   [7:0]
                             +        [7:0] [7:0]
                                                    SUM[7:0]      B[7:0]
                                                                           [7:0]   [7:0]
                                                                                               +        [7:0] [7:0]
                                                                                                                      SUM[7:0]
B[7:0]
                         SUM_1[7:0]                                  CI
                                                                                           SUM_1[7:0]

                 13.03.2011                           Хаханова И.В, каф.АПВТ, ХНУРЭ                                        14
                                                          e-mail: hahanova@mail.ru
Сумматор (беззнаковый) 2
с переносом в ст. разр.
module adder
   (input [7:0] A, B, output [7:0] SUM, output CO);
   wire [8:0] tmp;
        assign tmp = A + B;
        assign SUM = tmp [7:0];
        assign CO = tmp [8];
endmodule
                              [7:0]   [7:0]
                     A[7:0]
                              [7:0]   [7:0]
                                                 +       [8:0] [7:0]      [7:0] [7:0]
                                                                                        SUM[7:0]
                     B[7:0]
                                              tmp[8:0]             SUM[7:0]
                                                                                  [8]
                                                                                        CO




        13.03.2011             Хаханова И.В, каф.АПВТ, ХНУРЭ                                       15
                                   e-mail: hahanova@mail.ru
Сумматор (беззнаковый) 3
module adder
   (input CI, input [7:0] A, B,
    output [7:0] SUM, output CO);
   wire [8:0] tmp;
       assign tmp = A + B + CI;
       assign SUM = tmp [7:0];
       assign CO = tmp [8];
endmodule
                              [7:0]   [7:0]
                     A[7:0]

                     B[7:0]
                              [7:0]   [7:0]
                                                 +       [8:0] [7:0]      [7:0] [7:0]
                                                                                        SUM[7:0]

                        CI                                         SUM[7:0]
                                              tmp[8:0]
                                                                                  [8]
                                                                                        CO

        13.03.2011                    Хаханова И.В, каф.АПВТ, ХНУРЭ                                16
                                          e-mail: hahanova@mail.ru
Сумматор (знаковый)(XST)
Для прог. синтеза XST
module adder
 (input signed [7:0] A, B, output signed [7:0]
 SUM);

  assign SUM = A + B;
endmodule



      13.03.2011    Хаханова И.В, каф.АПВТ, ХНУРЭ   17
                        e-mail: hahanova@mail.ru
Устройство вычитания
module subtr
  (input [7:0] A, B, output [7:0] RES);
     assign RES = A - B;
endmodule
                           [7:0]   [7:0]
                  A[7:0]

                  B[7:0]
                           [7:0]   [7:0]
                                               +        [7:0] [7:0]
                                                                      RES[7:0]
                                      1

                                           RES_1[7:0]



     13.03.2011             Хаханова И.В, каф.АПВТ, ХНУРЭ                        18
                                e-mail: hahanova@mail.ru
Компаратор
module compar
  (input [7:0] A, B, output CMP);
      assign CMP = A >= B ? 1'b1 : 1'b0;
endmodule

                   [7:0]   [7:0]
     A[7:0]
                   [7:0]   [7:0]
                                      <                            CMP
     B[7:0]
                                   un1_CMP                 CMP



      13.03.2011                   Хаханова И.В, каф.АПВТ, ХНУРЭ         19
                                       e-mail: hahanova@mail.ru
Беззнаковый умножитель
 module mult(A, B, RES);
   input [7:0] A; input [3:0] B; output [11:0] RES;
       assign RES = A * B;
 endmodule

              [7:0]    [7:0]
A[7:0]
              [3:0]    [3:0]
                                        *             [11:0][11:0]
                                                                     RES[11:0]
B[3:0]
                                RES[11:0]
                      Использует 32 блока LUT
     13.03.2011                Хаханова И.В, каф.АПВТ, ХНУРЭ                     20
                                   e-mail: hahanova@mail.ru
Устройство деления
 Поддерживается деление на константу
  степени 2
  module divider(DI, DO);
    input [7:0] DI; output [7:0] DO;
      assign DO = DI / 2;
  endmodule

                                  =0
                                              DO[7:0]
                        [7:0]   [7:1]
              DI[7:0]


     13.03.2011          Хаханова И.В, каф.АПВТ, ХНУРЭ   21
                             e-mail: hahanova@mail.ru
Совместное использование ресурсов
 (Resource Sharing)
 Цель уменьшить размер схемы основываясь
  на принципе, что два подобных
  арифметических ресурса могут быть
  реализованы на одной схеме, если она
  никогда не используется ими одновременно
 XST поддерживает совместное использование
  ресурсов для сумматоров, вычитателей,
  сумматоров/вычитателей и умножителей.


     13.03.2011   Хаханова И.В, каф.АПВТ, ХНУРЭ   22
                      e-mail: hahanova@mail.ru
Совместное использование ресурсов
module addsub
  (input OPER,
  input [7:0] A, B, C,
  output reg [7:0] RES);

always @(A, B, C, OPER)
   if (OPER==1'b0) RES = A + B;
   else RES = A - C;
endmodule




        13.03.2011         Хаханова И.В, каф.АПВТ, ХНУРЭ   23
                               e-mail: hahanova@mail.ru
Результат синтеза
                                           [7:0]
                               A[7:0]
Совместное
                               OPER                                                    [7:0]
использование                              [7:0]       [7:0]
                               B[7:0]                              0
ресурсов                                                                   [7:0]       [7:0]
                                                                                                   +       [7:0] [7:0]
                                                                                                                         RES[7:0]
                                           [7:0]       [7:0]
                               C[7:0]                              1
                                                           un1_B[7:0]                           RES[7:0]
           [7:0]
  A[7:0]           [7:0]

           [7:0]   [7:0]
                               +        [7:0]
                                                   [7:0]
  B[7:0]                                                       0
                                                                       [7:0] [7:0]
                           RES_1[7:0]                                                RES[7:0]
                                                   [7:0]
                                                               1
  OPER
                                                     RES[7:0]

                   [7:0]                                                                       Без совместного
                                                                                               использования
  C[7:0]
           [7:0]   [7:0]
                               +        [7:0]
                                                                                               ресурсов
                      1

                    un4_RES[7:0]
           13.03.2011                       Хаханова И.В, каф.АПВТ, ХНУРЭ                                                    24
                                                e-mail: hahanova@mail.ru
Последовательностная логика




  13.03.2011   Хаханова И.В, каф.АПВТ, ХНУРЭ   25
                   e-mail: hahanova@mail.ru
Триггеры 1
module flop                          Задний фронт синхронизации и
                                        асинхронный сброс
  (input C, D,                       module flop
                                        (input C, D, CLR,
   output reg Q);
                                          output reg Q);
always @(posedge C)                  always @(negedge C, posedge CLR)
  Q = D;                                if (CLR) Q = 1’b0;
                                        else Q = D;
endmodule                            endmodule

                                       C
C                                      D                 D Q       Q
D                  D Q     Q                              R
                   Q                 CLR
                                                         Q
      13.03.2011         Хаханова И.В, каф.АПВТ, ХНУРЭ            26
                             e-mail: hahanova@mail.ru
Триггеры 2
   Передний фронт                      Передний фронт
   синхронизации и синхронная          синхронизации и сигнал
   установка в 1                       разрешения синхронизации
module flop                            CE
   (input C, D, S,                  module flop
    output reg Q);                     (input C, D, CE,
always @(posedge C)
                                       output reg Q);
   if (S) Q = 1’b1;
                                    always @(posedge C)
   else Q = D;
                                       if (CE) Q = D;
endmodule
                                    endmodule
C
D               D Q      Q           C
S               S                    D                  D Q   Q
                                    CE                  E
                    Q
                                                        Q
       13.03.2011       Хаханова И.В, каф.АПВТ, ХНУРЭ         27
                            e-mail: hahanova@mail.ru
Триггеры-защелки
module latch                     module latch
  (input G, D,                      (input G, D, CLR, output reg
                                    Q);
  output reg Q);
                                 always @(G, D, CLR)
always @(G, D)                      if (CLR)
  if (G) Q = D;                          Q = 1'b0;
endmodule                           else if (G)
                                         Q = D;
               lat               endmodule         latr
D             D
                Q    Q               D               D
G             C
                                     G               C Q      Q
               Q                   CLR               R

                                                     Q
      13.03.2011     Хаханова И.В, каф.АПВТ, ХНУРЭ           28
                         e-mail: hahanova@mail.ru
Счетчики: 4-битовый беззнаковый с
 асинхронным сбросом
module counter
  (input C, CLR, output reg [3:0] Q);

  always @(posedge C, posedge CLR)
      if (CLR) Q = 4'b0000;
      else Q = Q + 1'b1;
endmodule      C

                          [3:0]

                             1
                                      +        [3:0]   [3:0]
                                                               D[3:0]       Q[3:0]
                                                                                     [3:0] [3:0]
                                                                                                   Q[3:0]
                                                                        R
                                  un3_Q[3:0]
                    CLR
                                                                  Q[3:0]


       13.03.2011            Хаханова И.В, каф.АПВТ, ХНУРЭ                                                  29
                                 e-mail: hahanova@mail.ru
Счетчики: 4-битовый беззнаковый
вычитающий с синхр. установкой
module counter
   (input C, S, output reg [3:0] Q);
always @(posedge C)
   if (S) Q = 4'b1111;
   else tmp = Q - 1'b1;

endmodule

 C

                   [3:0]
                               [3:0] [3:0]

                                    1111
                                                +       [3:0]   [3:0]
                                                                        D[3:0]   Q[3:0]
                                                                                          [3:0] [3:0]
                                                                                                        Q[3:0]
                      un1_Q[3:0]
 S
                                             Q_5[3:0]                      Q[3:0]


      13.03.2011                    Хаханова И.В, каф.АПВТ, ХНУРЭ                                                30
                                        e-mail: hahanova@mail.ru
Счетчики: 4-битовый беззнаковый с
 параллельной загрузкой
module counter
  (input C, ALOAD, input [3:0] D, output reg [3:0] Q);
always @(posedge C)
  if (ALOAD) Q = D;
  else Q = Q + 1'b1;
endmodule
    ALOAD
                     [3:0]

                        1
                                 +        [3:0]   [3:0]
                                                          0
                                                              [3:0]   [3:0]                     [3:0] [3:0]
                                                                              D[3:0]   Q[3:0]                 Q[3:0]
                                                  [3:0]
                             un1_Q[3:0]                   1
             [3:0]                                                               Q[3:0]
    D[3:0]                                           Q_5[3:0]
        C


        13.03.2011                         Хаханова И.В, каф.АПВТ, ХНУРЭ                                               31
                                               e-mail: hahanova@mail.ru
Аккумулятор с асинхронным сбросом
module accum
  (input C, CLR, input [3:0] D, output reg [3:0] Q);

always @(posedge C, posedge CLR)
   if (CLR) Q = 4'b0000;
   else Q = Q + D;
endmodule
              C

                     [3:0]   [3:0]
          D[3:0]
                             [3:0]
                                         +        [3:0]   [3:0]
                                                                  D[3:0]       Q[3:0]
                                                                                        [3:0] [3:0]
                                                                                                      Q[3:0]
                                                                           R
                                     un3_Q[3:0]
           CLR
                                                                     Q[3:0]



        13.03.2011                        Хаханова И.В, каф.АПВТ, ХНУРЭ                                        32
                                              e-mail: hahanova@mail.ru
8-битовый сдвиговый регистр с
последовательными входом и выходами
                                         module shift
                                            (input C,SI, output SO);
                                            reg [7:0] tmp;
                                         always @(posedge C) begin
                                                  tmp = tmp << 1;
                                                  tmp[0] = SI;
                                            end
                                         assign SO = tmp[7];
 C
                                         endmodule

              [6:0]                        [7:0]   [7]
                       D[7:0]   Q[7:0]                   SO
 SI
                         tmp[7:0]

      13.03.2011      Хаханова И.В, каф.АПВТ, ХНУРЭ                    33
                          e-mail: hahanova@mail.ru
8-битовый сдвиговый регистр с последовательными
входом и выходами, с входом разрешения


module shift
   (input C,SI, CE, output SO);
    reg [7:0] tmp;
always @(negedge C)
   if (CE) begin
         tmp = tmp << 1;
         tmp[0] = SI;  C
   end
assign SO = tmp[7];               [6:0]
                                                   D[7:0]   Q[7:0]
                                                                             [7]
                                                                                   SO
                                                                     [7:0]
endmodule              SI                          E
                      CE
                                                     tmp[7:0]


       13.03.2011          Хаханова И.В, каф.АПВТ, ХНУРЭ                                34
                               e-mail: hahanova@mail.ru
8-битовый сдвиговый регистр со сбросом

module shift
  (input C,SI,CLR, output SO);
  reg [7:0] tmp;
always @(posedge C, posedge CLR)
  if (CLR) tmp = 8'b00000000;
  elsetmp = {tmp[6:0], SI};
assign SO = tmp[7];        C


endmodule                        [6:0]                              [7:0]   [7]
                                              D[7:0]       Q[7:0]                 SO
                       SI                              R
                      CLR
                                                   tmp[7:0]


      13.03.2011   Хаханова И.В, каф.АПВТ, ХНУРЭ                                       35
                       e-mail: hahanova@mail.ru
Двунаправленный сдвиговый регистр

module shift
   (input C,SI,LEFT_RIGHT, output [7:0] PO);
     reg [7:0] tmp;
always @(posedge C)
   if (LEFT_RIGHT==1'b0) tmp = {tmp[6:0], SI};
         else          tmp = {SI, tmp[7:1]};
assign PO = tmp;
endmodule
                C
       LEFT_RIGHT
                      [6:0]
                                      0
                                           [7:0]   [7:0]                     [7:0] [7:0]
                                                           D[7:0]   Q[7:0]                 PO[7:0]
                                      1
               SI                                            PO[7:0]
                      [7:1]       tmp_5[7:0]


        13.03.2011            Хаханова И.В, каф.АПВТ, ХНУРЭ                                     36
                                  e-mail: hahanova@mail.ru
Автоматы




  13.03.2011   Хаханова И.В, каф.АПВТ, ХНУРЭ   37
                   e-mail: hahanova@mail.ru
Представление автомата Мили и Мура



                                 Reset

                  Функция                  Регистр                Функция
                                                                            Выходы
                 переходов               состояний                выходов
Входы                            Clock




                             Только для автомата Мили




        13.03.2011                Хаханова И.В, каф.АПВТ, ХНУРЭ              38
                                      e-mail: hahanova@mail.ru
Пример описания автомата.
 Граф-схема автомата.
data_in                data_out
   3      FSM          state0           enable=0
enable
                       state1
 clk                   state2

 rst
                                          idle             state0 = 1
                           enable=1               enable=1 data_out = data_in[0]
state2 = 1
data_out = data_in[2]
                                        enable=1
                                write                  read
                                                                   enable=0
           enable=0
                                        state1=1
                                        data_out = data_in[1]
          13.03.2011               Хаханова И.В, каф.АПВТ, ХНУРЭ              39
                                       e-mail: hahanova@mail.ru
Пример описания автомата
Двух-блоковая модель 1
module FSM1_synplify
    (input clk, rst, enable, input [2:0] data_in,
     output data_out, state0, state1, state2);
/* Определены метки состояний*/
    parameter deflt=3'bxxx;          parameter idle=3'b001;
    parameter read=3'b010;           parameter write=3'b100;
    reg data_out, state0, state1, state2;
    reg [2:0] state, next_state;
/* Блок Always для последовательностной логики*/
always @(posedge clk, negedge rst)
    if (!rst) state <= idle;
    else state <= next_state;
       13.03.2011           Хаханова И.В, каф.АПВТ, ХНУРЭ      40
                                e-mail: hahanova@mail.ru
Пример описания автомата
 Двух-блоковая модель 2
/* Блок Always для комбинационной логики*/
always @(state, enable, data_in) begin
/* Значения по умолчанию для выходов автомата FSM*/
    state0 <= 1'b0; state1 <= 1'b0; state2 <= 1'b0; data_out <= 1'b0;
    case (state)
         idle : if (enable) begin
                     state0 <= 1'b1; data_out <= data_in[0];
                     next_state <= read;       end
                     else next_state <= idle;
         read : if (enable) begin
                     state1 <= 1'b1; data_out <= data_in[1];
                     next_state <= write; end
                     else next_state <= read;
         13.03.2011          Хаханова И.В, каф.АПВТ, ХНУРЭ              41
                                 e-mail: hahanova@mail.ru
Пример описания автомата
Двух-блоковая модель 3
      write : if (enable) begin
                        state2 <= 1'b1;
                        data_out <= data_in[2];
                        next_state <= idle;
                        end
                        else next_state <= write;
      /* Default assignment for simulation*/
      default : next_state <= deflt;
  endcase
end
endmodule

       13.03.2011         Хаханова И.В, каф.АПВТ, ХНУРЭ   42
                              e-mail: hahanova@mail.ru
Двух-блоковая модель
    Результат синтеза
                                                               [0]
                                                                                           state0
                                statemachine
     enable                 I                                        state0
                                                       [2:0]
        clk                 C                 Q[2:0]
        rst                 R
                                                                                    e
                                                                              [0]
                                                                                    d
                                                                                    e
                                 state[2:0]                                    0
                                                                                    d
                                                               [1]                         data_out
                                                                                    e
                                                                              [1]
                                                                                    d
                                                                     state1         e
                                                                              [2]
               [2:0]                                                                d
data_in[2:0]
                                                                                data_out
                                                                                           state1
                                                               [2]
                                                                                           state2

                                                                     state2


               13.03.2011                Хаханова И.В, каф.АПВТ, ХНУРЭ                              43
                                             e-mail: hahanova@mail.ru
Окно FSM Viewer




  13.03.2011   Хаханова И.В, каф.АПВТ, ХНУРЭ   44
                   e-mail: hahanova@mail.ru
Пример модели автомата
с одним блоком 1
                         module fsm_1xst
                            (input clk, reset, x1,
                             output reg outp);
                            reg [1:0] state;
                            parameter s1 = 2'b00;
                            parameter s2 = 2'b01;
                            parameter s3 = 2'b10;
                            parameter s4 = 2'b11;
                         always @(posedge clk, posedge reset)
                         begin
                            if (reset) begin
                                   state = s1; outp = 1'b1;
                            end
   13.03.2011   Хаханова И.В, каф.АПВТ, ХНУРЭ           45
                    e-mail: hahanova@mail.ru
Пример модели автомата
 с одним блоком 2
else begin                              s3: begin state = s4;
   case (state)                                 outp = 1'b0;
   s1: begin                               end
        if (x1==1'b1) state = s2;       s4: begin state = s1;
                else state = s3;                outp = 1'b0;
        outp = 1'b1;                       end
        end                             endcase
   s2: begin state = s4;                   end
        outp = 1'b1;                    end
        end                             endmodule




        13.03.2011          Хаханова И.В, каф.АПВТ, ХНУРЭ       46
                                e-mail: hahanova@mail.ru
Пример модели автомата
   Результаты синтеза
Модель с одним блоком

                                                     [0]
                                                           e
                 statemachine                         0
                                                           d
   x1        I                                       [1]
                                             [3:0]         e              S
  clk        C                    Q[3:0]              0
                                                           d
reset        R                                                           D Q         outp
                                                     [2]
                                                           e
                                                      1
                                                           d             outp                      s4
                                                     [3]
                     state[3:0]                            e
                                                      1
                                                           d

                                                     un1_state[1]
Модель с двумя блоками                                                                        s2        s3


                                                               [0]
                                                                     e
                      statemachine                              0
                                                                     d                             s1
    x1           I                                             [1]
                                                       [3:0]         e
   clk           C                         Q[3:0]               0
                                                                     d
 reset           R                                                                          outp
                                                               [2]
                                                                     e
                                                                1
                                                                     d   un1_un1_state[1]
                         state[3:0]                            [3]
                                                                     e
                                                                1
                                                                     d

                                                        un1_state[1]
         13.03.2011                              Хаханова И.В, каф.АПВТ, ХНУРЭ                          47
                                                     e-mail: hahanova@mail.ru
Модель памяти с асинхронным чтением

module raminfr
  (input clk, we, input [4:0] a, input [3:0] di,
  output [3:0] do);                                ram1
                                               [4:0]
  reg [3:0] ram [31:0]; di[3:0]          RADDR[4:0]
                                       [3:0]   [3:0]
                                         DATA[3:0]
                                                                                 [3:0] [3:0]
                                       [4:0]   [4:0]                 DOUT[3:0]                 do[3:0]
                              a[4:0]                   WADDR[4:0]
                                 we                    WE
                                 clk                   CLK
always @(posedge clk)
                                                              ram[3:0]
             if (we) ram[a] <= di;
assign do = ram[a];
endmodule


       13.03.2011         Хаханова И.В, каф.АПВТ, ХНУРЭ                                  48
                              e-mail: hahanova@mail.ru
Модель памяти с синхронным чтением

module raminfr (input clk, we, input [4:0] a,
              input [3:0] di, output [3:0] do);
   reg [3:0] ram [31:0]; reg [4:0] read_a;
always @(posedge clk) begin
   if (we) ram[a] <= di;
   read_a <= a;
   end

assign do = ram[read_a];
endmodule
       13.03.2011        Хаханова И.В, каф.АПВТ, ХНУРЭ   49
                             e-mail: hahanova@mail.ru
Модель двухпортовой памяти с
  асинхронным чтением
module raminfr
   (input clk, we, input [4:0] a, dpra, input [3:0] di,
   output [3:0] spo, dpo);                                   ram1
   reg [3:0] ram [31:0];
                                                [4:0]   [4:0]
                                   dpra[4:0]        RADDR[4:0]
                                                [3:0]   [3:0]
                                      di[3:0]                   DATA[3:0]
                                                                                               [3:0] [3:0]
                                                [4:0]   [4:0]                      DOUT[3:0]                 dpo[3:0]
                                       a[4:0]                   WADDR[4:0]
always @(posedge clk) begin               we
                                          clk
                                                                WE
                                                                CLK

   if (we)                                                              ram[3:0]
        ram[a] <= di;
   end                                                                      ram1
                                                        [4:0]
                                                                RADDR[4:0]
                                                        [3:0]
                                                                DATA[3:0]
                                                                                               [3:0] [3:0]
assign spo = ram[a];                                    [4:0]
                                                                WADDR[4:0]
                                                                WE
                                                                                   DOUT[3:0]                 spo[3:0]


assign dpo = ram[dpra];                                         CLK


endmodule                                                             ram_1[3:0]


         13.03.2011            Хаханова И.В, каф.АПВТ, ХНУРЭ                                                   50
                                   e-mail: hahanova@mail.ru
Модель двухпортовой памяти с
синхронным чтением
module raminfr
   (input clk, we, input [4:0] a, dpra, input [3:0] di, output [3:0] spo, dpo);
   reg [3:0] ram [31:0];
   reg [4:0] read_a, read_dpra;
always @(posedge clk) begin                                         ram1
                                      clk
   if (we)                      dpra[4:0]
                                               [4:0]   [4:0]
                                            D[4:0] Q[4:0] RADDR[4:0]
                                                          DATA[3:0]
                                                                               [4:0]   [4:0]

                                                                                       [3:0]
                                          read_dpra[4:0]
         ram[a] <= di;            di[3:0]
                                               [3:0]      WADDR[4:0]
                                                          WE
                                                                         DOUT[3:0] dpo[3:0]
                                                                                       [4:0]
                                                                                                                              [3:0] [3:0]




         read_a <= a;                                     CLK


         read_dpra <= dpra;                                       ram[3:0]

end
                                                                                                           ram1
assign spo = ram [read_a];            a[4:0]
                                               [4:0]   [4:0]
                                                               D[4:0] Q[4:0]
                                                                               [4:0]   [4:0]

                                                                                       [3:0]
                                                                                               RADDR[4:0]
                                                                                               DATA[3:0]
assign dpo = ram [read_dpra];                                  read_a[4:0]
                                                                                       [4:0]
                                                                                               WADDR[4:0]
                                                                                                                  DOUT[3:0]
                                                                                                                              [3:0] [3:0]
                                                                                                                                            spo[3:0]
                                         we                                                    WE
endmodule                                                                                      CLK

                                                                                                     ram_1[3:0]



         13.03.2011              Хаханова И.В, каф.АПВТ, ХНУРЭ                                                                               51
                                     e-mail: hahanova@mail.ru
Контрольные вопросы




  13.03.2011   Хаханова И.В, каф.АПВТ, ХНУРЭ   52
                   e-mail: hahanova@mail.ru

Weitere ähnliche Inhalte

Was ist angesagt?

Решение краевых задач методом конечных элементов
Решение краевых задач методом конечных элементовРешение краевых задач методом конечных элементов
Решение краевых задач методом конечных элементовTheoretical mechanics department
 
теория вероятностей учебное пособие
теория вероятностей учебное пособие теория вероятностей учебное пособие
теория вероятностей учебное пособие Иван Иванов
 
Использование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовИспользование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовТранслируем.бел
 
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...CocoaHeads
 
основы Java для_any_logic
основы Java для_any_logicосновы Java для_any_logic
основы Java для_any_logicKVPw
 
Present
PresentPresent
PresentReved
 
Автоструктуризация непрерывного текстового потока
Автоструктуризация непрерывного текстового потокаАвтоструктуризация непрерывного текстового потока
Автоструктуризация непрерывного текстового потокаDanila Medvedev
 

Was ist angesagt? (8)

Soboland Sat
Soboland SatSoboland Sat
Soboland Sat
 
Решение краевых задач методом конечных элементов
Решение краевых задач методом конечных элементовРешение краевых задач методом конечных элементов
Решение краевых задач методом конечных элементов
 
теория вероятностей учебное пособие
теория вероятностей учебное пособие теория вероятностей учебное пособие
теория вероятностей учебное пособие
 
Использование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовИспользование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетов
 
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
 
основы Java для_any_logic
основы Java для_any_logicосновы Java для_any_logic
основы Java для_any_logic
 
Present
PresentPresent
Present
 
Автоструктуризация непрерывного текстового потока
Автоструктуризация непрерывного текстового потокаАвтоструктуризация непрерывного текстового потока
Автоструктуризация непрерывного текстового потока
 

Andere mochten auch

Semantic BDD with ShouldIT?
Semantic BDD with ShouldIT?Semantic BDD with ShouldIT?
Semantic BDD with ShouldIT?Richard McIntyre
 
апкс 2011 04_verilog_продолж
апкс 2011 04_verilog_продолжапкс 2011 04_verilog_продолж
апкс 2011 04_verilog_продолжIrina Hahanova
 
Media alta
Media altaMedia alta
Media altavedmoga
 
Mamíferos
MamíferosMamíferos
Mamíferosjuan1500
 
Instructions from God !!
Instructions from God !!Instructions from God !!
Instructions from God !!AAR VEE
 
2011.01.26講座を生かした地域活性化のお手伝い 三人寄れば文殊の知恵2
2011.01.26講座を生かした地域活性化のお手伝い 三人寄れば文殊の知恵22011.01.26講座を生かした地域活性化のお手伝い 三人寄れば文殊の知恵2
2011.01.26講座を生かした地域活性化のお手伝い 三人寄れば文殊の知恵2hanahotel
 
Welcome to respect campaign
Welcome to respect campaignWelcome to respect campaign
Welcome to respect campaignGreg Martinez
 
What cause hypothyroidism
What cause hypothyroidismWhat cause hypothyroidism
What cause hypothyroidismriquelmayer100
 
Los bosques
Los bosquesLos bosques
Los bosquesiesMola
 
Gcpug begginers #1LT startup scriptとshutdown script
Gcpug begginers #1LT startup scriptとshutdown scriptGcpug begginers #1LT startup scriptとshutdown script
Gcpug begginers #1LT startup scriptとshutdown scripttsukasa tamaru
 

Andere mochten auch (20)

Semantic BDD with ShouldIT?
Semantic BDD with ShouldIT?Semantic BDD with ShouldIT?
Semantic BDD with ShouldIT?
 
ClasePPT17
ClasePPT17ClasePPT17
ClasePPT17
 
CRB INFANTIS
CRB INFANTISCRB INFANTIS
CRB INFANTIS
 
апкс 2011 04_verilog_продолж
апкс 2011 04_verilog_продолжапкс 2011 04_verilog_продолж
апкс 2011 04_verilog_продолж
 
Media alta
Media altaMedia alta
Media alta
 
Bio magz
Bio magzBio magz
Bio magz
 
Mamíferos
MamíferosMamíferos
Mamíferos
 
Instructions from God !!
Instructions from God !!Instructions from God !!
Instructions from God !!
 
Gráficos de la encuesta
Gráficos de la encuestaGráficos de la encuesta
Gráficos de la encuesta
 
Practica de Clases
Practica de ClasesPractica de Clases
Practica de Clases
 
Gráficos de la encuesta
Gráficos de la encuestaGráficos de la encuesta
Gráficos de la encuesta
 
Eni gela
Eni   gelaEni   gela
Eni gela
 
2011.01.26講座を生かした地域活性化のお手伝い 三人寄れば文殊の知恵2
2011.01.26講座を生かした地域活性化のお手伝い 三人寄れば文殊の知恵22011.01.26講座を生かした地域活性化のお手伝い 三人寄れば文殊の知恵2
2011.01.26講座を生かした地域活性化のお手伝い 三人寄れば文殊の知恵2
 
Welcome to respect campaign
Welcome to respect campaignWelcome to respect campaign
Welcome to respect campaign
 
What cause hypothyroidism
What cause hypothyroidismWhat cause hypothyroidism
What cause hypothyroidism
 
Los bosques
Los bosquesLos bosques
Los bosques
 
Esercizio 4
Esercizio 4Esercizio 4
Esercizio 4
 
Gcpug begginers #1LT startup scriptとshutdown script
Gcpug begginers #1LT startup scriptとshutdown scriptGcpug begginers #1LT startup scriptとshutdown script
Gcpug begginers #1LT startup scriptとshutdown script
 
моап 2011 05
моап 2011 05моап 2011 05
моап 2011 05
 
The books of the bible1
The books of the bible1The books of the bible1
The books of the bible1
 

Mehr von Irina Hahanova

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

Mehr von Irina Hahanova (14)

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

апкс 2011 08_verilog_макросы

  • 1. 8. Синтезируемые Verilog- модели цифровых устройств Автоматизация проектирования компьютерных систем Хаханова И.В, каф.АПВТ, ХНУРЭ e- 13.03.2011 mail: hahanova@mail.ru 1
  • 2. Цель лекции и содержание  Цель – изучить принципы построения синтезируемых моделей цифровых устройств на Verilog  План  Модели комбинационных устройств  Арифметические устройства 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 2 e-mail: hahanova@mail.ru
  • 3. Комбинационные элементы 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 3 e-mail: hahanova@mail.ru
  • 4. Мультиплексор 4 в 1 с использованием IF module mux (input a,b,c,d, input [1:0] s, output reg o); always @(a, b, c, d, s) [0] begin [1] if (s == 2'b00) o = a; o6 else if (s == 2'b01) oa= b; else if (s == 2'b10) o = c; e d else o = d; [0] [1] e end o7 d o e endmodule c d b e d d o [1] [1] [1:0] [0] s[1:0] o8 un1_s_1 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 4 e-mail: hahanova@mail.ru
  • 5. Мультиплексор 4 в 1 с использованием CASE module mux (input a,b,c,d, input [1:0] s, output reg o); [0] [1] always @(a, b, c, d, s) o6 begin a case (s) e 2'b00 : o = a; [0] d [1] e 2'b01 : o = b; d o o7 e 2'b10 : o = c; d c default : o = d; b e d d endcase [1] o [1:0] [0] s[1:0] [1] end o8 un1_o8 endmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 5 e-mail: hahanova@mail.ru
  • 6. Мультиплексор на тристабильных буферах [3:0] [3] s[3:0] module mux a o (input a,b,c,d, un3_o input [3:0] s, [2] output o); b un8_o assign o = s[3] ? a :1'bz; [1] assign o = s[2] ? b :1'bz; c un13_o assign o = s[1] ? c :1'bz; assign o = s[0] ? d :1'bz; [0] d endmodule un18_o 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 6 e-mail: hahanova@mail.ru
  • 7. Дешифратор (One-Hot) res[7:0] module mux (input [2:0] sel, output reg [7:0] res); [1] [2] [2:0] [0] sel[2:0] always @(sel, res) res40 case (sel) [0] [2] [1] 3'b000 : res = 8'b00000001; res39 [2] un1_res40 un1_res40_1 3'b001 : res = 8'b00000010; [2] [0] 3'b010 : res = 8'b00000100; [0] [1] [1] [2] res38 res37 3'b011 : res = 8'b00001000; 3'b100 : res = 8'b00010000; [1] [0] [2] res36 3'b101 : res = 8'b00100000; 3'b110 : res = 8'b01000000; [0] [1] [2] default : res = 8'b10000000; res35 endcase [0] [1] [2] endmodule res34 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 7 e-mail: hahanova@mail.ru
  • 8. Дешифратор ONE-COLD res[7:0] module dec (sel, res); [1] [2] [2:0] [0] sel[2:0] input [2:0] sel; output [7:0] res; [2] res40 un1_res40_1 reg [7:0] res; [0] [2] [1] always @(sel) res39 un1_res40 case (sel) [2] [0] [1] res38 un1_res39 3'b000 : res = 8'b11111110; 3'b001 : res = 8'b11111101; un1_res38 3'b010 : res = 8'b11111011; [0] 3'b011 : res = 8'b11110111; [1] [2] un1_res37 res37 3'b100 : res = 8'b11101111; [1] 3'b101 : res = 8'b11011111; [0] [2] un1_res36 res36 3'b110 : res = 8'b10111111; [0] default : res = 8'b01111111; [1] [2] res35 un1_res35 endcase [0] endmodule [1] [2] res34 un1_res34 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 8 e-mail: hahanova@mail.ru
  • 9. Дешифратор на операторе case 00 res[7:0] module mux (sel, res); [0] (input [2:0] sel, [2:0] [2] [1] sel[2:0] output reg [7:0] res); res35 always @(sel, res) [2] case (sel) [0] [1] res34 3'b000 : res = 8'b00000001; 3'b001 : res = 8'b00000010; [0] [1] 3'b010 : res = 8'b00000100; [2] res33 3'b011 : res = 8'b00001000; 3'b100 : res = 8'b00010000; [1] [0] [2] 3'b101 : res = 8'b00100000; res32 // 110 and 111 selector values are unused [0] default : res = 8'bxxxxxxxx; [1] [2] endcase res31 endmodule [0] [1] [2] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ res30 9 e-mail: hahanova@mail.ru
  • 10. Устройства сдвига Xilinx проектирует логические схемы сдвига как комбинационную схему с двумя входами и 1 выходом  Первый вход - сдвигаемые данные  Второй вход - определяет число разрядов, на которые выполняется сдвиг На выход поступает результат операции сдвига. Следует использовать один тип операции сдвига. Значение n для операции сдвига должно увеличиваться или уменьшаться только на 1 для каждого последующего двоичного значения селектора. Значение n может быть только положительным Все значения селектора должны присутствовать 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 10 e-mail: hahanova@mail.ru
  • 11. Комбинационное устройство сдвига 1 module lshift (input [7:0] DI, input [1:0] SEL, output reg [7:0] SO); always @(DI, SEL) case (SEL) 2'b00 : SO <= DI; 2'b01 : SO <= DI << 1; 2'b10 : SO <= DI << 2; default : SO <= DI << 3; endcase endmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 11 e-mail: hahanova@mail.ru
  • 12. Комбинационное устройство сдвига 2 [0] [1] SO21 e [7:0] d [0] [1] e [6:0] d [7:0] [7:0] =0 SO[7:0] SO22 e [7:0] [5:0] d DI[7:0] =00 e d [4:0] =000 [1] SO[7:0] [1:0] [0] SEL[1:0] [1] SO23 un1_SO23 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 12 e-mail: hahanova@mail.ru
  • 13. Арифметические устройства  Сумматоры:  С переносом из младшего разряда  С переносом в старший разряд  С переносом из младшего и в старший разряд  Устройство вычитания  Сумматор/вычитатель  Компаратор (=, /=,<, <=, >, >=)  Устройство умножения  Устройство деления Сложение, вычитание, сравнение и умножение разрешено для знаковых и беззнаковых чисел 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 13 e-mail: hahanova@mail.ru
  • 14. Сумматор (беззнаковый) 1 Без переноса С переносом из мл. раз. module adder module adder (input [7:0] A, B, input CI, (input [7:0] A, B, output [7:0] SUM); output [7:0] SUM); assign SUM = A + B + CI; assign SUM = A + B; endmodule endmodule [7:0] [7:0] [7:0] [7:0] A[7:0] A[7:0] [7:0] [7:0] + [7:0] [7:0] SUM[7:0] B[7:0] [7:0] [7:0] + [7:0] [7:0] SUM[7:0] B[7:0] SUM_1[7:0] CI SUM_1[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 14 e-mail: hahanova@mail.ru
  • 15. Сумматор (беззнаковый) 2 с переносом в ст. разр. module adder (input [7:0] A, B, output [7:0] SUM, output CO); wire [8:0] tmp; assign tmp = A + B; assign SUM = tmp [7:0]; assign CO = tmp [8]; endmodule [7:0] [7:0] A[7:0] [7:0] [7:0] + [8:0] [7:0] [7:0] [7:0] SUM[7:0] B[7:0] tmp[8:0] SUM[7:0] [8] CO 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 15 e-mail: hahanova@mail.ru
  • 16. Сумматор (беззнаковый) 3 module adder (input CI, input [7:0] A, B, output [7:0] SUM, output CO); wire [8:0] tmp; assign tmp = A + B + CI; assign SUM = tmp [7:0]; assign CO = tmp [8]; endmodule [7:0] [7:0] A[7:0] B[7:0] [7:0] [7:0] + [8:0] [7:0] [7:0] [7:0] SUM[7:0] CI SUM[7:0] tmp[8:0] [8] CO 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 16 e-mail: hahanova@mail.ru
  • 17. Сумматор (знаковый)(XST) Для прог. синтеза XST module adder (input signed [7:0] A, B, output signed [7:0] SUM); assign SUM = A + B; endmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 17 e-mail: hahanova@mail.ru
  • 18. Устройство вычитания module subtr (input [7:0] A, B, output [7:0] RES); assign RES = A - B; endmodule [7:0] [7:0] A[7:0] B[7:0] [7:0] [7:0] + [7:0] [7:0] RES[7:0] 1 RES_1[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 18 e-mail: hahanova@mail.ru
  • 19. Компаратор module compar (input [7:0] A, B, output CMP); assign CMP = A >= B ? 1'b1 : 1'b0; endmodule [7:0] [7:0] A[7:0] [7:0] [7:0] < CMP B[7:0] un1_CMP CMP 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 19 e-mail: hahanova@mail.ru
  • 20. Беззнаковый умножитель module mult(A, B, RES); input [7:0] A; input [3:0] B; output [11:0] RES; assign RES = A * B; endmodule [7:0] [7:0] A[7:0] [3:0] [3:0] * [11:0][11:0] RES[11:0] B[3:0] RES[11:0] Использует 32 блока LUT 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 20 e-mail: hahanova@mail.ru
  • 21. Устройство деления  Поддерживается деление на константу степени 2 module divider(DI, DO); input [7:0] DI; output [7:0] DO; assign DO = DI / 2; endmodule =0 DO[7:0] [7:0] [7:1] DI[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 21 e-mail: hahanova@mail.ru
  • 22. Совместное использование ресурсов (Resource Sharing)  Цель уменьшить размер схемы основываясь на принципе, что два подобных арифметических ресурса могут быть реализованы на одной схеме, если она никогда не используется ими одновременно  XST поддерживает совместное использование ресурсов для сумматоров, вычитателей, сумматоров/вычитателей и умножителей. 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 22 e-mail: hahanova@mail.ru
  • 23. Совместное использование ресурсов module addsub (input OPER, input [7:0] A, B, C, output reg [7:0] RES); always @(A, B, C, OPER) if (OPER==1'b0) RES = A + B; else RES = A - C; endmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 23 e-mail: hahanova@mail.ru
  • 24. Результат синтеза [7:0] A[7:0] Совместное OPER [7:0] использование [7:0] [7:0] B[7:0] 0 ресурсов [7:0] [7:0] + [7:0] [7:0] RES[7:0] [7:0] [7:0] C[7:0] 1 un1_B[7:0] RES[7:0] [7:0] A[7:0] [7:0] [7:0] [7:0] + [7:0] [7:0] B[7:0] 0 [7:0] [7:0] RES_1[7:0] RES[7:0] [7:0] 1 OPER RES[7:0] [7:0] Без совместного использования C[7:0] [7:0] [7:0] + [7:0] ресурсов 1 un4_RES[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 24 e-mail: hahanova@mail.ru
  • 25. Последовательностная логика 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 25 e-mail: hahanova@mail.ru
  • 26. Триггеры 1 module flop Задний фронт синхронизации и асинхронный сброс (input C, D, module flop (input C, D, CLR, output reg Q); output reg Q); always @(posedge C) always @(negedge C, posedge CLR) Q = D; if (CLR) Q = 1’b0; else Q = D; endmodule endmodule C C D D Q Q D D Q Q R Q CLR Q 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 26 e-mail: hahanova@mail.ru
  • 27. Триггеры 2 Передний фронт Передний фронт синхронизации и синхронная синхронизации и сигнал установка в 1 разрешения синхронизации module flop CE (input C, D, S, module flop output reg Q); (input C, D, CE, always @(posedge C) output reg Q); if (S) Q = 1’b1; always @(posedge C) else Q = D; if (CE) Q = D; endmodule endmodule C D D Q Q C S S D D Q Q CE E Q Q 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 27 e-mail: hahanova@mail.ru
  • 28. Триггеры-защелки module latch module latch (input G, D, (input G, D, CLR, output reg Q); output reg Q); always @(G, D, CLR) always @(G, D) if (CLR) if (G) Q = D; Q = 1'b0; endmodule else if (G) Q = D; lat endmodule latr D D Q Q D D G C G C Q Q Q CLR R Q 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 28 e-mail: hahanova@mail.ru
  • 29. Счетчики: 4-битовый беззнаковый с асинхронным сбросом module counter (input C, CLR, output reg [3:0] Q); always @(posedge C, posedge CLR) if (CLR) Q = 4'b0000; else Q = Q + 1'b1; endmodule C [3:0] 1 + [3:0] [3:0] D[3:0] Q[3:0] [3:0] [3:0] Q[3:0] R un3_Q[3:0] CLR Q[3:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 29 e-mail: hahanova@mail.ru
  • 30. Счетчики: 4-битовый беззнаковый вычитающий с синхр. установкой module counter (input C, S, output reg [3:0] Q); always @(posedge C) if (S) Q = 4'b1111; else tmp = Q - 1'b1; endmodule C [3:0] [3:0] [3:0] 1111 + [3:0] [3:0] D[3:0] Q[3:0] [3:0] [3:0] Q[3:0] un1_Q[3:0] S Q_5[3:0] Q[3:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 30 e-mail: hahanova@mail.ru
  • 31. Счетчики: 4-битовый беззнаковый с параллельной загрузкой module counter (input C, ALOAD, input [3:0] D, output reg [3:0] Q); always @(posedge C) if (ALOAD) Q = D; else Q = Q + 1'b1; endmodule ALOAD [3:0] 1 + [3:0] [3:0] 0 [3:0] [3:0] [3:0] [3:0] D[3:0] Q[3:0] Q[3:0] [3:0] un1_Q[3:0] 1 [3:0] Q[3:0] D[3:0] Q_5[3:0] C 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 31 e-mail: hahanova@mail.ru
  • 32. Аккумулятор с асинхронным сбросом module accum (input C, CLR, input [3:0] D, output reg [3:0] Q); always @(posedge C, posedge CLR) if (CLR) Q = 4'b0000; else Q = Q + D; endmodule C [3:0] [3:0] D[3:0] [3:0] + [3:0] [3:0] D[3:0] Q[3:0] [3:0] [3:0] Q[3:0] R un3_Q[3:0] CLR Q[3:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 32 e-mail: hahanova@mail.ru
  • 33. 8-битовый сдвиговый регистр с последовательными входом и выходами module shift (input C,SI, output SO); reg [7:0] tmp; always @(posedge C) begin tmp = tmp << 1; tmp[0] = SI; end assign SO = tmp[7]; C endmodule [6:0] [7:0] [7] D[7:0] Q[7:0] SO SI tmp[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 33 e-mail: hahanova@mail.ru
  • 34. 8-битовый сдвиговый регистр с последовательными входом и выходами, с входом разрешения module shift (input C,SI, CE, output SO); reg [7:0] tmp; always @(negedge C) if (CE) begin tmp = tmp << 1; tmp[0] = SI; C end assign SO = tmp[7]; [6:0] D[7:0] Q[7:0] [7] SO [7:0] endmodule SI E CE tmp[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 34 e-mail: hahanova@mail.ru
  • 35. 8-битовый сдвиговый регистр со сбросом module shift (input C,SI,CLR, output SO); reg [7:0] tmp; always @(posedge C, posedge CLR) if (CLR) tmp = 8'b00000000; elsetmp = {tmp[6:0], SI}; assign SO = tmp[7]; C endmodule [6:0] [7:0] [7] D[7:0] Q[7:0] SO SI R CLR tmp[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 35 e-mail: hahanova@mail.ru
  • 36. Двунаправленный сдвиговый регистр module shift (input C,SI,LEFT_RIGHT, output [7:0] PO); reg [7:0] tmp; always @(posedge C) if (LEFT_RIGHT==1'b0) tmp = {tmp[6:0], SI}; else tmp = {SI, tmp[7:1]}; assign PO = tmp; endmodule C LEFT_RIGHT [6:0] 0 [7:0] [7:0] [7:0] [7:0] D[7:0] Q[7:0] PO[7:0] 1 SI PO[7:0] [7:1] tmp_5[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 36 e-mail: hahanova@mail.ru
  • 37. Автоматы 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 37 e-mail: hahanova@mail.ru
  • 38. Представление автомата Мили и Мура Reset Функция Регистр Функция Выходы переходов состояний выходов Входы Clock Только для автомата Мили 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 38 e-mail: hahanova@mail.ru
  • 39. Пример описания автомата. Граф-схема автомата. data_in data_out 3 FSM state0 enable=0 enable state1 clk state2 rst idle state0 = 1 enable=1 enable=1 data_out = data_in[0] state2 = 1 data_out = data_in[2] enable=1 write read enable=0 enable=0 state1=1 data_out = data_in[1] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 39 e-mail: hahanova@mail.ru
  • 40. Пример описания автомата Двух-блоковая модель 1 module FSM1_synplify (input clk, rst, enable, input [2:0] data_in, output data_out, state0, state1, state2); /* Определены метки состояний*/ parameter deflt=3'bxxx; parameter idle=3'b001; parameter read=3'b010; parameter write=3'b100; reg data_out, state0, state1, state2; reg [2:0] state, next_state; /* Блок Always для последовательностной логики*/ always @(posedge clk, negedge rst) if (!rst) state <= idle; else state <= next_state; 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 40 e-mail: hahanova@mail.ru
  • 41. Пример описания автомата Двух-блоковая модель 2 /* Блок Always для комбинационной логики*/ always @(state, enable, data_in) begin /* Значения по умолчанию для выходов автомата FSM*/ state0 <= 1'b0; state1 <= 1'b0; state2 <= 1'b0; data_out <= 1'b0; case (state) idle : if (enable) begin state0 <= 1'b1; data_out <= data_in[0]; next_state <= read; end else next_state <= idle; read : if (enable) begin state1 <= 1'b1; data_out <= data_in[1]; next_state <= write; end else next_state <= read; 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 41 e-mail: hahanova@mail.ru
  • 42. Пример описания автомата Двух-блоковая модель 3 write : if (enable) begin state2 <= 1'b1; data_out <= data_in[2]; next_state <= idle; end else next_state <= write; /* Default assignment for simulation*/ default : next_state <= deflt; endcase end endmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 42 e-mail: hahanova@mail.ru
  • 43. Двух-блоковая модель Результат синтеза [0] state0 statemachine enable I state0 [2:0] clk C Q[2:0] rst R e [0] d e state[2:0] 0 d [1] data_out e [1] d state1 e [2] [2:0] d data_in[2:0] data_out state1 [2] state2 state2 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 43 e-mail: hahanova@mail.ru
  • 44. Окно FSM Viewer 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 44 e-mail: hahanova@mail.ru
  • 45. Пример модели автомата с одним блоком 1 module fsm_1xst (input clk, reset, x1, output reg outp); reg [1:0] state; parameter s1 = 2'b00; parameter s2 = 2'b01; parameter s3 = 2'b10; parameter s4 = 2'b11; always @(posedge clk, posedge reset) begin if (reset) begin state = s1; outp = 1'b1; end 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 45 e-mail: hahanova@mail.ru
  • 46. Пример модели автомата с одним блоком 2 else begin s3: begin state = s4; case (state) outp = 1'b0; s1: begin end if (x1==1'b1) state = s2; s4: begin state = s1; else state = s3; outp = 1'b0; outp = 1'b1; end end endcase s2: begin state = s4; end outp = 1'b1; end end endmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 46 e-mail: hahanova@mail.ru
  • 47. Пример модели автомата Результаты синтеза Модель с одним блоком [0] e statemachine 0 d x1 I [1] [3:0] e S clk C Q[3:0] 0 d reset R D Q outp [2] e 1 d outp s4 [3] state[3:0] e 1 d un1_state[1] Модель с двумя блоками s2 s3 [0] e statemachine 0 d s1 x1 I [1] [3:0] e clk C Q[3:0] 0 d reset R outp [2] e 1 d un1_un1_state[1] state[3:0] [3] e 1 d un1_state[1] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 47 e-mail: hahanova@mail.ru
  • 48. Модель памяти с асинхронным чтением module raminfr (input clk, we, input [4:0] a, input [3:0] di, output [3:0] do); ram1 [4:0] reg [3:0] ram [31:0]; di[3:0] RADDR[4:0] [3:0] [3:0] DATA[3:0] [3:0] [3:0] [4:0] [4:0] DOUT[3:0] do[3:0] a[4:0] WADDR[4:0] we WE clk CLK always @(posedge clk) ram[3:0] if (we) ram[a] <= di; assign do = ram[a]; endmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 48 e-mail: hahanova@mail.ru
  • 49. Модель памяти с синхронным чтением module raminfr (input clk, we, input [4:0] a, input [3:0] di, output [3:0] do); reg [3:0] ram [31:0]; reg [4:0] read_a; always @(posedge clk) begin if (we) ram[a] <= di; read_a <= a; end assign do = ram[read_a]; endmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 49 e-mail: hahanova@mail.ru
  • 50. Модель двухпортовой памяти с асинхронным чтением module raminfr (input clk, we, input [4:0] a, dpra, input [3:0] di, output [3:0] spo, dpo); ram1 reg [3:0] ram [31:0]; [4:0] [4:0] dpra[4:0] RADDR[4:0] [3:0] [3:0] di[3:0] DATA[3:0] [3:0] [3:0] [4:0] [4:0] DOUT[3:0] dpo[3:0] a[4:0] WADDR[4:0] always @(posedge clk) begin we clk WE CLK if (we) ram[3:0] ram[a] <= di; end ram1 [4:0] RADDR[4:0] [3:0] DATA[3:0] [3:0] [3:0] assign spo = ram[a]; [4:0] WADDR[4:0] WE DOUT[3:0] spo[3:0] assign dpo = ram[dpra]; CLK endmodule ram_1[3:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 50 e-mail: hahanova@mail.ru
  • 51. Модель двухпортовой памяти с синхронным чтением module raminfr (input clk, we, input [4:0] a, dpra, input [3:0] di, output [3:0] spo, dpo); reg [3:0] ram [31:0]; reg [4:0] read_a, read_dpra; always @(posedge clk) begin ram1 clk if (we) dpra[4:0] [4:0] [4:0] D[4:0] Q[4:0] RADDR[4:0] DATA[3:0] [4:0] [4:0] [3:0] read_dpra[4:0] ram[a] <= di; di[3:0] [3:0] WADDR[4:0] WE DOUT[3:0] dpo[3:0] [4:0] [3:0] [3:0] read_a <= a; CLK read_dpra <= dpra; ram[3:0] end ram1 assign spo = ram [read_a]; a[4:0] [4:0] [4:0] D[4:0] Q[4:0] [4:0] [4:0] [3:0] RADDR[4:0] DATA[3:0] assign dpo = ram [read_dpra]; read_a[4:0] [4:0] WADDR[4:0] DOUT[3:0] [3:0] [3:0] spo[3:0] we WE endmodule CLK ram_1[3:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 51 e-mail: hahanova@mail.ru
  • 52. Контрольные вопросы 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 52 e-mail: hahanova@mail.ru