1. 程式人生 > >FIFO_IP核 模擬,quartus ii (內建)

FIFO_IP核 模擬,quartus ii (內建)

年輕人,多睡覺!工作業餘之際,複習下曾經學過的。害怕忘記,於是記錄下來,也有一段記憶。若有錯誤,歡迎指正。 altera 板子測試 程式設計 1.首先是一個計數器cnt計數到64。 2.然後在cnt取0-31時,開始寫入資料,寫入的資料都等於cnt。 3.開始在cnt取32-63時,開始讀出資料。

module fifo_test(
clk,
rst_n,
wren,
rden,
wrdata,
rddata,
full_sig,
empty_sig
);
input clk;
input rst_n;
output reg wren;
output reg rden;
output reg [5:0] rddata;
output [5:0] wrdata;//使用wire型,這是自帶fifo 的要求
output full_sig;
output empty_sig;


//counter
reg [5:0] cnt;
[email protected]
(posedge clk or negedge rst_n) if(!rst_n) cnt<=0; else if(cnt<=6'd63) cnt<=0; else cnt<=cnt+1'b1; // enable write [email protected](posedge clk or negedge rst_n) if(!rst_n) wren<=0; else if(cnt>=0&&cnt<=6'd31) wren<=1'b1; else wren<=0; //enable read
[email protected]
(posedge clk or negedge rst_n) if(!rst_n) rden<=0; else if(cnt>=6'd32&&cnt<=6'd63) rden<=1'b1; else rden<=0; //write the data to the fifo [email protected](posedge clk or negegdge rst_n) if(rst_n) wrdata<=0; else if(wren) wrdata<=cnt; else wrdata<=wrdata; //在quartus 裡面呼叫fifo,自動生成,可以根據需要自己修改 fifo fifo_inst( .clock(clk), .data(wrdata), .rdreq(rden), .wrreq(wren), .empty(empty_sig), .full(full_sig), .q(rddata) ); endmodule );

最後是模擬檔案


    `timescale 1ns/1ps
 module fifo_test_vlg_tst();
 reg clk;
 reg rst_n;
 wire empty_sig;
 wire full_sig;
 wire [5:0] rddata;
 wire [5:0] wrdata;
 wire rden;
 wire wren; 

fifo_test i1(
.clk(clk),
.empty_sig(empty_sig),
.full_sig(full_sig),
.rddata(rddata),
.rden(rden),
.rst_n(rst_n),
.wrdata(wrdata),
.wren(wren)
);

 initial
	 begin
 		 clk=0;
		 rst_n=0;
		 #200
		 rst_n=1;
 	end
always
	begin
		#5 clk=~clk;
	end
	endmodule

最後利用modesim,可以看到波形 在這裡插入圖片描述上圖開始寫的時候。 可以看出cnt是迴圈計數到63。 empty_sig表示fifo空 開始寫的時候,由高拉低。同時wren開始拉高,開始存入wrdata資料0-31。 在這裡插入圖片描述 上圖是寫的時候。 可以看出在cnt=32時候, 在full_sig 由低拉高,說明fifo已經寫滿了。 同時rden從低到高。開始讀取資料,rddata依次出來的數字,都是之前fifo存入的數字。

由此可見,fifo 先進先出作用。