FPGA Verilog字符串转数字,以及数字转字符串的方法
发布日期:2021-06-29 10:17:15 浏览次数:3 分类:技术文章

本文共 717 字,大约阅读时间需要 2 分钟。

在单片机C语言中,我们经常用/10,%10这样的方法将数字转换为字符串,反过来字符串转数字就用乘法:*10。

1829除以10,商182余9,得到个位数9。
182再除以10,商18余2,得到十位数2。
18除以10,商1余8,得到千位数1和百位数8。
但是这种方法并不适合于FPGA。因为乘法器和除法器都比较庞大,如果用在for循环里面,最后编译出来的电路会非常复杂,搞不好会把整个fpga的资源全部用完。
实际上,根本就不需要乘除法,我们只用加减法和移位就能搞定。
数字本质上就是二进制码,字符串本质上就是BCD码。
例如数字18是:00010010
而字符串"18"的十六进制形式是0x31 0x38
把左边的3去掉,剩下的就是1和8,合起来就是BCD码 0001 1000
我们要把字符串转换成数字,就是要将BCD码转换成二进制码(binary,也叫BIN码)。
把数字转换成字符串,就是把二进制码转换成BCD码,然后每个数位前面添上3(0011)就可以了
BIN和BCD之间的互相转换有专门的算法。
BIN转BCD:由加法和8次左移位组成
https://my.eng.utah.edu/~nmcdonal/Tutorials/BCDTutorial/BCDConversion.html
BCD转BIN:反过来,由减法和8次右移位组成
https://embeddedthoughts.com/2016/06/01/bcd-to-binary-conversion-on-an-fpga/
由于算法非常简单,我们可以在FPGA中用组合逻辑来实现,单个时钟周期就可以直接得出结果。
不需要乘法器和除法器。不需要多个时钟周期。

转载地址:https://blog.csdn.net/ZLK1214/article/details/109684041 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:在Verilog中用for循环实现字符串长度获取、字符串连接、字符串转数字以及数字转字符串(一)
下一篇:通过几段代码理解Verilog里面阻塞赋值和非阻塞赋值的区别,以及Verilog的for循环的使用

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月15日 10时35分54秒