Verilog 筆記

HDLBits 學習紀錄

concatenate: {a,b}

duplicate: {N{a}}

組合電路: 任何時刻的輸出只和當下的輸入有關,與前後時序的輸出入無關。
時序電路: 相對於組合電路,任何時刻的輸出都與前一時刻的輸出入有關。

  • always @(*) → 組合電路
    此時給值必須用 =
  • always @(posedge clk/negedge clk) → 時序電路
    此時給值必須用 <=

carry-select adder

兩種(進位與不進位)都算一遍,再依據低位元的結果選擇輸出,相較於ripple-carry adder可增加運算效率

carry-select adder

Adder-Substractor

將b 與32[sub]做XOR的結果,與A相加。當sub = 1時即為a-b,反之則為a+b

a-b = a + ~b + 1 = a + (N{1}^b) +1
Adder-Substractor

case/casez

用casez可以在case中忽略不在乎的位元。

進入case/casez時會依照順序往下進行比對,一旦符合件則跳出case/casez。

example of casez

Avoid latch

***初始化變數很重要***

因為default只能設定一個輸出,且最多只能有一個default。當有多個輸出要處理時,可以透過在case之前給定初始值,可以避免一個default無法處理的狀況。

example of give “default value”

parity

資料內有幾個1。
e.g. 10110,有3個1,為odd; 1001,有2個1,則為even

parity bit

加入一個額外的位元進入原先的資料,使得整個資料為奇/偶。
e.g. 若需求為 even parity, parity bit of 10110 = 1
反之若需求為 odd parity, parity bit of 10110 = 0

can use XOR to calculate even parity bit

For loop

兩種都可以用,可以直接宣告int。

my answer
Solution

Generate_For

畫圖、畫圖、畫圖,如果不知道在寫什麼就把電路圖畫出來。

Example of generate for loop

Bit Slicing

不能使用註解的那種寫法,會出現錯誤 "… is not a constant" 代表verilog不能證明"sel"是一個常數,必須用bit slicing的寫法,兩種寫法如下。

Example of Bit Slicing

--

--

Qertile 郭泰爾

學習路上順便做點筆記留下痕跡OUO,怕以後忘了曾經所學的這些知識。