SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
VERILOG



4.2 Генерирование операторов


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

                  д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ
21.02.2011                e-mail: hahanova@mail.ru             1
Цель лекции и содержание
 Цель –
 План
   а




 21.02.2011   д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   2
                            hahanova@mail.ru
Оператор generate и переменные genvar
 Cинтаксис:
   genvar list_of_genvar_identifiers ;
   где list_of_genvar_identifiers – список переменных genvar
 Пример Генерирование копий операторов assign
   module xorGen
     #(parameter width = 4, delay =10)
     (output [1:width] xout,
     input [1:width] xin1, xin2);
   generate
     genvar i;
     for (i = 1; i <= width; i=i + 1) begin: xi
       assign #delay xout[i] = xin1[i] ^ xin2[i];
     end
   endgenerate
   endmodule
  21.02.2011        д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   3
                                  hahanova@mail.ru
Оператор generate с циклом for
 Синтаксис
    generate {
       for ( genvar_assignment ; constant_expression ;
       genvar_assignment )
       begin: generate_block_identifier
        { generate_item }
       end
    } endgenerate
где genvar_assignment – начальное значение переменной genvar,
    constant_expression – условие завершения цикла,
    genvar_assignment – шаг цикла,
    generate_item – генерируемые операторы.

  21.02.2011       д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   4
                                 hahanova@mail.ru
Пример. 1
 Генерирование вентилей
  generate
    genvar i;
    for (i = 1; i <= width; i=i+1) begin: xi
      xor #delay a (xout[i], xin1[i], xin2[i]);
    end
  endgenerate




 21.02.2011        д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   5
                                 hahanova@mail.ru
Пример. 2
 Генерирование копий оператора always.
  generate
   genvar i;
   for (i = 1; i <= width; i=i+1) begin: xi
     always @(*)
           xout[i] = xin1[i] ^ xin2[i];
   end
  endgenerate



 21.02.2011     д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   6
                              hahanova@mail.ru
Условный оператор generate
 Синтаксис:
  generate
    if ( constant_expression )
      generate_item_or_null
    [else generate_item_or_null ]
  endgenerate
  где constant_expression – условие
    генерирования операторов.

 21.02.2011    д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   7
                             hahanova@mail.ru
Конфигурируемое устройство умножения
module multiplier
       #(parameter a_width = 8, b_width = 8)
       (input [a_width-1:0] a, [b_width-1:0] b,
        output [a_width+b_width-1:0] product);
  generate
     if((a_width < 8) || (b_width < 8))
       CLA_multiplier #(a_width,b_width) u1(a, b, product);
     else
       WALLACE_multiplier #(a_width,b_width) u1(a, b,
     product);
   endgenerate
endmodule
  21.02.2011      д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   8
                                hahanova@mail.ru
Generate с оператором case
 Синтаксис:
    generate
     case ( constant_expression )
       genvar_case_item { genvar_case_item }
     endcase
       genvar_case_item ::= constant_expression {
     , constant_expression } :
       generate_item_or_null | default [ : ]
     generate_item_or_null
    endgenerate


 21.02.2011    д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   9
                             hahanova@mail.ru
Пример 3
generate
    case (WIDTH)
        // 1-битовый сумматор
     1: adder_1bit x1(co, sum, a, b, ci);
       // 2-битовый сумматор
     2: adder_2bit x1(co, sum, a, b, ci);
       // сумматор CLA
     default: adder_cla #(WIDTH) x1(co, sum, a, b, ci);
    endcase
endgenerate
  21.02.2011     д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   10
                               hahanova@mail.ru
Использование вложенных generate
   parameter SIZE = 2;
   genvar i, j, k, m;
   Generate // Многоуровненый оператор generate
      for (i=0; i<SIZE+1; i=i+1) begin:B1 // область действия B1[i]
        M1 N1();                                 // копии B1[i].N1[i] компонента M1
        for (j=0; j<SIZE; j=j+1) begin:B2         // область действия B1[i].B2[j]
               M2 N2();                        // копии B1[i].B2[j].N2 компонента M2
                    for (k=0; k<SIZE; k=k+1) begin:B3
                               // область действия B1[i].B2[j].B3[k]
                               // копии B1[i].B2[j].B3[k].N3
                                         M3 N3();
                    end
           end
        if (i>0) for (m=0; m<SIZE; m=m+1) begin:B4
                    // область действия B1[i].B4[m]
                    M4 N4(); // копии B1[i].B4[m].N4
              end
        end
   endgenerate
21.02.2011             д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:              11
                                     hahanova@mail.ru
Контрольные вопросы и задания.1
1. Разработать структурную модель 32-битного
   двунаправленного трансивера, использующую в
   качестве компонента функциональную модель 1-
   битного трансивера, который имеет два
   двунаправленных входа данных – a и b.
   Асинхронный, активный по низкому уровню порт
   разрешения выходов oe_n. Порт направления dir.
   Когда oe_n = 0 и dir = 0, данные передаются из b в
   a; если oe_n = 0 и dir = 1, то данные передаются с
   a на b. Если oe_n = 1, то a и b имеют значение
   высокого импеданса.


 21.02.2011    д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   12
                             hahanova@mail.ru
Контрольные вопросы и задания.2
1.      Нарисовать схему, соответствующую следующему оператору
        generate:
           generate
               genvar stage
               for (stage = 1; stage <= 4; stage = stage +1) begin: Ui
                  d_ff delay_ff (.clk(sys_clk),
                    .d(delayed_data[stage-1]), .q(delayed_data[stage]));
               end
           endgenerate
2.      Создать условный оператор generate, который соединяет
        переменную external_clk с сигналом internal_clk, если
        параметр positive_clk = 1. В противном случае на линию
        internal_clk подается инверсное значение external_clk.


     21.02.2011         д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   13
                                      hahanova@mail.ru
Контрольные вопросы и задания.3
1.     Разработать структурную
                                                           A0
       модель устройства,
       состоящую из n                                                     C0
       мультиплексоров 2-в-1,                             B0
       соединенных параллельно.                Sel
       Входами устройства
       являются сигнал
                                                                    ...
       управления Sel, два n-
       битовых вектора A и B.                              An-1
       Выход описан n-битовым
       сектором C. Величина n                                             Cn-1
       определена с помощью                               Bn-1
       директивы `define.


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

module io2(data, read, write);
  inout [15:0] data;
  input read, write;
  reg [15:0] internal_reg;

  always @(posedge write)
     internal_reg = data;
  assign data = read ? internal_reg: 16'bz ;
endmodule

  21.02.2011   д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   15
                             hahanova@mail.ru
Оператор disable
module disable1;
    initial begin
           do_it;
           $display("Finished do it at time %0d",$time);
    end

     initial begin
            #55 disable do_it;
     end

    task do_it;
         forever
               #10 $display("doing it at time %0d",$time);
    endtask
endmodule



   21.02.2011                д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   16
                                           hahanova@mail.ru
Mux with Parameterized Width and Number of Inputs
module muxMto1 (Z, SEL, D);
parameter N = 8; // number of bits wide
parameter M = 4; // number of inputs
parameter S = 2; // number of select lines
parameter W = M * N;
`define DTOTAL W-1:0
`define DWIDTH N-1:0
`define SELW S-1:0
`define WORDS M-1:0
input [` DTOTAL] D;
input [` SELW] SEL;
output [` DWIDTH] Z;
integer i;
reg[`DWIDTH] tmp, Z; // tmp will be use to minimize events
always @(SEL or D) begin
for(i=0; i < N; i = i + 1) // for bits in the width
tmp[i] = D[N*SEL + i];
Z = tmp;
end
endmodule




     21.02.2011                    д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   17
                                                 hahanova@mail.ru
Параметризируемый модуль
    // параметризируемый n-битовый сумматор
module nadder(cout,sum, a,b,cin);
// Размер по умолчанию 32 бита
    #(parameter size = 32)
    (output cout, output [size-1 :0] sum,
    input [size-1 : 0] a,b, input cin);

  assign {cout,sum} = a + b + cin;
endmodule

  21.02.2011   д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   18
                             hahanova@mail.ru
Использование параметризируемого модуля

module use_defparam;
   wire [4:0] a5, b5, c5; // some 5 bit wires
   wire [31:0] a32, b32, c32; // some 32 bit wires
   wire [127:0] biga, bigb, bigc; // some 128 bit wires
   wire x,y,z;
   // create some instances of the n bit adder
   nadder a1 (z,a5,b5,c5,x);
   nadder a2 (z,a32,b32,c32,x);
   nadder a3 (z,biga,bigb,bigc,x);
   defparam a1.size = 5;
   defparam a3.size = 128;
endmodule
  21.02.2011      д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   19
                                hahanova@mail.ru
module mux4caa( y, sel, a, b, c, d);
  output [3:0] y;
  input [3:0] a, b, c, d;
  input [1:0] sel;
  assign y = (sel == 2'b00) ? a :
                 (sel == 2'b01) ? b :
                 (sel == 2'b10) ? c : d;
endmodule
  21.02.2011   д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   20
                             hahanova@mail.ru
Сумматор
module adder8ca(carry_out, sum, a, b,
  carry_in);
   output carry_out;
   output [7:0] sum;
   input [7:0] a, b ;
   input carry_in;
   assign {carry_out,sum} = a + b + carry_in;
endmodule
  21.02.2011   д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   21
                             hahanova@mail.ru
Мультиплексор через assign и функцию
module mux4caf( y, sel, a, b, c, d) ;
   output [3:0] y;
   input [3:0] a, b, c, d;
   input [1:0] sel;
   assign y = muxf(a, b, c, d, sel);
   function [3:0] muxf;
        input [3:0] a, b, c, d;
        input [1:0] sel;
        case (sel)
                0: muxf = a;
                1: muxf = b;
                2: muxf = c;
                3: muxf = d;
       endcase
   endfunction
endmodule

   21.02.2011                  д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail:   22
                                             hahanova@mail.ru
Счетчик (не синтезируемый)
module counterf(clock, out);
   input clock;
   output [7:0] out;
   reg [7:0] out;
initial
   begin
   out = 0;
   forever @(posedge clock) out <= #(`REG_DELAY) out +
     1;
   end
endmodule

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

Weitere ähnliche Inhalte

Was ist angesagt?

Алгоритмы и языки программирования
Алгоритмы и языки программированияАлгоритмы и языки программирования
Алгоритмы и языки программированияTheoretical mechanics department
 
2. Операторы языка C#
2. Операторы языка C#2. Операторы языка C#
2. Операторы языка C#Olga Maksimenkova
 
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Roman Orlov
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...Alexey Paznikov
 
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...Iosif Itkin
 
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#Olga Maksimenkova
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#Dmitri Soshnikov
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...Alexey Paznikov
 
Представление графов в памяти компьютера (c++).
Представление графов в памяти компьютера (c++).Представление графов в памяти компьютера (c++).
Представление графов в памяти компьютера (c++).Olga Maksimenkova
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksMikhail Kurnosov
 
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...Iosif Itkin
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++mcroitor
 

Was ist angesagt? (20)

Алгоритмы и языки программирования
Алгоритмы и языки программированияАлгоритмы и языки программирования
Алгоритмы и языки программирования
 
Tricky Java Generics
Tricky Java GenericsTricky Java Generics
Tricky Java Generics
 
2. Операторы языка C#
2. Операторы языка C#2. Операторы языка C#
2. Операторы языка C#
 
Step cpp022
Step cpp022Step cpp022
Step cpp022
 
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
 
Step cpp0201
Step cpp0201Step cpp0201
Step cpp0201
 
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
 
8 3-4
8 3-48 3-4
8 3-4
 
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
Python
PythonPython
Python
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
 
Представление графов в памяти компьютера (c++).
Представление графов в памяти компьютера (c++).Представление графов в памяти компьютера (c++).
Представление графов в памяти компьютера (c++).
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
 
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 

Andere mochten auch

Romeo and Juliet
Romeo and JulietRomeo and Juliet
Romeo and Julietaschoenborn
 
Treasure hunt key
Treasure hunt keyTreasure hunt key
Treasure hunt keyiesMola
 
New books on_tv_1
New books on_tv_1New books on_tv_1
New books on_tv_1jiraporn446
 
1/24 - Algebra Review
1/24 - Algebra Review1/24 - Algebra Review
1/24 - Algebra Reviewhoop22r
 
Adfiz Wft portaal
Adfiz Wft portaalAdfiz Wft portaal
Adfiz Wft portaaladfiz
 
SAMBAHANG KRISTIANO sa GULOD
SAMBAHANG KRISTIANO sa GULODSAMBAHANG KRISTIANO sa GULOD
SAMBAHANG KRISTIANO sa GULODSamuel Curit
 
апкс 2011 02_verilog
апкс 2011 02_verilogапкс 2011 02_verilog
апкс 2011 02_verilogIrina Hahanova
 
21stcenturyclassroom
21stcenturyclassroom21stcenturyclassroom
21stcenturyclassroomace19855
 
цсноп 2 11_3_проект памяти
цсноп 2 11_3_проект памятицсноп 2 11_3_проект памяти
цсноп 2 11_3_проект памятиIrina Hahanova
 
Boda en etla
Boda en etlaBoda en etla
Boda en etlavedmoga
 
Thesis Presentation 2.1.11
Thesis Presentation 2.1.11Thesis Presentation 2.1.11
Thesis Presentation 2.1.11Karen Renee
 
Ginekologia грищенко 2003
Ginekologia грищенко 2003Ginekologia грищенко 2003
Ginekologia грищенко 2003Igor Nitsovych
 
Ies la mola puri y alba
Ies la mola puri y albaIes la mola puri y alba
Ies la mola puri y albaiesMola
 
Instructions from God !!
Instructions from God !!Instructions from God !!
Instructions from God !!AAR VEE
 
Festivalul Mondial al Culturii
Festivalul Mondial al CulturiiFestivalul Mondial al Culturii
Festivalul Mondial al CulturiiDorian Stefan
 

Andere mochten auch (20)

Gvvv quiz part 1
Gvvv quiz part 1Gvvv quiz part 1
Gvvv quiz part 1
 
Romeo and Juliet
Romeo and JulietRomeo and Juliet
Romeo and Juliet
 
Kerr center for sustainable agriculture summary overview
Kerr center for sustainable agriculture summary overview Kerr center for sustainable agriculture summary overview
Kerr center for sustainable agriculture summary overview
 
Treasure hunt key
Treasure hunt keyTreasure hunt key
Treasure hunt key
 
New books on_tv_1
New books on_tv_1New books on_tv_1
New books on_tv_1
 
1/24 - Algebra Review
1/24 - Algebra Review1/24 - Algebra Review
1/24 - Algebra Review
 
Atm
AtmAtm
Atm
 
Adfiz Wft portaal
Adfiz Wft portaalAdfiz Wft portaal
Adfiz Wft portaal
 
SAMBAHANG KRISTIANO sa GULOD
SAMBAHANG KRISTIANO sa GULODSAMBAHANG KRISTIANO sa GULOD
SAMBAHANG KRISTIANO sa GULOD
 
Clean out the lungs
Clean out the lungsClean out the lungs
Clean out the lungs
 
апкс 2011 02_verilog
апкс 2011 02_verilogапкс 2011 02_verilog
апкс 2011 02_verilog
 
21stcenturyclassroom
21stcenturyclassroom21stcenturyclassroom
21stcenturyclassroom
 
цсноп 2 11_3_проект памяти
цсноп 2 11_3_проект памятицсноп 2 11_3_проект памяти
цсноп 2 11_3_проект памяти
 
Boda en etla
Boda en etlaBoda en etla
Boda en etla
 
Intensive Culture & Season Extension
Intensive Culture & Season ExtensionIntensive Culture & Season Extension
Intensive Culture & Season Extension
 
Thesis Presentation 2.1.11
Thesis Presentation 2.1.11Thesis Presentation 2.1.11
Thesis Presentation 2.1.11
 
Ginekologia грищенко 2003
Ginekologia грищенко 2003Ginekologia грищенко 2003
Ginekologia грищенко 2003
 
Ies la mola puri y alba
Ies la mola puri y albaIes la mola puri y alba
Ies la mola puri y alba
 
Instructions from God !!
Instructions from God !!Instructions from God !!
Instructions from God !!
 
Festivalul Mondial al Culturii
Festivalul Mondial al CulturiiFestivalul Mondial al Culturii
Festivalul Mondial al Culturii
 

Ähnlich wie апкс 2011 04_verilog_продолж

апкс 2011 04_verilog
апкс 2011 04_verilogапкс 2011 04_verilog
апкс 2011 04_verilogIrina Hahanova
 
апкс 2011 07_синтез_verilog
апкс 2011 07_синтез_verilogапкс 2011 07_синтез_verilog
апкс 2011 07_синтез_verilogIrina Hahanova
 
Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмовAndrey Dolinin
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Mikhail Kurnosov
 
1 курс ТПУ знание VBA для MS Excel
1 курс ТПУ знание VBA для MS Excel1 курс ТПУ знание VBA для MS Excel
1 курс ТПУ знание VBA для MS Excelpavelvyatkin
 
1 вводное занятие
1 вводное занятие1 вводное занятие
1 вводное занятиеluis_blanco_rau
 
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон ПолухинC++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухинcorehard_by
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
Structural project description in VHDL
Structural project description in VHDLStructural project description in VHDL
Structural project description in VHDLvitaliykulanov
 
Cpp0x Introduction
Cpp0x IntroductionCpp0x Introduction
Cpp0x IntroductionFedor Vompe
 
Основы программирования на C++
Основы программирования на C++Основы программирования на C++
Основы программирования на C++Olga Maksimenkova
 

Ähnlich wie апкс 2011 04_verilog_продолж (20)

апкс 2011 04_verilog
апкс 2011 04_verilogапкс 2011 04_verilog
апкс 2011 04_verilog
 
апкс 2011 07_синтез_verilog
апкс 2011 07_синтез_verilogапкс 2011 07_синтез_verilog
апкс 2011 07_синтез_verilog
 
9 ср1
9 ср19 ср1
9 ср1
 
=lection_01.ppt
=lection_01.ppt=lection_01.ppt
=lection_01.ppt
 
Programming c++ (begin-if-else)
Programming c++ (begin-if-else)Programming c++ (begin-if-else)
Programming c++ (begin-if-else)
 
Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмов
 
8 3-5
8 3-58 3-5
8 3-5
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
Lec 1
Lec 1Lec 1
Lec 1
 
1 курс ТПУ знание VBA для MS Excel
1 курс ТПУ знание VBA для MS Excel1 курс ТПУ знание VBA для MS Excel
1 курс ТПУ знание VBA для MS Excel
 
1 вводное занятие
1 вводное занятие1 вводное занятие
1 вводное занятие
 
лекция 1
лекция 1лекция 1
лекция 1
 
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон ПолухинC++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
 
презентация1
презентация1презентация1
презентация1
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Structural project description in VHDL
Structural project description in VHDLStructural project description in VHDL
Structural project description in VHDL
 
Cpp0x Introduction
Cpp0x IntroductionCpp0x Introduction
Cpp0x Introduction
 
Основы программирования на C++
Основы программирования на C++Основы программирования на C++
Основы программирования на C++
 
лекция 3
лекция 3лекция 3
лекция 3
 

Mehr von Irina Hahanova

апкс 2011 08_verilog_макросы
апкс 2011 08_verilog_макросыапкс 2011 08_verilog_макросы
апкс 2011 08_verilog_макросыIrina Hahanova
 
цсноп 2 11_4_архитектуры памяти
цсноп 2 11_4_архитектуры памятицсноп 2 11_4_архитектуры памяти
цсноп 2 11_4_архитектуры памяти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 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
 
моап 2011 01_введение
моап 2011 01_введениемоап 2011 01_введение
моап 2011 01_введениеIrina Hahanova
 

Mehr von Irina Hahanova (11)

апкс 2011 08_verilog_макросы
апкс 2011 08_verilog_макросыапкс 2011 08_verilog_макросы
апкс 2011 08_verilog_макросы
 
цсноп 2 11_4_архитектуры памяти
цсноп 2 11_4_архитектуры памятицсноп 2 11_4_архитектуры памяти
цсноп 2 11_4_архитектуры памяти
 
цсноп 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 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 04
моап 2011 04моап 2011 04
моап 2011 04
 
моап 2011 03
моап 2011 03моап 2011 03
моап 2011 03
 
моап 2011 02_active_1
моап 2011 02_active_1моап 2011 02_active_1
моап 2011 02_active_1
 
моап 2011 01_введение
моап 2011 01_введениемоап 2011 01_введение
моап 2011 01_введение
 

апкс 2011 04_verilog_продолж

  • 1. VERILOG 4.2 Генерирование операторов Автоматизация проектирования компьютерных систем д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 21.02.2011 e-mail: hahanova@mail.ru 1
  • 2. Цель лекции и содержание  Цель –  План  а 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 2 hahanova@mail.ru
  • 3. Оператор generate и переменные genvar  Cинтаксис: genvar list_of_genvar_identifiers ; где list_of_genvar_identifiers – список переменных genvar  Пример Генерирование копий операторов assign module xorGen #(parameter width = 4, delay =10) (output [1:width] xout, input [1:width] xin1, xin2); generate genvar i; for (i = 1; i <= width; i=i + 1) begin: xi assign #delay xout[i] = xin1[i] ^ xin2[i]; end endgenerate endmodule 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 3 hahanova@mail.ru
  • 4. Оператор generate с циклом for  Синтаксис generate { for ( genvar_assignment ; constant_expression ; genvar_assignment ) begin: generate_block_identifier { generate_item } end } endgenerate где genvar_assignment – начальное значение переменной genvar, constant_expression – условие завершения цикла, genvar_assignment – шаг цикла, generate_item – генерируемые операторы. 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 4 hahanova@mail.ru
  • 5. Пример. 1  Генерирование вентилей generate genvar i; for (i = 1; i <= width; i=i+1) begin: xi xor #delay a (xout[i], xin1[i], xin2[i]); end endgenerate 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 5 hahanova@mail.ru
  • 6. Пример. 2  Генерирование копий оператора always. generate genvar i; for (i = 1; i <= width; i=i+1) begin: xi always @(*) xout[i] = xin1[i] ^ xin2[i]; end endgenerate 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 6 hahanova@mail.ru
  • 7. Условный оператор generate  Синтаксис: generate if ( constant_expression ) generate_item_or_null [else generate_item_or_null ] endgenerate где constant_expression – условие генерирования операторов. 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 7 hahanova@mail.ru
  • 8. Конфигурируемое устройство умножения module multiplier #(parameter a_width = 8, b_width = 8) (input [a_width-1:0] a, [b_width-1:0] b, output [a_width+b_width-1:0] product); generate if((a_width < 8) || (b_width < 8)) CLA_multiplier #(a_width,b_width) u1(a, b, product); else WALLACE_multiplier #(a_width,b_width) u1(a, b, product); endgenerate endmodule 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 8 hahanova@mail.ru
  • 9. Generate с оператором case  Синтаксис: generate case ( constant_expression ) genvar_case_item { genvar_case_item } endcase genvar_case_item ::= constant_expression { , constant_expression } : generate_item_or_null | default [ : ] generate_item_or_null endgenerate 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 9 hahanova@mail.ru
  • 10. Пример 3 generate case (WIDTH) // 1-битовый сумматор 1: adder_1bit x1(co, sum, a, b, ci); // 2-битовый сумматор 2: adder_2bit x1(co, sum, a, b, ci); // сумматор CLA default: adder_cla #(WIDTH) x1(co, sum, a, b, ci); endcase endgenerate 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 10 hahanova@mail.ru
  • 11. Использование вложенных generate parameter SIZE = 2; genvar i, j, k, m; Generate // Многоуровненый оператор generate for (i=0; i<SIZE+1; i=i+1) begin:B1 // область действия B1[i] M1 N1(); // копии B1[i].N1[i] компонента M1 for (j=0; j<SIZE; j=j+1) begin:B2 // область действия B1[i].B2[j] M2 N2(); // копии B1[i].B2[j].N2 компонента M2 for (k=0; k<SIZE; k=k+1) begin:B3 // область действия B1[i].B2[j].B3[k] // копии B1[i].B2[j].B3[k].N3 M3 N3(); end end if (i>0) for (m=0; m<SIZE; m=m+1) begin:B4 // область действия B1[i].B4[m] M4 N4(); // копии B1[i].B4[m].N4 end end endgenerate 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 11 hahanova@mail.ru
  • 12. Контрольные вопросы и задания.1 1. Разработать структурную модель 32-битного двунаправленного трансивера, использующую в качестве компонента функциональную модель 1- битного трансивера, который имеет два двунаправленных входа данных – a и b. Асинхронный, активный по низкому уровню порт разрешения выходов oe_n. Порт направления dir. Когда oe_n = 0 и dir = 0, данные передаются из b в a; если oe_n = 0 и dir = 1, то данные передаются с a на b. Если oe_n = 1, то a и b имеют значение высокого импеданса. 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 12 hahanova@mail.ru
  • 13. Контрольные вопросы и задания.2 1. Нарисовать схему, соответствующую следующему оператору generate: generate genvar stage for (stage = 1; stage <= 4; stage = stage +1) begin: Ui d_ff delay_ff (.clk(sys_clk), .d(delayed_data[stage-1]), .q(delayed_data[stage])); end endgenerate 2. Создать условный оператор generate, который соединяет переменную external_clk с сигналом internal_clk, если параметр positive_clk = 1. В противном случае на линию internal_clk подается инверсное значение external_clk. 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 13 hahanova@mail.ru
  • 14. Контрольные вопросы и задания.3 1. Разработать структурную A0 модель устройства, состоящую из n C0 мультиплексоров 2-в-1, B0 соединенных параллельно. Sel Входами устройства являются сигнал ... управления Sel, два n- битовых вектора A и B. An-1 Выход описан n-битовым сектором C. Величина n Cn-1 определена с помощью Bn-1 директивы `define. 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 14 hahanova@mail.ru
  • 15. Модель регистра с двунаправленной шиной module io2(data, read, write); inout [15:0] data; input read, write; reg [15:0] internal_reg; always @(posedge write) internal_reg = data; assign data = read ? internal_reg: 16'bz ; endmodule 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 15 hahanova@mail.ru
  • 16. Оператор disable module disable1; initial begin do_it; $display("Finished do it at time %0d",$time); end initial begin #55 disable do_it; end task do_it; forever #10 $display("doing it at time %0d",$time); endtask endmodule 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 16 hahanova@mail.ru
  • 17. Mux with Parameterized Width and Number of Inputs module muxMto1 (Z, SEL, D); parameter N = 8; // number of bits wide parameter M = 4; // number of inputs parameter S = 2; // number of select lines parameter W = M * N; `define DTOTAL W-1:0 `define DWIDTH N-1:0 `define SELW S-1:0 `define WORDS M-1:0 input [` DTOTAL] D; input [` SELW] SEL; output [` DWIDTH] Z; integer i; reg[`DWIDTH] tmp, Z; // tmp will be use to minimize events always @(SEL or D) begin for(i=0; i < N; i = i + 1) // for bits in the width tmp[i] = D[N*SEL + i]; Z = tmp; end endmodule 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 17 hahanova@mail.ru
  • 18. Параметризируемый модуль // параметризируемый n-битовый сумматор module nadder(cout,sum, a,b,cin); // Размер по умолчанию 32 бита #(parameter size = 32) (output cout, output [size-1 :0] sum, input [size-1 : 0] a,b, input cin); assign {cout,sum} = a + b + cin; endmodule 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 18 hahanova@mail.ru
  • 19. Использование параметризируемого модуля module use_defparam; wire [4:0] a5, b5, c5; // some 5 bit wires wire [31:0] a32, b32, c32; // some 32 bit wires wire [127:0] biga, bigb, bigc; // some 128 bit wires wire x,y,z; // create some instances of the n bit adder nadder a1 (z,a5,b5,c5,x); nadder a2 (z,a32,b32,c32,x); nadder a3 (z,biga,bigb,bigc,x); defparam a1.size = 5; defparam a3.size = 128; endmodule 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 19 hahanova@mail.ru
  • 20. module mux4caa( y, sel, a, b, c, d); output [3:0] y; input [3:0] a, b, c, d; input [1:0] sel; assign y = (sel == 2'b00) ? a : (sel == 2'b01) ? b : (sel == 2'b10) ? c : d; endmodule 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 20 hahanova@mail.ru
  • 21. Сумматор module adder8ca(carry_out, sum, a, b, carry_in); output carry_out; output [7:0] sum; input [7:0] a, b ; input carry_in; assign {carry_out,sum} = a + b + carry_in; endmodule 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 21 hahanova@mail.ru
  • 22. Мультиплексор через assign и функцию module mux4caf( y, sel, a, b, c, d) ; output [3:0] y; input [3:0] a, b, c, d; input [1:0] sel; assign y = muxf(a, b, c, d, sel); function [3:0] muxf; input [3:0] a, b, c, d; input [1:0] sel; case (sel) 0: muxf = a; 1: muxf = b; 2: muxf = c; 3: muxf = d; endcase endfunction endmodule 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 22 hahanova@mail.ru
  • 23. Счетчик (не синтезируемый) module counterf(clock, out); input clock; output [7:0] out; reg [7:0] out; initial begin out = 0; forever @(posedge clock) out <= #(`REG_DELAY) out + 1; end endmodule 21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 23 hahanova@mail.ru