EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——二进制到 BCD 之战
. R8 C+ k1 x6 \, m% A. E( h' d7 I, Z1 }* v6 ~
经过前面的学习,相信大家已经掌握了软件的基本操作和设计的基本流程,接下来我们尝试从顶层至底层来设计一个BCD转换器。
- S7 `1 C* k. \0 G* R. f在本次设计中,我们使用逐步移位法来实现BCD的转换,在设计 FPGA之前,我们先来了解一下BCD转换-逐步移位法的原理: H, Y) u2 [$ s+ H0 z" w
逐步移位法的规则是: 1. 准备一个20比特的移位寄存器; 2. 二进数逐步左移; 3. 每个BCD位做大四加三的调整 ; 4. 二进数全部移完,得到结果; 在这里,我解释一下,为什么需要一个20比特的移位寄存器,原因是这样子,由于输入信号是8位,如果用无符号来表示的话,输入信号的范围就是0-255,而BCD码就是使用4位来表达一个数字,255有3个数字,所以BCD码的长度就是4*3=12比特,而需要准备的20比特移位寄存器就是12比特的BCD码+8比特的输入信号。
; U( J$ F+ I4 \5 m ^现在,我们来举一个具体例子来说明逐步位移法:
# q5 T. K5 l& X5 K) d4 m, W! b由上表知: Bin= 10100101 = 165; BCD= 0001_0110_0101 = 1_6_5 = 165; 由此可知,逐步位移法是可以把二进制码转变成BCD码的。 现在我们开始设计BCD converter的架构图: BCD converter顶层架构图:
, p: V+ i2 ?" G. e0 A2 F+ ]9 I3 xBcd_modify架构图:
# G8 u- Z! M. J9 u0 v7 B/ W0 rCMP架构图: 接着我们尝试使用Verilog HDL语音,把上述的倍频电路结构描述出来: 先把BCD_converter描述出来。 BCD_converter 的代码如下:
' [+ z% j0 R X% E: Q# Y5 c接着我们继续新建一个VerilogHDL File,再把bcd_modify描述出来: bcd_modify的代码如下:
9 v0 y* w3 V/ J最后我们再新建一个VerilogHDL File,再把cmp描述出来: cmp的代码如下:
6 A6 C1 c$ T# |) R$ ?) Y4 ~代码写完之后,我们再新建一个VerilogHDL File,用作test bench(测试程序); 最后调用Modelsim进行仿真就可以看到仿真波形了,如下图所示: 6 v% c4 f4 Q2 v$ H- l& P$ t; r2 B
; H$ w( M! H% Z- S: }3 C% p! q. ?6 @
如图所示:bin(无符号十进制表达)的值等于bcd(十六进制表达)输出的值;所以本次设计的BCD_converter是成功的。 $ o& G2 y2 J: @# f* i" f' U
6 @6 w( B# Y9 X' d
8 O5 Y0 N; a C- x3 z |