N位BCD—二进制转换电路VHDL设计

2018-10-26 11:32廖超平
科技资讯 2018年13期
关键词:移位

廖超平

摘 要:本文以四位十进制数为例,分析了N位BCD-二进制转换算法,并以此算法为根据,应用VHDL语言设计了一种实现N位BCD-二進制转换的电路。本设计的基本循环是将BCD码表示中各个数码往右边移动一位,每个十进制位的8421表示中权为1的位的数码都移到低1位十进制位的8421表示中重新组合成新的8421表示,而最低一位十进制位的8421表示中权为1的位的数码则移出8421表示成为二进制表示。

关键词:BCD-二进制转换 VHDL 移位

中图分类号:TP303 文献标识码:A 文章编号:1672-3791(2018)05(a)-0003-03

相当大一类的数字系统的人机交互存在数据输入,使用者习惯数据表达为十进制(BCD)码形式,而数字系统内部则以二进制为方便。所以,在使用VHDL设计数字系统时多位BCD-二进制转换电路是必需的。多位BCD-二进制转换电路在各种有人工数据输入的系统,比如:智能仪表、电子秤和数控机床等数字系统的设计中广泛使用。

1 N位BCD-二进制转换算法分析

下面以四位十进制数字的BCD-二进制转换为例分析多位BCD-二进制转换算法。四位十进制数字M的BCD码表示的一般表达式如下:

M:A33A32 A31A30 A23A22 A21A20 A13A12 A11A10 A03A02 A01A00

(其中Aij=0或1,i=0,1,2,3;j=0,1,2,3)

它表示数字大小为:

M=(A33·23+A32·22+A31·21+A30)·103+(A23·23+A22·22+A21·21+A20)·102+(A13·23+A12·22+A11·21+A10)·101+(A03·23+A02·22+A01·21+A00)

先讨论后面两项之间的变换:

(A13·23+A12·22+A11·21+A10)·101+(A03·23+A02·22+A01·21+A00)

=(A13·23 +A12·22 + A11·21)·101+(A10·101+ A03·23 +A02·22 + A01·21) + A00

=(A13·22 +A12·21 + A11)·101·2 +(A10·23 + A03·22 +A02·21 + A01- A10·3)·2 + A00

以上变换是把十进制个位的BCD码8421表示中的权为1的这位右移出十进制个位的BCD码8421表示,而将十进制十位的BCD码8421表示中的权为1的这位右移出十进制十位的BCD码8421表示,进入个位的BCD码8421表示中重新组成新的个位的BCD码8421表示:

(B03·23+B02·22+B01·21+B00)=(A10·23+A03·22+A02·21+A01-A10·3)

其中项-A10·3表示:在A10=1时需要减去3(用二进制表示是11),在A10=0时则需要减去0,并且这种运算只在个位的BCD码8421表示内部进行。

对更高位做同样的变换得到表达式如下:

M=[(B33·23+B32·22+B31·21+B30)·103+(B23·23+B22·22+B21·21+B20)·102+(B13·23+B12·22+B11·21+B10)·101+(B03·23+B02·22+B01·21+B00)+B-1·2-1]·2

这里:B-1= A00,

B03·23+B02·22+B01·21+B00=A10·23+A03·22+A02·21+ A01-A10·3

B13·23+B12·22+B11·21+B10=A20·23+A13·22 + A12·21+A11-A20·3

B23·23+B22·22+B21·21+B20=A30·23+A23·22+A22·21+ A21-A30·3

B33·23+B32·22+B31·21+B30=0·23+A33·22+A32·21+ A31-0·3

其中B33=0。这样一轮变换表示M的BCD码表示中各个数码往右边移动一位,每个十进制位的8421表示中权为1的位的数码都移到低1位十进制位的8421表示中重新组合成新的8421表示,新的一轮8421表示与原来一轮8421表示的关系如上。

如果右移1位数码表示除以2的话,B-1= A00成为M的最低的1位二进制表示数码。

重复一次以上一轮变换得到M的最低2位二进制表示数码:C-1= B00,C-2=B-1= A00。

这样重复16轮变换,依次用Aij,Bij,B-k,Cij,C-k,…,Gij,G-k(i,j=0,1,2,3)来表示各轮变换的二进制数码,就得到M的二进制表示所有的数码。因Gij=0(i,j=0,1,2,3),所以,

M=[G-1·2-1+ G-2·2-2+ G-3·2-3+…+ G-16·2-16] ·216

= G-1·215+ G-2·214+ G-3·213+…+ G-16。

G-16= A00,G-15= B00,…,G-1= F00。

2 N位BCD-二进制转换电路原理框图

以四位十进制数字为例,N位BCD-二进制转换电路原理框图如图1所示。

A[15..0]是四位十进制数的BCD输入,ck是移位时钟,ret为复位,共有四个BCD-bit单元。每个单元负责一位BCD数码的移位和减3或减0操作。转换过程是先并行输入四位十进制数的BCD码,然后复位。奇次时钟到来时移位,偶次时钟到来时4个单元各自进行减3或减0。每移位一次有一位二进制数码进入移位寄存器bit-shift单元,经过了32个时钟,16次移位完成整个转换过程。

3 BCD-bit单元VHDL代码

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

ENTITY bcd_bit IS

PORT ( ck : IN STD_LOGIC;

a : IN STD_LOGIC_VECTOR(3 DOWNTO 0);

b : IN STD_LOGIC;

ret : IN STD_LOGIC;

c : OUT STD_LOGIC;

c3 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ;

END bcd_bit;

ARCHITECTURE one OF bcd_bit IS

signal t : std_logic;

signal q ,c1,c2: std_logic_vector(3 downto 0);

BEGIN

c <= c1(0); c3 <= c1;

PROCESS( ck,ret )

BEGIN

if ret = '0' then

t <= '0';

elsif ck'event and ck = '1' then

t <= not t;

end if;

END PROCESS ;

PROCESS( ck,ret,a ) --移位

BEGIN

if ret = '0' then

c1 <= a;

elsif ck'event and ck = '1' then

if t='0' then

c1(3)<=b;c1(2)<=c1(3);c1(1)<=c1(2);c1(0)<=c1(1);

else c1<=c2;

end if;

end if;

END PROCESS ;

PROCESS( c1 ) --減3或0

BEGIN

CASE c1 IS

WHEN "0000" => c2 <= "0000" ;

WHEN "0001" => c2 <= "0001" ;

WHEN "0010" => c2 <= "0010" ;

WHEN "0011" => c2 <= "0011" ;

WHEN "0100" => c2 <= "0100" ;

WHEN "0101" => c2 <= "0101" ;

WHEN "0110" => c2 <= "0110" ;

WHEN "0111" => c2 <= "0111" ;

WHEN "1000" => c2 <= "0101" ;

WHEN "1001" => c2 <= "0110" ;

WHEN "1010" => c2 <= "0111" ;

WHEN "1011" => c2 <= "1000" ;

WHEN "1100" => c2 <= "1001" ;

WHEN "1101" => c2 <= "1010" ;

WHEN "1110" => c2 <= "1011" ;

WHEN "1111" => c2 <= "1100" ;

WHEN OTHERS => c2 <= "0000" ;

END CASE ;

END PROCESS ;

END ;

4 仿真结果

本设计用Quartus II仿真,功能正确。典型仿真结果如图2~图4所示。

在图2中,复位后,经过了32个时钟,16次移位完成整个转换过程。

在图3中,7896转换成0001111011011000。

在图4中,6797转换成0001101010001101。

在图5中,7657转换成0001110111101001。

参考文献

[1] 王迎春.一种基于简单移位的二-十进制相互转换算法[J].电子学报,2003(2):221-224.

[2] 潘昊,钟珞,陈杰.单片机十六进制数与BCD码转换新探讨[J].微机发展,1997(6):35-36.

[3] 潘松.EDA技术与VHDL[M].北京:清华大学出版社,2005.

猜你喜欢
移位
探讨口腔正畸治疗牙周病致前牙移位的临床效果
口腔正畸治疗牙周病致前牙移位患者的效果探讨
从有限移位调式的运用方式探究梅西安《8首前奏曲》
非多重集群音程循环算法与有限移位模式的拆分
关于Bergman加权移位算子的n-亚正规性
广告用语中的“动宾结构+宾语”现象
移位寄存器及算术运算应用
“NP1+V+死+NP2+了”可逆句式及其成因探析
“NP1+V+死+NP2+了”可逆句式及其成因探析
读编往来/评刊表