炼狱传奇-二进制到BCD之战 经过前面的学习,相信大家已经掌握了软件的基本操作和设计的基本流程,接下来我们尝试从顶层至底层来设计一个BCD转换器。 在本次设计中,我们使用逐步移位法来实现BCD的转换,在设计FPGA之前,我们先来了解一下BCD转换-逐步移位法的原理: 逐步移位法的规则是: 1. 准备一个20比特的移位寄存器; 2. 二进数逐步左移; 3. 每个BCD位做大四加三的调整 ; 4. 二进数全部移完,得到结果; 在这里,我解释一下,为什么需要一个20比特的移位寄存器,原因是这样子,由于输入信号是8位,如果用无符号来表示的话,输入信号的范围就是0-255,而BCD码就是使用4位来表达一个数字,255有3个数字,所以BCD码的长度就是4*3=12比特,而需要准备的20比特移位寄存器就是12比特的BCD码+8比特的输入信号。 现在,我们来举一个具体例子来说明逐步位移法: 由上表知: Bin= 10100101 = 165; BCD= 0001_0110_0101 = 1_6_5 = 165; 由此可知,逐步位移法是可以把二进制码转变成BCD码的。 现在我们开始设计BCD converter的架构图: BCD converter顶层架构图:
Bcd_modify架构图:
CMP架构图: 接着我们尝试使用Verilog HDL语音,把上述的倍频电路结构描述出来: 先把BCD_converter描述出来。 BCD_converter 的代码如下: 接着我们继续新建一个VerilogHDL File,再把bcd_modify描述出来: bcd_modify的代码如下: 最后我们再新建一个VerilogHDL File,再把cmp描述出来: cmp的代码如下: 代码写完之后,我们再新建一个VerilogHDL File,用作test bench(测试程序); 最后调用Modelsim进行仿真就可以看到仿真波形了,如下图所示:
如图所示:bin(无符号十进制表达)的值等于bcd(十六进制表达)输出的值;所以本次设计的BCD_converter是成功的。
|