2016年7月16日 星期六

VHDL 的integer宣告範圍與實際範圍探討

VHDL其中一個資料型態是integer(整數),一般來說宣告時會在後面加上限定範圍,問題就在這邊了;假設今天的程式如下:<有省略一部份不是今日重點的東西>
signal A:integer range 0 to 10;

if rising_edge(clk)then
    A<=A+1;
end if;
如果你認為A的輸出會是0~10再回到0,那就大錯特錯了!
WHY?
再想想VHDL最重要的概念,你今天寫的程式最終會被編譯成數位電路,所以寫程式時需要用一些數位電路的概念。
當宣告range 0 to 10,10轉換成二進制是1010,1010對於4bits的長度來說是最大值嗎?當然不是;所以說實際上的輸出將會是0000~1111(0~15),除非你把程式改成以下樣式:
if rising_edge(clk)then
    if A<9 then
        A<=A+1;
    else
        A<=0;
    end if;
end if;
使用條件將A的範圍鎖定住,就可以囉;
不過我建議還是把宣告範圍改成以下:
0 to 二的次方-1;像這篇的範例就適合改成0 to 15(二的4次方-1),不過為什麼要減1呢?因為0本身佔用了一個數值。


標籤:VHDL integer超過範圍、VHDL integer範圍不受控制

沒有留言:

張貼留言