FPGA學習筆記第三彈

2021-10-03 22:48:20 字數 1497 閱讀 2610

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