FPGA学习笔记
Quartus II prime Standard Edition—存储器IP核的调用
Quartus II的老版本跟新版本的IP核的调用方法有些不同,下面是Quartus II prime Standard Edition的调用方式,仅供参考。
-
如下图所示,点击assignmen中的IP Catalog,输入ram ,双击RAM:2-PORT
-
根据需求选择端口信息存储器的存储尺寸,点击next
-
根据需求选择数据宽度,点击next
- Auto:自动分配
LCs:内部寄存器
M9K: 内部块ram
-
选择时钟类型,点击next
Creat byte enable for port A: 针对位宽大于8位时的情况 -
选择端口寄存方式,点击next
-
选择存储器初始化内容,点击next
-
点击next
-
点击finish,调用ram ip核完成。
-
右键点击工程file,按顺序1,2,3,添加调用后的ram 的.v文件到工程内部
-
添加完成后,进行仿真验证功能
-
创建testbench,进行仿真验证
//----testbench-------------------------------------
`timescale 1ns/1ns
`define clock_period 20
module ram_dual_tb;//ram_dual
reg clk;
reg [7:0] data;
reg [7:0] rdaddress;
reg [7:0] wraddress;
reg wren;
wire [7:0] q;
integer i;
//----例化ip核---------------------------------
ip ram_dual(
.clock(clk),
.data(data),
.rdaddress(rdaddress),
.wraddress(wraddress),
.wren(wren),
.q(q)
);
//----激励设置--------------------------------
initial clk = 1;
always begin #(`clock_period/2) clk = ~clk;end
initial begin
data = 0;
rdaddress = 32;
wraddress = 0;
wren = 0;
#(`clock_period*30+1);
for(i=0;i<=15;i=i+1)begin
wren = 1;
data = 255-i;
wraddress = i;
#(`clock_period);
end
wren = 0;
#(`clock_period*30+1);
for(i=0;i<=15;i=i+1)begin
rdaddress = i;
#(`clock_period);
end
#(`clock_period*30);
$stop;
end
endmodule
【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~