以intel-altera quartus为例

1. IP核例化

  1. 呼出IP窗口:
  2. 找到FIFO IP
  3. 设置路径和文件名,然后点击ok
    建议所有ip放在项目目录下的某个固定位置,并为每个ip建个文件夹
    ip的*.v文件名应当能够表明ip类型:
  4. FIFO配置界面
    虽然界面上端显示共8页,但各页针对不同配置,并不是8页都能看到。
    同步时钟一路next出现 page1、page2、page5、page6、page7、page8;异步时钟一路next出现 page1、page3、page4、page5,page6、page7、page8。
    注意看相关选项的介绍
  5. page1,宽度、深度、时钟设置

    异步设置结果:输入32bit、输出64bit,容量32bit*256
    左边可以实时预览
  6. page2,在使用同步读写时钟的情况下,点击next出现page2,用于设置空满指示相关信息,一般情况下有(full、empty就够了,有需要可添加usedw)
    其中的usedw的单位为page1所设置的wide对应bit。
  7. page3,优化选项。在使用异步读写时钟的情况下,点击next出现page3。用于设置对面积和速度的要求,一般情况下按默认就好
  8. page4,设置在使用异步读写时钟的情况下的空满信息。
    注意读和写的usedw的单位为各自端口的wide。
  9. page5 读请求的与读数据的关系设置。
    “rdreq”:Normal,先有rdreq,然后才给出数据(延时数个ticks);Show-ahead,数据一直有,rdreq表明“读走”(相应计数器和指针变化) (无延时?)。一般按默认。
    memory block type:存储器类型,一般按Auto。
  10. page6,
  1. 同步时钟。面积与速度取舍设置,电路保护功能设置,按默认。
  2. 异步时钟。是否关闭电路保护功能,按默认,不关闭保护。
  1. page7,指明所需的仿真库,以及是否生成网表文件(netlist)。按默认。
  2. page8, 生成文件设置。一般其他项都不勾选,只留一个.v文件。

2. 生成结果

  1. 上步一路next之后,至少会生成两个文件(根据page8设置),分别是xx.vxx.qipxx.qip用于指向xx.v,在quartus的project中添加xx.qip文件即可,不需要再添加xx.v
  2. 打开文件可以看到之前的相关设置的内容。在需求更改的情况下,这些内容在自己确认的情况下可以更改,而不用从头一步步设置。其实重新生成也没有多复杂,而且还能更熟悉相关设置。
  3. 更改时,一定要改全(如接口位宽、内部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文件观察接口,特别是复位和使能以及接口位宽。