lcytms
发表于 2016-11-22 17:10:37
IP核管理界面p5。
点击Next。
lcytms
发表于 2016-11-22 17:12:31
IP核管理界面p6。
检查Read-side和Write-side两栏中的full和empty均已选中。
点击Next。
lcytms
发表于 2016-11-22 17:13:47
IP核管理界面p7。
点击Next。
lcytms
发表于 2016-11-22 17:16:09
IP核管理界面p8。
点击Next。
lcytms
发表于 2016-11-22 17:21:14
IP核管理界面p9。
点击Next。
lcytms
发表于 2016-11-22 17:22:15
IP核管理界面p10。
选中最后两行my_fifo_inst.v和my_fifo_bb.v。
点击Finish,完成IP核管理界面的设置,总计10个设置页面。
lcytms
发表于 2016-11-22 17:23:14
这时检查工程导航一栏,发现Files一项中已经自动生成对应的IP核文件my_fifo.qip。
打开下一级的my_fifo.v,可以看到其封装代码。
lcytms
发表于 2016-11-22 17:26:27
在资源管理器的工程文件夹下找到已经生成的my_fifo_inst.v文件,打开该文件。
my_fifo my_fifo_inst (
.data ( data_sig ),
.rdclk ( rdclk_sig ),
.rdreq ( rdreq_sig ),
.wrclk ( wrclk_sig ),
.wrreq ( wrreq_sig ),
.q ( q_sig ),
.rdempty ( rdempty_sig ),
.rdfull ( rdfull_sig ),
.wrempty ( wrempty_sig ),
.wrfull ( wrfull_sig )
);
lcytms
发表于 2016-11-22 17:31:19
将my_fifo_inst.v代码拷贝粘贴到fifo.v模块中,修改实例化的信号名。
新建fifo_write和fifo_read控制模块,编写框架代码。
在fifo.v模块中放入fifo_write和fifo_read控制模块,对其进行实例化操作。
编写fifo.v模块如下。
module fifo (clk, rst_n, q);
input clk, rst_n;
output q;
wire wrreq, rdreq;
wire wrfull, wrempty, rdfull, rdempty;
wire data;
fifo_write fifo_write_inst (
.clk(clk),
.rst_n(rst_n),
.wrfull(wrfull),
.wrempty(wrempty),
.wrreq(wrreq),
.data(data)
);
fifo_read fifo_read_inst (
.clk(clk),
.rst_n(rst_n),
.rdfull(rdfull),
.rdempty(rdempty),
.rdreq(rdreq)
);
my_fifo my_fifo_inst (
.data ( data ),
.rdclk ( clk ),
.rdreq ( rdreq ),
.wrclk ( clk ),
.wrreq ( wrreq ),
.q ( q ),
.rdempty ( rdempty ),
.rdfull ( rdfull ),
.wrempty ( wrempty ),
.wrfull ( wrfull )
);
endmodule
lcytms
发表于 2016-11-22 17:35:59
继续完成fifo_write控制模块。
编写fifo_write控制模块代码如下。
module fifo_write (clk, rst_n, wrfull, wrempty, wrreq, data);
input clk, rst_n;
input wrfull, wrempty;
output reg wrreq;
output reg data;
reg state;
always @ (posedge clk or negedge rst_n)
begin
if (!rst_n)
begin
wrreq <= 0;
data <= 0;
state <= 0;
end
else
begin
case (state)
0 : begin
if (wrempty)
begin
wrreq <= 1;
data <= 0;
state <= 1;
end
else
begin
state <= 0;
end
end
1 : begin
if (wrfull)
begin
wrreq <= 0;
data <= 0;
state <= 0;
end
else
begin
wrreq <= 1;
data <= data + 8'd1;
state <= 1;
end
end
default : state <= 0;
endcase
end
end
endmodule