vhdl问题:数的转换

liu_xy13 2003-05-29 09:07:22
怎么把一个3位的integer数变成3个百、十、个位的bcd数啊?

除10取余好像不行啊~~~~
...全文
26 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
milee 2003-06-03
  • 打赏
  • 举报
回复
我看还是直接用十进制计数器。
A,B:STD_LOGIC_VECTOR(3 DOWNTO 0); --两位十进制数
QL<=CONV_INTEGER(A);
QH<=CONV_INTEGER(B);
坐着等天亮 2003-05-31
  • 打赏
  • 举报
回复
理论和实际的差距还是避免不了的啊
你看看你,用了那么多除法,这……
FPGA不该这么设计啊!
虽然楼主问的是怎样实现BIN->BCD转换,但是要考虑实际的可行性啊!
对吧?
坐着等天亮 2003-05-31
  • 打赏
  • 举报
回复
哇,大侠!
除法很伤的啊!
rgwan 2003-05-30
  • 打赏
  • 举报
回复
这要看你的用途而定,如果输入的整数是constant的话,可以用一个函数来实现。
function int2bcd(din:integer) return std_logic_vector(11 downto 0) is
variable temp:integer;
variable result:std_logic_vector(11 downto 0);
begin
--百位
result(11 downto 8):=conv_std_logic_vector(((din mod 1000)-(din mod 100))/100,4);
--十位
result(7 downto 4):=conv_std_logic_vector(((din mod 100)-(din mod 10))/10,4);
--个位
result(3 downto 0):=conv_std_logic_vector(((din mod 10)-(din mod 10)),4);
return result;
end;
如果你要实现组合逻辑,即输入数据不是constant,这个函数的代价就比较大,而且除法不能用这个现成的。你可以用altera带的lpm除法库函数来实现除法。

milee 2003-05-30
  • 打赏
  • 举报
回复
可以设计十进制计数器啊。
另外好象可以直接转换成BCD码。我听老师说的。
坐着等天亮 2003-05-30
  • 打赏
  • 举报
回复
那就不要使用3位的integer数
直接用3位BCD数。

6,127

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧