HDLBits (153) — 4 位移位寄存器和向下計(jì)數(shù)器
本題鏈接:
https://hdlbits.01xz.net/wiki/Exams/review2015_shiftcount
這是一系列的五個(gè)練習(xí)中的第一部分,這些練習(xí)由幾個(gè)較小的電路構(gòu)建一個(gè)復(fù)雜的計(jì)數(shù)器。 相關(guān)的整體設(shè)計(jì),請(qǐng)參閱?the final exercise。
構(gòu)建一個(gè)四位移位寄存器,該寄存器也用作向下計(jì)數(shù)器。 當(dāng) shift_ena 為 1 時(shí),數(shù)據(jù)首先移入最高有效位。當(dāng) count_ena 為 1 時(shí),當(dāng)前在移位寄存器中的數(shù)字遞減。由于整個(gè)系統(tǒng)不會(huì)同時(shí)使用 shift_ena 和 count_ena,所以電路無(wú)需關(guān)注兩個(gè)控制輸入都為 1 的情況。(這主要意味著哪種情況優(yōu)先級(jí)更高并不重要)。


題目

答案

輸出波形
移位模式

計(jì)數(shù)模式


非阻塞賦值屬于并行執(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)中。如果?if 條件每次執(zhí)行的語(yǔ)句只有一條,那么可以不使用 begin 與 end 關(guān)鍵字。但如果是 if-if-else 的形式,即便執(zhí)行語(yǔ)句只有一條,不使用 begin 與 end 關(guān)鍵字也會(huì)引起歧義。當(dāng)然,編譯器一般按照就近原則,使 else 與最近的一個(gè) if(例子中第二個(gè) if)相對(duì)應(yīng)。但顯然這樣的寫法是不規(guī)范且不安全的。所以條件語(yǔ)句中加入 begin 與 and 關(guān)鍵字就是一個(gè)很好的習(xí)慣。
參考內(nèi)容:
4.2 Verilog 過(guò)程賦值 | 菜鳥教程:
https://www.runoob.com/w3cnote/verilog-process-assign.html
4.5 Verilog 條件語(yǔ)句 | 菜鳥教程:
https://www.runoob.com/w3cnote/verilog-condition-statement.html