HDLBits (171) — 組合電路8
本題鏈接:
https://hdlbits.01xz.net/wiki/Sim/circuit8
這是一個(gè)時(shí)序電路。 閱讀仿真波形來(lái)確定電路的作用,然后實(shí)現(xiàn)它。


題目

答案

輸出波形
未知電路


非阻塞賦值屬于并行執(zhí)行語(yǔ)句,即下一條語(yǔ)句的執(zhí)行和當(dāng)前語(yǔ)句的執(zhí)行是同時(shí)進(jìn)行的,它不會(huì)阻塞位于同一個(gè)語(yǔ)句塊中后面語(yǔ)句的執(zhí)行。
非阻塞賦值語(yǔ)句使用小于等于號(hào)?<=?作為賦值符。
條件(if)語(yǔ)句用于控制執(zhí)行語(yǔ)句要根據(jù)條件判斷來(lái)確定是否執(zhí)行。
條件語(yǔ)句用關(guān)鍵字 if 和 else 來(lái)聲明,條件表達(dá)式必須在圓括號(hào)中。
條件語(yǔ)句使用結(jié)構(gòu)說(shuō)明如下:
if 語(yǔ)句執(zhí)行時(shí),如果 condition1 為真,則執(zhí)行 true_statement1 ;如果 condition1 為假,condition2 為真,則執(zhí)行 true_statement2;依次類推。
else if 與 else 結(jié)構(gòu)可以省略,即可以只有一個(gè) if 條件判斷和一組執(zhí)行語(yǔ)句 ture_statement1 就可以構(gòu)成一個(gè)執(zhí)行過(guò)程。
else if 可以疊加多個(gè),不僅限于 1 或 2 個(gè)。
ture_statement1 等執(zhí)行語(yǔ)句可以是一條語(yǔ)句,也可以是多條。如果是多條執(zhí)行語(yǔ)句,則需要用 begin 與 end 關(guān)鍵字進(jìn)行說(shuō)明。
復(fù)位電路可分類為同步復(fù)位和異步復(fù)位。
同步復(fù)位
同步復(fù)位是指復(fù)位信號(hào)在時(shí)鐘有效邊沿到來(lái)時(shí)有效。如果沒(méi)有時(shí)鐘,無(wú)論復(fù)位信號(hào)怎樣變化,電路也不執(zhí)行復(fù)位操作。
同步復(fù)位常常會(huì)被綜合成如下電路:

同步復(fù)位的優(yōu)點(diǎn):信號(hào)間是同步的,能濾除復(fù)位信號(hào)中的毛刺,有利于時(shí)序分析。
同步復(fù)位的缺點(diǎn):大多數(shù)觸發(fā)器單元是沒(méi)有同步復(fù)位端的,采用同步復(fù)位會(huì)多消耗部分邏輯資源。且復(fù)位信號(hào)的寬度必須大于一個(gè)時(shí)鐘周期,否則可能會(huì)漏掉復(fù)位信號(hào)。
異步復(fù)位
異步復(fù)位是指無(wú)論時(shí)鐘到來(lái)與否,只要復(fù)位信號(hào)有效,電路就會(huì)執(zhí)行復(fù)位操作。
異步復(fù)位常常會(huì)被綜合成如下電路:

異步復(fù)位的優(yōu)點(diǎn):大多數(shù)觸發(fā)器單元有異步復(fù)位端,不會(huì)占用額外的邏輯資源。且異步復(fù)位信號(hào)不經(jīng)過(guò)處理直接引用,設(shè)計(jì)相對(duì)簡(jiǎn)單,信號(hào)識(shí)別快速方便。
異步復(fù)位的缺點(diǎn):復(fù)位信號(hào)與時(shí)鐘信號(hào)無(wú)確定的時(shí)序關(guān)系,異步復(fù)位很容易引起時(shí)序上 removal 和 recovery 的不滿足。且異步復(fù)位容易受到毛刺的干擾,產(chǎn)生意外的復(fù)位操作。
參考內(nèi)容:
4.2 Verilog 過(guò)程賦值 | 菜鳥(niǎo)教程 (runoob.com)
https://www.runoob.com/w3cnote/verilog-process-assign.html
4.5 Verilog 條件語(yǔ)句 | 菜鳥(niǎo)教程 (runoob.com):
https://www.runoob.com/w3cnote/verilog-condition-statement.html
5.1 Verilog 復(fù)位簡(jiǎn)介 | 菜鳥(niǎo)教程:
https://www.runoob.com/w3cnote/verilog2-reset.html