同步FIFO设计Spec

萝らか妹 提交于 2019-12-01 07:12:31

为什么要写Spec文档:

      记得刚进公司实习的时候,导师安排我写一个SM4算法AHB接口模块,要求写代码前

写出详细的设计文档,详细到什么程度呢,看着文档就能把代码写好,作为一个只

在学校写过数字钟的小白来说有点不太理解,后面看的Spec多了,好的Spec的确能够看

着Spec把代码给敲了,能够方便别人理解你的设计思路,特别是当你遇到一份注释不太

清楚,逻辑难懂的代码时,是多么渴望来一份Spec帮助理解。

      网页上编辑图和格式不是很方便,就写的简单点吧

1.同步FIFO(First In First Out):一种先进先出的数据缓存器,同步FIFO是指读写为同一时钟,

主要做数据缓存。本设计用8*256的双口RAM来做,主要是对RAM的控制,产生空、满信号。

2.总体模块划分

子模块dpram.v 双口RAM的描述

子模块fifo_ctrl.v 对RAM的控制,产生空满信号

Top层 fifo_sync.v 对两个子模块的例化

(这里能用图来描述最好了)

3.dpram模块

信号列表

clk       IN         时钟

rst_n    IN         复位

wr_en    IN        写使能

rd_en    IN        读使能

wr_data[7:0]  IN    写数据

wr_addr[7:0]  IN    写地址

rd_addr[7:0]   IN    读地址

 

rd_data[7:0]  OUT  读数据

定义一块memory  8*256

电路图:

(这里用电路把读写操作的电路图画好,公司服务器上无法编辑就用文字代替了)

写操作,wr_en控制wr_data写到相应地址的memory里

读操作,rd_en控制相应地址的memory里的数据给rd_data,寄存器输出

4.fifo_ctrl模块

信号列表:

 

clk       IN         时钟

 

rst_n    IN         复位

 

wr_en    IN        写使能

 

rd_en    IN        读使能

 

wr_addr[7:0]  OUT  输出写地址

rd_addr[7:0]  OUT  输出读地址

empty      OUT       FIFO空信号

 

full           OUT       FIFO满信号

电路图

写地址计数器,写使能和非满时计数器计数,写计数器满时清零,读地址计数器同理

空满信号的生成通过多用一位标志位的方式来实现,即地址信号加最高位标志位得到读写指针

读写标志位复位清零,读写使能有效&&读写计数器满 时翻转

空信号:读写指针相同时产生

满信号:读写地址相同&&最高位读写标志不同产生

//注:为什么这样可以 实现空满信号产生:

//(1)读写地址相同时产生空或满信号

//(2)读指针追上写指针时为空信号,写指针追上读指针时为满信号

//(3)FIFO是先进先出,先写进来的数据先读出去,所以空满信号不能反

5.fifo_sync模式

例化上面两个子模块

信号列表:

 

clk       IN         时钟

 

rst_n    IN         复位

 

wr_en    IN        写使能

 

rd_en    IN        读使能

wr_data[7:0] IN   写数据

rd_data[7:0] OUT   读数据

wr_full      OUT        FIFO满信号

rd_empty OUT        FIFO空信号

 

Test plan暂时还没写,先占个坑,后续补上,如果觉得哪里有问题或者说得不清楚评论指出来,我及时修改

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!