亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問如何解決10進制直接與二進制相成乘的問題?

請問如何解決10進制直接與二進制相成乘的問題?

叮當貓咪 2023-04-08 14:10:18
首先我定義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定義為整數類型,計算后再轉換成二進制。

查看完整回答
反對 回復 2023-04-11
?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

VHDL里頭不能直接使用乘號除號,必須自己寫乘法器或者用現成的乘法器。另外你這個有溢出問題,這個問題你自己想辦法吧,關于擴大1.6倍我可以給你個建議,就是用移位和加法來實現。
1.6 約等于 1 + 1/2 + 1/8 - 1/32
通過右移位得到各個數字,然后相加就可以了
這里DUTY一共才8位,所以1/32那一項可以不要了。就是要也會由于精度不夠導致這一項一直是0.

查看完整回答
反對 回復 2023-04-11
  • 2 回答
  • 0 關注
  • 180 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號