第4节Xilinx公司原语的使用方法2.DOC

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4节Xilinx公司原语的使用方法2

第4节 Xilinx公司原语的使用方法2 HYPERLINK /search/?keyword=Xilinxsearchselect=article \t _blank Xilinx HYPERLINK /search/?keyword=searchselect=article \t _blank HYPERLINK /search/?keyword=searchselect=article \t _blank HYPERLINK /search/?keyword=searchselect=article \t _blank HYPERLINK /search/?keyword=原语searchselect=article \t _blank 原语 3.4.7 RAM/ROM组件 RAM/ROM组件可用于例化FIFO、分布式RAM、分布式RAM、块ROM以及块ROM,具体包括12个组件,如表3-16所示。 表3-16 RAM/ROM原语列表 下面主要介绍FIFO、分布式双口RAM以及块双口RAM原语的使用,单口RAM和ROM原语的用法类似,限于篇幅,就不再介绍。 1.RAM16X1S RAM16X1S是深度为16比特,位宽为1的同步RAM。当写使能信号WE为低时,写端口的数据操作无效,RAM内部的数据不会改变;当WE为高时,可以在任意地址中写入比特。为了保证数据的稳定性,地址和数据应该在WCLK的上升沿前保持稳定。输出信号O为RAM中由读地址信号所确定的地址中所存数据的值。此外,还可通过属性指定RAM的初始值。 RAM16X1S原语的例化代码模版如下所示: // RAM16X1S: 16比特1深度同步RAM(16 x 1 posedge write distributed (LUT) RAM) // 适用芯片:所有芯片 // Xilinx HDL库向导版本,ISE 9.1 RAM16X1S #( .INIT(16h0000) //对RAM的内容进行初始化,这里初始化为全1 ) RAM16X1S_inst ( .O(O), // RAM output .A0(A0), // RAM address[0] input .A1(A1), // RAM address[1] input .A2(A2), // RAM address[2] input .A3(A3), // RAM address[3] input .D(D), // RAM data input .WCLK(WCLK), // Write clock input .WE(WE) // Write enable input ); // 结束RAM16X1S模块的例化过程 需要注意的是,RAM16X1S原语是Xilinx独有的一类结构,在小数据量存储方面非常节省资源。在综合结果分析时,RAM16X1S原语的RTL结构如图3-45所示。 图3-45 原语RAM16X1S的RTL结构图 2.RAMB16 RAMB16是FPGA芯片中内嵌的双口块RAM,数据位宽可配置成1、2、4、9、18以及36比特,每个块RAM的大小为18 1024比特,所以位宽越大,深度越小。块RAM在FPGA中按照矩阵的方式排列,其数量完全取决于芯片容量的大小。在使用中,可以添加坐标来约束块RAM的位置。例如: LOC = RAMB16_X#Y#; 同样,也可以对块RAM完成初始化。块RAM是以硬核的方式内嵌到FPGA芯片中,不占用芯片的逻辑资源,是FPGA芯片内部非常宝贵的一种资源。在工作时,要尽量使用芯片的块RAM资源,不仅能保证较高的工作频率,还具有很低的动态功耗。 RAMB16的Verilog例化代码如下所示。 // RAMB16: 块RAM(Virtex-4 16k+2k Parity Paramatizable BlockRAM // 适用芯片:Virtex-4芯片 // Xilinx HDL库向导版本,ISE 9.1 RAMB16 #( .DOA_REG(0), // A端口可选的输出寄存器,可设置为0或1,分别表示输出不寄存/寄存 .DOB_REG(0), // B端口可选的输出寄存器,可设置为0或1,分别表示输出不寄存/寄存 .INIT_A(36h000000000), // 初始化A端口的输出初始值 .INIT_B(36h000000000), // 初始化A端口的输出初始值 .INVERT_CLK_DOA_REG(FALSE), // 反转A端口寄存器的时钟,可设置为TRUE或 FALSE,分别表示不反转/反转 .INVERT_CLK_DOB_RE

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档