前言
上上期介绍了FIFO IP核理论方面的一些内容,接下来开始进行FIFO IP核的配置和使用部分。
FIFO IP核再理解
- 关键点
先进先出:数据按顺序写入FIFO,先被写入的数据在读取的时候先被读出。
FIFO存储器没有地址线。
FIFO主要作为缓存,应用与同步时钟系统和异步时钟系统。
配置 同步FIFO IP 核
新建文件夹
在prj文件夹中另建一个ipcore文件夹
新建fifo工程(略)
配置FIFO IP核
这里将配置的FIFO IP核命名为scfifo_256x8,即256个深度8位宽的同步FIFO IP核
- full:写满标志位
表示FIFO已经存储满,此时通过该信号控制写请求信号,禁止再往FIFO写入数据,防止数据溢出丢失。当写入数据量达到最大空间时,时钟上升沿写入最后一个数据,同时full拉高。读取数据时随时钟上升沿触发同时拉低。 - empty:读空标志位
选中表示FIFO已经没有数据,此时通过该信号控制读请求信号,禁止FIFO继续再读出数据,否则读出的都是无效数据。与full相反,写入数据同时拉低,读到最后一个数据时拉高。 - usedw:
显示当前FIFO中已存数据个数,与写入数据的个数是同步的。写第一个数据时置1,为空或满时为0。
选择普通FIFO模式,即当前读请求有效的下一拍数据才出来,下面一个先出数据模式,读请求来到之前第一个数据就已经先出来了,使得当前的读请求有效时立刻输出数据。不同于上面的。
设置FIFO速度,是否禁用保护电路,是否使用逻辑单元实现FIFO存储器。选择NO使用更少的资源。(默认)
显示Altera仿真库
输出inst.v文件
调用FIFO IP核
- 输入信号:
系统时钟
256个8bit数据(0~255)
伴随输入数据有效的标志信号
写请求信号 - 输出信号
读取的数据
FIFO空标志信号
FIFO满标志信号
指示FIFO中存在数据个数的信号 - 调用代码
module fifo(
input wire clk , //系统时钟信号
input wire [7:0] pi_data , //8 bit数据
input wire pi_flag , //伴随输入数据有效的标志信号,写请求信号
input wire rdreq , //读请求信号
output wire [7:0] po_data , //读取的数据
output wire empty , //空标志信号,高电平有效
output wire full , //满标志信号,高电平有效
output wire [7:0] usedw //指示FIFO中存在数据个数的信号
);
scfifo_256x8 scfifo_256x8_inst(
.clock (clk ),
.data (pi_data),
.wrreq (pi_flag),
.rdreq (rdreq ),
.empty (empty ),
.full (full ),
.q (po_data),
.usedw (usedw )
);
endmodule
- RTL综合视图
小结
至此一个同步时钟FIFO IP核的配置和顶层调用模块代码编写,以及代码综合后得出的RTL视图已经全部完成,接下来就是进行仿真工作,见下期。