апкс 2011 07_синтез_verilog
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • ritakoneh@hotmail.co.uk
    Hei min nye venn
    Mitt navn er rita jeg så profilen din på (www.slideshare.net) og jeg elsker det jeg tror vi kan klikke så kan jeg vil gjerne at du skal email meg tilbake gjennom e-postadressen min slik: slik at jeg kan fortalt deg mer om meg og gi deg min søte bildet slik at du kan kjenne meg, skal ok.
    Venter å se dine herlige svar snarest.
    Miss rita ritakoneh@hotmail.co.uk

    ....................................................................................................................................

    ritakoneh@hotmail.co.uk
    Hello My New friend
    My name is rita i saw your profile at(www.slideshare.net) and i love it i think we can click so please i will like you to email me back through my email address thus: so that i can told you more about me and give you my sweet picture so that you can know me will ok.
    Awaiting to see your lovely reply soonest.
    Miss rita ritakoneh@hotmail.co.uk
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
774
On Slideshare
774
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
9
Comments
1
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 6. Синтезируемое подмножество Verilog Автоматизация проектирования компьютерных систем д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ13.03.2011 e-mail: hahanova@mail.ru 1
  • 2. Цель лекции и содержание Цель – изучить синтезируемы Verilog- конструкции и принципы их преобразования в схему План  Этапы синтеза  Синтезируемые конструкции в Verilog 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 2 e-mail: hahanova@mail.ru
  • 3. Этапы синтеза RTL Description Translation Unoptimized Intermediate Representation Logic Optimization Library o f avaible Technology Mapping gates, and leaf-levelDesign Constraints cells. (technology and Optimization library) Optimized Gate-Level Representation 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 3 e-mail: hahanova@mail.ru
  • 4. Синтезируемые конструкции в Verilog Тип конструкции Ключевое слово Примечания или описание Порты input, inout, output Параметры parameter defparam поддерживается #( ) и defparam поддерживаются только на один уровень вниз Определение модуля module Сигналы и wire, reg, tri разрешены векторы переменные не поддерживаются: trireg, wor, trior, wand, triand, tri0, tri1, real События не поддерживаются именные события Реализация реализация модуля, Например, компонентов реализация вентильного mymux m1(out, i0, i1, s); примитива nand (out, a, b); Функции и задачи function, task Игнорируются временные параметры, вызов системных задач и функций Поведенческое always, if-then-else, Initial игнорируется описание case, casex, casez Synplify: не поддерживается deassign, wait, force, release Процедурные блоки begin, end, Разрешается использование именные блоки, disable оператора disable для именных блоков for while должны содержать конструкции Циклы forever @(posedge clk) или (@(negedge clk) repeat в Synplify Уровень data flow assign Информация о задержках игнорируется Вентильный уровень стандартные примитивы 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 4 e-mail: hahanova@mail.ru
  • 5. Типы данных Integer и real рекомендуется использовать для построения тестов. reg или wire - для моделей реальной аппаратуры. В Verilog 2001 вектора обоих типов данных могут быть использованы для знаковых и беззнаковых данных. Пример: reg [3:0] arb_priority; wire [31:0] arb_request; wire signed [8:0] arb_signed; Поддерживаемые типы данных Класс данных XST Synplify wire, tri, wire, tri, Цепи (Net) triand/wand, trior/wor supply0, supply1 supply1, supply0 reg, integer reg, integer Регистры (Reqister) time (64 bit reg) 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 5 e-mail: hahanova@mail.ru
  • 6. 1 Синтез комбинационной логики Может быть сгенерирована:  Из вентильных моделей.  Из data-flow моделей.  Из процедурного оператора always • Все входы комбинационной функции должны быть указаны в списке чувствительности • При использовании операторов if или case, необходимо чтобы выходной сигнал получал значение при каждой возможной ситуации. При каждой итерации выполнения блока begin-end выходной сигнал должен обновлять свое значение. 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 6 e-mail: hahanova@mail.ru
  • 7. Оператор assignРеализуется комбинационной логикой assign out = (a & b) | c; c a out b un1_out outassign {c_out, sum} = a + b + c_in; assign out=(s)? a: b; [0] sum a s b + [1:0] [1] b 0 out c_outc_in a 1 sum_1[1:0] 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ out 7 e-mail: hahanova@mail.ru
  • 8. Использование alwaysдля комбинационной логики always @(a, b, c_in) {c_out, sum} = a + b + c_in; [0] sum a b + [1:0] [1] c_out c_in sum_1[1:0]Допускается использование сокращенной записи описания всехпортов в списке чувствительности: always @(*) // или always @* {c_out, sum} = a + b + c_in; Данная конструкция генерирует схему, аналогичную предыдущей. 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 8 e-mail: hahanova@mail.ru
  • 9. 2 Синтез последовательностныхустройств В списке чувствительности always выполняется проверка только фронтов сигналов синхронизации clock, асинхроных сброса reset и установки preset. Проверяются только сигналы, непосредственно влияющие на изменение состояния. В операторе always условия reset и preset описываются первыми. Внутри блока begin-end условие синхронизации не описывается. Нельзя описывать в одном блоке комбинационную и последовательностые схемы. Для моделей последовательностных схем предпочтительнее использование неблокирующих операторов “<=”. 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 9 e-mail: hahanova@mail.ru
  • 10. Использование alwaysдля последовательностной логики module flop (input C, D, output reg Q); C always @(posedge C) D D Q Q Q <= D; endmodule Q module flop1 (input C, D, CLR, C output reg Q); D D Q Q always @(negedge C, posedge CLR) R if (CLR) Q <= 1b0; CLR else Q <= D; Q endmodule 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 10 e-mail: hahanova@mail.ru
  • 11. Триггер-защелка module flop (input Clk, D, output reg Q); always @(Clk, D) if (Clk) Q <= D; endmodule lat D D Q Q Clk C Q 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 11 e-mail: hahanova@mail.ru
  • 12. Шаблон последовательностного устройства сасинхронными управляющими сигналамиalways @(posedge A, negedge B, negedge C, … posedge Clock) if (A) // A=1 <statement> //asychronous logic else if (!B) // B=0 <statement> //asynchronous logic else if (!C) // C=0 <statement> // asynchronous logic ... //Любое количество конструкций else if else // posedge Clock <statement> //synchronous logic 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 12 e-mail: hahanova@mail.ru
  • 13. Шаблон последовательностного устройства ссинхронными управляющими сигналамиalways @(posedge Clock) if (A) // A=1 <statement> //sychronous logic else if (!B) // B=0 <statement> //synchronous logic else if (!C) // C=0 <statement> //synchronous logic ... //Любое количество конструкций else if else // posedge Clock <statement> //synchronous logic 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 13 e-mail: hahanova@mail.ru
  • 14. Пример. Счетчик (1)module AsynCounter #(parameter Num_bits = 2) (input Clk, Preset, UpDown, Clear, input [Num_bits-1:0] Data, output reg [Num_bits-1:0] Counter);always @(posedge Clear, posedge Clk)begin if (Clear) Counter <= 0; else if (Preset) Counter <= Data; else if (UpDown) Counter <= Counter + 1; else Counter <= Counter - 1; endendmodule 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 14 e-mail: hahanova@mail.ru
  • 15. Пример. Счетчик (2) Clk PresetUpDown [1:0] 11 0 [1:0] + [1:0] [1:0] 0 [1:0] [1:0] [1:0] [1:0] D[1:0] Q[1:0] [1:0] Counter[1:0] 01 [1:0] 1 un1_Counter[1:0] 1 R un3[1:0] Counter_7[1:0]Data[1:0] Counter[1:0] [1:0] Clear 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 15 e-mail: hahanova@mail.ru
  • 16. 3 Особые ситуации синтеза1. Использование блокирующих и неблокирующих операторов2. Оператор IF3. Оператор CASE4. Комбинационная схема из CASE5. Использование casez и casex6. Параллельный CASE7. Оператор цикла8. Локальное использование переменных 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 16 e-mail: hahanova@mail.ru
  • 17. 3.1 Блокирующие и неблокирующие операторы Не допускается использовать одновременно блокирующие и неблокирующие операторы для присвоения значений одному сигналу always @(in1)  if (in2) begin begin out1[0] = 1’b0; out1[1] <= in1; if (in2) out1 = in1; end else out1 <= in2; else begin end out1[0] = in2; out1[1] <= 1’b1; end 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 17 e-mail: hahanova@mail.ru
  • 18. 3.2 Оператор IFmodule SelectOneOf (input [1:0] A, B, output reg [1:0] Z); always @(A, B) if (A>B) Z=A; else Z=B; endmodule [1:0] [1:0] B[1:0] [1:0] [1:0] < A[1:0] [1:0] 0 Z4 [1:0] [1:0] Z[1:0] [1:0] 1 Z[1:0] 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 18 e-mail: hahanova@mail.ru
  • 19. Появление триггера из оператора ifmodule SelectOneOf (input A, B, output reg Z); always @(A, B) if (A) Z=B;endmodule lat B D Q Z A C Z 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 19 e-mail: hahanova@mail.ru
  • 20. 3.3 Оператор CASE module ALU #(parameter ADD = b00, SUB = b01, MUL = b10, DIV = b11) (input [1:2] Op, input [0:1] A, B, output reg [0:1] Z); always @(Op, A, B) case (Op) ADD : Z = A + B; SUB : Z = A - B; MUL : Z = A * B; DIV : Z = A / 2; endcase endmodule 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 20 e-mail: hahanova@mail.ru
  • 21. Результат синтеза оператора CASE [1:2] [2] Op[1:2] [0:1] [0:1] 0 [0:1] [0:1] [1:0] [1:0] + [0:1] B[0:1] 1 un1_B_1[1:0] un1_A[0:1] [0:1] A[0:1] [1] e [0:1] [2] d [1] 1 [2] e [0:1] [0:1] 0 [0:1] Z[0:1] d 0 1 un1_Op_4 e =0 d un1_Op[0] [0] Z[0:1] [0:1] [0:1] * [0:1] Z_4[0:1] [2] [1] un1_Op_3 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 21 e-mail: hahanova@mail.ru
  • 22. Триггер из CASE latrs 0 D 0 [0] C [0] [1:0] Q NextToggle[1:0] [1:0] [1] R Toggle[1:0] S NextToggle10module NextStateLogic NextToggle_1[0] (input [1:0] Toggle, output reg [1:0] NextToggle); [1] [0] latrs always @(Toggle) NextToggle11 0 0 D C [1] Q case (Toggle) R S 2b01: NextToggle = 2b10; NextToggle_1[1] 2b10: NextToggle = 2b01; endcaseendmodule 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 22 e-mail: hahanova@mail.ru
  • 23. 3.4 Комбинационная схема из CASE always @(Toggle) case (Toggle) 2b01: NextToggle = 2b10; 2b10: NextToggle = 2b01; default: NextToggle = 2b01; NextToggle[1:0] endcase [0] [1:0] [1]Toggle[1:0] NextToggle14 un1_NextToggle14 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 23 e-mail: hahanova@mail.ru
  • 24. FULL CASEalways @(Toggle) case (Toggle) //synthesis full_case 2b01: NextToggle = 2b10; 2b10: NextToggle = 2b01; endcase NextToggle[1:0] [1] [1:0] [1] Toggle[1:0] un1_Toggle[1] 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 24 e-mail: hahanova@mail.ru
  • 25. 3.5 Использование casez module Casez_Ex (input [0:3] Pr_Counter, output reg [0:1] DoCommand); always @(Pr_Counter) casez(Pr_Counter) 4’b???1 : DoCommand = 0; 4’b??10 : DoCommand = 1; 4’b?100 : DoCommand = 2; 4’b1000 : DoCommand = 3; default : DoCommand = 3; endcase endmodule 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 25 e-mail: hahanova@mail.ru
  • 26. Результат синтеза casez DoCommand[0:1] [2] [0:3] [3]Pr_Counter[0:3] [3] DoCommand23[0] un1_DoCommand23_1 un1_DoCommand23_2 [0] [3] [3] e [2] 0 d [1] e DoCommand25 1 d e 0 d e 1 d [1] e 1 [3] [3] d [2] un1_DoCommand25_1 DoCommand_1[1] DoCommand24[0] 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 26 e-mail: hahanova@mail.ru
  • 27. Использование casexmodule PriorityLogic (input [2:0] Toggle, output reg [2:0] NextToggle); always @(Toggle) casex (Toggle) 3bxx1: NextToggle = 3b010; 3bx1x: NextToggle = 3b110; 3b1xx: NextToggle = 3b001; default: NextToggle = 3b000; endcase endmodule 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 27 e-mail: hahanova@mail.ru
  • 28. Результат синтеза casex NextToggle[2:0] [1] [0] NextToggle19 [2] [0] [2:0] [1]Toggle[2:0] un1_Toggle_1 NextToggle20 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 28 e-mail: hahanova@mail.ru
  • 29. 3.6 Параллельный CASEmodule ParallelCase (input [2:0] Toggle; output reg [2:0] NextToggle);always @(Toggle) casex (Toggle) // synthesis parallel_case 3bxx1: NextToggle = 3b010; 3bx1x: NextToggle = 3b110; 3b1xx: NextToggle = 3b001; default: NextToggle = 3b000; [1] endcase NextToggle[2:0] endmodule [2] [1] [2:0] [0] Toggle[2:0] un1_Toggle 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 29 e-mail: hahanova@mail.ru
  • 30. Использование неконстантных выражений выбораmodule Encoder (input [0:3] Bus; output reg [0:1] Address);always @(Bus) casez(1b1) //synthesis full_case Bus[0] : Address = 2b00; Bus[1] : Address = 2b01; Bus[2] : Address = 2b10; Bus[3] : Address = 2b11; endcaseendmodule 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 30 e-mail: hahanova@mail.ru
  • 31. Результат синтеза Address[0:1] [1] [0] Address19 [0] e 0 d e 1 d [2] [0] e [0:3] [1] 0Bus[0:3] d un1_Bus_1 un1_Bus_2 Address20 e 1 d Address_1[1] [3] [2] un1_Bus_3 Address21 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 31 e-mail: hahanova@mail.ru
  • 32. 3.7 Оператор цикла (1)module Multiplexer Line[3:0] (input [1:0] Address, output reg [3:0] Line); Address[1:0] [1:0] [0] [1] _l0.Line19 integer J;always @(Address) [1] [0] for (J = 3; J >= 0; J=J-1) _l1.Line44 if (Address == J) Line[J] = 1; [0] [1] else _l2.Line69 Line[J] = 0;endmodule [0] [1] _l3.Line90 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 32 e-mail: hahanova@mail.ru
  • 33. [1] xin1[1:8] [1:8] [1:8] [1] xout[1:8] xin2[1:8]Оператор цикла (2) [1] [1:8] xout_1[1] [2] [2] [2] xout_1[2]module synXor8 [3] (output reg [1:8] xout, [3] xout_1[3] [3] input [1:8] xin1, xin2); [4] [4] [4] xout_1[4]reg [1:8] i; [5] [5] [5] xout_1[5]always @(*) [6] for (i = 1; i <= 8; i = i + 1) [6] [6] xout_1[6] xout[i] = xin1[i] ^ xin2[i]; [7] [7] [7] xout_1[7]endmodule 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ [8] [8] 33 [8] e-mail: hahanova@mail.ru xout_1[8]
  • 34. 3.8 Локальное использование переменныхmodule GlobalReg (input Clk, input [3:0] State, output reg [3:0] NextState); reg [3:0] Temp;always @(negedge Clk) begin Temp = State; NextState <= Temp; endendmodule Clk [3:0] [3:0] [3:0] [3:0]State[3:0] D[3:0] Q[3:0] NextState[3:0] NextState[3:0] 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 34 e-mail: hahanova@mail.ru
  • 35. 3.8 Локальное использование переменныхmodule GlobalReg (input Clk; input [3:0] State; output reg [3:0] NextState); reg [3:0] Temp;always @(negedge Clk) begin NextState <= Temp; Temp = State; endendmodule Clk [3:0] [3:0] [3:0] [3:0] [3:0] [3:0] State[3:0] D[3:0] Q[3:0] D[3:0] Q[3:0] NextState[3:0] Temp[3:0] NextState[3:0] 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 35 e-mail: hahanova@mail.ru
  • 36. Блокирующие и неблокирующие операторыmodule FlagBits (input ClockB, Strobe, Xflag, Mask, output reg RightShift, SelectFirst, CheckStop);always @(negedge ClockB) begin RightShift = RightShift ^ Strobe; SelectFirst <= RightShift | Xflag; CheckStop <= SelectFirst ^ Mask; endendmodule Strobe D Q CheckStop ClockB D Q D Q SelectFirst_2 SelectFirst CheckStop_2 CheckStop RightShift RightShift_2 SelectFirst RightShift Xflag Mask 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 36 e-mail: hahanova@mail.ru
  • 37. Неблокирующие операторыmodule FlagBits (input ClockB, Strobe, Xflag, Mask; output reg RightShift, SelectFirst, CheckStop);always @(negedge ClockB) begin RightShift <= RightShift ^ Strobe; SelectFirst <= RightShift | Xflag; CheckStop <= SelectFirst ^ Mask; endendmodule XflagClockB D Q CheckStopStrobe D Q D Q SelectFirst_2 SelectFirst CheckStop_2 CheckStop RightShift_2 RightShift SelectFirst Mask RightShift 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 37 e-mail: hahanova@mail.ru
  • 38. Неблокирующие операторыmodule NonBlockingExample (input Clk, Merge, ER, Xmit, FDDI, output reg Claim); reg FCR;always @(posedge Clk) begin FCR<=ER|Xmit; if(Merge) Claim <= FCR & FDDI; else Claim <= FDDI; endendmoduleMerge Clk 0 D Q Claim ER 1 D Q Xmit Claim Claim_2 Claim_5 FCR_2 FCRFDDI 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 38 e-mail: hahanova@mail.ru
  • 39. Блокирующие операторы module NonBlockingExample (input Clk, Merge, ER, Xmit, FDDI, output reg Claim); reg FCR; always @(posedge Clk) begin FCR = ER|Xmit; if(Merge) Claim = FCR & FDDI; else Claim = FDDI; end endmodule FDDIMerge Clk 0 D Q Claim ER 1 Xmit Claim Claim_2 Claim_5 FCR_2 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 39 e-mail: hahanova@mail.ru
  • 40. Диапазон векторов module PartSelect (input[3:0] A, C, output [3:0] ZCat); assign ZCat [2:0] = {A[2], C[3:2]}; ZCat[3:0] endmodule A[3:0] [3:0] [3:0] [2] [3:2] C[3:0] 0 0 ZCat_1 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 40 e-mail: hahanova@mail.ru
  • 41. Константный индексmodule ConstantIndex (input[3:0] A, C, RegFile, output [3:0] ZCat);assign ZCat [2:0] ={A[2], C[3:2]};assign ZCat[0] = RegFile[3]; [3:0] [2] ZCat[3:0]endmodule A[3:0] [3:2] [3:0] C[3:0] 0 0 [2] RegFile[3:0] ZCat_1 [2:0] 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 41 e-mail: hahanova@mail.ru
  • 42. Переменная в качестве индекса module NonComputeRight [0] [1:0] [1] Index[1:0] un1_Index_3 (input[3:0] Data, input [1:0] Index, e output Dout); [0] [1] [0] d e [1] d Dout un1_Index_4 e assign Dout = Data [Index]; [2] d e [3:0] [3] Data[3:0] d Dout [1]endmodule [0] un1_Index_5 [0] [1] un1_Index_2 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 42 e-mail: hahanova@mail.ru
  • 43. Синтез подпрограмм: Функции module comb15 (input [3:0] A, B, input CIN, output [3:0] S, output COUT); wire [1:0] S0, S1, S2, S3; function signed [1:0] ADD (input A, B, CIN); reg S, COUT; begin S = A ^ B ^ CIN; COUT = (A&B) | (A&CIN) | (B&CIN); ADD = {COUT, S}; end endfunction assign S0 = ADD (A[0], B[0], CIN), S1 = ADD (A[1], B[1], S0[1]), S2 = ADD (A[2], B[2], S1[1]), S3 = ADD (A[3], B[3], S2[1]), S = {S3[0], S2[0], S1[0], S0[0]}, COUT = S3[1]; endmodule 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 43 e-mail: hahanova@mail.ru
  • 44. Результат синтеза функции [0] S[3:0] [0] [0] [0] [3] [3] [0] [1] [3] COUT [2] [1] [1] [3] [3:0] [0] [2]A[3:0]B[3:0] [3:0] [0] [1] ADD_3.un16_COUT ADD[0] ADD_1.un6_COUT ADD_2.un11_COUT ADD_0.un1_COUT [3] [2] [1] [1] [1] [1] [0] [1] [1] [1] [1] CIN ADD_1.un7_COUT ADD_2.un12_COUT ADD_10[1] ADD_3.un17_COUT ADD[1] ADD_0.un2_COUT ADD_4[1] ADD_7[1] [3] [2] [2] [1] [1] [0] [1] [2] [0] [1] ADD_2.un13_COUT ADD_3.un18_COUT [1] ADD_0.un3_COUT ADD_1.un8_COUT ADD_10[0] [1] [1] [0] [1] ADD_7[0] [0] [0] [0] ADD_4[0] 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 44 e-mail: hahanova@mail.ru
  • 45. Синтез подпрограмм: Задачиmodule EXAMPLE (input [3:0] A, B, input CIN, output reg [3:0] S, output reg COUT); reg [1:0] S0, S1, S2, S3; task ADD (input A, B, CIN, output reg [1:0] C); reg S, COUT; begin S = A ^ B ^ CIN; [0] [0] [0] [3:0] S[3:0] COUT = (A&B) | (A&CIN) | (B&CIN); S_1[0] C = {COUT, S}; [1] end [1] [1] endtask S_1[1]always @(A, B, CIN) [2] [2] [2]begin S_1[2] ADD (A[0], B[0], CIN, S0); [3] ADD (A[1], B[1], S0[1], S1); [3] [3] [3] [2] [1] [3] [3:0] [0] [2] A[3:0] [1] B[3:0] [3:0] [0] ADD_3.un16_COUT S_1[3] ADD (A[2], B[2], S1[1], S2); ADD_0.un1_COUT ADD_1.un6_COUT ADD_2.un11_COUT ADD (A[3], B[3], S2[1], S3); [2] [3] S = {S3[0], S2[0], S1[0], S0[0]}; [1] COUT [0] CIN ADD_2.un12_COUT ADD_3.un17_COUT S3[1] ADD_1.un7_COUT S2[1] COUT = S3[1]; ADD_0.un2_COUT S0[1] S1[1]end [0] [1] [2] [3]endmodule ADD_0.un3_COUT ADD_1.un8_COUT ADD_2.un13_COUT ADD_3.un18_COUT 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 45 e-mail: hahanova@mail.ru
  • 46. Assign and Deassign Statements Не синтезируется Synplifymodule assig (input RST, SELECT, CLOCK, input [0:3] DATA_IN, output reg [0:3] STATE); always @ (RST) if(RST) assign STATE = 4b0; else deassign STATE; always @ (posedge CLOCK) Результат синтеза модуля assig в XST STATE = DATA_IN;endmodule 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 46 e-mail: hahanova@mail.ru
  • 47. Контрольные вопросы 1 Сколько триггеров будет сгенерировано, если допустить, что каждая переменная соответствует одному биту? always @(posedge C) begin A1 = A&B; A2 <= A1^D; end 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 47 e-mail: hahanova@mail.ru
  • 48. Контрольные вопросы 2 Будет ли сгенерирован триггер из следующего кода? Если да, то сколько и какой/какие? always @(D, EС) begin: Design integer Tmp; if (EС) begin Q <= Tmp; Tmp = D; end end 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 48 e-mail: hahanova@mail.ru
  • 49. Контрольные вопросы 3 Какая логика будет сгенерирована для следующего кода? reg [3:0] OUT; wire [3:0] Shift, N; always @(posedge CLK) begin OUT <= Shift >> N; end 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 49 e-mail: hahanova@mail.ru
  • 50. Контрольные вопросы 4 Будут ли сгенерированы триггер или триггеры для следующего кода? always @(Sel) case (Sel) // synthesis full_case 2’b01: Q <= 2’b10; 2’b10: Q <= 2’b01; endcase 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 50 e-mail: hahanova@mail.ru
  • 51. Контрольные вопросы 5 Какая логика генерируется из следующего кода? wire A1, A2; reg Q; always begin wait (A1); #10 Q <= A2; end 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 51 e-mail: hahanova@mail.ru
  • 52. Контрольные вопросы 6 Следующий код является моделью двух регистров. Результаты моделирования после синтеза не совпали с функциональным моделирования. Почему? always @(posedge CLK) begin if (EN) R1 = D1; else R1 = R2; end always @(posedge CLK) begin if (EN) R2 = D2; else R2 = R1; end 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 52 e-mail: hahanova@mail.ru
  • 53. Контрольные вопросы 7 Результаты моделирования после синтеза не совпали с результатами функционального моделирования. Почему? always @(A) C <= A | B; 13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 53 e-mail: hahanova@mail.ru