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

FPGA中正负数的表示方法

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
在日常生活中,我们常常需要到正数与负数,比如南北两级气温常年为零度以下,这个时候我们就需要负数来表示温度。) }/ g% V  ^/ X8 J2 ^( O
      那么在FPGA工程里面也是这样,我们如果想要做温度监测工程,自然而然的就会需要到负数来表达零下的温度。当然FPGA中除了数字正负的表达,还需要用到小数。在加减乘除的运算中,小数的出现是不可避免的。# a, v7 u) N  Q2 p0 H# k- Z: ~4 x2 Z9 T
     " j. L1 G5 I& H
     作为FPGA工程师,我们无法保证所有设计都不出现负数或者小数的情况,不能避免我们就客服,今天就为大家分享一下FPGA中负数与小数的表达。

5 u! @1 }( l$ s! h+ A* I0 C( o6 n2 ]/ p/ Y3 W' e& ~3 y1 T" J0 n
一、负数的表达
* A$ k/ j; X0 n" t/ b4 f

  y$ R) p7 {& V, d' }9 \- m$ z& m1 Z
      关于负数,大家都知道在任何正数前加上负号便成了负数,比如“π”前面加上负号为“-π”,“0.178”前面加上负号为“-0.178”。FPGA传输信号使用的是二进制表达,同样二进制的负数表达也是在正数前面增加一个负号。即“1110”加负号为“-1110”,“1010100”前面加负号为“-1010100”。
% Z" \$ T8 w6 z1 l& L
$ T* ~4 L, B3 B- w
      明确了二进制负数的表达,我们再来考虑如何通过信号传输。
3 o4 M1 a2 W, @  W' @" x

2 e( g" I; O8 `( k2 E8 _
      在计算机中,数字信号的大小常用有限位的二进制数表示。信号1为高电平,信号0为低电平,高低电平的变化即可得到对应的信号。想要传输多位信号,就增加对应的线即改变位宽。例如我们需要传输五位二进制数10100就需要5条线,第一条线为高电平传输“1”,第二条线为低电平传输“0”,第三条线为高电平传输“1”,第四条线为低电平传输“0”,第五条线为低电平传输“0”。记住信号传输的原理,我们来考虑负数的表示。: n5 g$ M7 B' [2 k. z, `3 n1 w+ F  ?" q" p0 b& r& D
+ c( @! F) N& V$ A1 V6 [' ^) o+ k' y6 ~! y) H- A/ @
3 ]2 q7 K5 M3 W
      在表示负数之前,我们需要明确一个理念—约定,即你我双方一起遵守一个协议从而达成合作。就如手机制造商和耳机制造商合作一样,如果想要耳机与手机达成适配,就需要达成约定使用一个标准。比如一致的使用圆孔,或者约定使用type-c接口;同时也要约定使用国际标准还是国家标准。如果没有达成约定,两个厂家想当然的进行设计,手机使用了国际标准的type-c接口,耳机却是国家标准的圆孔,那想要达成最终合作也只会变成一场空,无论如何都是无法成功传输声音的。关于数据传输也是一样的,甲乙两个模块之间需要传输数据,一起约定了共传输六位数据,但是第一位数据不考虑,只取后五位。即传输信号为“101011”,其实表达的为“01011”。这个时候两个模块之间一方没有遵守约定,就会得出两种截然不同的结果。
& s4 w8 c% y4 m4 i# h" ]$ Z; w+ v0 z' K7 s
6 ~8 g$ \! Y6 C
      理解了约定的概念,我们自然而然就解决了负数的问题。前面说过负数是在数的前面增加一个负数符号,那么我们就可以事先约定一条表示正负的线,并且此线为传输数据的第一条线,高电平1为负,低电平0为正。这时传输的数据就如下表所示:+ F0 B5 {3 @2 ^! e' a5 ]3 W

, B0 D/ Y7 k) n. l: s+ |0 B
. T- D) A) A( _7 O
二进制信号表示& |% i. N% A+ o+ t/ }; F
约定前的十进制表示& g) L" q, d% W& D9 ^) }, J. O
0 K- X1 i3 L/ P' c0 S' _
约定后的十进制表示' g) ^! t4 j8 R" u7 J4 E
001, ?( p1 x+ y- I+ ~4 r  ?% ?2 c6 O
1" h4 {! M. s6 ?- I2 l
2 d& j1 p1 V- \; f6 }8 `
+1. P( {+ p) v% s6 y& y1 s5 T* D3 o0 m! x$ e0 D5 ^
101. u* S/ B1 y' i7 S
  @; P7 k+ j; N
5* A9 s" s* M! n8 w4 {* x/ V2 q* n# s+ G; k
-17 C+ A6 O/ \9 X" @, w4 l7 w5 ]+ E  u# ], x% L
010
  e) B/ A$ k( T! m% X/ w! U/ O
2
! K4 K4 S; h) R; G
+25 |  B& e! K& V* `9 z! n4 p. k+ d* h: B
0115 `6 {- p" a: x0 n) z3 E. S$ ?
3 X. z9 b- Y) u5 p; P4 h) ~
3' e9 b& V4 S1 v6 f3 t6 P5 ~( M
# m/ A+ Z4 h6 L; @' S, f9 e
+3, p' v0 h  o1 w; C
111/ `6 T, S$ ?  s& _8 l8 B  I% I: w/ e! n$ g( U% t% u. r% p
7# ]) h1 Z6 E2 g7 W0 r+ {+ S8 J1 W9 Y1 \3 s* X5 b
-3
9 j" |5 |8 n) p2 B, `6 L
0 l8 ~9 i- y" n4 z: ^5 `* b

) y9 V2 |" j! P+ P      可以看出,我们约定为将第一位表示正负是完全没有问题的,当然我们也发现,约定前和约定后的数值是完全不一样的。因此在设计代码的时候一定要注意,模块与模块之间的传输,一定要同时遵守同一约定。遵守约定后,不论我们是约定第几条线表示正负,都可以达到数据正确传输的效果。:
  a. H+ ]& P) e3 O- J
( q9 Z1 k4 q* v' k# \
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-23 08:08 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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