以intel-altera quartus为例
1. IP核例化
- 呼出IP窗口:
- 找到FIFO IP
- 设置路径和文件名,然后点击ok
建议所有ip放在项目目录下的某个固定位置,并为每个ip建个文件夹
ip的*.v文件名应当能够表明ip类型:
- FIFO配置界面
虽然界面上端显示共8页,但各页针对不同配置,并不是8页都能看到。
同步时钟一路next出现 page1、page2、page5、page6、page7、page8;异步时钟一路next出现 page1、page3、page4、page5,page6、page7、page8。
注意看相关选项的介绍。
- page1,宽度、深度、时钟设置
异步设置结果:输入32bit、输出64bit,容量32bit*256
左边可以实时预览
- page2,在使用同步读写时钟的情况下,点击next出现page2,用于设置空满指示相关信息,一般情况下有(full、empty就够了,有需要可添加usedw)。
其中的usedw的单位为page1所设置的wide对应bit。
- page3,优化选项。在使用异步读写时钟的情况下,点击next出现page3。用于设置对面积和速度的要求,一般情况下按默认就好。
- page4,设置在使用异步读写时钟的情况下的空满信息。
注意读和写的usedw的单位为各自端口的wide。
- page5 读请求的与读数据的关系设置。
“rdreq”:Normal,先有rdreq,然后才给出数据(延时数个ticks);Show-ahead,数据一直有,rdreq表明“读走”(相应计数器和指针变化) (无延时?)。一般按默认。
memory block type:存储器类型,一般按Auto。
- page6,
- 同步时钟。面积与速度取舍设置,电路保护功能设置,按默认。
- 异步时钟。是否关闭电路保护功能,按默认,不关闭保护。
- 同步时钟。面积与速度取舍设置,电路保护功能设置,按默认。
- page7,指明所需的仿真库,以及是否生成网表文件(netlist)。按默认。
- page8, 生成文件设置。一般其他项都不勾选,只留一个
.v
文件。
2. 生成结果
- 上步一路next之后,至少会生成两个文件(根据page8设置),分别是
xx.v
和xx.qip
,xx.qip
用于指向xx.v
,在quartus的project中添加xx.qip
文件即可,不需要再添加xx.v
。 - 打开文件可以看到之前的相关设置的内容。在需求更改的情况下,这些内容在自己确认的情况下可以更改,而不用从头一步步设置。其实重新生成也没有多复杂,而且还能更熟悉相关设置。
- 更改时,一定要改全(如接口位宽、内部wire宽、defparam(重定义)的参数等)。打开文件可以发现,其实里面的核心是例化了一个功能很强大很全面的ip。
// synopsys translate_off
`timescale 1 ps / 1 ps
// synopsys translate_on
module test_fifo_32bit (
data,
rdclk,
rdreq,
wrclk,
wrreq,
q,
rdempty,
wrfull);
input [31:0] data;
input rdclk;
input rdreq;
input wrclk;
input wrreq;
output [63:0] q;
output rdempty;
output wrfull;
wire [63:0] sub_wire0;
wire sub_wire1;
wire sub_wire2;
wire [63:0] q = sub_wire0[63:0];
wire rdempty = sub_wire1;
wire wrfull = sub_wire2;
dcfifo_mixed_widths dcfifo_mixed_widths_component (
.data (data),
.rdclk (rdclk),
.rdreq (rdreq),
.wrclk (wrclk),
.wrreq (wrreq),
.q (sub_wire0),
.rdempty (sub_wire1),
.wrfull (sub_wire2),
.aclr (1'b0),
.eccstatus (),
.rdfull (),
.rdusedw (),
.wrempty (),
.wrusedw ());
defparam
dcfifo_mixed_widths_component.intended_device_family = "Cyclone IV E",
dcfifo_mixed_widths_component.lpm_numwords = 256,
dcfifo_mixed_widths_component.lpm_showahead = "OFF",
dcfifo_mixed_widths_component.lpm_type = "dcfifo_mixed_widths",
dcfifo_mixed_widths_component.lpm_width = 32,
dcfifo_mixed_widths_component.lpm_widthu = 8,
dcfifo_mixed_widths_component.lpm_widthu_r = 7,
dcfifo_mixed_widths_component.lpm_width_r = 64,
dcfifo_mixed_widths_component.overflow_checking = "ON",
dcfifo_mixed_widths_component.rdsync_delaypipe = 4,
dcfifo_mixed_widths_component.underflow_checking = "ON",
dcfifo_mixed_widths_component.use_eab = "ON",
dcfifo_mixed_widths_component.wrsync_delaypipe = 4;
endmodule
3. 调用
IP核例化之后的调用根据例化所得文件的接口来进行,先打开所得*.v
文件观察接口,特别是复位和使能以及接口位宽。