53
13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e- mail: [email protected] 1 7. Синтезируемое подмножество Verilog Автоматизация проектирования компьютерных систем

апкс 2011 07_синтез_verilog

Embed Size (px)

Citation preview

Page 1: апкс 2011 07_синтез_verilog

13.03.2011Хаханова И.В, каф.АПВТ, ХНУРЭ e-

mail: [email protected] 1

7. Синтезируемое подмножество Verilog

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

Page 2: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

2

Цель лекции и содержание

Цель – изучить синтезируемы Verilog-конструкции и принципы их преобразования в схему

План Этапы синтеза Синтезируемые конструкции в Verilog

Page 3: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

3

Этапы синтеза RTL Description

Translation

UnoptimizedIntermediateRepresentation

Logic Optimization

Technology Mappingand Optimization

Optimized Gate-LevelRepresentation

Library of avaiblegates, and leaf-levelcells. (technology library)

Design Constraints

Page 4: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

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, case, casex, casez

Initial игнорируетсяSynplify: не поддерживается deassign, wait, force, release

Процедурные блоки begin, end, именные блоки, disable

Разрешается использование оператора disable для именных блоков

forwhileforeverrepeat в Synplify

Уровень data flow assignВентильный уровень стандартные примитивы

Информация о задержках игнорируется

должны содержать конструкции@(posedge clk) или (@(negedge clk)

Циклы

Page 5: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

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

Цепи (Net)wire, tri,triand/wand, trior/worsupply0, supply1

wire, tri,

supply1, supply0

Регистры (Reqister) reg, integer reg, integertime (64 bit reg)

Поддерживаемые типы данных

Page 6: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

6

1 Синтез комбинационной логики Может быть сгенерирована:Из вентильных моделей.Из data-flow моделей.Из процедурного оператора always

• Все входы комбинационной функции должны быть указаны в списке чувствительности

• При использовании операторов if или case, необходимо чтобы выходной сигнал получал значение при каждой возможной ситуации. При каждой итерации выполнения блока begin-endвыходной сигнал должен обновлять свое значение.

Page 7: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

7

Оператор assign

Реализуется комбинационной логикойassign out = (a & b) | c;

outun1_out

c

ba out

sum_1[1:0]

+ [1:0]

c_in

b

a sum[0]

c_out[1]

out

0

1

b

a

s

out

assign out=(s)? a: b;assign {c_out, sum} = a + b + c_in;

Page 8: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

8

Использование alwaysдля комбинационной логики

always @(a, b, c_in){c_out, sum} = a + b + c_in;

sum_1[1:0]

+ [1:0]

c_in

b

a sum[0]

c_out[1]

Допускается использование сокращенной записи описания всех портов в списке чувствительности:

always @(*) // или always @*{c_out, sum} = a + b + c_in;

Данная конструкция генерирует схему, аналогичную предыдущей.

Page 9: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

9

2 Синтез последовательностныхустройств В списке чувствительности always выполняется

проверка только фронтов сигналов синхронизации clock, асинхроных сброса reset и установки preset. Проверяются только сигналы, непосредственно влияющие на изменение состояния.

В операторе always условия reset и presetописываются первыми.

Внутри блока begin-end условие синхронизации не описывается.

Нельзя описывать в одном блоке комбинационную и последовательностые схемы.

Для моделей последовательностных схем предпочтительнее использование неблокирующихоператоров “<=”.

Page 10: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

10

Использование alwaysдля последовательностной логики module flop

(input C, D, output reg Q);always @(posedge C)

Q <= D;endmodule

module flop1 (input C, D, CLR,output reg Q);

always @(negedge C, posedge CLR)if (CLR) Q <= 1'b0;else Q <= D;

endmodule

Q

QD QDC

Q

RQD Q

CLR

DC

Page 11: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

11

Триггер-защелка module flop

(input Clk, D, output reg Q);

always @(Clk, D)if (Clk) Q <= D;

endmodule lat

Q

QDClk

D QC

Page 12: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

12

Шаблон последовательностного устройства с асинхронными управляющими сигналами

always @(posedge A, negedge B, negedge C, … posedge Clock)if (A) // A = 1

<statement> //asychronous logicelse if (!B) // B = 0

<statement> //asynchronous logicelse if (!C) // C = 0

<statement> // asynchronous logic . . . //Любое количество конструкций else ifelse // posedge Clock

<statement> //synchronous logic

Page 13: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

13

Шаблон последовательностного устройства с синхронными управляющими сигналами

always @(posedge Clock)if (A) // A = 1

<statement> //sychronous logicelse if (!B) // B = 0

<statement> //synchronous logicelse if (!C) // C = 0

<statement> //synchronous logic . . . //Любое количество конструкций else ifelse // posedge Clock

<statement> //synchronous logic

Page 14: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

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;end

endmodule

Page 15: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

15

Пример. Счетчик (2)

un3[1:0]

0

1 un1_Counter[1:0]+

Counter_7[1:0]

0

1

Counter[1:0]

RCounter[1:0][1:0]

Data[1:0] [1:0]Clear

UpDown

Preset

Clk

11

[1:0]01

[1:0]

[1:0][1:0][1:0]

[1:0][1:0] [1:0]Q[1:0][1:0] D[1:0]

Page 16: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

16

3 Особые ситуации синтеза 1. Использование блокирующих и

неблокирующих операторов2. Оператор IF3. Оператор CASE4. Комбинационная схема из CASE5. Использование casez и casex6. Параллельный CASE7. Оператор цикла8. Локальное использование переменных

Page 17: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

17

3.1 Блокирующие и неблокирующиеоператоры

always @(in1) begin

if (in2) out1 = in1;else out1 <= in2;

end

Не допускается использовать одновременно блокирующие и неблокирующие операторы для присвоения значений одному сигналу

if (in2) beginout1[0] = 1’b0;out1[1] <= in1;

endelse begin

out1[0] = in2;out1[1] <= 1’b1;

end

Page 18: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

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

Z[1:0]

0

1

[1:0][1:0]

[1:0]Z4<

[1:0]

[1:0]

Z[1:0][1:0]

B[1:0] [1:0]

A[1:0] [1:0]

Page 19: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

19

Появление триггера из оператора if

module SelectOneOf(input A, B, output reg Z);always @(A, B)

if (A) Z=B;endmodule

lat

Z

D QC ZBA

Page 20: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

20

3.3 Оператор CASEmodule 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;

endcaseendmodule

Page 21: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

21

Результат синтеза оператора CASE

un1_Op_3

un1_B_1[1:0]

0

1

un1_Op_4

un1_Op[0]

0

1

Z_4[0:1]*

un1_A[0:1]

+

Z[0:1]

ed

ed

ed

Z[0:1][0:1]

B[0:1] [0:1]

A[0:1] [0:1]

Op[1:2] [1:2]

=0[0]

[2][1]

[2]

[0:1][1:0]

[0:1]

[1][2]

[2]

1

0

[0:1][0:1]

[0:1]

[0:1]

[0:1][1:0]

[1][0:1]

[0:1][0:1]

Page 22: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

22

Триггер из CASE

module NextStateLogic(input [1:0] Toggle,output reg [1:0] NextToggle);always @(Toggle)

case (Toggle)2'b01: NextToggle = 2'b10;2'b10: NextToggle = 2'b01;

endcaseendmodule

NextToggle10

NextToggle11

latrs

NextToggle_1[0]

latrs

NextToggle_1[1]

NextToggle[1:0][1:0]

Toggle[1:0] [1:0][0][1]

[1][0]

0 D0 C [0]QR

S

0 D0 C [1]QR

S

Page 23: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

23

3.4 Комбинационная схема из CASE

always @(Toggle)case (Toggle)

2'b01: NextToggle = 2'b10;2'b10: NextToggle = 2'b01; default: NextToggle = 2'b01;

endcase

un1_NextToggle14NextToggle14

[0][1]Toggle[1:0] [1:0]

NextToggle[1:0]

Page 24: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

24

FULL CASE

always @(Toggle)case (Toggle) //synthesis full_case

2'b01: NextToggle = 2'b10;2'b10: NextToggle = 2'b01;

endcase

un1_Toggle[1]

NextToggle[1:0]

Toggle[1:0] [1:0]

[1]

[1]

Page 25: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

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;

endcaseendmodule

Page 26: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

26

Результат синтеза casez

DoCommand23[0]

DoCommand24[0]

DoCommand25

un1_DoCommand23_1un1_DoCommand23_2

un1_DoCommand25_1DoCommand_1[1]

ed

ed

ed

ed

ed

DoCommand[0:1]

Pr_Counter[0:3] [0:3][2][3]

[1][3][2]

[0][3][2][1]

[3]

[3]

[3]0

1

0

1

1

Page 27: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

27

Использование casexmodule PriorityLogic

(input [2:0] Toggle, output reg [2:0] NextToggle);always @(Toggle)

casex (Toggle)3'bxx1: NextToggle = 3'b010; 3'bx1x: NextToggle = 3'b110;3'b1xx: NextToggle = 3'b001;default: NextToggle = 3'b000;

endcaseendmodule

Page 28: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

28

Результат синтеза casex

un1_Toggle_1

NextToggle19

NextToggle20

NextToggle[2:0]

Toggle[2:0] [2:0][0][1]

[1][0]

[2]

Page 29: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

29

3.6 Параллельный CASE

un1_Toggle

[1][0]Toggle[2:0] [2:0]

NextToggle[2:0][1]

[2]

module ParallelCase(input [2:0] Toggle; output reg [2:0] NextToggle);

always @(Toggle)casex (Toggle) // synthesis parallel_case

3'bxx1: NextToggle = 3'b010; 3'bx1x: NextToggle = 3'b110;3'b1xx: NextToggle = 3'b001;default: NextToggle = 3'b000;

endcaseendmodule

Page 30: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

30

Использование неконстантных выражений выбора

module Encoder(input [0:3] Bus; output reg [0:1] Address);

always @(Bus)casez(1'b1) //synthesis full_case

Bus[0] : Address = 2'b00;Bus[1] : Address = 2'b01;Bus[2] : Address = 2'b10;Bus[3] : Address = 2'b11;

endcaseendmodule

Page 31: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

31

Результат синтеза

un1_Bus_1 un1_Bus_2

Address19

un1_Bus_3

Address20

Address21

Address_1[1]

ed

ed

ed

ed

Address[0:1]

Bus[0:3] [0:3][0][1]

[1][0]

[2]

[2]

[3]

[0]0

1

0

1

Page 32: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

32

3.7 Оператор цикла (1)module Multiplexer

(input [1:0] Address,output reg [3:0] Line);

integer J;always @(Address)

for (J = 3; J >= 0; J=J-1)if (Address == J)

Line[J] = 1;else

Line[J] = 0;endmodule

_l0.Line19

_l1.Line44

_l2.Line69

_l3.Line90

Line[3:0]

Address[1:0] [1:0][0][1]

[1][0]

[0][1]

[0][1]

Page 33: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

33

Оператор цикла (2)

module synXor8(output reg [1:8] xout,input [1:8] xin1, xin2);

reg [1:8] i;always @(*)

for (i = 1; i <= 8; i = i + 1)xout[i] = xin1[i] ^ xin2[i];

endmodule

xout_1[1]

xout_1[2]

xout_1[3]

xout_1[4]

xout_1[5]

xout_1[6]

xout_1[7]

xout_1[8]

xin2[1:8] [1:8]

xin1[1:8] [1:8] xout[1:8][1:8][1]

[1][1]

[2]

[2][2]

[3]

[3][3]

[4]

[4][4]

[5]

[5][5]

[6]

[6][6]

[7]

[7][7]

[8]

[8][8]

Page 34: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

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

NextState[3:0]

NextState[3:0][3:0]State[3:0] [3:0]Clk

[3:0]Q[3:0][3:0] D[3:0]

Page 35: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

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

NextState[3:0]Temp[3:0]

NextState[3:0][3:0]State[3:0] [3:0]Clk

[3:0]Q[3:0][3:0] D[3:0][3:0]Q[3:0][3:0] D[3:0]

Page 36: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

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

RightShift_2CheckStop_2 CheckStop

RightShiftSelectFirst_2 SelectFirst

CheckStop

SelectFirstRightShift

MaskXflag

Strobe

ClockB QD

QDQD

Page 37: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

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

RightShift_2 SelectFirst_2 CheckStop_2 CheckStopRightShift SelectFirst

CheckStop

SelectFirst

RightShiftMask

Xflag

Strobe

ClockB

QDQD QD

Page 38: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

38

Неблокирующие операторыmodule NonBlockingExample

(input Clk, Merge, ER, Xmit, FDDI, output reg Claim);

reg FCR;always @(posedge Clk)

beginFCR<=ER|Xmit;if(Merge) Claim <= FCR & FDDI;else Claim <= FDDI;

endendmodule

FCR_2 Claim_2FCRClaim_5

0

1Claim

Claim

FDDI

XmitER

MergeClk

QD

QD

Page 39: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

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

FCR_2 Claim_2 Claim_5

0

1Claim

Claim

FDDI

XmitER

MergeClk

QD

Page 40: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

40

Диапазон векторов

module PartSelect

(input[3:0] A, C, output [3:0] ZCat);

assign ZCat [2:0] = {A[2], C[3:2]};

endmodule

ZCat_1

C[3:0] [3:0]A[3:0] [3:0]

ZCat[3:0][2]

[3:2]

0

0

Page 41: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

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];endmodule

ZCat_1RegFile[3:0]

C[3:0] [3:0]

A[3:0] [3:0]ZCat[3:0]

[2][2:0]

[2][3:2]

0

0

Page 42: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

42

Переменная в качестве индекса module NonComputeRight

(input[3:0] Data,input [1:0] Index,output Dout);

assign Dout = Data [Index];

endmodule

un1_Index_2

un1_Index_3

un1_Index_4

un1_Index_5

Dout

ed

ed

ed

ed

Dout

Index[1:0] [1:0]

Data[3:0] [3:0]

[0][1]

[0][1]

[0][1]

[1][0]

[0]

[1]

[2]

[3]

Page 43: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

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};

endendfunction

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

Page 44: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

44

Результат синтеза функции

ADD_4[0]

ADD_0.un1_COUT

ADD_0.un2_COUT

ADD_0.un3_COUT

ADD_1.un6_COUT ADD_2.un11_COUT ADD_3.un16_COUT

ADD_4[1]

ADD_7[0]

ADD_1.un7_COUT

ADD_1.un8_COUT

ADD_7[1]

ADD_10[0]

ADD_2.un12_COUT

ADD_2.un13_COUT

ADD_10[1]

ADD[0]

ADD_3.un17_COUT

ADD_3.un18_COUT

ADD[1]

COUT[1]

S[3:0]

CIN

B[3:0] [3:0]A[3:0] [3:0]

[0][0][0][0]

[0][0][0]

[0][0]

[0]

[0]

[1][1]

[2][2]

[3][3]

[1]

[1][0][1]

[1]

[1][1]

[1][1]

[1]

[2][0][2]

[1]

[2][1]

[2][1]

[1]

[3][0][3]

[1]

[3][1]

[3][1]

[1]

Page 45: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

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;COUT = (A&B) | (A&CIN) | (B&CIN);C = {COUT, S};

endendtask

always @(A, B, CIN)begin

ADD (A[0], B[0], CIN, S0);ADD (A[1], B[1], S0[1], S1);ADD (A[2], B[2], S1[1], S2);ADD (A[3], B[3], S2[1], S3);S = {S3[0], S2[0], S1[0], S0[0]};COUT = S3[1];

endendmodule

S_1[0]

ADD_0.un1_COUT

ADD_0.un2_COUT

ADD_0.un3_COUT

ADD_1.un6_COUT ADD_2.un11_COUT ADD_3.un16_COUT

S0[1]

S_1[1]

ADD_1.un7_COUT

ADD_1.un8_COUT

S1[1]

S_1[2]

ADD_2.un12_COUT

ADD_2.un13_COUT

S2[1]

S_1[3]

ADD_3.un17_COUT

ADD_3.un18_COUT

S3[1]

COUT

S[3:0][3:0]

CIN

B[3:0] [3:0]A[3:0] [3:0]

[0][0][0]

[0][0]

[0]

[0]

[1][1]

[2][2]

[3][3]

[1][1][1]

[1]

[1]

[2][2][2]

[2]

[2]

[3][3][3]

[3]

[3]

Page 46: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

46

Assign and Deassign StatementsНе синтезируется Synplify

module assig(input RST, SELECT, CLOCK, input [0:3] DATA_IN,output reg [0:3] STATE);

always @ (RST)if(RST) assign STATE = 4'b0;else deassign STATE;

always @ (posedge CLOCK)STATE = DATA_IN;

endmodule

Результат синтеза модуля assig в XST

Page 47: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

47

Контрольные вопросы 1

Сколько триггеров будет сгенерировано, если допустить, что каждая переменная соответствует одному биту?always @(posedge C)begin

A1 = A&B;A2 <= A1^D;

end

Page 48: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

48

Будет ли сгенерирован триггер из следующего кода? Если да, то сколько и какой/какие?

always @(D, EС)begin: Designinteger Tmp;if (EС)beginQ <= Tmp;Tmp = D;

endend

Контрольные вопросы 2

Page 49: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

49

Какая логика будет сгенерирована для следующего кода?reg [3:0] OUT;wire [3:0] Shift, N;always @(posedge CLK)begin

OUT <= Shift >> N;end

Контрольные вопросы 3

Page 50: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

50

Будут ли сгенерированы триггер или триггеры для следующего кода?always @(Sel)case (Sel) // synthesis full_case2’b01: Q <= 2’b10;2’b10: Q <= 2’b01;

endcase

Контрольные вопросы 4

Page 51: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

51

Какая логика генерируется из следующего кода?wire A1, A2;reg Q;alwaysbeginwait (A1);#10 Q <= A2;

end

Контрольные вопросы 5

Page 52: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

52

Следующий код является моделью двух регистров. Результаты моделирования после синтеза не совпали с функциональным моделирования. Почему?

always @(posedge CLK)beginif (EN) R1 = D1;else R1 = R2;

endalways @(posedge CLK)beginif (EN) R2 = D2;else R2 = R1;

end

Контрольные вопросы 6

Page 53: апкс 2011 07_синтез_verilog

13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]

53

Контрольные вопросы 7

Результаты моделирования после синтеза не совпали с результатами функционального моделирования. Почему?

always @(A)C <= A | B;