|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
在SDRAM controller 里碰到一个dual port RAM, 仿真可以通过,但无法综合。
仿真器:iverilog + vvp
综合报错如下:
dpram_generic.v:23: Net 'mem3[7][7]' or a directly connected net is driven by more than one source, and not all drivers are three-state. (ELAB-366)
有什么办法解决吗?
这是开源项目wb_sdram_ctrl里的dual port ram。
dpram_generic.v:
module dpram_generic #(
parameter ADDR_WIDTH = 3
)
(
input
clk_a,
input [ADDR_WIDTH-1:0]
addr_a,
input [3:0]
we_a,
input [31:0]
di_a,
output reg [31:0]
do_a,
input
clk_b,
input [ADDR_WIDTH-1:0]
addr_b,
input [3:0]
we_b,
input [31:0]
di_b,
output reg [31:0]
do_b
);
reg [7:0]
mem0[(1<<ADDR_WIDTH)-1:0];
reg [7:0]
mem1[(1<<ADDR_WIDTH)-1:0];
reg [7:0]
mem2[(1<<ADDR_WIDTH)-1:0];
reg [7:0]
mem3[(1<<ADDR_WIDTH)-1:0];
always @(posedge clk_a) begin
if (we_a[3])
mem3[addr_a] <= di_a[31:24];
if (we_a[2])
mem2[addr_a] <= di_a[23:16];
if (we_a[1])
mem1[addr_a] <= di_a[15:8];
if (we_a[0])
mem0[addr_a] <= di_a[7:0];
do_a <= {mem3[addr_a], mem2[addr_a],
mem1[addr_a], mem0[addr_a]};
end
always @(posedge clk_b) begin
if (we_b[3])
mem3[addr_b] <= di_b[31:24];
if (we_b[2])
mem2[addr_b] <= di_b[23:16];
if (we_b[1])
mem1[addr_b] <= di_b[15:8];
if (we_b[0])
mem0[addr_b] <= di_b[7:0];
do_b <= {mem3[addr_b], mem2[addr_b],
mem1[addr_b], mem0[addr_b]};
end
endmodule |
|