📄 dp8ka.v
字号:
end
initial
begin
memchg0 = 1'b0;
memchg1 = 1'b0;
memchga = 1'b0;
memchgb = 1'b0;
CLKA_valid = 1'b0;
CLKB_valid = 1'b0;
last_CLKA_valid = 1'b0;
last_CLKA_valid1 = 1'b0;
last_CLKB_valid = 1'b0;
last_CLKB_valid1 = 1'b0;
end
always @ (CLKA_valid, CLKB_valid, last_CLKA_valid1, last_CLKB_valid1)
begin
last_CLKA_valid1 <= CLKA_valid;
last_CLKB_valid1 <= CLKB_valid;
last_CLKA_valid <= last_CLKA_valid1;
last_CLKB_valid <= last_CLKB_valid1;
end
assign DIA_0 = (DATA_WIDTH_A == 1) ? DIA11 : (DATA_WIDTH_A == 2) ? DIA11 : DIA0;
assign DIB_0 = (DATA_WIDTH_B == 1) ? DIB11 : (DATA_WIDTH_B == 2) ? DIB11 : DIB0;
always @ (GSR_sig or PUR_sig ) begin
if (GSR == "ENABLED") begin
SRN = GSR_sig & PUR_sig ;
end
else if (GSR == "DISABLED")
SRN = PUR_sig;
end
always @ (CSA)
begin
if (CSA == 3'b0 && CSDECODE_A == "000")
CSA_EN = 1'b1;
else if (CSA == 3'b001 && CSDECODE_A == "001")
CSA_EN = 1'b1;
else if (CSA == 3'b010 && CSDECODE_A == "010")
CSA_EN = 1'b1;
else if (CSA == 3'b011 && CSDECODE_A == "011")
CSA_EN = 1'b1;
else if (CSA == 3'b100 && CSDECODE_A == "100")
CSA_EN = 1'b1;
else if (CSA == 3'b101 && CSDECODE_A == "101")
CSA_EN = 1'b1;
else if (CSA == 3'b110 && CSDECODE_A == "110")
CSA_EN = 1'b1;
else if (CSA == 3'b111 && CSDECODE_A == "111")
CSA_EN = 1'b1;
else
CSA_EN = 1'b0;
end
always @ (CSB)
begin
if (CSB == 3'b0 && CSDECODE_B == "000")
CSB_EN = 1'b1;
else if (CSB == 3'b001 && CSDECODE_B == "001")
CSB_EN = 1'b1;
else if (CSB == 3'b010 && CSDECODE_B == "010")
CSB_EN = 1'b1;
else if (CSB == 3'b011 && CSDECODE_B == "011")
CSB_EN = 1'b1;
else if (CSB == 3'b100 && CSDECODE_B == "100")
CSB_EN = 1'b1;
else if (CSB == 3'b101 && CSDECODE_B == "101")
CSB_EN = 1'b1;
else if (CSB == 3'b110 && CSDECODE_B == "110")
CSB_EN = 1'b1;
else if (CSB == 3'b111 && CSDECODE_B == "111")
CSB_EN = 1'b1;
else
CSB_EN = 1'b0;
end
assign DIA_node = (data_width_a == 1) ? DIA[0] :
(data_width_a == 2) ? DIA[1:0] :
(data_width_a == 4) ? DIA[3:0] :
(data_width_a == 9) ? DIA[8:0] : DIA[17:0];
assign DIB_node = (data_width_b == 1) ? DIB[0] :
(data_width_b == 2) ? DIB[1:0] :
(data_width_b == 4) ? DIB[3:0] :
(data_width_b == 9) ? DIB[8:0] : DIB[17:0];
assign DIAB_node = {DIB_node, DIA_node};
not (SR1, SRN);
or INST1 (RSTA_sig, RSTA_node, SR1);
or INST2 (RSTB_sig, RSTB_node, SR1);
always @ (SR1 or DIA_node or ADA or WREA_node or CSA_EN)
begin
if (SR1 == 1)
begin
assign DIA_reg = 0;
assign DIAB_reg = 0;
assign ADA_reg = 0;
assign WRENA_reg = 0;
assign RENA_reg = 0;
end
else
begin
deassign DIA_reg;
deassign DIAB_reg;
deassign ADA_reg;
deassign WRENA_reg;
deassign RENA_reg;
end
end
always @(posedge RSTA_sig or posedge CLKA_node)
begin
if (RSTA_sig == 1)
begin
DIA_reg_async <= 0;
DIAB_reg_async <= 0;
ADA_reg_async <= 0;
WRENA_reg_async <= 0;
RENA_reg_async <= 0;
end
else
begin
if (CEA_node == 1)
begin
DIA_reg_async <= DIA_node[data_width_a-1:0];
DIAB_reg_async <= DIAB_node;
ADA_reg_async <= ADA_node;
WRENA_reg_async <= WREA_node & CSA_EN;
RENA_reg_async <= ~WREA_node & CSA_EN;
end
end
end
always @(posedge CLKA_node)
begin
if (RSTA_sig == 1)
begin
DIA_reg_sync <= 0;
DIAB_reg_sync <= 0;
ADA_reg_sync <= 0;
WRENA_reg_sync <= 0;
RENA_reg_sync <= 0;
end
else
begin
if (CEA_node == 1)
begin
DIA_reg_sync <= DIA_node[data_width_a-1:0];
DIAB_reg_sync <= DIAB_node;
ADA_reg_sync <= ADA_node;
WRENA_reg_sync <= WREA_node & CSA_EN;
RENA_reg_sync <= ~WREA_node & CSA_EN;
end
end
end
always @(DIA_reg_sync or DIAB_reg_sync or ADA_reg_sync or
WRENA_reg_sync or RENA_reg_sync or DIA_reg_async or DIAB_reg_async or
ADA_reg_async or WRENA_reg_async or RENA_reg_async)
begin
if (RESETMODE == "ASYNC")
begin
DIA_reg <= DIA_reg_async;
DIAB_reg <= DIAB_reg_async;
ADA_reg <= ADA_reg_async;
WRENA_reg <= WRENA_reg_async;
RENA_reg <= RENA_reg_async;
end
else
begin
DIA_reg <= DIA_reg_sync;
DIAB_reg <= DIAB_reg_sync;
ADA_reg <= ADA_reg_sync;
WRENA_reg <= WRENA_reg_sync;
RENA_reg <= RENA_reg_sync;
end
end
always @ (SR1 or DIB_node or ADB or WREB_node or CSB_EN)
begin
if (SR1 == 1)
begin
assign DIB_reg = 0;
assign ADB_reg = 0;
assign WRENB_reg = 0;
assign RENB_reg = 0;
end
else
begin
deassign DIB_reg;
deassign ADB_reg;
deassign WRENB_reg;
deassign RENB_reg;
end
end
always @(posedge RSTB_sig or posedge CLKB_node)
begin
if (RSTB_sig == 1)
begin
DIB_reg_async <= 0;
ADB_reg_async <= 0;
WRENB_reg_async <= 0;
RENB_reg_async <= 0;
end
else
begin
if (CEB_node == 1)
begin
DIB_reg_async <= DIB_node[data_width_b-1:0];
ADB_reg_async <= ADB_node;
WRENB_reg_async <= WREB_node & CSB_EN;
RENB_reg_async <= ~WREB_node & CSB_EN;
end
end
end
always @(posedge CLKA_node)
begin
if (RSTA_sig == 1)
CLKA_valid_new1 <= 0;
else
begin
if (CEA_node == 1)
begin
if (CSA_EN == 1)
begin
CLKA_valid_new1 <= 1;
#0.010 CLKA_valid_new1 = 0;
end
else
CLKA_valid_new1 <= 0;
end
else
CLKA_valid_new1 <= 0;
end
end
always @(posedge CLKB_node)
begin
if (RSTB_sig == 1)
CLKB_valid_new1 <= 0;
else
begin
if (CEB_node == 1)
begin
if (CSB_EN == 1)
begin
CLKB_valid_new1 <= 1;
#0.010 CLKB_valid_new1 = 0;
end
else
CLKB_valid_new1 <= 0;
end
else
CLKB_valid_new1 <= 0;
end
end
always @(CLKA_valid_new1)
begin
CLKA_valid <= CLKA_valid_new1;
end
always @(CLKB_valid_new1)
begin
CLKB_valid <= CLKB_valid_new1;
end
always @(posedge CLKB_node)
begin
if (RSTB_sig == 1)
begin
DIB_reg_sync <= 0;
ADB_reg_sync <= 0;
WRENB_reg_sync <= 0;
RENB_reg_sync <= 0;
end
else
begin
if (CEB_node == 1)
begin
DIB_reg_sync <= DIB_node[data_width_b-1:0];
ADB_reg_sync <= ADB_node;
WRENB_reg_sync <= WREB_node & CSB_EN;
RENB_reg_sync <= ~WREB_node & CSB_EN;
end
end
end
always @(DIB_reg_sync or ADB_reg_sync or WRENB_reg_sync or RENB_reg_sync or
DIB_reg_async or ADB_reg_async or WRENB_reg_async or RENB_reg_async)
begin
if (RESETMODE == "ASYNC")
begin
DIB_reg <= DIB_reg_async;
ADB_reg <= ADB_reg_async;
WRENB_reg <= WRENB_reg_async;
RENB_reg <= RENB_reg_async;
end
else
begin
DIB_reg <= DIB_reg_sync;
ADB_reg <= ADB_reg_sync;
WRENB_reg <= WRENB_reg_sync;
RENB_reg <= RENB_reg_sync;
end
end
always @(DIA_reg or ADA_reg or DIAB_reg or WRENA_reg or DIB_reg or ADB_reg or WRENB_reg or
CLKA_valid or CLKB_valid)
begin
v_WADDR_A = ADA_reg;
v_WADDR_B = ADB_reg;
memchg0 <= ~memchg0;
if (DATA_WIDTH_A == 36)
begin
if (WRENA_reg == 1 && CLKA_valid == 1)
begin
for (i = 0; i < DATA_WIDTH_A; i = i+1)
begin
DO_node_rbr[i] = v_MEM[v_WADDR_A * DATA_WIDTH_A + i];
end
DOA_node_rbr = DO_node_rbr[17:0];
DOB_node_rbr = DO_node_rbr[35:18];
for (i = 0; i < 9; i = i+1)
begin
v_MEM[v_WADDR_A * DATA_WIDTH_A + i] = DIAB_reg[i];
end
for (i = 0; i < 9; i = i+1)
begin
v_MEM[v_WADDR_A * DATA_WIDTH_A + i + 9] = DIAB_reg[i + 9];
end
for (i = 0; i < 9; i = i+1)
begin
v_MEM[v_WADDR_A * DATA_WIDTH_A + i + 18] = DIAB_reg[i + 18];
end
for (i = 0; i < 9; i = i+1)
begin
v_MEM[v_WADDR_A * DATA_WIDTH_A + i + 27] = DIAB_reg[i + 27];
end
memchga <= ~memchga;
end
end
else
begin
if (DATA_WIDTH_A == 18)
begin
if (WRENA_reg == 1 && CLKA_valid == 1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -