在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7929|回复: 12

[求助] 请教:多端口ROM的verilog设计问题

[复制链接]
发表于 2011-5-9 23:11:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在网上看了一下ROM的设计,大部分都是只有一个数据输出端口的形式。代码如下所示。

但是我的程序里面,一次需要用到ROM里面的四个数据,就是输入四个地址,得到四个输出数据。当然可以一次得到一个数据,用四个周期的时间。但是我希望最好能一个周期就得到四个数据。

请问高手有什么办法可以实现吗?先谢谢!


网上找到的ROM代码:
module v_rams_21a (clk, en, addr, data);
    input      clk;                           
    input      en;                           
    input      [4:0] addr;                    
    output reg [3:0] data;               
    always @(posedge clk) begin         
        if (en)                              
            case(addr)                           
                5'b00000: data <= 4'b0010;
                5'b00001: data <= 4'b0010;
                5'b00010: data <= 4'b1110;
                5'b00011: data <= 4'b0010;
                5'b00100: data <= 4'b0100;
                5'b00101: data <= 4'b1010;
                5'b00110: data <= 4'b1100;
                5'b00111: data <= 4'b0000;
                5'b01000: data <= 4'b1010;
                5'b01001: data <= 4'b0010;
                5'b01010: data <= 4'b1110;
                5'b01011: data <= 4'b0010;
                5'b01100: data <= 4'b0100;
                5'b01101: data <= 4'b1010;
                5'b01110: data <= 4'b1100;
                5'b01111: data <= 4'b0000;
                5'b10000: data <= 4'b0010;
                5'b10001: data <= 4'b0010;
                5'b10010: data <= 4'b1110;
                5'b10011: data <= 4'b0010;
                5'b10100: data <= 4'b0100;
                5'b10101: data <= 4'b1010;
                5'b10110: data <= 4'b1100;
                5'b10111: data <= 4'b0000;
                5'b11000: data <= 4'b1010;
                5'b11001: data <= 4'b0010;
                5'b11010: data <= 4'b1110;
                5'b11011: data <= 4'b0010;
                5'b11100: data <= 4'b0100;
                5'b11101: data <= 4'b1010;
                5'b11110: data <= 4'b1100;
                5'b11111: data <= 4'b0000;
            endcase                              
    end                                 
endmodule
发表于 2011-5-10 08:31:07 | 显示全部楼层
最简单的方法是:复制成为4个一模一样的ROM;
方法二:真正的MACRO中ROM一般是双口的,即2端口可读,也有三口或者四口的ROM;如果双口的ROM,则例化2个。
方法三:提升ROM的频率,ROM可以运行到你其他部分工作频率的2倍或者4倍,然后分4拍搞定低频中4个端口中的读请求,需要注意读的Lattency。
发表于 2011-5-10 08:39:22 | 显示全部楼层
这个不难吧,反正这个写的东西综合后也是假的ROM, RIGESTER BANK
发表于 2011-5-10 10:44:50 | 显示全部楼层
从仿真角度来说,或者verilog角度来说。可以任意多端口的读写。
但是,关键要从实现的角度,如果是ASIC,你需要看lib库里面有没有这种ROM,对于FPGA你要看你选择的FPGA器件内有无这种ROM。
如果你要自己利用单口ROM做成4口的话,那么需要pipeline。
 楼主| 发表于 2011-5-10 15:49:21 | 显示全部楼层
回复 4# acgoal


    我用的是ISE design suite, 关于具体选哪个没有规定。谢谢回复啊!
 楼主| 发表于 2011-5-10 15:50:59 | 显示全部楼层
不知道还有没有别的方法啊?期待……
发表于 2011-5-10 16:46:21 | 显示全部楼层
看来用4个并列的ROM比较适合LZ。
 楼主| 发表于 2011-5-10 16:53:43 | 显示全部楼层
回复 7# jackertja


    我的代码后面还会有一个周期需要ROM里面32个数据的情况,难道要调用ROM模块32次?
发表于 2011-5-10 18:01:36 | 显示全部楼层
回复 8# greenhope


    只能说你的设计有问题,一个周期要从ROM里面读取32个数据,难道需要32个端口的ROM不成?修改和优化你的设计吧。
 楼主| 发表于 2011-5-10 19:19:30 | 显示全部楼层
回复 9# acgoal


    设计应该没问题……因为我的代码涉及到一个周期并行处理4个或者32个数据,数据处理完后要存到RAM。存数据时相应的地址需要从ROM读出来,所以才会希望一个周期能从ROM读几个数

可能一个解决办法就是多次实例化ROM,用generate实现,这样不用重复写很多遍
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 14:17 , Processed in 0.029511 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表