购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1 电路中有符号数的表示

电路中的信号线都是金属连线,实际上是没有符号的。那么,数学运算中的数值,在电路中如何表示?

在RTL中,信号分为无符号的和有符号的。无符号的信号指不带符号,只以零和正值形式存在的信号;有符号的信号指带有符号,其值可能是负数、零或正数的信号。

2.1.1 无符号的信号对应的实体电路

无符号的信号可以直接翻译为金属连线,比如,某个信号在某一时刻的值为6,则可以用3根信号线表示它,这3根线分别传输高、高、低电平。数字线路只传输高和低两种电平,根据元器件的工艺和供电电压来决定高低电平,例如以1.8V供电的元器件,一般以1.3V为高电平门限,0.5V为低电平门限。高于1.3V的电平都认为是高电平,低于0.5V的电平都认为是低电平。如果更换为以0.9V或1.1V供电的元器件,则高低电平的标准需要做相应调整。在数字上,常将高电平用1表示,低电平用0表示。因此,以3根信号线传输数据6,以RTL语言表述为3'b110,其中b表示二进制,3表示3根信号线,即3位,具体数值为110,表示高、高、低。

该信号在运算过程中数值会经常发生变化,定义它的位宽时,要估计它可能出现的最大值,比如它可能出现的最大值为100,则需要7位表示。用7位传输一个值为6的信号,则7根金属线上传输的电平为7'b0000110。

2.1.2 有符号的信号对应的实体电路

有符号的信号在实体电路中传输时,需要转化为无符号的形式。转换方法多种多样,但在计算机和数字芯片中广泛采用的方法是对有符号数采用补码表示。

在“计算机原理”课程中,已介绍过数值的原码、反码和补码形式。对于最为常用的原码和补码,需要在这里明确它们的含义。

原码就是直接用二进制表示一个值,比如10可以表示为'b1010。如果带符号,就可以给它在高位上扩展一个符号位,+10可表示为'b01010,-10可表示为'b11010,其最高位的0和1分别代表正和负。

补码就是一个数的正负形式能够形成互补关系的编码。当原码为正数或零时,补码就是原码本身。而当原码为负数时,补码须与原码形成互补关系,具体如式(2-1)所示,其中, x y 分别表示一个值的正数和负数形式, n 为该数值的位宽。

例如,如果要将-19以6位二进制补码形式表示,则计算方法如式(2-2)所示,将得到的结果45以二进制表示为6'b101101,即为-19的6位补码形式。

式(2-1)的方法体现的是补码的本来含义,而“计算机原理”课程中介绍的方法,即对正数的二进制原码取反加1,则是一种与式(2-1)表述不同,但实际含义相同的方法。仍以-19这个数值为例,其正数的二进制为6'b010011,取反后为6'b101100,再加1得到6'b101101,与前面的计算一致。

一些对补码的描述称:在计算机内部,正数和零使用原码表示,负数用补码表示。这种说法是不准确的,因为正数和零的补码本来就等于原码,所以正确的说法是计算机和数字芯片内部,任何数都是用补码表示的。

值得注意的是,原码和补码等概念一般用于表示一个有符号数,而这里所说的是有符号的信号,两者是有区别的。若以表示数值为目的,则一般会将位宽定为能够表示该数的最小宽度,比如-19,6位是能够表示它的最小位宽,若再减小将无法准确表示该值。若以表示信号为目的,则位宽定为该信号上需要表示的全部数值所要求的最大位宽,因而数值-19若在一个20位的信号上出现,则它将被表示为20'b11111111111111101101,即在它的高位处继续补充符号位,将位宽填满。

注意 在物理上,信号线指的是一根金属线,但在算法和RTL中,对信号的理解是广义的,即将表示同一个数值的若干根信号线组成的集合称为一个信号。

2.1.3 补码罗盘

按照上述补码的原理,可以绘制出一个补码罗盘,如图2-1所示。该图表示一个位宽为3的信号,其中最高位是符号位,低两位为数据位。罗盘内部为3根信号线上实际的电平,罗盘外部为该电平表示的数值。可见,3位能够表示的数值范围是-4~3,共8个数,负数范围比正数范围多一个。而且,数值的变化在3和-4之间会产生拐点,即3加1会变为-4,这是不符合预期的,因而对于有符号的数值计算,必须进行溢出保护,以防止此类事件的发生,具体处理详见2.3节。

图2-1 补码罗盘

由图2-1可知,一个位宽为 n 的有符号信号,它所能表示的数值范围如式(2-3)所示,其负数范围比正数范围多一个。

2.1.4 补码的优势

补码之所以被广泛应用,是因为它可以在电路中始终以补码的形式进行加、减、移位等运算,不需要如图2-2所示的转换过程。而对于乘除法来说,是需要转换的。

图2-2 错误的补码观念

下面举几个使用补码进行运算的实例:

1)加减法 :在电路中,加减法都是以加法的形式进行处理,减法只是将被减数进行取反,然后进行加法处理。假设电路内部运算为17-39。可知,17的原码和补码一致,均为6'b010001,其中最高位为符号位。-39的补码为7'b1011001,最高位也是符号位。两者相加,先将位宽补成一致,其结果如式(2-4)所示,它是-22的补码。

2)右移 :将-39向右移动1位,结果是6'b101100,它是-20的补码。右移 n 位相当于原数除以2 n ,并且将小数位截取。当2不能除尽时,对于正数,绝对值将减小,对于负数,绝对值将增大。

3)左移 :将-39向左移动1位,结果是8'b10110010,它是-78的补码。左移 n 位相当于原数乘以2 n gcCmSg5/fzA5Dpg8BOErZlWji1HUu0P1ZBLVKPou6Zv3SXgFnaHb8IE+T8VmrYf7

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开