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-level
Design 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 out
assign {c_out, sum} = a + b + c_in; assign out=(s)? a: b;
[0]
sum
a s
b + [1:0]
[1]
b 0
out
c_out
c_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 <= 1'b0; 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
16. 3 Особые ситуации синтеза
1. Использование блокирующих и
неблокирующих операторов
2. Оператор IF
3. Оператор CASE
4. Комбинационная схема из CASE
5. Использование casez и casex
6. Параллельный CASE
7. Оператор цикла
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
19. Появление триггера из оператора if
module 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
NextToggle10
module 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
2'b01: NextToggle = 2'b10; NextToggle_1[1]
2'b10: NextToggle = 2'b01;
endcase
endmodule
13.03.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 22
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
31. Результат синтеза
Address[0:1]
[1]
[0]
Address19
[0]
e
0
d
e
1
d
[2]
[0]
e
[0:3] [1] 0
Bus[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
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) Результат синтеза модуля 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