1,设计需求
设计一个双端口的RAM,具有独立的读写时钟,独立读写地址和数据端口,具有复位功能,并具有读和写的使能信号。
2,端口设计
写通道(write)
Wrclk | 输入端口 | 写通道的时钟信号 |
---|---|---|
Aclear | 输入端口 | RAM复位信号 |
Wren | 输入端口 | RAM写使能信号 |
Wraddr[…] | 输入端口 | RAM写数据的地址端口 |
Wdata[…] | 输入端口 | RAM的写数据端口 |
读通道(read)
Rdclk | 输入端口 | 读通道的时钟信号 |
---|---|---|
Rden | 输入端口 | 读通道的使能信号 |
Raddr[…] | 输入端口 | 要读出的数据的地址信息 |
Rdata[…] | 输出端口 | 读出的数据 |
3,设计框图
4,代码设计
(1)参数定义
数据宽度和地址宽度
(2)输入输出端口
各个信号的含义如第二小节所示。
(3)双端口RAM定义
定义了一个位宽为 data_width,深度为 2^addr_width 的ram存储器。
(4)在写时钟的驱动下,双端口RAM写数据以及复位功能设计
在本写时钟下给出写地址和写数据,在下一个写时钟周期,数据被写入到RAM中。
(5)再读时钟的驱动下,双端口RAM读数据的功能设计
本读时钟给出读地址信息,在下一个读时钟信号,输出对应地址的数据。
5,功能仿真(仿真代码)
(1)信号初始化,并复位
(2)进行写数据仿真
模拟产生写地址信息以及写数据,并使写使能信号有效。
写地址和写数据在本时钟上升沿产生,并在下一个时钟的上升沿写入RAM中。
(3)进行读数据仿真
模拟产生读地址信号,并使读使能信号有效。
读地址在本时钟上升沿产生,数据在下一个时钟的上升沿从RAM中读出。
6,仿真波形
(1)写数据过程的仿真波形
可以看出,写地址和写数据在本时钟上升沿产生,并在下一个时钟的上升沿写入RAM中。
(2)读数据过程的仿真波形
可以看出,读地址在本时钟上升沿产生,数据在下一个时钟的上升沿从RAM中读出。
7,源代码下载
在公众号对话框内回复
双端口RAM
即可得到工程文件下载链接。
本工程基于 Quartus 18.2 ,联合 Modelsim 进行功能仿真。