找回密码
 注册
关于网站域名变更的通知
查看: 239|回复: 0
打印 上一主题 下一主题

FPGA中正负数的表示方法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2023-2-27 17:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
在日常生活中,我们常常需要到正数与负数,比如南北两级气温常年为零度以下,这个时候我们就需要负数来表示温度。5 I  Z4 M. ~/ `7 @; p3 `, g6 n: L; C
      那么在FPGA工程里面也是这样,我们如果想要做温度监测工程,自然而然的就会需要到负数来表达零下的温度。当然FPGA中除了数字正负的表达,还需要用到小数。在加减乘除的运算中,小数的出现是不可避免的。% X, n0 ?0 L6 H, R0 Z9 t
     4 b8 _% j4 s( G/ j! L  O7 s
     作为FPGA工程师,我们无法保证所有设计都不出现负数或者小数的情况,不能避免我们就客服,今天就为大家分享一下FPGA中负数与小数的表达。

( V2 s: K: K. A" I7 ?# {1 V; I6 e  @) n) V( \) C
一、负数的表达

' x5 h3 K8 v5 ?7 A2 W1 C% }- T- O! b: S; u  I. e
      关于负数,大家都知道在任何正数前加上负号便成了负数,比如“π”前面加上负号为“-π”,“0.178”前面加上负号为“-0.178”。FPGA传输信号使用的是二进制表达,同样二进制的负数表达也是在正数前面增加一个负号。即“1110”加负号为“-1110”,“1010100”前面加负号为“-1010100”。

) c0 j+ ^; o0 K5 p0 S) u0 k  G8 _
      明确了二进制负数的表达,我们再来考虑如何通过信号传输。

1 i% g" y3 L9 _! w, H9 x/ |
7 Q! T( t1 r* |+ ]
      在计算机中,数字信号的大小常用有限位的二进制数表示。信号1为高电平,信号0为低电平,高低电平的变化即可得到对应的信号。想要传输多位信号,就增加对应的线即改变位宽。例如我们需要传输五位二进制数10100就需要5条线,第一条线为高电平传输“1”,第二条线为低电平传输“0”,第三条线为高电平传输“1”,第四条线为低电平传输“0”,第五条线为低电平传输“0”。记住信号传输的原理,我们来考虑负数的表示。: n5 g$ M7 B' [2 k. z, `3 n1 w
+ i9 m4 }0 Q; a5 a+ c( @! F) N& V$ A1 V6 [6 m" h, }4 M* d$ q6 e' C3 T0 s

) \$ n/ x' a8 \3 V      在表示负数之前,我们需要明确一个理念—约定,即你我双方一起遵守一个协议从而达成合作。就如手机制造商和耳机制造商合作一样,如果想要耳机与手机达成适配,就需要达成约定使用一个标准。比如一致的使用圆孔,或者约定使用type-c接口;同时也要约定使用国际标准还是国家标准。如果没有达成约定,两个厂家想当然的进行设计,手机使用了国际标准的type-c接口,耳机却是国家标准的圆孔,那想要达成最终合作也只会变成一场空,无论如何都是无法成功传输声音的。关于数据传输也是一样的,甲乙两个模块之间需要传输数据,一起约定了共传输六位数据,但是第一位数据不考虑,只取后五位。即传输信号为“101011”,其实表达的为“01011”。这个时候两个模块之间一方没有遵守约定,就会得出两种截然不同的结果。) T9 v- U# c- d& I
% _# u. `4 e* r7 |

! k# a, i7 [, S      理解了约定的概念,我们自然而然就解决了负数的问题。前面说过负数是在数的前面增加一个负数符号,那么我们就可以事先约定一条表示正负的线,并且此线为传输数据的第一条线,高电平1为负,低电平0为正。这时传输的数据就如下表所示:
* S* I( _- {/ i* \0 F$ Q1 i6 H1 g  I3 w  m# Y# Z8 G6 ^7 k5 k: ]6 X

3 o/ l$ H# U% v
二进制信号表示
/ V+ O/ _& o; Q" ^+ e+ T' |4 C
约定前的十进制表示& g) L" q, d% W& D9 ^) }, J. O
( Z  U% c: d( R0 ^1 I/ E
约定后的十进制表示3 n4 `- ~3 L9 k* _2 i+ g
001
9 Z+ P2 D% I. x1 a; N2 }' Q) d4 p
1" h4 {! M. s6 ?- I2 l
6 R; m# u7 Y; R
+1. P( {+ p) v% s6 y& y
! Z9 }, J" T7 Y3 p
101. u* S/ B1 y' i7 S
- |" @+ l2 V- y. ]
5* A9 s" s* M! n8 w4 {* x
: J1 j% O8 Z4 G/ }
-17 C+ A6 O/ \9 X" @& u, q0 m* I+ v6 r9 R7 t8 Y
0101 g0 o, ?6 ~) x9 n6 J
2
; ?3 S, N$ J  T- i2 p
+25 |  B& e! K& V/ d( }6 N; [3 L9 W$ w/ Z
0115 `6 {- p" a: x0 n) z3 E. S$ ?4 X, D/ C6 l$ J3 [# _  j
3' e9 b& V4 S1 v6 f3 t6 P5 ~( M0 O6 @8 O% m% V! P% [& K- w
+3
6 S" f# n8 s3 P( Z
111/ `6 T, S$ ?  s& _8 l8 B  I- a3 {# x% m. ^" @% M% x
7# ]) h1 Z6 E2 g7 W0 r+ {
0 x) ^7 J' ~9 n$ E) e4 \
-3
3 u+ M2 S; Q, x" {3 H# U5 J( W

. Y+ F3 `8 i% g) D: r, U7 t7 P/ O9 Y4 n" t: f0 z' s& ~
      可以看出,我们约定为将第一位表示正负是完全没有问题的,当然我们也发现,约定前和约定后的数值是完全不一样的。因此在设计代码的时候一定要注意,模块与模块之间的传输,一定要同时遵守同一约定。遵守约定后,不论我们是约定第几条线表示正负,都可以达到数据正确传输的效果。:

' i$ b7 w; _4 y! Y; r
) s% n6 U. z) I4 m  e
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-29 14:20 , Processed in 0.125000 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表