一、Quartus
1.打开Quartus ii,点击Tools---MegaWizard Plug-In Manager
2.弹出创建页面,选择Creat a new custom megafunction variation,点Next
3.选择IP核,可以直接搜索ram,选择RAM:2-PORT,右上方选择器件型号,语言选成Verilog,再填写一下路径名字,点Next,后面就是参数设置了。
4.设置读写需要几个端口,深度计算按word还是bit。Next
5.设置深度,位宽,类型。Next
6.设置读写需要几个端口,深度计算按word还是bit,一般选word。Next
7.是否为输出添加一个寄存器(加了寄存器可以使RAM输出的数据更稳定)?本来ram的输出就是会慢1clk,勾选后又慢1clk,所以一般不勾选。Next
8.输出的是新数据还是老数据,一般是要新数据,所以I don't care就行。Next
9.是否添加初始化文件mif ? Next
10.告诉你此IP核的编译库是什么,Next
11.输出的文件列表,除了正常IP核,还可以选择例化文件,注意bb.v文件用不到,一般是不勾选的。之后点finish就生成IP核了。
二、ISE
1.创建ISE工程,IP核需要在ISE工程里面进行调用。点击Tools---Core Generator...
2.在新弹出来的界面中创建一个属于IP核的工程:file---new project,并填写文件存储位置和文件名称,一般为ipcore_dir文件夹,点击保存
3.弹出的Part处填写器件的系列、型号、封装以及速度等级,Generation处设置语言为Verilog,点击OK
4.点击文件夹,找到Memories & Storage Elements---RAMs & ROMs---Block Memory Generator,(也可以直接搜索)双击打开,进行参数设置
5.设置模块名称,Next
6.类型选择,一般选Single Dual RAM,该RAM为“a口负责写,b口负责读”,而对于真双口RAM来说,a和b都是可读可写。其他选项根据需要勾选。Next
7.RAM的位宽、深度、使能选择,Next
8.是否在B端添加一个寄存器(加了寄存器可以使RAM输出的数据更稳定)?本来ram的输出就慢1clk,勾选了又慢1clk,所以一般不勾选。是否需要初始化并加载初始化ceo文件,Next
9.是否对B口添加复位键,Next
10.总结页面,注意里面一句话:B口的读取有1clk的延迟,点击Generate即可生成RAM。大功告成!
三、单RAM读写操作(by威三学院FPGA教程)
本代码针对Quartus的RAM:2-PORT
1 //========================================================================== 2 // --- 名称 : ram_ctrl.v 3 // --- 作者 : xianyu_FPGA 4 // --- 日期 : 2019-06-23 5 // --- 描述 : 单个ram读写操作 6 //========================================================================== 7 8 module ram_ctrl 9 //---------------------<端口声明>------------------------------------------- 10 ( 11 input wire clk , //时钟,50Mhz 12 input wire rst_n , //复位,低电平有效 13 input wire [7:0] din , //写入的数据 14 output wire [7:0] dout //读出的数据 15 ); 16 //---------------------<信号定义>------------------------------------------- 17 reg wr_en ; //写使能 18 reg [7:0] wr_addr ; //写地址 19 reg [7:0] rd_addr ; //读地址