XVHDL基础:在XC4000器件中使用RAM和ROM

描述


XC4000系列有能力使用CLB函数生成器来有效地实现片上RAM和ROM。

使用RAM
使用基础VHDL实现RAM的方法有2种。

1。使用内存生成器或LogiBuxx生成网表
内存,然后实例化网表。
2。实例化16x1和32×1 RAM基元。

*注意:不要在VHDL中描述RAM行为,因为这会导致组合循环。

使用ROM
使用基础VHDL实现ROM有3种方法。

1。使用内存生成器或LogiBuxx生成网表
对于内存,然后实例化网表。
2。实例化ROM原语。
三。描述ROM行为。

*请注意,解决方案略有不同取决于
XACTSTEP6或XACTSTEP M1(F1.3/F1.4)软件是否为
被使用。

解决方案

XACTSTEP M1-使用ROM
------------------

1)使用LogiBLUX创建ROM,然后实例化
产生的网表。有关这方面的更多信息
程序,参见(Xilinx解决方案2595).

2)描述ROM的行为,如
分辨率α1。

XACTSTEST6-使用ROM
--------------------
1。使用内存生成器生成XNF文件
内存,然后实例化XNF文件。

选项1遵循与RAM中所描述的相同的过程
该决议题为“使用RAM”。

当使用ROM时,请确保在您的文件中有一个.MEM文件。
描述ROM内容的项目目录
有关.MEM文件格式的详细信息可以在
Xilinx开发系统参考文献中的“MimGEN”章
指南,第1卷。


2。实例化ROM原语。

ROM16X1或32×1原语可以使用
以下方法。必须将init属性添加到
实例化ROM组件描述内容
ROI.属性是十六进制值:16x1的4位数字
ROM和8位数字为32×1 ROM。请注意
组件只是ROM,而“SnNm”属性决定了
无论是16x1 ROM还是32×1 ROM。

一个“DEF”属性也必须附加到实例化。
组件,值“ROM”。见下面的例子。

一个实例化ROM原语的例子

库IEEE;
使用IEEE.STDYLogiCy1164.ALL;

库元;
-包属性包含Metamor的声明
-特定的综合属性。
使用Meta。

实体是
端口(ADDR0,ADDR1,ADDR2,ADDR3):在STDYLogic中;
输出:输出STDYLogic;
结束日期;

罗姆尼斯建筑研究所
组件ROM——注释:组件被声明为只读只读存储器
端口(A0,A1,A2,A3):在STDYLogic中;
o:输出STDYLogic);
端部元件;
属性init:字符串;
属性DEF:字符串;
属性SCHNM:字符串;
U1的属性初始化:标签为“1A11”;
U1的属性DEF:标签是“ROM”;
U1的属性SnHM:标签为“ROM16X1”;
-确定组件是ROM16X1还是ROM32 X1
开始
U1:ROM端口映射(A0= & Gt;ADDR0,A1= & Gt;ADDR1,A2= & Gt;ADDR2;
A3=和gt;ADDR3,O=& Gt;输出;
结束研究;


三。描述ROM行为

——在VHDL如何描述16x4ROM的例子。

库IEEE;
使用IEEE.STDYLogiCy1164.ALL;

实体ROM16X4Y4K是
端口(ADDR):整数范围0至15;
数据:StdLogLogic向量(3下降到0);
结束ROM16X4Y4K;

ROM16X4Y4K的建筑行为
亚型RoMyWord为STdLogLogic向量(3下降到0);
RoMyType的类型是RoMo Word的数组(0到15);
常数ROM:ROMIGABLE:= ROMIX表
罗姆词“(0000))
罗姆词“(0001))
罗姆词“(0010))
罗姆词“(0100))
罗姆词“(1000))
罗姆词“(1000))
罗姆词“(1100))
罗姆词“(1010))
罗姆词“(1001))
罗姆词“(1001))
罗姆词“(1010))
罗姆词“(1100))
罗姆词“(1001))
罗姆词“(1001))
罗姆词“(1101))
罗姆词“(1111));
开始
数据& lt;=ROM(ADDR);
结束行为;


XACTSTEP M1-使用RAM
------------------

1)使用LogiBuxx创建RAM,然后实例化
产生的网表。有关这方面的更多信息
程序,参见(Xilinx解决方案2595).

2。实例化RAM原语。

从XC400 0E/EX统一的RAM 16X1和32×1原语
库可以直接实例化到VHDL文件中,如图所示
下面。

实例化RAM16X1D原语的示例。

库IEEE;
使用IEEE.STDYLogiCy1164.ALL;

实体dpyRAM是
端口(WR,DATA,CLK):在STDYLogic中;
ADDDR0、ADDR1、ADDR2、ADDR3:在STDYLogic中;
dPAR0、DPAL1、DPAL2、DPAR3:在STDYLogic中;
喷口,DPOUT:输出STDYLogic);
结束DPRAM;

DPYRAM的体系结构研究
组件RAM16X1D
端口(D,我们,WCK,A3,A2,A1,A0,
dPAR3、dPRA2、DPAL1、dPAR0: STDHyLogic;
SPO,DPO:输出STDYLogic;
端部元件;
开始
U1:RAM16X1D端口映射(D=& Gt;数据,我们=& Gt;WR,WCLK=& gt;CLK,
A3=和gt;ADDR3,A2= & gt;ADDR2,A1= & Gt;ADDR1;
A0=和gt;ADDR0,dPAP3=>dPAR3;
dPAR2=gt;dPARP2,dPAR1==GDAP1;
dPAP0=gt;dPAR0,SPO=gt;
DPO=gt;dpOUT;
结束研究;

XACTSTEST6-使用RAM
--------------------
1。使用实例化存储器生成器

a)从基础项目管理器,选择应用程序
-存储器生成器。
b)选择你想要的RAM的类型和大小,给它起个名字,
然后点击“生成”。这将创建一个XNF文件
RAM组件。
c)在VHDL代码中实例化XNF文件。

RAM上的引脚的名称遵循相同的命名。
作为Xilinx库中RAM组件的约定
导游,所以你真的只需要关心一下
依赖的输入、地址和输出的数目
关于RAM的大小。如果有任何疑问
端口的名称,RAM上的引脚的名称
组件可以在XNF文件中找到。
内存生成器。

下面是这个方法的一个例子。还要注意
使用“宏单元”属性。此属性允许
使用矢量引脚,而不是单位引脚。如果
不使用此属性,向量的引脚展开
将不兼容,并且所得的XNF网表将不会
正确编译。使用时声明元数据库
这个属性。

实例化RAM的第二个示例使用单位引脚,
因此,“宏单元”属性不是必需的。

实例化用内存生成的XNF文件示例

这是一个16x2双端口RAM的例子

库IEEE;
使用IEEE.STDYLogiCy1164.ALL;

库元;
-包属性包含Metamor的声明
-特定的综合属性。
使用Meta。

实体双端口是
端口(ADD,DPRADAD:在STDYLogLogic向量中(3下降到0);
在STDYLogic中RWEN、WRLCK、DATA0、DATA1;
SPUT,DPOUT:输出STDLogLogic向量(1下降到0);
末端双端口;

DualiPalm的MyGEN体系结构
组件MMENGYM M——MimGeNE.M.xNF是XNF文件
——由内存生成器创建
端口(A,DPRA):在STDYLogLogic矢量(3下降到0);
我们,WCK,D0,D1:在STDYLogic中;
SPO,DPO:外STDLogLogic向量(1下降到0);
端部元件;
MeGNEYM m的属性宏单元:组件是真的;
开始
U1:MimGeNEM M端口映射(A= & Gt;Addio,DPRA=& gt;dPRADD);
我们=& gt;Wrk=& gt;WrlClk,D0= & Gt;DATA0;
D1=Gt;DATA1,SPO=& GT;喷口,DPO=& Gt;DPUT);
结束于记忆;


2。实例化RAM原语。

XC4000统一库中的RAM 16x1和32×1原语
可以直接实例化到VHDL文件中,如下所示。

实例化RAM16X1D原语的示例。

库IEEE;
使用IEEE.STDYLogiCy1164.ALL;

实体dpyRAM是
端口(WR,DATA,CLK):在STDYLogic中;
ADDDR0、ADDR1、ADDR2、ADDR3 ...
(更多...)
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-29 14:00:01 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它