用Verilog编写8位的1024存储单元的双口ROM 出错

要使标号为1的控制线cs1,wr1,rd1,数据线data1,地址线add1优先级高于标号为2的。以下是我写的,我感觉不太对,就是读写的优先操作有些问题,不过没有语法错误... 要使标号为1的控制线 cs1,wr1,rd1,数据线data1,地址线add1优先级高于标号为2的。

以下是我写的,我感觉不太对,就是读写的优先操作有些问题,不过没有语法错误
module ram_1024(cs1,cs2,wr1,rd1,wr2,rd2,data1,data2,add1,add2);

input cs1,cs2,wr1,rd1,wr2,rd2;
inout[7:0]data1,data2;
input[9:0]add2;
input[9:0]add1;
reg[7:0] ram[1023:0];

assign data1=((!cs1&&!rd1)&&(cs1||wr1)&&(cs2||wr2))?ram[add1]:8'bzz;
assign data2=((!cs2&&!rd2)&&(cs1||wr1)&&(cs2||wr2))?ram[add2]:8'bzz;

always@( cs1 or wr1 or wr2 or cs2 )
begin
if(add1==add2)
begin
if(!cs1&&!wr1) ram[add1]=data1;
else if(!cs2&&!wr2) ram[add2]=data2;
end
else if(!cs1&&!wr1) ram[add1]=data1;
else if(!cs2&&!wr2) ram[add2]=data2;
end
endmodule

还有我在quartusii中用的device是EPIC6Q240C8,当我在bdf文件中用我编的这个rom的时候会有错
Error: Design contains 14830 blocks of type logic cell. However, device contains only 5980.
以上个人理解为该器件的门少了,不能构成这么大存储空间的rom,不知对不对。
Error: Can't fit design in device

小弟我刚学,请高手指点一下
希望能给个双口rom的代码,我不胜感激。
以下的有clock,但依然通不过啊,

module RAM_TWO_IO
#(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=10)
(
input [(DATA_WIDTH-1):0] data_a, data_b,
input [(ADDR_WIDTH-1):0] addr_a, addr_b,
input rd_a, wr_a,rd_b,wr_b,clk_a,clk_b,
output reg [(DATA_WIDTH-1):0] q_a, q_b
);

// Declare the RAM variable
reg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];

always @ (posedge clk_a)
begin
// Port A
if (!wr_a)
begin
ram[addr_a] <= data_a;
end
else if(!rd_a)
begin
q_a <= ram[addr_a];
end
end

always @ (posedge clk_b)
begin
// Port B

if (!wr_b)
begin
ram[addr_b] <= data_b;
end
else if(!rd_b)
begin
q_b <= ram[addr_b];
end

end
endmodule
展开
 我来答
慈航静士
2010-08-09 · TA获得超过125个赞
知道答主
回答量:66
采纳率:100%
帮助的人:0
展开全部
quartusii查下有没这样的RAM,如果有那就直接例化。
另外你的RAM没有时钟?所以你这样写压根也不是寄存器搭建的RAM

最后想说的是,从后端考虑,用寄存器搭建的RAM timing没有例化的好

针对你的问题:直接quartus有memory的选项的,选dual port
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2b9e56145
2010-08-06 · TA获得超过166个赞
知道小有建树答主
回答量:244
采纳率:0%
帮助的人:110万
展开全部
双口RAM可以使用芯片内部RAM,使用寄存器阵列仅限于小容量和高速度才使用,你做的RAM已经大大的超出了EP1C6Q240的容量!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kf582930014
2010-08-15
知道答主
回答量:10
采纳率:0%
帮助的人:1.6万
展开全部
用quartus一编译、综合就可以看出你的问题所在。
你第一个程序:一堆warning不知道你有没有注意
1.always里条件没写全;
2.你有if没else,这样会综合很多latch,导致你的存储单元不够用。
这样的程序实在太糟糕了。
第二个程序:哎~ 自己看,别觉得warning不重要!!!!! 给你个提示吧:你很喜欢有if没else 也不喜欢加个复位信号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户61277
2010-08-07 · 超过13用户采纳过TA的回答
知道答主
回答量:87
采纳率:0%
帮助的人:0
展开全部
Cc three external network star - the latest available version of the Three Kingdoms cc cc plug network plug-star network star the three - the latest available version of the Three Kingdoms cc cc plug network plug-star network star the three - the latest available version of the Three Kingdoms cc cc plug network plug-star network star the three - the latest available version of cc cc plug network plug-star three star three networks - the latest available version of the Three Kingdoms 1 cc external network star. beta period, there were commemorative Magic 【】 loading debris. No shots, is the task, some tasks to do, and some did not get. 40 a hair,loco gold, a face 60, 100 piece of clothing (total 200,boi gold, permanent, you slowly brush) inside: brush chart, graph brush or brush map ... 2. And then loaded debris】 【magic. 15 a hair, a set of clothes 30. (Each is 30 days) drop: Speed, chest,wow power leveling, Dynasty Warriors chest, chest Wenquxing (answer) 3. Again is loaded coupon】 【magic. 3 a piece of clothing or hair, for 7 days. Fall: the same fragments】 【commemorative fashion, brush chart. 4. There is mounted coupon】 【special magic. Are three piece of clothing or hair, is 7 days. Fall: not encountered little brother, not sure of Kazakhstan, may open chest ... So where screenshot is intercepted NPC. Who much know where, please add. 5. The most exciting time to】 【achievement badges on the six drawings,Runes of Magic gold, no need to capture the bar. Is permanent,www.wowlv.com, only 50 badges, there are probably about 50 20J about it! Rejoice! Amount, however,4Story Gold, is the exchange of drawings, should make their own materials? As long as you have to pick something brush chart,Apb gold, there are many many. Family crests to do the task. However, it also is easy to take. Let every family received the task, must have a lot a lot a lot ... and very excited to do to come out to lottery,Aika gold, and I wish you shake a good-looking.
\
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ztllly
2010-08-15 · TA获得超过372个赞
知道答主
回答量:63
采纳率:0%
帮助的人:86.4万
展开全部
所谓双口RAM,是在一个SRAM 存储器上具有两套完全独立的数据线、地址线和读写控制线,并允许两个独立的系统同时对该存储器进行随机性的访问。即共享式多端口存储器。
因为数据共享,就必须存在访问仲裁控制,对同一地址单元访问的时序进行控制,对存储单元数据块的访问进行权限分配等。
在你的第二个程序中,没有优先级控制,在两个always块中同时对ram变量进行赋值,这是典型的多重驱动问题。
因此,写操作必须在一个always中完成,读操作可在两个always中完成。如果不考虑先写后读,程序如下:
module ram_io2(data_a, data_b,addr_a, addr_b,rd_a, wr_a,rd_b,wr_b,clk_a,clk_b,q_a, q_b);
parameter DATA_WIDTH=8;
parameter ADDR_WIDTH=10;
input [(DATA_WIDTH-1):0] data_a, data_b;
input [(ADDR_WIDTH-1):0] addr_a, addr_b;
input rd_a, wr_a,rd_b,wr_b,clk_a,clk_b;
output [(DATA_WIDTH-1):0] q_a, q_b;
reg [(DATA_WIDTH-1):0] q_a, q_b;
// Declare the RAM variable
reg [DATA_WIDTH-1:0] mem1 [(2**ADDR_WIDTH)-1:0];
always @ (clk_a,clk_b)
begin
// WRITE
if (!wr_a)
mem1[addr_a]<=data_a;
else if(!wr_b)
mem1[addr_b]<=data_b;
end

always @ (posedge clk_a)
begin
// Port A READ
if (!rd_a)
q_a <= mem1[addr_a];
else
q_a <=8'bzz;
end

always @ (posedge clk_b)
begin
// Port B READ
if (!rd_b)
q_b <= mem1[addr_b];
else
q_b <= 8'bzz;
end
endmodule
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式