本次實驗建立了乙個8位輸入 4位輸出的ip核心,並將ip核心所有訊號都進行新增
先進行前**,寫入時鐘為讀取時鐘的兩倍
第1個 wclk 上公升沿,wrreq <= 1;
第2個 wclk 上公升沿,當 wrreq 置 1,此時寫入送入到 data 埠的資料,此時寫入值為 8』h12 ,寫入過程發生在上公升沿
第3個 wclk 上公升沿, wrempty 置 0,同時 wrusedw 輸出 0;此時寫入值為 8』h13
第4個 wclk 上公升沿,同時 wrusedw 輸出 1;此時寫入值為 8』h14
第6至17個 wclk 上公升沿,此時寫入值為 8』h15至8『h21, 同時 wrusedw 輸出 2-14;
第18個 wclk 上公升沿,wrusedw 輸出 1,wrfull 置為 1;此時無法檢測出wrfull 為1
第19個 wclk 上公升沿,可以檢測wrfull ,
所以乙個完整寫入fifo,並檢測fifo是否寫入滿需要經過4個週期,
// 寫入
0:begin
wrreq <= 1;
data <= din;
end1:wrreq <= 0//寫入中
2:;//等待wrfull置為1
3:;//判斷是狗寫入滿
對於寫入時的 rdempty和 rdusedw變化情況
本實驗建立fifo的深度為16,所以對圖 wrusedw 範圍為0~15 ,而對於rdusedw是0~31。
當wrusedw 輸出 1時rdusedw輸出為0,此時rdempty還為高,下個寫入時鐘rdusedw輸出為2,根據寫入時鐘變化
當超額寫入時寫入訊號時rdusedw wrusedw 為 0,但是實際並沒寫入 當rdusedw == 31 時 rdfull = 1
第1個 rclk 上公升沿,rdreq <= 1;
第2個 rclk 上公升沿,當 rdreq 置 1;
第3個 rclk 上公升沿,輸出資料低位 4』h2;
第4個 rclk 上公升沿,輸出資料高位 4』h1;此時rdusedw 輸出31
第5個 rclk 上公升沿,輸出資料高位 4』h3;此時rdusedw 輸出30
順序讀出.
當輸出完成後rdempty同步變化,但是rdusedw 為檢測到讀空後的下個週期變化
`timescale 1ns/1ns
`define clk_period 20
module fifo_test();
reg clk;
reg rst_n;
reg [7:0] data ;
reg rdclk ;
// reg rdreq ;
wire wrclk ;
reg wrreq ;
wire [3:0] q ;
wire rdempty ;
wire rdfull ;
wire [4:0] rdusedw ;
wire wrempty ;
wire wrfull ;
wire [3:0] wrusedw ;
// reg [3:0] data_out;
fifotest fifotest(
.data (data ),
.rdclk (rdclk ),
.rdreq (
), .wrclk (wrclk ),
.wrreq (wrreq ),
.q (q ),
.rdempty (rdempty ),
.rdfull (rdfull ),
.rdusedw (rdusedw ),
.wrempty (wrempty ),
.wrfull (wrfull ),
.wrusedw (wrusedw ));
assign wrclk = clk;
initial clk = 1;
always#(`clk_period/2) clk = ~clk;
initial rdclk = 1;
always#(`clk_period/5) rdclk = ~rdclk;
always@(posedge wrclk or negedge rst_n)
if(!rst_n)begin
data <= 8'h11;
wrreq <= 0;
endelse if(!wrfull)begin
if(data <= 8'h19)begin
wrreq <= 1;
data <= data + 1'b1;
endelse begin
wrreq <= 0;
data <= data;
endend
else begin
wrreq <= 0;
data <= 8'h11;
end// always@(posedge rdclk or negedge rst_n)
// if(
!rst_n)begin
// rdreq <= 0;
// data_out <= 4'hf;
// end
// else if(!rdempty & !wrreq)begin
// rdreq <= 1;
// data_out <= q;
// end
// else begin
// rdreq <= 0;
// data_out <= 4'hf;
// end
initial begin
rst_n = 0;
#(`clk_period*20);
rst_n = 1;
#(`clk_period*500);
$stop
; end
endmodule
MACOS macbook pro使用感受
用macbook pro兩個星期了。對於os x並不是很熟悉 至少很多快捷鍵我還是不太清楚,也懶得記了 由於是從 ubuntu轉過來的,所以對unix環境還是比較熟悉的。更重要的是linux的經驗讓我不會做出諸如在macbook上面裝windows作為主係 統,或者想方設法在mac os x上面跑迅...
nosql使用感受
最近乙個專案嘗試了使用ssdb 乙個類似於redis的資料結構資料庫 主要感受有幾點 nosql的無模式在修改和插入時很方便,不需要預先新建表或者修改表結構來新加欄位,只需要 裡面使用就行。nosql的速度非常快,而且一般有自動過期機制,而一般web伺服器都是無狀態的,用nosql作快取來配合極其方...
Altera FFT核使用詳解
快速傅利葉變換 fast fourier transform 最為一種高效的演算法,被廣泛的用於訊號處理與資料分析等領域。對於設計工程師來講,自己動手取樣可程式語言來實現乙個fft ifft模組,不知要花費多少心血。所幸的是altera和xilinx兩大巨頭都提供了自己fft核,本文將詳細講解如何使...