在数学和数字电路中,二进制数是指用二进制记数系统,即以2为基数的记数系统表示的数字。这一系统中,数通常用两个不同的符号0和1来表示。以2为基数代表系统是二进位制的。把这种二进制数字转换成另一种数字的装置,即为二进制码转换器。
二进制码高速转换及其在自动化测试中的应用二进制一一BCD码转换器,常用于数字计算机接口设备中,广泛地应用于数字化仪器仪表、 数显装置、 雷达与导航和遥感与遥测等数字式测定目标座标系统中。 由于这些数字系统的内部工作常采用二进制码进行运算操作,因此如何有效地把数字系统工作结果的二进制数据转换为BCD码(Binsry Coded Decimal、 二一一十进制码),进而转换为所习惯的十进制数字并自动地显示或打印出来,这对方便、 迅速、 准确地处理数字系统的工作结果和对系统的自动检测、 故障排除与维护使用都是很重要的)。
如何设计与选用合适的二进制一 一BCD码转换方法,这对自动化测试装置来说,是相当重要的。 基本的转换方法有两种 : 计数器法与硬件法,计数器法虽然方法简单,用硬件最少,设备成本也较低,但转换速度最慢,例如转换n位二进制数码的转换时间就需要2n个时钟脉冲周期,对16位二进制数字转换,时钟脉冲频率为5MC,则需转换时间13.lms。而硬件法由于两种数码之间没有简单的逻辑关系,因此电路常常较为复杂,但转换速度可做得很高。 至于选择什么样的转换方法,首先需要考虑的是速度要求,只有在满足给定速度要求后,然后再考虑设备的复杂程度,用集成电路数量的多少,也就是设备成本问题。 在字长一定的情 下,用集成电路的数量,这就取决于设计方法和集成电路的制造工艺了。1
BCD码是一种很有用的代码,它能以最少的硬件来实现二进制与十进制数字的转换。BCD码是用一组四位二进制码来表示一位十进制数字的一种方法。 它只取四位二进制码可能有的十六种组 合中的十种来表示0一 9十个数字。 在BCD码中,1001是最大的四位组。BCD码既不同于二进制码,也不同于十进制码,它是把十进制与二进制的特点结合在一起的,在每个四位组内部是二进制的,但从组到组是十进制的。 直到十进制数值9为止 ,BCD码与二进制码相同,在大于数值9,BCD码与二进制码则完全不同,例如13的二进制数为1101,但13的BCD数是00010011。 虽然用BCD码表示一个十进制数字,比用二进制码来表示,一般需要用更多的位数,也就是需要用更多的硬件,例如表示一个6位十进制数字,在BCD码中,需要24位 ;而在二进制码中,只需要20位。 然而,BCD码的主要优点是变成十进制数字容易,变回来也容易。 由于BCD码这种计算上的低效率,在BCD与与十进制数字相互转换中很容易实现,而得到了补偿。 因此,BCD码这种数字表示方式,常用于计算机接口设备中,例如需用十进制输入的打字机、 终端显示器等。二进制一-BCD码转换器用于导弹武器系统、 雷达与导航、 遥感与遥测、 靶场测量等数字式测定目标座标系统中的研究工作不断扩展、 应用也日益广泛。 显然,如何把这些系统测得目标角度、 距离、 速度等参数的二进制数据,转换为所习惯的十进制数字并自动地显示出来,这对方便、 迅速地处理分析目标飞行参数是很重要的。 这种自动显示数据的方法,与一般雷达传统使用的同步传感器指示法、 波门延时电位计指示法、 指示灯指示 等方法相比较,它具有指示精度高、 显示直观、使用方便,实时测试数据等许多明显的优点。1
基本转换器1、转换步骤
介绍的二进制—BCD码转换方法,其工作步骤扼要叙述如下:
在进行二进制—BCD码转换时,首先要检验三个最高的二进制位,若这个单独的三位数码其值等于或大于5,则加3并向左移一位;若这个三位数码其值小于5,则只向左移一位,而不需要加3。
每移一位后,都必须检验每个BCD十进制位,若新组成的四位数码,其值等于或大于5,则加3并向左移一位,若其值小于5,则只向左移一位。然后继续重复这种过程,直到二进制的最低位移入到BCD的最低位的位置为止。 至此,BCD数字就等值于二进制数字。
2、基本转换器的说明
二进制一一BCD码转换器,是由很多个相同的四位基本转换器组合而成。显然,基本转换器应解决在考虑来自二进制输入低位的移入以及BCD输出向高位进位的情况下二进制码与BCD码的转换问题。1
在自动化测试中的应用应用介绍的转换器设计方法,已研制成功了一个用于一般数字系统的8位串行数据自动测试装置。 它的功用是以所习惯的十进制数字形式自动地显示出数字系统工作结果的二进制数据。这种自动显示数据的方法,具有指示精度高、显示直观、使用方便、实时测试数据等许多明显的优点。
自动测试装置的主要技术参数及性能如下:
(1) 测试数据:被测试数字系统的输出数据为串行8位,先以最高位到达测试装置。
(2) 转换时间:最大转换时间不超过2μs。
(3) 工作方式:自动测试方式,测试率为2000次/秒,由数字系统的“取数据脉冲”同步工作。
(4) 移位脉冲:8个移位脉冲串的重复频率为5MC。
(5) 数据显示:以十进制数字形式显示数据。
只要测试装置的转换时间允许,还可任意增加测试数据位数和测试率。
自动测试装置包括五部分:移位脉冲产生器、串行输入并行输出移位寄存器、储存寄存器、二进制一一BCD码转换器、BCD译码显示器。
被测试的数字系统,在每个工作周期内,把工作结果以二进制码方式储存在输出寄存器中,并给测试装置输送一个‘’取数据脉冲”。测试装置接收到‘’取数据脉冲”后,通过门电路的控制,使振荡器立即开始产生移位脉冲,计数器计至第8个脉冲时,即第8个移位脉冲结束后,振荡器就停止工作。由振荡器输出的8个移位脉冲串,一路加到测试装置的串行输入并行输出移位寄存器,另一路经过单稳态电路延时后,送至被测试数字系统的输出寄存器,使数字系统的输出数据以8位串行码方式送到测试装置。
设计方法与计算,应用到自动化测试后,使用效果良好。可供研究自动化测试、数显装置,计算机接口设备,雷达与导航、靶场测量等参考。1
即时编译的动态二进制码转换器描述一个为GBA设计的基于即时编译的二进制码转换器(Binary Translator)。二进制码转换器是在把一种机器( 下文称" 源机器") 上运行的应用程序(下文称" 源应用") 转换成在另一种机器( 下文称"目的机器") 上运行的应用程序( 下文称"目的应用") 的程序。在新的机器出现后,大量的现存机器上的应用都需要通过二进制转换器转换成新机器上的应用。从转换的时机上来分,二进制码转换器分为静态转换器和动态转换器两种,静态转换器静态的分析源应用的二进制码并直接转换成目的应用,但是这样做往往很难甚至于不可能,因为可能很难分析出源应用的二进制码中哪些是代码哪些是数据,不容易保证转换了所有的可执行二进制码;源应用甚至可能在运行期动态生成源机器的机器码并运行,静态转换完全没有办法处理这种情况。所以静态转换器一般不易实现。动态转换器则保留源应用的二进制码,在运行时每次转换一小段正准备执行的代码(通常转换一个基本块) 并运行。这样可以保证所有可能执行到的二进制码都得到转换。动态转换有别于解释执行的地方在于它消除了解释器循环的跳转,并且一段源机器代码在转换之后可以多次执行。
GBA是一款掌上游戏机,该机使用ARM7TDMI的CPU(主频16.78MHz),配备256K工作内存,96K显存,IO和内存统一编址。在GBA平台上有大量精彩的应用,但是在除了PC以外的平台上还没有一个很好的模拟器来支持GBA应用。
描述的二进制码转换器功能是将GBA应用转换为其它平台下的应用程序。转换后的应用程序包含源应用的二进制码,同时也包含一个模拟运行环境和一个即时编译器。模拟运行环境模拟GBA的图像显示和各种系统调用,即时编译器把源应用的二进制码即时编译成目标机器上的二进制码并在模拟环境中运行。
所以程序包含两部分内容,一部分是把GBA应用转换成目的应用。另一部分是GBA二进制码的即时编译器和模拟运行环境。2
模拟运行环境1、内存地址沙箱:模拟运行环境通过一个地址沙箱来模拟源应用的内存空间,所有源应用的内存读写操作都通过内存沙箱进行,以保证与源应用产生相同的效果。GBA平台的内存访问可以分为几类:
1)读写工作内存,显存;
2)读写功能寄存器和IO端口(GBA是统一编址);
3)读只读数据。
其中读写功能寄存器和IO端口可以在编译时探测出并且转换为调用对应功能函数的目标代码。读只读数据和读写工作内存都通过内存沙箱的地址映射表映射到目的运行环境的内存中。可以想象,这样的每次读写都作映射的开销是很大的,所以即时编译器要对这些内存读写作很多优化。
2、图形模拟环境:使用一块缓冲区模拟GBA平台的显存。GBA有较为复杂的二维图形硬件加速,基本概念有以下几种:
1)背景(Backgrounds): 背景可以看作显示在屏幕上的一层图像。GBA支持最多四个背景,背景支持三种模式: 文本,放缩/旋转,位图。
2)精灵(Sprites): 精灵是可以在屏幕上移动的较小的图片。GBA支持最多128个精灵。
3)窗口( Windowing): 窗口是一个剪裁区域,可以设定区域内显示或不显示。GBA支持两个窗口。
以上的功能是通过显存和一些功能寄存器来实现的。可以把最终的屏幕显示看作以显存和寄存器内容为自变量的函数。有可能某个寄存器的值稍有改变,屏幕的输出变化就很大。而且图形操作一般具有x*y的复杂度,所以图形模拟可能会成为一个瓶颈。
3、BIOS模拟和硬件模拟(DMA,串口,Timer,键盘):GBA的BIOS提供一些系统调用,如除法运算,LZ77解压缩,Huffman解压缩等等,硬件也通过一些寄存器控制,这些访问都被编译成调用功能函数。
4、同步与中断:由于是编译执行,无法精确的模拟原CPU的周期,只能在编译时估计编译单元所需周期并在运行时统计。在中断发生时,无法停止编译后的目标机器代码的执行,所以只能在编译时插入查询函数来主动探测中断是否发生。2
即时编译器1、编译过程:即时编译器以函数为单位进行编译,在运行时,每次发生函数调用(ARM机器指令BL,BLX),就在系统中查询即将调用的函数是否已经被编译,如果该函数已经被编译,则取得该函数入口并跳转到已经编译的代码上执行;如果该函数尚未编译,则编译它并在系统中登记其状态,编译完毕后运行。
首先把ARM7的机器码编译成一种中间代码(IntermediateRepresentation),再从中间代码生成目标机器代码,以便于移植到各种机型之上。中间代码以函数- >基本块- >语句的关系来组织,所以编译过程可以分解为:
1)基本块划分( 划分基本块后就知道函数范围了);
2)基本块内编译( 生成中间代码);
3)根据基本块生成整个函数的目标代码。
2、基本块划分:发生函数调用而未命中时开始编译,编译从函数的入口地址开始,往下扫描代码并分出基本块,一直到:
1)所有的基本块都只指向当前函数的基本块;
2)除了入口的一个基本块以外,所有的基本块都只被本函数的基本块所指向。得到的这样一个函数在编译后会记下其地址及范围。如果稍后的运行中有其它的跳转指向了该函数的范围之内,迫使该范围内的代码重新划分基本块并编译。
3、基本块内编译:基本块内编译成中间代码,中间代码主要是模拟ARM的指令,所以和ARM指令一一对应。ARM的寄存器都看作是全局变量。基于同步和中断处理的考虑,在每个基本块的末尾,都会插入一条函数调用指令,以该基本块在ARM CPU上运行所需的周期数(在编译时确定)为参数,该函数内在全局累加周期数,并据此作适当的同步(比如延时)。该函数同时也要查询此刻是否有中断发生,一旦发生了中断,就保存现场,开始运行中断处理函数。
4、根据基本块生成整个函数的目标代码:根据每个基本块的中间代码编译出目标代码,并针对函数的局部变量作出优化。因为函数的局部变量在函数结束时就消失了,所以不必在生成的目标代码中保留器状态。最后根据基本块的关系,定位各个基本块的目标代码生成目标函数。2
本词条内容贡献者为:
李宗秀 - 副教授 - 黑龙江财经学院