如何在HDL中推断VIETEX块RAM?(Verilog/VHDL)-Xilinx-AMD社区-FPGA CPLD-ChipDebug

如何在HDL中推断VIETEX块RAM?(Verilog/VHDL)

描述

关键词:块RAM,选择RAM,单,双,端口,块内存,列奥纳多,初始化

紧迫性:标准

一般描述:
列奥纳多谱可以将Verilog或VHDL中的内存语句映射到所有ViTeX器件上的块RAM。

以下是Leonardo Spectrum中的块RAM的详细信息列表:

– VIETEX块RAM完全同步。读写操作都是同步的。

-列奥纳多频谱推断以下块RAM配置:
1。在同一地址上读写的单端口RAM或RAM。
2。双端口RAM -具有独立读写地址的RAM。(从端口A写入,从B端口读取)

-列奥纳多谱不推断以下配置:
1。从A和B端口读取和写入的双端口RAM。
2。使用RST和ENA引脚功能的块RAM。

变量:
如果不需要RAM提取,则将以下变量设置为“false”(默认为真)。

设置提取错误

默认情况下,可映射到块RAM的RAM被映射到块RAM。通过将属性BuffiSRAM设置为“false”,可以禁用映射到块RAM:

StIsAtgult-名称块RAM -值false

在这种情况下,如果可能的话,使用选择RAM来实现RAM。

注:
使用块RAM实现的单端口RAM的变体不能使用选择RAM来实现。

-对于双端口块RAM推断,请参见(赛灵思解答10728).

在HDL代码中初始化被推断的RAM目前不被支持。为此,从Leonardo Spectrum的示意查看器或EDF网表中获取RAM的实例名,并在UCF文件中应用init属性。(默认情况下,推断的RAM初始化为“0”(零)。

解决方案

Verilog示例:
(在列奥纳多频谱1999年1F中测试)

模块RAM(DIN,我们,ADDR,CLK,DOUT);
参数数据宽度=7,地址宽度=6,内存元件=64;
输入[DATAWIWITHES-1:0] DIN;
输入〔地址宽度1∶0〕ADDR;
输入我们,CLK;
输出[DATAWIWITHES-1:0] DOUT;

Reg [ DATAWIWITH-1:0] MEM[ MeMielEngs-1∶0];
//示例属性MEM Buffer-RAM-FALSE

*如果您想禁用块RAM提取,请使用上面的指令。
将BuffySRAM属性设置为信号存储器上的FALSE。
必须在内存信号上设置BuffyRAM属性。*/

Reg [地址宽度-1:0] ADDRYRG;

总是@(POSEDGE CLK)
开始
AdDr.Reg & lt;
如果(我们)
MEM[ADDR];
结束

指定DOU= MEM[ADDRYRG ];

终端模块

块RAM的VHDL实例
(在列奥纳多频谱1999年1F中测试)

库IEEE,范例;
使用IEEE.STDYLogiCy1164.ALL;
使用IEEE.

RAMI示例1实体
泛型(DATAL宽度:整数:=8;
地址宽度:整数:=8;
MimiStime:整数:=256);

端口(数据:在STdLogLogic向量中(DATAWIWITHOT-1降到0);
地址:未签名(地址栏宽度1至0);
我们,CLK:在STDYLogic中;
问:出StdLogLogic向量(DATAWIWITH-1下降到0);
RAME1例结束;

RAMI示例1的体系结构EX1

类型MyMyType是StdLogLogic向量的数组(MeMyDeXTH-1下降到0)(DATAWIWITH-1下降到0);
信号MEM:MeMyType;
信号rAd:未签名(ADDESRESWITHEST-1降到0);

开始
L0:进程(CLK,我们,地址)
开始
如果(CLK=‘1’和CLK’事件)
地址;地址;
如果(=‘1’)
MEM(To-整数(rAdvess))和lt;=数据;
如果结束;
如果结束;
结束过程;

L1:进程(CLK,地址)
开始
如果(CLK=‘1’和CLK’事件)
=MEM(To-整数(地址));
如果结束;
结束过程;

末端EX1;

请登录后发表评论

    没有回复内容