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

апкс 2011 08_verilog_макросы

Embed Size (px)

Citation preview

Page 1: апкс 2011 08_verilog_макросы

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

mail: [email protected] 1

8. Синтезируемые Verilog-модели цифровых устройств

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

Page 2: апкс 2011 08_verilog_макросы

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

2

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

Цель – изучить принципы построения синтезируемых моделей цифровых устройств на Verilog

План Модели комбинационных устройств Арифметические устройства

Page 3: апкс 2011 08_verilog_макросы

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

3

Комбинационные элементы

Page 4: апкс 2011 08_verilog_макросы

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

4

Мультиплексор 4 в 1 с использованием IF

module mux (input a,b,c,d, input [1:0] s, output reg o);always @(a, b, c, d, s)

beginif (s == 2'b00) o = a;else if (s == 2'b01) o = b;else if (s == 2'b10) o = c;else o = d;

endendmodule

o6

o7

o8 un1_s_1

o

ed

ed

ed

ed

o

s[1:0] [1:0]

d

cb

a

[0][1]

[0][1]

[1][0]

[1]

Page 5: апкс 2011 08_verilog_макросы

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

5

Мультиплексор 4 в 1 с использованием CASE

module mux(input a,b,c,d, input [1:0] s,output reg o);

always @(a, b, c, d, s)begin

case (s)2'b00 : o = a;2'b01 : o = b;2'b10 : o = c;default : o = d;

endcaseendendmodule

o6

o7

o8 un1_o8

o

ed

ed

ed

ed

o

s[1:0] [1:0]

d

cb

a

[0][1]

[0][1]

[1][0]

[1]

Page 6: апкс 2011 08_verilog_макросы

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

6

Мультиплексор на тристабильных буферах

module mux(input a,b,c,d, input [3:0] s,output o);

assign o = s[3] ? a :1'bz;assign o = s[2] ? b :1'bz;assign o = s[1] ? c :1'bz;assign o = s[0] ? d :1'bz;

endmodule

un3_o

un8_o

un13_o

un18_o

o

s[3:0] [3:0]

d

c

b

a

[3]

[2]

[1]

[0]

Page 7: апкс 2011 08_verilog_макросы

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

7

Дешифратор (One-Hot)module mux

(input [2:0] sel, output reg [7:0] res);always @(sel, res)

case (sel)3'b000 : res = 8'b00000001;3'b001 : res = 8'b00000010;3'b010 : res = 8'b00000100;3'b011 : res = 8'b00001000;3'b100 : res = 8'b00010000;3'b101 : res = 8'b00100000;3'b110 : res = 8'b01000000;default : res = 8'b10000000;

endcaseendmodule res34

res35

res36

res37res38

res39

res40

un1_res40un1_res40_1

res[7:0]

sel[2:0] [2:0]

[0][1][2]

[0][1][2]

[1][0][2]

[0][1][2]

[2][0][1]

[0][2][1]

[1][2][0]

[2]

Page 8: апкс 2011 08_verilog_макросы

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

8

Дешифратор ONE-COLDmodule dec (sel, res);input [2:0] sel; output [7:0] res; reg [7:0] res; always @(sel)

case (sel)3'b000 : res = 8'b11111110;3'b001 : res = 8'b11111101;3'b010 : res = 8'b11111011;3'b011 : res = 8'b11110111;3'b100 : res = 8'b11101111;3'b101 : res = 8'b11011111;3'b110 : res = 8'b10111111;default : res = 8'b01111111;

endcaseendmodule

un1_res40_1

[2]

un1_res40

un1_res39

un1_res38

un1_res37

un1_res36

un1_res35

un1_res34

res40

[1][2][0]

res39

[0][2][1]

res38

[2][0][1]

res37

[0][1][2]

res36

[1][0][2]

res35

[0][1][2]

res34

[0][1][2]

res[7:0]

sel[2:0] [2:0]

Page 9: апкс 2011 08_verilog_макросы

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

9

Дешифратор на операторе casemodule mux (sel, res);

(input [2:0] sel,output reg [7:0] res);

always @(sel, res)case (sel)3'b000 : res = 8'b00000001;3'b001 : res = 8'b00000010;3'b010 : res = 8'b00000100;3'b011 : res = 8'b00001000;3'b100 : res = 8'b00010000;3'b101 : res = 8'b00100000;// 110 and 111 selector values are unuseddefault : res = 8'bxxxxxxxx;

endcaseendmodule

res35

[0][2][1]

res34

[2][0][1]

res33

[0][1][2]

res32

[1][0][2]

res31

[0][1][2]

res30

[0][1][2]

res[7:0]

sel[2:0] [2:0]

00

Page 10: апкс 2011 08_verilog_макросы

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

10

Устройства сдвигаXilinx проектирует логические схемы сдвига как комбинационную схему

с двумя входами и 1 выходом Первый вход - сдвигаемые данные Второй вход - определяет число разрядов, на которые выполняется

сдвигНа выход поступает результат операции сдвига.Следует использовать один тип операции сдвига.Значение n для операции сдвига должно увеличиваться или

уменьшаться только на 1 для каждого последующего двоичного значения селектора.

Значение n может быть только положительнымВсе значения селектора должны присутствовать

Page 11: апкс 2011 08_verilog_макросы

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

11

Комбинационное устройство сдвига 1

module lshift(input [7:0] DI, input [1:0] SEL, output reg [7:0] SO);

always @(DI, SEL)case (SEL)

2'b00 : SO <= DI;2'b01 : SO <= DI << 1;2'b10 : SO <= DI << 2;default : SO <= DI << 3;

endcaseendmodule

Page 12: апкс 2011 08_verilog_макросы

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

12

Комбинационное устройство сдвига 2

SO21

SO22

SO23 un1_SO23

SO[7:0]

ed

ed

ed

ed

SO[7:0][7:0]

SEL[1:0] [1:0]

DI[7:0] [7:0]

[4:0]=000

[5:0]=00

[6:0]=0

[0][1]

[0][1]

[1][0]

[1]

[7:0]

[7:0]

Page 13: апкс 2011 08_verilog_макросы

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

13

Арифметические устройства Сумматоры: С переносом из младшего разряда С переносом в старший разряд С переносом из младшего и в старший разряд

Устройство вычитания Сумматор/вычитатель Компаратор (=, /=,<, <=, >, >=) Устройство умножения Устройство деленияСложение, вычитание, сравнение и умножение разрешено для

знаковых и беззнаковых чисел

Page 14: апкс 2011 08_verilog_макросы

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

14

Сумматор (беззнаковый) 1Без переносаmodule adder

(input [7:0] A, B,output [7:0] SUM);

assign SUM = A + B;endmodule

С переносом из мл. раз.module adder

(input [7:0] A, B, input CI,output [7:0] SUM);

assign SUM = A + B + CI;endmodule

SUM_1[7:0]+ SUM[7:0][7:0]

B[7:0] [7:0]

A[7:0] [7:0] [7:0][7:0]

[7:0]

SUM_1[7:0]

+ SUM[7:0][7:0]

CI

B[7:0] [7:0]

A[7:0] [7:0] [7:0]

[7:0][7:0]

Page 15: апкс 2011 08_verilog_макросы

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

15

Сумматор (беззнаковый) 2с переносом в ст. разр.module adder

(input [7:0] A, B, output [7:0] SUM, output CO); wire [8:0] tmp;

assign tmp = A + B;assign SUM = tmp [7:0];assign CO = tmp [8];

endmodule

tmp[8:0]+

SUM[7:0]

CO[8]

SUM[7:0][7:0]

B[7:0] [7:0]

A[7:0] [7:0] [7:0][8:0]

[7:0][7:0][7:0]

Page 16: апкс 2011 08_verilog_макросы

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

16

tmp[8:0]

+SUM[7:0]

CO[8]

SUM[7:0][7:0]B[7:0] [7:0]

A[7:0] [7:0]

CI

[7:0]

[8:0][7:0] [7:0][7:0]

Сумматор (беззнаковый) 3module adder

(input CI, input [7:0] A, B,output [7:0] SUM, output CO);

wire [8:0] tmp;assign tmp = A + B + CI;assign SUM = tmp [7:0];assign CO = tmp [8];

endmodule

Page 17: апкс 2011 08_verilog_макросы

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

17

Сумматор (знаковый)(XST)

Для прог. синтеза XSTmodule adder

(input signed [7:0] A, B, output signed [7:0] SUM);

assign SUM = A + B;endmodule

Page 18: апкс 2011 08_verilog_макросы

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

18

Устройство вычитания

module subtr(input [7:0] A, B, output [7:0] RES);

assign RES = A - B;endmodule

RES_1[7:0]

+ RES[7:0][7:0]B[7:0] [7:0]

A[7:0] [7:0] [7:0]

[7:0][7:0]

1

Page 19: апкс 2011 08_verilog_макросы

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

19

Компаратор

module compar(input [7:0] A, B, output CMP);

assign CMP = A >= B ? 1'b1 : 1'b0;endmodule

un1_CMP<

CMP

CMPB[7:0] [7:0]

A[7:0] [7:0] [7:0]

[7:0]

Page 20: апкс 2011 08_verilog_макросы

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

20

Беззнаковый умножительmodule mult(A, B, RES);

input [7:0] A; input [3:0] B; output [11:0] RES;assign RES = A * B;

endmodule

RES[11:0]*

[7:0][11:0]

[3:0]RES[11:0][11:0]

B[3:0] [3:0]

A[7:0] [7:0]

Использует 32 блока LUT

Page 21: апкс 2011 08_verilog_макросы

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

21

Устройство деления

Поддерживается деление на константу степени 2module divider(DI, DO);

input [7:0] DI; output [7:0] DO;assign DO = DI / 2;

endmodule

DO[7:0]DI[7:0] [7:0]

=0[7:1]

Page 22: апкс 2011 08_verilog_макросы

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

22

Совместное использование ресурсов (Resource Sharing)

Цель уменьшить размер схемы основываясь на принципе, что два подобных арифметических ресурса могут быть реализованы на одной схеме, если она никогда не используется ими одновременно

XST поддерживает совместное использование ресурсов для сумматоров, вычитателей, сумматоров/вычитателей и умножителей.

Page 23: апкс 2011 08_verilog_макросы

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

23

Совместное использование ресурсов

module addsub(input OPER, input [7:0] A, B, C,output reg [7:0] RES);

always @(A, B, C, OPER)if (OPER==1'b0) RES = A + B;else RES = A - C;

endmodule

Page 24: апкс 2011 08_verilog_макросы

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

24

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

un1_B[7:0]

0

1

RES[7:0]

+ RES[7:0][7:0]

C[7:0] [7:0]

B[7:0] [7:0]

A[7:0] [7:0]

OPER[7:0]

[7:0][7:0]

[7:0]

[7:0][7:0]

Совместноеиспользование ресурсов

Без совместного использования ресурсов

RES_1[7:0]+

un4_RES[7:0]

+

RES[7:0]

0

1RES[7:0][7:0]

C[7:0] [7:0]

B[7:0] [7:0]

A[7:0] [7:0]

OPER

[7:0][7:0]

[7:0]

[7:0]

[7:0][7:0]

1

[7:0][7:0]

[7:0]

Page 25: апкс 2011 08_verilog_макросы

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

25

Последовательностная логика

Page 26: апкс 2011 08_verilog_макросы

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

26

Триггеры 1module flop

(input C, D, output reg Q);

always @(posedge C)Q = D;

endmodule

Задний фронт синхронизации и асинхронный сброс

module flop(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 27: апкс 2011 08_verilog_макросы

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

27

Триггеры 2Передний фронт синхронизации и синхронная установка в 1

module flop(input C, D, S,output reg Q);

always @(posedge C)if (S) Q = 1’b1;else Q = D;

endmodule

Передний фронт синхронизации и сигнал разрешения синхронизации CE

module flop(input C, D, CE,output reg Q);

always @(posedge C)if (CE) Q = D;

endmodule

Q

QDS

QSDC

Q

QDE

QCE

DC

Page 28: апкс 2011 08_verilog_макросы

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

28

Триггеры-защелки

module latch(input G, D,output reg Q);

always @(G, D)if (G) Q = D;

endmodule

module latch(input G, D, CLR, output regQ);

always @(G, D, CLR)if (CLR)

Q = 1'b0;else if (G)

Q = D;endmodulelat

Q

QDG

D QC

latr

Q

QCLR

DG

DQC

R

Page 29: апкс 2011 08_verilog_макросы

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

29

Счетчики: 4-битовый беззнаковый с асинхронным сбросом

module counter(input C, CLR, output reg [3:0] Q);

always @(posedge C, posedge CLR)if (CLR) Q = 4'b0000;else Q = Q + 1'b1;

endmodule

un3_Q[3:0]+

Q[3:0]

RQ[3:0][3:0]

CLR

C

[3:0][3:0]

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

Page 30: апкс 2011 08_verilog_макросы

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

30

module counter(input C, S, output reg [3:0] Q);

always @(posedge C)if (S) Q = 4'b1111;else tmp = Q - 1'b1;

endmodule

Счетчики: 4-битовый беззнаковыйвычитающий с синхр. установкой

un1_Q[3:0]Q_5[3:0]

+Q[3:0]

Q[3:0][3:0]

S

C

[3:0][3:0] [3:0]

[3:0]1111

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

Page 31: апкс 2011 08_verilog_макросы

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

31

Счетчики: 4-битовый беззнаковый с параллельной загрузкой

module counter(input C, ALOAD, input [3:0] D, output reg [3:0] Q);

always @(posedge C)if (ALOAD) Q = D;else Q = Q + 1'b1;

endmodule

un1_Q[3:0]+

Q_5[3:0]

0

1Q[3:0]

Q[3:0][3:0]

D[3:0] [3:0]

ALOAD

C

[3:0][3:0]

1[3:0]

[3:0][3:0]

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

Page 32: апкс 2011 08_verilog_макросы

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

32

Аккумулятор с асинхронным сбросом

module accum(input C, CLR, input [3:0] D, output reg [3:0] Q);

always @(posedge C, posedge CLR)if (CLR) Q = 4'b0000;else Q = Q + D;

endmodule

un3_Q[3:0]+

Q[3:0]

RQ[3:0][3:0]

D[3:0] [3:0]

CLR

C

[3:0][3:0]

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

Page 33: апкс 2011 08_verilog_макросы

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

33

8-битовый сдвиговый регистр с последовательными входом и выходами

module shift(input C,SI, output SO); reg [7:0] tmp;

always @(posedge C) begintmp = tmp << 1;tmp[0] = SI;

endassign SO = tmp[7];endmodule

tmp[7:0]

SO[7]

SI

C

[6:0] [7:0]Q[7:0]D[7:0]

Page 34: апкс 2011 08_verilog_макросы

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

34

8-битовый сдвиговый регистр с последовательными входом и выходами, с входом разрешения

module shift(input C,SI, CE, output SO);reg [7:0] tmp;

always @(negedge C)if (CE) begin

tmp = tmp << 1;tmp[0] = SI;

endassign SO = tmp[7];endmodule

tmp[7:0]

SO[7]

CE

SI

C

[6:0][7:0]Q[7:0]D[7:0]

E

Page 35: апкс 2011 08_verilog_макросы

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

35

8-битовый сдвиговый регистр со сбросом

module shift(input C,SI,CLR, output SO); reg [7:0] tmp;

always @(posedge C, posedge CLR)if (CLR) tmp = 8'b00000000;elsetmp = {tmp[6:0], SI};

assign SO = tmp[7];endmodule

tmp[7:0]

RSO[7]

CLR

SI

C

[6:0] [7:0]Q[7:0]D[7:0]

Page 36: апкс 2011 08_verilog_макросы

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

36

Двунаправленный сдвиговый регистр

module shift(input C,SI,LEFT_RIGHT, output [7:0] PO);reg [7:0] tmp;

always @(posedge C)if (LEFT_RIGHT==1'b0) tmp = {tmp[6:0], SI};

else tmp = {SI, tmp[7:1]};assign PO = tmp;endmodule

tmp_5[7:0]

0

1PO[7:0]

PO[7:0][7:0]

LEFT_RIGHT

SI

C

[7:1]

[6:0][7:0] [7:0]Q[7:0][7:0] D[7:0]

Page 37: апкс 2011 08_verilog_макросы

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

37

Автоматы

Page 38: апкс 2011 08_verilog_макросы

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

38

Представление автомата Мили и Мура

Функцияпереходов

Reset

Входы

Выходы

Только для автомата Мили

Clock

Регистрсостояний

Функция

выходов

Page 39: апкс 2011 08_verilog_макросы

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

39

Пример описания автомата.Граф-схема автомата.

clk

rst

enable

data_in data_out

state0

state1

state2

3 FSM

idle

readwrite

state0 = 1data_out = data_in[0]

state2 = 1 data_out = data_in[2]

state1=1 data_out = data_in[1]

enable=1enable=1

enable=1

enable=0

enable=0enable=0

Page 40: апкс 2011 08_verilog_макросы

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

40

Пример описания автомата Двух-блоковая модель 1module FSM1_synplify

(input clk, rst, enable, input [2:0] data_in,output data_out, state0, state1, state2);

/* Определены метки состояний*/parameter deflt=3'bxxx; parameter idle=3'b001;parameter read=3'b010; parameter write=3'b100;reg data_out, state0, state1, state2; reg [2:0] state, next_state;

/* Блок Always для последовательностной логики*/always @(posedge clk, negedge rst)

if (!rst) state <= idle;else state <= next_state;

Page 41: апкс 2011 08_verilog_макросы

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

41

Пример описания автомата Двух-блоковая модель 2

/* Блок Always для комбинационной логики*/always @(state, enable, data_in) begin/* Значения по умолчанию для выходов автомата FSM*/

state0 <= 1'b0; state1 <= 1'b0; state2 <= 1'b0; data_out <= 1'b0;case (state)

idle : if (enable) beginstate0 <= 1'b1; data_out <= data_in[0];next_state <= read; endelse next_state <= idle;

read : if (enable) beginstate1 <= 1'b1; data_out <= data_in[1];next_state <= write; endelse next_state <= read;

Page 42: апкс 2011 08_verilog_макросы

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

42

Пример описания автомата Двух-блоковая модель 3

write : if (enable) beginstate2 <= 1'b1;data_out <= data_in[2];next_state <= idle;endelse next_state <= write;

/* Default assignment for simulation*/default : next_state <= deflt;

endcaseendendmodule

Page 43: апкс 2011 08_verilog_макросы

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

43

Двух-блоковая модельРезультат синтеза

data_out

ed

ed

ed

ed

[0]

0

[1]

[2]

state2

[2]

state1

[1]

state0

[0]

statemachine

state[2:0]

I[2:0]Q[2:0]C

R

state2

state1

state0

data_out

data_in[2:0] [2:0]

enable

rstclk

Page 44: апкс 2011 08_verilog_макросы

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

44

Окно FSM Viewer

Page 45: апкс 2011 08_verilog_макросы

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

45

Пример модели автоматас одним блоком 1

module fsm_1xst (input clk, reset, x1,output reg outp);

reg [1:0] state;parameter s1 = 2'b00; parameter s2 = 2'b01;parameter s3 = 2'b10; parameter s4 = 2'b11;

always @(posedge clk, posedge reset)begin

if (reset) beginstate = s1; outp = 1'b1;

end

Page 46: апкс 2011 08_verilog_макросы

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

46

Пример модели автоматас одним блоком 2

else begincase (state)s1: begin

if (x1==1'b1) state = s2;else state = s3;

outp = 1'b1;end

s2: begin state = s4; outp = 1'b1;end

s3: begin state = s4; outp = 1'b0;

ends4: begin state = s1;

outp = 1'b0;end

endcaseend

endendmodule

Page 47: апкс 2011 08_verilog_макросы

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

47

Пример модели автоматаРезультаты синтеза

outp

SD Q

un1_state[1]

ed

ed

ed

ed

[0]0

[1]0

[2]1

[3]1

statemachine

state[3:0]

I[3:0]Q[3:0]C

R outp

x1

resetclk

s1

s2 s3

s4

un1_un1_state[1]

un1_state[1]

ed

ed

ed

ed

[0]0

[1]0

[2]1

[3]1

statemachine

state[3:0]

I[3:0]Q[3:0]C

R outp

x1

resetclk

Модель с одним блоком

Модель с двумя блоками

Page 48: апкс 2011 08_verilog_макросы

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

48

Модель памяти с асинхронным чтением

module raminfr(input clk, we, input [4:0] a, input [3:0] di,output [3:0] do);reg [3:0] ram [31:0];

always @(posedge clk)if (we) ram[a] <= di;

assign do = ram[a];endmodule

ram1

ram[3:0]

do[3:0][3:0]di[3:0] [3:0]

a[4:0] [4:0]

weclk

[4:0] RADDR[4:0][3:0] DATA[3:0]

[3:0]DOUT[3:0][4:0] WADDR[4:0]WECLK

Page 49: апкс 2011 08_verilog_макросы

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

49

Модель памяти с синхронным чтением

module raminfr (input clk, we, input [4:0] a,input [3:0] di, output [3:0] do);

reg [3:0] ram [31:0]; reg [4:0] read_a;always @(posedge clk) begin

if (we) ram[a] <= di;read_a <= a;end

assign do = ram[read_a];endmodule

Page 50: апкс 2011 08_verilog_макросы

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

50

Модель двухпортовой памяти с асинхронным чтением

module raminfr(input clk, we, input [4:0] a, dpra, input [3:0] di,output [3:0] spo, dpo);reg [3:0] ram [31:0];

always @(posedge clk) beginif (we)

ram[a] <= di;end

assign spo = ram[a];assign dpo = ram[dpra];endmodule

ram1

ram[3:0]

ram1

ram_1[3:0]

dpo[3:0][3:0]

spo[3:0][3:0]

di[3:0] [3:0]dpra[4:0] [4:0]

a[4:0] [4:0]

weclk

[4:0] RADDR[4:0][3:0] DATA[3:0]

[3:0]DOUT[3:0][4:0] WADDR[4:0]WECLK

[4:0] RADDR[4:0][3:0] DATA[3:0]

[3:0]DOUT[3:0][4:0] WADDR[4:0]WECLK

Page 51: апкс 2011 08_verilog_макросы

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

51

Модель двухпортовой памяти с синхронным чтениемmodule raminfr

(input clk, we, input [4:0] a, dpra, input [3:0] di, output [3:0] spo, dpo);reg [3:0] ram [31:0];reg [4:0] read_a, read_dpra;

always @(posedge clk) beginif (we)

ram[a] <= di;read_a <= a;read_dpra <= dpra;

end

assign spo = ram [read_a];assign dpo = ram [read_dpra];endmodule

ram1

ram[3:0]

ram1

ram_1[3:0]

read_a[4:0]

read_dpra[4:0] dpo[3:0][3:0]

spo[3:0][3:0]

di[3:0] [3:0]

dpra[4:0] [4:0]

a[4:0] [4:0]

we

clk[4:0] RADDR[4:0][3:0] DATA[3:0]

[3:0]DOUT[3:0][4:0] WADDR[4:0]WECLK

[4:0] RADDR[4:0][3:0] DATA[3:0]

[3:0]DOUT[3:0][4:0] WADDR[4:0]WECLK

[4:0]Q[4:0][4:0] D[4:0]

[4:0]Q[4:0][4:0] D[4:0]

Page 52: апкс 2011 08_verilog_макросы

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

52

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