FPGA學習心得 01

2021-10-17 20:31:35 字數 2739 閱讀 9753

例:多

少位的什

麼進製數

→4′d

8(4位

的十進位制

數8)例:多少位的什麼進製數 \rightarrow 4'd8 (4位的十進位制數8)

例:多少位的

什麼進製

數→4′

d8(4

位的十進

制數8)

如果將 ′

'′ 一撇讀作漢字 的

的的,verilog的數字表示語法符合口頭語言的習慣。

verilog作為硬體描述語言,資料型別與硬體有直接對應關係。

資料型別

介紹符號

暫存器可以理解為乙個抽象化的資料儲存單元,這與其他程式語言的變數概念很相近,只是verilog以硬體暫存器作為變數的實現載體,而高階程式語言將使用一段記憶體來儲存變數值(或是cpu中的暫存器)

reg、integer、real

線網連線各個硬體功能單元的連線

wire

引數有點類似於高階程式語言中的巨集定義

parameter

種類和功能和c其他程式語言一樣。

值得注意的是,乘除運算在底層實現時往往會比較消耗資源

這個運算子是verilog特有的運算子,作用是將兩個訊號繫結為乙個訊號,例如:→將

a,b兩

個訊號拼

接起來作

為乙個新

訊號\ \rightarrow 將a, b兩個訊號拼接起來作為乙個新訊號

→將a,b兩

個訊號拼

接起來作

為乙個新

訊號符號=

<=

含義阻塞賦值語句

並行賦值語句

介紹在always塊中,該賦值語句只有當前面的語句都執行完畢後才會執行,和其他順序執行的程式語言中賦值語句功能相同

在always塊中和其他語句並行執行,不等待上一條語句的執行結果

應用場景1. assign語句

2. 不帶時鐘的always塊(組合邏輯)

帶時鐘的always塊

關係運算子; 邏輯運算子; 三目運算子 (條件運算子); 移位運算子

model model_name (

input input_var_name

output output_var_name

...);

parameter par_name =123

reg [:] reg_name

wire wire_name

assign wire_name = ...

always @(posedge clk) begin

if (...)

else if (...)

else

end begin

case(...)

... : ...;

... : ...;

...default : ;

endcase

endendendmodule

上面的偽**定義了verilog乙個模組,begin、end的作用與c語言中的"

""\"

""作用相同,begin、end**段中的語句是順序執行的(並行賦值語句是例外)。為了保證**的規範性,即使邏輯判斷分支中僅有一條語句,也可以用begin、end打包起來。

鎖存器與暫存器的最大區別是:鎖存器屬於組合邏輯,輸出電平變化僅與輸入訊號有關,不受時鐘約束。

鎖存器對輸入脈衝敏感,容易產生毛刺,這種瞬時的不確定性在后級電路中引發的bug難以察覺。

另外由於fpga中沒有現成的鎖存器資源,消耗底層資源。

鎖存器產生的原因往往是**邏輯不完整。例如,if語句缺少else與之對應,case語句中沒有default等。

某項工作需要按照固定的流程或步驟來完成,工作過程中總在各個階段之間切換。例子:公升降機。

開發人員在編寫**時不需要考慮到所有狀態的排列組合,僅需要考慮各個工作狀態或工作階段之間的轉換條件。例如:公升降機的控制程式不需要各個樓層分別編寫,而是通過狀態機來完成開關門、上公升下降等動作。

狀態機全稱「有限狀態機」。在電路實現上可以看作組合電路和時序電路的組合,狀態機的各個狀態往往是時序電路,而狀態之間的切換和輸出往往是組合邏輯實現的。根據狀態機的輸出是否和輸入相關,狀態機又分成「摩爾型狀態機」和「公尺勒型狀態機」。

狀態機分類

介紹公尺勒型狀態機(mealy)

組合邏輯的輸出不僅取決於當前狀態還取決於狀態機的輸入

摩爾型狀態機(moore)

組合邏輯的輸出僅取決於當前的狀態

公尺勒型狀態機示意圖(該插圖來自正點原子教程)

摩爾型狀態機示意圖(該插圖來自正點原子教程)

1.6.4.1 二段式

乙個always模組適用同步時序描述狀態轉移。

另乙個always模組採用組合邏輯判斷狀態轉移條件,以及描述狀態機輸出。

1.6.4.2 三段式

乙個always模組使用同步時序描述狀態轉換

乙個always模組使用組合邏輯判斷狀態轉移條件

最後乙個always模組用於描述狀態機輸出,可以採用時序電路,也可以使用組合電路。

fpga入門學習心得筆記

今天開始寫一些關於fpga的學習心得,前面的基本語法已經掌握,總結一些 的實現方法。關於uart的收發 1.使用兩個計數器 一 計數以產生序列機的基本計數單位 二 每當第乙個基本計數器計數一輪,這個計數器加一。第乙個計數器是為了控制波特率,可以通過設定引數,實現乙個波特率可變的模組。第二個計數器每次...

FPGA學習心得分享(二)

掌握一門程式語言的最好方法是漸進式刷題 verilog語法原則要注意乙個reg最好只在乙個always塊裡進行賦值操作 if else或case等條件選擇語句需要完備的條件,防止綜合出不必要的latch 關於 default和else的必要性 組合邏輯的case最好要有default,因為如果cas...

學習心得 python學習心得

自從來了深圳工作以後,尤其是屢屢面試碰壁以後。發現其實自己的知識面很窄,做筆試題的時候絞盡腦汁還是漏洞百出,並不是不會做,而是出現一大堆不該有的失誤。每次被問道,對資料庫了解嗎?說一大堆看起來很高階的東西 好啊,那我們寫幾個sql語句吧。馬上完蛋了,沒了手冊關鍵字都記不起。了解哪幾種指令碼語言,sh...