完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
你好
我正在尝试构建一个具有不同读写位宽的异步双端口RAM模块。 我已经参考了Xilinx综合指南(UG901)和Xilinx用户指南(UG687)中提供的示例。 这两个指南都会使用写入数据宽度小于读取数据宽度的代码进行登记。 我试图构建的模块是通用的参数化读/写宽度。 为此我写了以下代码: localparam IN_DATA_RAtiO =`max((IN_DATA_WIDTH / OUT_DATA_WIDTH),1); localparam OUT_DATA_RATIO =`max((OUT_DATA_WIDTH / IN_DATA_WIDTH),1); 生成for(i = 0; i总是@(posedge wr_clk)start if(wr_en)ram [(wr_addr * IN_DATA_RATIO)+ i] end end endgenerate 生成for(j = 0; j always @(posedge rd_clk)begin if if(rd_en)data_out [((j + 1)* DATA_WIDTH)-1:(j * DATA_WIDTH)] end end endgenerate 其中IN_ *指的是与写端口相关的参数,OUT_ *指的是与读端口相关的参数。 当读取数据宽度大于写入数据宽度时,上述模块正确合成。 但是,当我尝试使写入数据宽度大于读取数据宽度时,合成失败并显示错误[Synth 8-2914]不支持的RAM模板。 根据http://www.xilinx.com/support/answers/52333.html这个错误通常会在有两个以上的时钟时出现,而我的实现并非如此。 如果有人能告诉我这件事,那就太好了。 我在一些论坛上注意到语句排序的变化导致代码合成,但那是VHDL代码。 这里也有类似的问题吗? 谢谢您的帮助 -Ali PS:我正在尝试为Zedboard(Zynq 7020)合成块。 |
|
相关推荐
2个回答
|
|
我想知道使用生成循环而不是程序循环获得的每位进程是否会混淆RAM模板。
例如,您可以尝试: 总是@(posedge wr_clk) if(wr_en) for(i = 0; i |
|
|
|
你好
谢谢回复。 我尝试交换for循环的生成块,它仍然没有合成Block RAM。 我发现在较新版本的UG901中写入数据宽度大于读取数据宽度的代码最终使用了:)。 -Ali |
|
|
|
只有小组成员才能发言,加入小组>>
2420 浏览 7 评论
2823 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2294 浏览 9 评论
3374 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2461 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
1180浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
587浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
452浏览 1评论
2005浏览 0评论
731浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 00:57 , Processed in 1.372796 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号