1、Cyclone-II系列FPGA内部结构
如上图所示是Altera公司Cyclone-II系列FPGA内部结构,个模块作用如下:
PLL锁相环—对时钟进行管理。
IOEs—管脚单元,配置管脚,设置输入输出。
逻辑阵列—实现组合、时序逻辑。
块RAM—连续的存储空间,配合少量的逻辑阵列,形成不同的结构。
乘法器—为了提高乘法运算速度,加入了乘法器。
2、IP 核使用之 dpram
新建一个以名为 dpram 的工程保存在 prj 下,然后单击 Tools—MegaWizard Plug-In Manager 找到 RAM:2-PORT(双端口RAM),并将输出目录确定为工程文件夹下的 ip 文件夹,并以 dpram 保存,单击 Next,如下图所示。对于单端口 RAM,读写操作共用端口 A 的地址,数据通过端口 A 写入和读出;对于本节使用的双端口 RAM,则是一个读端口和一个写端口。
这里将双端口 RAM 的使用方式设置为一个读端口和一个写端口,另一种方式为两 个端口都可用作读/写。如下图所示,这也就是设置一般而言的简单双端口 RAM 还是 真正双端口 RAM。设置存储器大小的方式为按照字数(word)确定,另一种方式为按照比特数(bits)。
设置大小为256字节的RAM。不同端口使用相同数的位宽,端口位宽为 8。存储器使用的存储块类型为软件自动选择(Auto);存储器深度为软件自动选择(Auto),具体如下图所示。
时钟选择这里为单时钟,不勾选创建读使能信号。这里用一个时钟和一个时钟使能信号控制存储块所有的寄存器。其他应用场所还可以设置为双时钟使用独立的输入时钟和输 出时钟或者双时钟使用单独的读时钟和写时钟,如下图所示。
对输出端口进行寄存,不创建时钟使能信号,不创建异步复位端口(aclr),需注意这里复位并不复位 RAM 中的数据而是只复位寄存器(registered)上的值,具体如下图所示。
当在前面选择 “一个读端口和一个写端口” 或者 “两个端口都可用读写” ,会出现如下图中的选项,如果对同一个地址同时进行读和写,那么输出端口 q 的输出可能是旧数据,可能是同时准备写入的数据。 这里选择不关心,另一种可以设置为写数据之前的存储数据。
这里不对 RAM 进行初始化,如下图所示,在后面使用 ROM 时必须进行初始化,初始化步骤将在 ROM 部分再讲解。
然后确定配置信息后即可点击 Finish 完成配置。 并将生成的 IP 核加入工程,即可在工程下看到加入的 IP 核文件并可将其设置为顶层文件。
键入Ctrl+O,查看到ip核文件已成功加入,如下图所示:
将ip核文件设置为顶层文件。
3、激励创建及仿真测试
为了测试两端口 RAM,可以通过实际写入一些数据再读取部分数据的方式来验证两端口 RAM 读写是否正常。下面的激励文件实现了在地址从 0~16 上写入数据为从 255 减至 240。 延时一段时间后读地址为 0~16 上的数据的功能。
`timescale 1ns/1ns
`define clk_period 20
module dpram_tb;
reg clock;
reg [7:0] data;
reg [7:0] rdaddress;
reg [7:0] wraddress;
reg wren;
wire [7:0] q;
integer i;
dpram dpram(
.clock(clock),
.data(data),
.rdaddress(rdaddress),
.wraddress(wraddress),
.wren(wren),
.q(q)
);
initial clock = 1'b1;
always#(`clk_period/2) clock = ~clock;
initial begin
data = 0;
rdaddress = 30;
wraddress = 0;
wren = 0;
#(`clk_period*20 + 1);
for(i = 0;i <= 15;i=i+1)begin
wren = 1;
data = 255 - i;
wraddress = i;
#`clk_period;
end
wren = 0;
#(`clk_period*20);
for(i = 0;i <= 15;i=i+1)begin
rdaddress = i;
#`clk_period;
end
#(`clk_period*20);
$stop;
end
endmodule
为了更好的观察时钟沿与地址、数据变化的过程,可以全编译后进行时序仿真,仿真波形图如下图所示。读数据时,可以看出图中第一个箭头指向的时钟上升沿采集到的地址数据为 0;第二个时钟上升沿开始赋值,但是由于逻辑延迟(方框选中处)后才开始赋值; 因此第三个时钟上升沿的数据才是稳定的。
标签:FPGA,dpram,RAM,端口,011,所示,clock,时钟 From: https://www.cnblogs.com/little55/p/18117510