Menu Close

Verilog实现16进制到10进制(BCD)转换(3)快速算法

在之前的算法中,算法执行的速度还是有些慢, 我们设计BCD 快速算法实现,这样就不会因为输入数据的不同, 而产生输出的结果的时钟周期不同。在文章权值变换法实现16进制到BCD码转换中, 我们介绍了6位数码管的的hex 到 BCD 的转换方法, 将这篇文章的内容总结, 整理,就可以实现任意的hex数到BCD的转换, 也可以实现已知BCD 数码管的个数, 推算出需要的hex 的位数了。本文中的使用的都是参数化的设计, 适应性还是比较强的。同时也利用了系统函数$clog2 ,  $ceil ,  $log10等,帮助我们定位位宽。

代码1:在已知多少位BCD码,计算可以输入的二进制最大有多少位。


 

仿真程序:


 

仿真输出结果

从仿真结果可以看出, 输入的数据不会影响输出所需要的时钟数量,也就是说,这个算法需要的时钟是稳定的, 可以快速的计算出BCD 的结果。注意,这种算法转换的效率比较高, 输入,输出需要的时钟稳定, 但是缺点是综合布线后,时钟不会非常高。(布线逻辑比较大)   当然,掌握算法后, 也可以通过增加pipeline 分级锁存, 使得整个综合时序提高。

 

代码2:在已知输入的二进制位宽,计算BCD码位数

代码如下:


仿真文件如下:


仿真结果如下:

从结果中可以看出, 我们利用$ceil 系统函数 和 $log10 系统函数,实现了输入hex 的位数, 计算出BCD 所需要的位数。

Posted in FPGA, FPGA 教材教案, Verilog, 教材与教案, 文章