EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——二进制到 BCD 之战
1 ~; k4 b# z3 U0 a5 L) K7 G P2 l% M; x8 z6 r. V, d
经过前面的学习,相信大家已经掌握了软件的基本操作和设计的基本流程,接下来我们尝试从顶层至底层来设计一个BCD转换器。
+ o0 b k; j a1 ^( {, u在本次设计中,我们使用逐步移位法来实现BCD的转换,在设计 FPGA之前,我们先来了解一下BCD转换-逐步移位法的原理: 1 q0 l# y; J, u" V* o$ p1 t
逐步移位法的规则是: 1. 准备一个20比特的移位寄存器; 2. 二进数逐步左移; 3. 每个BCD位做大四加三的调整 ; 4. 二进数全部移完,得到结果; 在这里,我解释一下,为什么需要一个20比特的移位寄存器,原因是这样子,由于输入信号是8位,如果用无符号来表示的话,输入信号的范围就是0-255,而BCD码就是使用4位来表达一个数字,255有3个数字,所以BCD码的长度就是4*3=12比特,而需要准备的20比特移位寄存器就是12比特的BCD码+8比特的输入信号。
1 z9 H# X J/ }" |$ o7 G现在,我们来举一个具体例子来说明逐步位移法: w0 l" W- ^5 I. o1 X" n& v4 e
由上表知: Bin= 10100101 = 165; BCD= 0001_0110_0101 = 1_6_5 = 165; 由此可知,逐步位移法是可以把二进制码转变成BCD码的。 现在我们开始设计BCD converter的架构图: BCD converter顶层架构图:
4 ^; h: A. |$ D# WBcd_modify架构图:
5 Y( v* | e" R' b eCMP架构图: 接着我们尝试使用Verilog HDL语音,把上述的倍频电路结构描述出来: 先把BCD_converter描述出来。 BCD_converter 的代码如下: 4 e" u% w' S0 W/ ^3 a
接着我们继续新建一个VerilogHDL File,再把bcd_modify描述出来: bcd_modify的代码如下:
0 a% d4 X( O0 ^/ r最后我们再新建一个VerilogHDL File,再把cmp描述出来: cmp的代码如下: - w: W# b4 {; N" C/ O: S, u. \0 E
代码写完之后,我们再新建一个VerilogHDL File,用作test bench(测试程序); 最后调用Modelsim进行仿真就可以看到仿真波形了,如下图所示: ) I1 B6 z1 R" F# V
7 b6 x$ \! D/ G9 V% r
3 [- } Q, j- @. k1 Q如图所示:bin(无符号十进制表达)的值等于bcd(十六进制表达)输出的值;所以本次设计的BCD_converter是成功的。 ) p8 q8 Q, B# l% e5 Z. T; Z8 H, S) y8 A
& L7 m. \6 b* R# t
. b9 ~+ X& |/ ^% ~" V# w
|