2016年4月9日 星期六

VHDL 兩數相加再除2 宣告範圍探討

假設今天兩個數字A與B要相加,Y是輸出

程式如下:
Y<=(A+B)/2;

A和B的範圍是0~9
因為相加/2,所以輸出當然也是0~9

一般來說ABY都是宣告
integer range 0 to 9;

integer range 0 to 15:

編譯結果的邏輯使用量都是一樣的,初學者可能會覺得有點疑問,range不一樣阿?
可是你要知道,你今天再寫的是VHDL,你在寫的東西最終會變成電路,所以0~15和0~9都是占用4bits,也代表一件事:就算今天Y的宣告範圍是0 to 9,實際上輸出是0~15,當然今天的程式碼事不會發生上述情況的。
以上看不懂的人請先去學好數位邏輯再來寫VHDL,這很重要!

BUT,問題出現了
今天A和B的範圍是0~9,兩者相加最大是18,18這個數字已經超過4bits了!
雖然最終會/2,但在/2之前要先相加阿,這會發生什麼情況呢?
因為相加的極限是15,所以理所當然Y輸出的最大值是7,那該如何解決?
2^5=32
兩個選擇:
1.AB換成range 0 to 31;
2.Y換成range 0 to 31;

答案是第1種方法,第2種無效。

沒有留言:

張貼留言