打印

请教一个关于基于FPGA的项目的问题

[复制链接]
2879|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
snajadan|  楼主 | 2010-4-10 10:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 snajadan 于 2010-4-10 14:56 编辑

大家好,在这里向大家请教两个问题,
我的项目是基于FPGA的,使用的开发板是Spartan-3E,环境是ISE 8.2i,使用VHDL语言,
1.我想实现从二进制-BCD的转换,因为涉及的二进制位数较长,要考虑36位的二进制码,所以找不到合适的方法进行转换,因为刚入门,所以想问大家一下,有什么好的方法推荐,抑或是SPARTAN-3E上本身有没有自带这种码制转换电路,麻烦大家指点一下,谢谢大家了~
2.一个关于VHDL的问题,在二进制中,对一个数进行单位转换,比如,364,对应的二进制为101101100,我想转成3.64的形式,即以百位单位,那么怎么用VHDL中实现这一转换,谢谢了~

相关帖子

沙发
ilove314| | 2010-4-10 22:07 | 只看该作者
有技巧,不难,自己揣摩一下就明白,呵呵

使用特权

评论回复
板凳
lwq030736| | 2010-4-10 22:25 | 只看该作者
本帖最后由 lwq030736 于 2010-4-10 22:56 编辑

编辑掉。。。有欠考虑了:L

使用特权

评论回复
地板
lwq030736| | 2010-4-10 23:11 | 只看该作者
好像可以用 for Loop循环来做
a : std_logic_vector_ ( 35 downto 0)  --a就是你要转换的二进制数
TYPE b IS ARRAY (0 to 8)of integer   --b是转换后的数,用一数组保存
for i in 0 to 8 loop                             --循环执行9次
b(i) <= conv_integer(a(3 downto 0)); --将a的低4位转成整数给b(i)
a <= a srl 4; --a右移4位
end loop;
只提供一个大概思路,没有验证过。。。仅供参考

使用特权

评论回复
5
mr.king| | 2010-4-11 13:09 | 只看该作者
4楼转换结果应当不对,BCD不是这样转

使用特权

评论回复
6
snajadan|  楼主 | 2010-4-12 11:04 | 只看该作者
呵呵,谢谢了,因为之前没怎么接触VHDL,所以这几天一直在狂啃例子,, 2# ilove314

使用特权

评论回复
7
snajadan|  楼主 | 2010-4-12 11:07 | 只看该作者
谢谢关注了,但是感觉像5楼所说的,BIN-BCD应该不是这样转换的,我现在采用移位的方法,BIN码依次左移一位至BCD中,判断得到的各个BCD是否大于4,是则加3,不是则保持不变,直至所有BIN码都移完。。 4# lwq030736

使用特权

评论回复
8
satellite025| | 2010-4-13 19:40 | 只看该作者
7楼讲的比较有道理

使用特权

评论回复
9
mugenwon| | 2010-4-16 12:02 | 只看该作者
本帖最后由 mugenwon 于 2010-4-16 13:00 编辑

VHDL就不懂了。反正你是要把很多位01二进制转换为4位一个数字的BCD码
FPGA它是一片电路板。输入32条线,10进制就是42亿多,10个位,BCD就变成要10x4=40条输出线!
如果用单片机的思想就是用除法,把这个32位数除以10亿,1亿,1千万等拿出商,然后把这些商转换成BCD4根线。
于是你要弄个硬件的除法器,或者用减法代替。。。

使用特权

评论回复
10
mugenwon| | 2010-4-16 12:58 | 只看该作者
本帖最后由 mugenwon 于 2010-4-16 13:02 编辑

至于这个除法或减法器如何做,我觉得不用自己去考虑。根据我这2天学习verilogHDL的粗浅知识,里面有减法计算能力,还有if lese之类的判断,还有寄存器,常量变量等输入。就是说verilog编译器能帮你完成这个复杂过程。只要能用这种从上而下的设计思想,先弄清楚大局,然后模块化的细分下去,加上一点数字电路知识,这些电路都能通过FPGA弄出来。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

7

帖子

1

粉丝