fpga學習筆記第三彈
1:同步復位和非同步復位:
說實話這個問題在我沒有看書時候,我一直以為是一樣的沒有什麼區別。那他們到底有何不同之處呢:
同步復位的邏輯**:
always@(posedge clk)if(
!rst)
b <=0;
else
a <= b;
非同步復位邏輯**:
always@(posedge clk or negedge rst)if(
!rst)
b <=0;
else
a <= b;
最大的不同之處在於,乙個是時鐘的上公升沿觸發(同步)乙個是時間的下降沿觸發(非同步)。在資源的消耗對比上,同步要消耗更多的資源。同步能夠降低發生亞穩態的概率,但是不能完全消除。
2:亞穩態問題的產生與解決的辦法
為什麼會產生亞穩態?
我們還是先從**的角度來分析問題,請看下面乙個有關於二級暫存器的**:
always@(posedge clk or negedge rst)if(
!rst)
b <=0;
else
b <= a;
always@(posedge clk)if(
!rst)
c <=0;
else
c <= b;
從上面的**我們可以知道:
正常情況:
b 的值更新為 a;
c 的值更新為 b;
一旦進入復位的時候所有的值都會自動清0;但是如果rst這個復位訊號如果發生了亞穩態(不確定為0或者1)的話,那麼就會導致,b和c的值發生混亂。
引用書中的一段話進一步解釋一下:
如何消除亞穩態:
使用兩級觸發器電路可以消除亞穩態。綜合實現的**如下:
always@(posedge clk or negedge rst)if(
!rst)
n1 <=
1'b0;
else
n1 <=
1'b1;
always@(posedge clk or negedge rst)if(
!rst)
n2 <=
1'b0;
else
n2 <= n1;
簡單來說就是用乙個暫存器來鎖存另乙個暫存器的狀態。這樣做的好處是能夠將非同步的訊號同步化。
pll產生系統時鐘:
這個部分一開始的時候我是手寫分頻計數的**,但是現在我一般直接例化pll的時鐘ip核。
FPGA學習筆記第二彈
fpga設計技巧 1 一款好用的編輯軟體 其實我們完全可以使用vivadao或者quartus自帶的編輯 軟體。這兩個我都用過,但是說實在的我是都用過了,著實一搬般。然後推薦一下我一直在用的編輯軟體 notepaid 體積小,外掛程式多,字型可調,語法高亮。2 verilog基本語法 現在我們來複習...
FPGA學習筆記第五彈
fpga學習筆記第五彈 基於fpga的跨時鐘域訊號處理 在實際設計中我們一般會遇到很多關於時鐘域處理的問題,越是複雜的fpga設計,越是存在很多關於跨時鐘處理的問題。如何解決跨時鐘域帶來的問題 1 同步處理 先寄存乙個時鐘週期在使用 2 利用儲存器 fifo 握手訊號 什麼是握手訊號 所謂的握手訊號...
Python基礎學習 第三彈
向內看自己,永遠看自己的進步!好!開始!五 函式 def定義函式,函式分為有無引數 有無返回值。函式先後順序執行,先定義函式在呼叫函式。函式的本質是乙個位址,函式的引數可以為另乙個函式,函式作為變數時不帶括號。還可以利用返回值作為引數。帶括號的函式的型別是函式的返回值型別。函式可以有多個返回值。re...