Upload
irina-hahanova
View
579
Download
0
Embed Size (px)
Citation preview
13.03.2011Хаханова И.В, каф.АПВТ, ХНУРЭ e-
mail: [email protected] 1
8. Синтезируемые Verilog-модели цифровых устройств
Автоматизация проектирования компьютерных систем
13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]
2
Цель лекции и содержание
Цель – изучить принципы построения синтезируемых моделей цифровых устройств на 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]
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]
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]
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]
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]
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
13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]
10
Устройства сдвигаXilinx проектирует логические схемы сдвига как комбинационную схему
с двумя входами и 1 выходом Первый вход - сдвигаемые данные Второй вход - определяет число разрядов, на которые выполняется
сдвигНа выход поступает результат операции сдвига.Следует использовать один тип операции сдвига.Значение n для операции сдвига должно увеличиваться или
уменьшаться только на 1 для каждого последующего двоичного значения селектора.
Значение n может быть только положительнымВсе значения селектора должны присутствовать
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
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]
13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]
13
Арифметические устройства Сумматоры: С переносом из младшего разряда С переносом в старший разряд С переносом из младшего и в старший разряд
Устройство вычитания Сумматор/вычитатель Компаратор (=, /=,<, <=, >, >=) Устройство умножения Устройство деленияСложение, вычитание, сравнение и умножение разрешено для
знаковых и беззнаковых чисел
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]
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]
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
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
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
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]
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
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]
13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]
22
Совместное использование ресурсов (Resource Sharing)
Цель уменьшить размер схемы основываясь на принципе, что два подобных арифметических ресурса могут быть реализованы на одной схеме, если она никогда не используется ими одновременно
XST поддерживает совместное использование ресурсов для сумматоров, вычитателей, сумматоров/вычитателей и умножителей.
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
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]
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
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
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
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]
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]
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]
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]
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]
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
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]
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]
13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: [email protected]
38
Представление автомата Мили и Мура
Функцияпереходов
Reset
Входы
Выходы
Только для автомата Мили
Clock
Регистрсостояний
Функция
выходов
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
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;
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;
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
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
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
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
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
Модель с одним блоком
Модель с двумя блоками
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
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
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
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]