ISE 用IP核实例化第一个FIFO
fifo什么的道理我都懂,可是要怎么在软件里面表达出来,怎么用仿真看看例化的对不对呢?
打开软件,创建工程
打开这个软件,我用的是14.7版本,也就是最后一版的ise
new project就不用说了,如图
空白处右键 new source
选中ip,起个名字,下一步
然后就开始按照我的截图配置
里面的参数,后面都有明确的说明,如果和我一样看不懂,那就复制然后百度翻译,就明白了;
点击generate就好了;
到此为止,一行代码都没有写,ise就帮我们整好了一个模块,可以看看它的所属关系:
写testbench
testbench用来验证这个fifo模块是不是正常的(废话肯定是正常的,但我就是想看看波形长啥样!)
空白处右键new source 选择test fixture
下一步,由于只有一个FIFO模块,还是下一步
一路无脑下一步,finish,就会得到这个东西:
这个代码谁写的?是ise
这个文件怎么在文件树里面看不见?点击simulation!他在这里!
我的这个名字有点不一样,就那么个意思
,然后在tb_fifio_test(图中的就是fifo_tb)里面加一点点代码:
module tb_fifio_test; //从我图中fifo_tb 扒下来的
// Inputs
reg rst;
reg wr_clk;
reg rd_clk;
reg [15:0] din;
reg wr_en;
reg rd_en;
//reg clk;
reg flag;
// Outputs
wire [15:0] dout;
wire full;
wire empty;
wire [8:0] rd_data_count;
wire [8:0] wr_data_count;
// Instantiate the Unit Under Test (UUT)
fifo_ip uut (
.rst(rst),
.wr_clk(wr_clk),
.rd_clk(rd_clk),
.din(din),
.wr_en(wr_en),
.rd_en(rd_en),
.dout(dout),
.full(full),
.empty(empty),
.rd_data_count(rd_data_count),
.wr_data_count(wr_data_count)
);
initial begin
// Initialize Inputs
rst = 0;
wr_clk = 0;
rd_clk = 0;
//clk = 0;
din = 16'd100;
wr_en = 1;
rd_en = 0;
flag = 1;
// Wait 100 ns for global reset to finish
#100;
// Add stimulus here
end
always #10 wr_clk = ~wr_clk;
always #10 rd_clk = ~rd_clk;
//always #25 clk = ~clk;
always@(posedge wr_clk) begin
if(flag)begin
din <= din - 1'd1;
if(din < 16'd85) flag <= 0;
end else begin
rd_en = 1;
wr_en = 0;
end
end
endmodule
仿真
双击这个东西
不出意外会是这样的
不要慌,CTRL + 鼠标滚轮调一调合适的大小,再把显示数据的格式调成无符号十进制
然后时序图就出来啦