EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——二进制到 BCD 之战
' U* g" q9 J; w3 w. P6 \9 d. B+ r3 ^7 E! A1 i; R
经过前面的学习,相信大家已经掌握了软件的基本操作和设计的基本流程,接下来我们尝试从顶层至底层来设计一个BCD转换器。 1 K4 `- W+ S8 s! t
在本次设计中,我们使用逐步移位法来实现BCD的转换,在设计 FPGA之前,我们先来了解一下BCD转换-逐步移位法的原理: / X1 L+ T0 z4 a) I x5 ~8 T
逐步移位法的规则是: 1. 准备一个20比特的移位寄存器; 2. 二进数逐步左移; 3. 每个BCD位做大四加三的调整 ; 4. 二进数全部移完,得到结果; 在这里,我解释一下,为什么需要一个20比特的移位寄存器,原因是这样子,由于输入信号是8位,如果用无符号来表示的话,输入信号的范围就是0-255,而BCD码就是使用4位来表达一个数字,255有3个数字,所以BCD码的长度就是4*3=12比特,而需要准备的20比特移位寄存器就是12比特的BCD码+8比特的输入信号。 . J5 K9 @7 \3 V- x; Z
现在,我们来举一个具体例子来说明逐步位移法:
1 S/ ~$ w6 M3 o* d1 h# `8 l由上表知: Bin= 10100101 = 165; BCD= 0001_0110_0101 = 1_6_5 = 165; 由此可知,逐步位移法是可以把二进制码转变成BCD码的。 现在我们开始设计BCD converter的架构图: BCD converter顶层架构图:
* q- P( p( c: H% N. u. MBcd_modify架构图:
6 g- f& r: E+ ~, `* d" iCMP架构图: 接着我们尝试使用Verilog HDL语音,把上述的倍频电路结构描述出来: 先把BCD_converter描述出来。 BCD_converter 的代码如下:
# @+ F' ^* ?6 d接着我们继续新建一个VerilogHDL File,再把bcd_modify描述出来: bcd_modify的代码如下:
: r: s( n* M$ Z$ w$ H( W! b最后我们再新建一个VerilogHDL File,再把cmp描述出来: cmp的代码如下: 2 G7 y5 \$ j, M$ m0 l
代码写完之后,我们再新建一个VerilogHDL File,用作test bench(测试程序); 最后调用Modelsim进行仿真就可以看到仿真波形了,如下图所示: 6 W1 S' m2 X! P: R
# z) I; ^7 Y& _8 [
3 p8 _. V. i. V% w" f3 s4 ~
如图所示:bin(无符号十进制表达)的值等于bcd(十六进制表达)输出的值;所以本次设计的BCD_converter是成功的。
! S; ?$ o) g& [& L0 a/ R5 p! Y+ n9 a; e8 n! E
' |- U3 N1 X* t1 _
|