Verilog語言(數(shù)字邏輯課程筆記二)——賦值語句
Verilog HDL在相當(dāng)長的時(shí)間內(nèi),仍是IC設(shè)計(jì)人員不可或缺的技能。
教師和教材都過于強(qiáng)調(diào)Verilog語言的硬件特性和可綜合特性。將Verilog語言的行為級語法只作為語法設(shè)定來介紹,忽略了Verilog語言的軟件特性和仿真特性。使得初學(xué)者無法理解Verilog語言在行為級語法(過程塊、賦值和延遲)背后隱藏的設(shè)計(jì)思想。
今天為大家分享《Verilog語言(數(shù)字邏輯課程筆記二)——賦值語句》希望能為大家?guī)韼椭韶洕M滿,點(diǎn)贊收藏。
識別二維碼添加老師
領(lǐng)取Verilog學(xué)習(xí)資料

?《經(jīng)典Verilog100多個(gè)代碼案例》
?《Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程》
賦值語句
連續(xù)賦值
連續(xù)賦值語句是 Verilog 數(shù)據(jù)流建模的基本語句,用于對 wire 型變量進(jìn)行賦值。其格式如下:
? 等式左邊必須是一個(gè)標(biāo)量或者線性向量,而不能是寄存器類型;
? 等式右邊的類型沒有要求,等式右邊的值一旦發(fā)生變化,就會(huì)立刻重新計(jì)算并同時(shí)賦值給左側(cè)。

過程賦值
● 過程賦值是在 initial 或 always 語句塊里的賦值,主要用于對寄存器類型變量進(jìn)行賦值
● 寄存器變量在被賦值后,其值將保持不變,直到重新被賦予新值
● 過程賦值只有在語句執(zhí)行的時(shí)候,才會(huì)起作用
● Verilog 過程賦值包括 2 種語句:阻塞賦值與非阻塞賦值
過程賦值語句塊:always語句塊
? 通常帶有觸發(fā)條件
? 語句塊中的語句會(huì)重復(fù)執(zhí)行
? 一個(gè)變量不能在多個(gè) always 塊中被賦值
? 在 always 塊中被賦值的只能是 register 型變量
? always 語句塊即可以用來實(shí)現(xiàn)組合邏輯也可以用來實(shí)現(xiàn)時(shí)序邏輯
模塊聲明:
不帶有敏感信號的 always 語句塊會(huì)一直
執(zhí)行
? 可用于仿真時(shí)鐘信號生成
always設(shè)計(jì)組合電路
代碼示例:

always設(shè)計(jì)時(shí)序邏輯電路
? 模N計(jì)算器,計(jì)數(shù)器從0開始,每個(gè)時(shí)鐘周期上升沿自加1,計(jì)算器加到N-1之后重新從0開始計(jì)數(shù)。
? 模N計(jì)數(shù)器需要 log2 ?? 個(gè)觸發(fā)器來保存計(jì)數(shù)值
代碼示例:
阻塞賦值
? 阻塞賦值屬于順序執(zhí)行,即下一條語句執(zhí)行前,當(dāng)前語句一定會(huì)執(zhí)行完畢
? 阻塞賦值語句使用等號 = 作為賦值符
? 仿真中,initial 里面的賦值語句都是用的阻塞賦值

非阻塞賦值
? 非阻塞賦值屬于并行執(zhí)行語句,即下一條語句的執(zhí)行和當(dāng)前語句的執(zhí)行是同時(shí)進(jìn)行的,它不會(huì)阻塞位于同一個(gè)語句塊中后面語句的執(zhí)行
? 非阻塞賦值語句使用小于等于號 <= 作為賦值符

? 僅用于仿真,沿時(shí)間軸只執(zhí)行一次
? 用途主要是在仿真的初始狀態(tài)對各變量進(jìn)行初始化
? 不可綜合,常用于測試文件中生成激勵(lì)波形(如復(fù)位信號)作為電路的仿真信號
generate
generate 可以用來循環(huán)實(shí)例化模塊或條件實(shí)例化模塊
? generate 與 for loop,用來構(gòu)造循環(huán)結(jié)構(gòu),多次實(shí)例化某個(gè)模塊
? generate 與 if else 或 case,用來在多個(gè)塊之間選擇一個(gè)代碼塊
?

文章長度有限,該學(xué)習(xí)筆記將持續(xù)更新,點(diǎn)贊收藏。
想要獲取IC設(shè)計(jì)資料(前端、后端、驗(yàn)證、模擬版圖...)的同學(xué),趕快掃下面二維碼私信助教老師,還有機(jī)會(huì)獲取免費(fèi)課程哦~?


來自CSDN秘密果醬博主的,已獲博主許可,轉(zhuǎn)載請聯(lián)系博主。