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...