在日常生活中,我们常常需要到正数与负数,比如南北两级气温常年为零度以下,这个时候我们就需要负数来表示温度。 那么在FPGA工程里面也是这样,我们如果想要做温度监测工程,自然而然的就会需要到负数来表达零下的温度。当然FPGA中除了数字正负的表达,还需要用到小数。在加减乘除的运算中,小数的出现是不可避免的。 作为FPGA工程师,我们无法保证所有设计都不出现负数或者小数的情况,不能避免我们就客服,今天就为大家分享一下FPGA中负数与小数的表达。 一、负数的表达 关于负数,大家都知道在任何正数前加上负号便成了负数,比如“π”前面加上负号为“-π”,“0.178”前面加上负号为“-0.178”。FPGA传输信号使用的是二进制表达,同样二进制的负数表达也是在正数前面增加一个负号。即“1110”加负号为“-1110”,“1010100”前面加负号为“-1010100”。 明确了二进制负数的表达,我们再来考虑如何通过信号传输。 在计算机中,数字信号的大小常用有限位的二进制数表示。信号1为高电平,信号0为低电平,高低电平的变化即可得到对应的信号。想要传输多位信号,就增加对应的线即改变位宽。例如我们需要传输五位二进制数10100就需要5条线,第一条线为高电平传输“1”,第二条线为低电平传输“0”,第三条线为高电平传输“1”,第四条线为低电平传输“0”,第五条线为低电平传输“0”。记住信号传输的原理,我们来考虑负数的表示。: n5 g$ M7 B' [2 k. z, `3 n1 w + c( @! F) N& V$ A1 V6 [ 在表示负数之前,我们需要明确一个理念—约定,即你我双方一起遵守一个协议从而达成合作。就如手机制造商和耳机制造商合作一样,如果想要耳机与手机达成适配,就需要达成约定使用一个标准。比如一致的使用圆孔,或者约定使用type-c接口;同时也要约定使用国际标准还是国家标准。如果没有达成约定,两个厂家想当然的进行设计,手机使用了国际标准的type-c接口,耳机却是国家标准的圆孔,那想要达成最终合作也只会变成一场空,无论如何都是无法成功传输声音的。关于数据传输也是一样的,甲乙两个模块之间需要传输数据,一起约定了共传输六位数据,但是第一位数据不考虑,只取后五位。即传输信号为“101011”,其实表达的为“01011”。这个时候两个模块之间一方没有遵守约定,就会得出两种截然不同的结果。 理解了约定的概念,我们自然而然就解决了负数的问题。前面说过负数是在数的前面增加一个负数符号,那么我们就可以事先约定一条表示正负的线,并且此线为传输数据的第一条线,高电平1为负,低电平0为正。这时传输的数据就如下表所示:
可以看出,我们约定为将第一位表示正负是完全没有问题的,当然我们也发现,约定前和约定后的数值是完全不一样的。因此在设计代码的时候一定要注意,模块与模块之间的传输,一定要同时遵守同一约定。遵守约定后,不论我们是约定第几条线表示正负,都可以达到数据正确传输的效果。: |
关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )
GMT+8, 2025-8-16 21:19 , Processed in 0.125000 second(s), 27 queries , Gzip On.
地址:深圳市南山区科技生态园2栋A座805 电话:19926409050