FIFO IP核使用感受

2021-10-25 04:44:08 字數 3654 閱讀 9592

本次實驗建立了乙個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核,本文將詳細講解如何使...