FPGA學習筆記第五彈

2021-10-04 01:42:09 字數 1815 閱讀 3560

fpga學習筆記第五彈

基於fpga的跨時鐘域訊號處理

在實際設計中我們一般會遇到很多關於時鐘域處理的問題,越是複雜的fpga設計,越是存在很多關於跨時鐘處理的問題。

如何解決跨時鐘域帶來的問題:

1: 同步處理(先寄存乙個時鐘週期在使用)

2:利用儲存器(fifo)

握手訊號

什麼是握手訊號:所謂的握手訊號,即通訊雙方使用了專用的控制訊號進行狀態的指示,這個訊號,作為接受方和傳送方實現通訊的乙個標誌。(req& ack)傳送端首先將資料放進匯流排之中,然後同時向接收端發出乙個reg 訊號。接收端首先檢測是否有req訊號,如果存在這個訊號,就將匯流排中的資料接收下,並向傳送端傳送乙個ack訊號表示完成應答。這就是一次完整的握手通訊。**實現如下:

module hand

( input clk,

input rst,

input req,

input [7:

0] datain,

output ack,

output [7:

0] dataout,

//其實無用,主要是為了驗證和輸入的訊號是否一致);

//經典的上公升沿檢測**:雙暫存器 與反 操作

always@(posedge clk or negedge rst)if(

!rst)begin

reqr1 <=

1'b1;

reqr2 <=

1'b1;

reqr3 <=

1'b1;

endelse begin

reqr1 <= req;

reqr2 <= reqr1;

reqr3 <= reqr2;

end//獲取上公升沿

wire pos_req1;

wire pos_req2;

assign pos_req1 = reqr1 &

~ reqr2;

assign pos_req2 = reqr2 &

~ reqr3;

//資料鎖存, 在接收到 資料後將資料鎖存到乙個暫存器中。

reg [7:

0] dataoutr;

always@(posedge clk or negedge rst)if(

!rst)

dataoutr <=

8'd0;

else

if(pos_req1)

// 延後乙個時鐘週期的原因是為讓資料穩定鎖存

dataoutr <= datain;

//產生應答訊號

為了消除亞穩態,使用內部的儲存器(fifo 和 雙口ram)都是非常常用的操作!

FPGA學習筆記第二彈

fpga設計技巧 1 一款好用的編輯軟體 其實我們完全可以使用vivadao或者quartus自帶的編輯 軟體。這兩個我都用過,但是說實在的我是都用過了,著實一搬般。然後推薦一下我一直在用的編輯軟體 notepaid 體積小,外掛程式多,字型可調,語法高亮。2 verilog基本語法 現在我們來複習...

FPGA學習筆記第三彈

fpga學習筆記第三彈 1 同步復位和非同步復位 說實話這個問題在我沒有看書時候,我一直以為是一樣的沒有什麼區別。那他們到底有何不同之處呢 同步復位的邏輯 always posedge clk if rst b 0 else a b 非同步復位邏輯 always posedge clk or neg...

shell 指令碼第五彈

1.shell指令碼程式設計 1.指令碼是 c語言 程式設計 shell 指令碼 只作用於linux作業系統 以間隔多行命令 2.功能 批量處理檔案 自動去做某些功能 date,who,ls 處理日誌資訊 備份 刪除原日誌 上傳備份檔案 週期性計畫任務 3.學習方法 linux的命令 lamp we...