Upload
irina-hahanova
View
548
Download
0
Embed Size (px)
Citation preview
13.03.2011Хаханова И.В, каф.АПВТ, ХНУРЭ e-
mail: [email protected] 1
7. Синтезируемое подмножество Verilog
Автоматизация проектирования компьютерных систем
13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]
2
Цель лекции и содержание
Цель – изучить синтезируемы Verilog-конструкции и принципы их преобразования в схему
План Этапы синтеза Синтезируемые конструкции в 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
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)
Циклы
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)
Поддерживаемые типы данных
13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]
6
1 Синтез комбинационной логики Может быть сгенерирована:Из вентильных моделей.Из data-flow моделей.Из процедурного оператора always
• Все входы комбинационной функции должны быть указаны в списке чувствительности
• При использовании операторов if или case, необходимо чтобы выходной сигнал получал значение при каждой возможной ситуации. При каждой итерации выполнения блока begin-endвыходной сигнал должен обновлять свое значение.
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;
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;
Данная конструкция генерирует схему, аналогичную предыдущей.
13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]
9
2 Синтез последовательностныхустройств В списке чувствительности always выполняется
проверка только фронтов сигналов синхронизации clock, асинхроных сброса reset и установки preset. Проверяются только сигналы, непосредственно влияющие на изменение состояния.
В операторе always условия reset и presetописываются первыми.
Внутри блока begin-end условие синхронизации не описывается.
Нельзя описывать в одном блоке комбинационную и последовательностые схемы.
Для моделей последовательностных схем предпочтительнее использование неблокирующихоператоров “<=”.
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
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
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
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
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
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]
13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]
16
3 Особые ситуации синтеза 1. Использование блокирующих и
неблокирующих операторов2. Оператор IF3. Оператор CASE4. Комбинационная схема из CASE5. Использование casez и casex6. Параллельный CASE7. Оператор цикла8. Локальное использование переменных
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
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]
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
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
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]
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
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]
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]
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
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
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
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]
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
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
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
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]
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]
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]
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]
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
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
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
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
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
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
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]
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
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]
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]
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
13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]
47
Контрольные вопросы 1
Сколько триггеров будет сгенерировано, если допустить, что каждая переменная соответствует одному биту?always @(posedge C)begin
A1 = A&B;A2 <= A1^D;
end
13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]
48
Будет ли сгенерирован триггер из следующего кода? Если да, то сколько и какой/какие?
always @(D, EС)begin: Designinteger Tmp;if (EС)beginQ <= Tmp;Tmp = D;
endend
Контрольные вопросы 2
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
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
13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]
51
Какая логика генерируется из следующего кода?wire A1, A2;reg Q;alwaysbeginwait (A1);#10 Q <= A2;
end
Контрольные вопросы 5
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
13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]
53
Контрольные вопросы 7
Результаты моделирования после синтеза не совпали с результатами функционального моделирования. Почему?
always @(A)C <= A | B;