首先我定義signal DUTY:std_logic_vector(7 downto 0);為8進制信號,想實現以下功能擴大1.6倍,DUTY<=16/10*DUTY;但是這樣表達會出現以下錯誤提示,請問如何解決10進制直接與二進制相成乘的問題?補充:我已添加數學運算庫文件use ieee.std_logic_arith.all;錯誤提示如下:Error (10327): VHDL error at dds1.vhd(49): can't determine definition of operator ""*"" -- found 0 possible definitions除法也有同樣的問題:Error (10327): VHDL error at dds1.vhd(49): can't determine definition of operator ""/"" -- found 0 possible definitions
2 回答

縹緲止盈
TA貢獻2041條經驗 獲得超4個贊
會產生小數誒,沒有這樣乘的,你把小數再傳遞給DUTY的話,就不是(7 downto 0)這個范圍了。要么你就把DUTY定義為整數類型,計算后再轉換成二進制。

阿波羅的戰車
TA貢獻1862條經驗 獲得超6個贊
VHDL里頭不能直接使用乘號除號,必須自己寫乘法器或者用現成的乘法器。另外你這個有溢出問題,這個問題你自己想辦法吧,關于擴大1.6倍我可以給你個建議,就是用移位和加法來實現。
1.6 約等于 1 + 1/2 + 1/8 - 1/32
通過右移位得到各個數字,然后相加就可以了
這里DUTY一共才8位,所以1/32那一項可以不要了。就是要也會由于精度不夠導致這一項一直是0.
添加回答
舉報
0/150
提交
取消