HDLBits (65) — 2至1位寬為4的多路復(fù)用器
本題鏈接:
https://hdlbits.01xz.net/wiki/Mux256to1v
創(chuàng)建一個(gè)位寬為4的256到1個(gè)多路復(fù)用器。256 4位輸入全部打包到一個(gè)1024位輸入向量中。當(dāng) sel =?0時(shí),選擇?in[3:0],當(dāng) sel = 1時(shí),選擇?in[7:4],選擇?in[3:0],當(dāng) sel = 2時(shí),選擇?in[11:8],以此類推。
預(yù)期解決方案長(zhǎng)度:大約1-5行。

題目
提示:
對(duì)于這么多選項(xiàng),case 語(yǔ)句可能會(huì)未必有用。
向量指針可以是可變的,只要給仿真器計(jì)算所選位的寬度是常量。它并不總是能夠完美的完成這個(gè)操作。其中有一個(gè)報(bào)錯(cuò)... is not a constant"?意味著它無(wú)法證明選擇寬度是常量。特別是,使用向量指針選擇向量的位將非常有用。in[ sel*4+3?: sel*4 ]就行不通。
Bit slicing?(“自Verilog-2001以來(lái)的向量指針選擇”)有更緊湊的語(yǔ)法。

答案

Verilog 中提供了大約 9 種操作符,分別是算術(shù)、關(guān)系、等價(jià)、邏輯、按位、歸約、移位、拼接、條件操作符。
大部分操作符與 C 語(yǔ)言中類似。同類型操作符之間,除條件操作符從右往左關(guān)聯(lián),其余操作符都是自左向右關(guān)聯(lián)。圓括號(hào)內(nèi)表達(dá)式優(yōu)先執(zhí)行。例如下面每組的 2 種寫法都是等價(jià)的。
拼接操作符用大括號(hào)?{,}?來(lái)表示,用于將多個(gè)操作數(shù)(向量)拼接成新的操作數(shù)(向量),信號(hào)間用逗號(hào)隔開(kāi)。
拼接符操作數(shù)必須指定位寬,常數(shù)的話也需要指定位寬。
參考內(nèi)容:
2.4 Verilog?表達(dá)式?| 菜鳥(niǎo)教程:
https://www.runoob.com/w3cnote/verilog-expression.html