2011年10月24日 星期一

2011/10/24 硬體描述語言 多工器設計 Multiplexer design

比照之前2011/10/03的多工器設計是個1-bit的多工器,

將兩個1-bit的多工器組合便可產生2-bits的多工器。
同理,
4-bits的多工器則是使用兩個2-bits組合而成。

同樣從2011/10/03的時脈圖可得知,
當SEL為0時,信號輸出為B。
當SEL為1時,信號輸出為A。
不論多少bit的多工器皆須滿足上述條件。

多工器本身的組合並不難,
只要注意將輸入線數除以二分成高腳位和低角位。

以下為1-bit組合成2-bits多工器的範例程式碼:


























以此類推便可推至64-bits的程式碼,在此則省略不多加說明。

當64-bits的多工器組合好後,
如何驗證該多工器是否正確成了今天最主要的課題。
緊接著先介紹一些會用到的Verilog語法:
※大多為網路上蒐集來的零星資料,和自己所學過的程式語言比較。

一、initial語法:
initial具對變數設出值的功能,
但它只在#0的時候動作,
也就是說透過initial設初值的動作只會被執行唯一一次,並且至於時脈設定的模組
其過程類似MATLAB的for迴圈動作,
開始與結尾分別用begin、end來囊括設初值的動作。

二、reg語法:
reg是register的縮寫,有登記的意思。
在Verilog中是指對變數設位數(也就是幾條線),
reg設的值是被動的,
必須透過initial和always設定初值才會改變。

三、wire語法:
wire起初也是對變數設位數,
之後透過assign來對變數設值,
或者是不設初值,透過輸入信號的不同而不同。

因此,一個用於測試64-bits的時脈設置如下:
















300的十六進制是12C,
100的十六進制是64,
故時脈圖當SEL=0時,輸出應是64,反之為12C。

沒有留言:

張貼留言