实用标准文档
写了一个简单的同步FIFO 的源程序以及Testbench仿真程序。主要参考了同学Xilinx fifo的仿真。有图有,抛砖引玉。
文案大全
实用标准文档
文案大全
实用标准文档
文案大全
实用标准文档
文案大全
实用标准文档
下面是程序:
module fifo ( clk, rst,
// fifo_wrdb, //din
文案大全
实用标准文档
fifo_rddb,//dout fifo_full, fifo_empty );
input clk; input rst;
//input[7:0]fifo_wrdb; output fifo_full; output fifo_empty;
// reg fifo_rdrdy;//fifo读数据有效信号 output [7:0]fifo_rddb;//fifo读数据总线
/*************************************************/ //wire [7:0]fifo_wrdb_r;
//assign fifo_wrdb_r = fifo_wrdb;
//定时产生32个FIFO数据写入和读出操作
reg[7:0] fifo_wrdb; //FIFO写入数据
reg fifo_wren; //FIFO写使能信号
reg fifo_rden; //FIFO读使能信号
reg[9:0] cnt;
always @(posedge clk or negedge rst) if(!rst) cnt <= 10'd0; else cnt <= cnt+1'b1;
always @(posedge clk or negedge rst ) if(!rst) begin
fifo_wren <= 1'b0; fifo_rden <= 1'b0; fifo_wrdb <= 8'd0; end
else if((cnt > 10'd0) && (cnt < 10'd33)) begin 数据写入 fifo_wren <= 1'b1; fifo_rden <= 1'b0;
fifo_wrdb <= cnt[7:0]; end
else if((cnt > 10'd100) && (cnt < 10'd133)) begin
文案大全
//连续32个FIFO
//连续32个FIFO
实用标准文档
数据读出 fifo_wren <= 1'b0; fifo_rden <= 1'b1; fifo_wrdb <= 8'd0; end
else begin
fifo_wren <= 1'b0; fifo_rden <= 1'b0; fifo_wrdb <= 8'd0; end
/**********************************************************/ //FIFO读数据有效标志位
// always @(posedge clk or negedge rst) // if(rst) fifo_rdrdy <= 1'b0; // else fifo_rdrdy <= fifo_rden;
/************************************************************/
fifo_controller fifo_controller_ck(
.clk(clk), // input clk .rst(rst), // input rst
.din(fifo_wrdb), // input [7 : 0] din .wr_en(fifo_wren), // input wr_en .rd_en(fifo_rden), // input rd_en
.dout(fifo_rddb), // output [7 : 0] dout .full(fifo_full), // output full .empty(fifo_empty) // output empty );
endmodule
下面是仿真程序:
module fifo_text;
// Inputs reg clk; reg rst;
// Outputs
文案大全
实用标准文档
wire [7:0] fifo_rddb; wire fifo_full; wire fifo_empty;
// Instantiate the Unit Under Test (UUT) fifo uut (
.clk(clk), .rst(rst),
.fifo_rddb(fifo_rddb), .fifo_full(fifo_full), .fifo_empty(fifo_empty) );
initial begin
// Initialize Inputs clk = 1'b0; rst = 1'b0;
//fifo_wrdb = 1;
// Wait 100 ns for global reset to finish #100; rst = 1'b1;
// clk = 1'b1; #1_00;
// Add stimulus here end
always
begin #10 clk = ~clk; end endmodule
文案大全