当前位置:首页 » 服务存储 » 格雷码存储
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

格雷码存储

发布时间: 2022-10-30 20:06:34

① 什么是FIFO缓存队列

FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。 FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端时AD数据采集,另一端时计算机的PCI总线,假设其AD采集的速率为16位 100K SPS,那么每秒的数据量为100K×16bit=1.6Mbps,而PCI总线的速度为33MHz,总线宽度32bit,其最大传输速率为1056Mbps,在两个不同的时钟域间就可以采用FIFO来作为数据缓冲。另外对于不同宽度的数据接口也可以用FIFO,例如单片机位8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。 3.FIFO的一些重要参数 FIFO的宽度:也就是英文资料里常看到的THE WIDTH,它只的是FIFO一次读写操作的数据位,就像MCU有8位和16位,ARM 32位等等,FIFO的宽度在单片成品IC中是固定的,也有可选择的,如果用FPGA自己实现一个FIFO,其数据位,也就是宽度是可以自己定义的。 FIFO的深度:THE DEEPTH,它指的是FIFO可以存储多少个N位的数据(如果宽度为N)。如一个8位的FIFO,若深度为8,它可以存储8个8位的数据,深度为12 ,就可以存储12个8位的数据,FIFO的深度可大可小,个人认为FIFO深度的计算并无一个固定的公式。在FIFO实际工作中,其数据的满/空标志可以控制数据的继续写入或读出。在一个具体的应用中也不可能由一些参数算数精确的所需FIFO深度为多少,这在写速度大于读速度的理想状态下是可行的,但在实际中用到的FIFO深度往往要大于计算值。一般来说根据电路的具体情况,在兼顾系统性能和FIFO成本的情况下估算一个大概的宽度和深度就可以了。而对于写速度慢于读速度的应用,FIFO的深度要根据读出的数据结构和读出数据的由那些具体的要求来确定。 满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。 空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出(underflow)。 读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。 写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据。 读指针:指向下一个读出地址。读完后自动加1。 写指针:指向下一个要写入的地址的,写完自动加1。 读写指针其实就是读写的地址,只不过这个地址不能任意选择,而是连续的。 4.FIFO的分类 根均FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO。同步FIFO是指读时钟和写时钟为同一个时钟。在时钟沿来临时同时发生读写操作。异步FIFO是指读写时钟不一致,读写时钟是互相独立的。 5.FIFO设计的难点 FIFO设计的难点在于怎样判断FIFO的空/满状态。为了保证数据正确的写入或读出,而不发生益处或读空的状态出现,必须保证FIFO在满的情况下,不能进行写操作。在空的状态下不能进行读操作。怎样判断FIFO的满/空就成了FIFO设计的核心问题。由于同步FIFO几乎很少用到,这里只描述异步FIFO的空/满标志产生问题。 补充: 在用到触发器的设计中,不可避免的会遇到亚稳态的问题(关于亚稳态这里不作介绍,可查看相关资料)。在涉及到触发器的电路中,亚稳态无法彻底消除,只能想办法将其发生的概率将到最低。其中的一个方法就是使用格雷码。格雷码在相邻的两个码元之间只由一位变换(二进制码在很多情况下是很多码元在同时变化)。这就会避免计数器与时钟同步的时候发生亚稳态现象。但是格雷码有个缺点就是只能定义2^n的深度,而不能像二进制码那样随意的定义FIFO的深度,因为格雷码必须循环一个2^n,否则就不能保证两个相邻码元之间相差一位的条件,因此也就不是真正的各雷码了。第二就是使用冗余的触发器,假设一个触发器发生亚稳态的概率为P,那么两个及联的触发器发生亚稳态的概率就为P的平方。但这回导致延时的增加。亚稳态的发生会使得FIFO出现错误,读/写时钟采样的地址指针会与真实的值之间不同,这就导致写入或读出的地址错误。由于考虑延时的作用,空/满标志的产生并不一定出现在FIFO真的空/满时才出现。可能FIFO还未空/满时就出现了空/满标志。这并没有什么不好,只要保证FIFO不出现overflow or underflow 就OK了。 很多关于FIFO的文章其实讨论的都是空/满标志的不同算法问题。 在Vijay A. Nebhrajani的《异步FIFO结构》一文中,作者提出了两个关于FIFO空/满标志的算法。 第一个算法:构造一个指针宽度为N+1,深度为2^N字节的FIFO(为便方比较将格雷码指针转换为二进制指针)。当指针的二进制码中最高位不一致而其它N位都相等时,FIFO为满(在Clifford E. Cummings的文章中以格雷码表示是前两位均不相同,而后两位LSB相同为满,这与换成二进制表示的MSB不同其他相同为满是一样的)。当指针完全相等时,FIFO为空。这也许不容易看出,举个例子说明一下:一个深度为8字节的FIFO怎样工作(使用已转换为二进制的指针)。FIFO_WIDTH=8, 补充: FIFO_DEPTH= 2^N = 8,N = 3,指针宽度为N+1=4。起初rd_ptr_bin和wr_ptr_bin均为“0000”。此时FIFO中写入8个字节的数据。wr_ptr_bin =“1000”,rd_ptr_bin=“0000”。当然,这就是满条件。现在,假设执行了8次的读操作,使得rd_ptr_bin =“1000”,这就是空条件。另外的8次写操作将使wr_ptr_bin 等于“0000”,但rd_ptr_bin 仍然等于“1000”,因此FIFO为满条件。 显然起始指针无需为“0000”。假设它为“0100”,并且FIFO为空,那么8个字节会使wr_ptr_bin =“1100”,, rd_ptr_bin 仍然为“0100”。这又说明FIFO为满。若写指针的高两位MSB大于读指针的高两位MSB则FIFO为“几乎空”。 在Vijay A. Nebhrajani的《异步FIFO结构》第三部分的文章中也提到了一种方法,那就是方向标志与门限。设定了FIFO容量的75%作为上限,设定FIFO容量的25%为下限。当方向标志超过门限便输出满/空标志,这与Clifford E. Cummings的文章中提到的STYLE #2可谓是异曲同工。他们都属于保守的空满判断。其实这时输出空满标志FIFO并不一定真的空/满。 说到此,我们已经清楚地看到,FIFO设计最关键的就是产生空/满标志的算法的不同产生了不同的FIFO。

② 编码器如何编程

这个很简单啊,
用变频器+
编码器+
PLC,
就能实现啊,PLC
读取编码器的位移值,然后判断,让变频器
驱动电机转2圈,.。。。
依此实现你说的功能。
至于
蜡和麻轮都有损耗
的问题,最好是均匀的损耗,
好计算的!

③ fifo算法是什么

先进先出算法是最简单的分页替换算法,是指每次有新的分页需要调入时,会选择调入内存时间最久的分页换出。它简单,容易实现,但这种绝对的公平方式容易导致效率的降低。

最简单的分页替换算法就是先进先出算法,当每次有新的分页需要调入时,会选择调入内存时间最久的分页换出。

有两种实现的方法:第一种是记录每个分页被调入到页框的时间,当每次需要换出分页时,会找到调入时间最早的一页,也就是在主存储器中存在最久的分页。另外一种方式就是利用FIFO队列来实现,当要进行分页替换时,就把队列最前端的分页换出,再把要调入的分页放到队列的末端。

一、实现机制

使用链表将所有在内存的页面按照进入时间的早晚链接起来,然后每次置换链表头上的页面就行了。新加进来的页面则挂在链表的末端。

二、特点

1、优点

简单,且容易实现。

2、缺点

这种绝对的公平方式容易导致效率的降低。例如,如果最先加载进来的页面是经常被访问的页面,这样做很可能造成常被访问的页面替换到磁盘上,导致很快就需要再次发生缺页中断,从而降低效率。

电子产品

FIFO通常在电子电路中用于硬件和软件之间的缓冲和流控制。FIFO以其硬件形式主要由一组读写指针,存储和控制逻辑组成。

存储可以是静态随机存取存储器(SRAM),触发器,锁存器或任何其他合适的存储形式。对于非平凡大小的FIFO,通常使用双端口SRAM,其中一个端口专用于写入,另一端口专用于读取。

电子设备中实现的第一个已知FIFO是1969年在飞兆半导体公司的Peter Alfke。[4]Alfke后来担任Xilinx的董事。

1、同步性

同步FIFO是其中相同的时钟用于读取和写入的FIFO。异步FIFO使用不同的时钟进行读取和写入,它们可能会引入亚稳定性问题。异步FIFO的常见实现方式是对读和写指针使用格雷码(或任何单位距离码),以确保可靠的标志生成。

关于标志生成的另一条注释是,必须使用指针算法为异步FIFO实现生成标志。相反,在同步FIFO实现中,可以使用泄漏存储区方法或指针算法来生成标志。

2、状态标志

FIFO状态标志的示例包括:已满,为空,几乎已满和几乎为空。当读地址寄存器到达写地址寄存器时,FIFO为空。当写地址寄存器到达读地址寄存器时,FIFO已满。读写地址最初都位于第一个存储器位置,并且FIFO队列为空。

在这两种情况下,读和写地址最终都是相等的。为了区分这两种情况,一种简单而强大的解决方案是为每个读取和写入地址添加一个额外的位,该地址在每次换行时都会反转。

以上内容参考网络-先进先出算法

④ 有关转换进制问题

一、 常用数制及其相互转换
在我们的日常生活中计数采用了多种记数制,比如:十进制,六十进制(六十秒为一分,六十分为一小时,即基数为60,运算规则是逢六十进一),……。在计算机中常用到十进制数、二进制数、八进制数、十六进制数等,下面就这几种在计算机中常用的数制来介绍一下。
1.十进制数
我们平时数数采用的是十进制数,这种数据是由十个不同的数字0、1、2、3、4、5、6、7、8、9任意组合构成,其特点是逢十进一。
任何一个十进制数均可拆分成由各位数字与其对应的权的乘积的总和。例如:
?
?
?
这里的10为基数,各位数对应的权是以10为基数的整数次幂。为了和其它的数制区别开来,我们在十进制数的外面加括号,且在其右下方加注10。

2.二进制数
在计算机中,由于其物理特性(只有两种状态:有电、无电)的原因,所以在计算机的物理设备中获取、存储、传递、加工信息时只能采用二进制数。二进制数是由两个数字0、1任意组合构成的,其特点是逢二进一。例如:1001,这里不读一千零一,而是读作:一零零一或幺零零幺。为了与其它的数制的数区别开来,我们在二进制数的外面加括号,且在其右下方加注2,或者在其后标B。
任何一个二进制数亦可拆分成由各位数字与其对应的权的乘积的总和。其整数部分的权由低向高依次是:1、2、4、8、16、32、64、128、……,其小数部分的权由高向低依次是:0.5、0.25、0.125、0.0625、……。

二进制数也有其运算规则:
加法:0+0=0????0+1=1???1+0=1????1+1=10
乘法:0×0=0????0×1=0????1×0=0????1×1=1

二进制数与十进制数如何转换:
(1) 二进制数—→十进制数
对于较小的二进制数:
对于较大的二进制数:
方法1:各位上的数乘权求和??例如:
(101101)2=1×25+0×24+1×23+1×22+0×21+1×20=45
(1100.1101)2=1×23+1×22+0×21+0×20+1×2-1+1×2-2+0×2-3+1×2-4=12.8125

方法2:任何一个二进制数可转化成若干个100…0?的数相加的总和??例如:
(101101)2=(100000)2+(1000)2+(100)2+(1)2
而这种100…00形式的二进制数与十进制数有如下关联:1后有n个0,则这个二进数所对应的十进制数为2n。
所以:(101101)2=(100000)2+(1000)2+(100)2+(1)2=25+23+22+20=45

(2)十进制数—→二进制数
整数部分:整除以2取余法。例如:75
75/2=37…1??37/2=18…1??18/2=9…0??9/2=4…1??4/2=2…0??2/2=1…0???1/2=0…1
将得到的一系列的余数倒过来书写就得到该数所对应的二进制数(1001011)2
小数部分:乘以2取整法。例如:0.7
0.7×2=1.4…1??0.4×2=0.8…0???0.8×2=1.6…1???0.6×2=1.2…1??0.2×2=0.4…0

3.八进制数
八进制数是由0、1、2、3、4、5、6、7、8任意组合构成的,其特点是逢八进一。为了与其它的数制的数区别开来,我们在八进制数的外面加括号,且在其右下方加注8,或者在其后标Q。
八进制数的基数是8,任何一个八进制数亦可拆分成由各位数字与其对应的权的乘积的总和。其整数部分的权由低向高依次是:1、8、82、83、84、85、……,其小数部分的权由高向低依次是:8-1、8-2、8-3、8-4、……。

八进制数与其它数制的转换:
(1)与十进制数的互换
八进制数—→十进制数
十进制数—→八进制数
方法均与二进制数与十进制数互换的方法一样。

(2)与二进制数的互换
八进制数—→二进制数
把八进制数的每一位改成等值的三位二进制数,即“一位变三位”。
例如:56.103Q
解:?5?????6?.??1????0????3
???? ↓????↓???↓???↓???↓??????????????
???? 101??110???001??000??011
所以(56.103)8=(101110.001000011)2

二进制数—→八进制数
把二进制数从小数点开始向两边每三位为一段(不足补0),每段改成等值的一位八进制数即可,即“三位变一位”。

4.十六进制数
十六进制数是由0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F任意组合构成的,其特点是逢十六进一。为了与其它的数制的数区别开来,我们在十六进制数的外面加括号,且在其右下方加注16,或者在其后标H。
十六进制数的基数是16,任何一个十六进制数亦可拆分成由各位数字与其对应的权的乘积的总和。其整数部分的权由低向高依次是:1、16、162、163、164、165、……,其小数部分的权由高向低依次是:16-1、16-2、16-3、16-4、……。

十六进制数与其它数制的转换:
(1)与十进制数的互换
十六进制数—→十进制数
十进制数—→十六进制数
方法均与二进制数与十进制数互换的方法一样。

(2)与二进制数的互换
十六进制数—→二进制数
把十六进制数的每一位改成等值的四位二进制数,即“一位变四位”。
例如:(3AD.B8)16
解:?3????A?????D.????B?????8
???? ↓????↓????↓????↓????↓??????????????
???? 0011??1010??1101??1011??1000
所以(3AD.B8)16=(1110101101.10111)2

二进制数—→十六进制数
把二进制数从小数点开始向两边每四位为一段(不足补0),每段改成等值的一位十六进制数即可,即“四位变一位”。

下表中列出了一些数的二、八、十和十六进制形式
二进制数 八进制数 十进制数 十六进制数 二进制数 八进制数 十进制数 十六进制数
0000 0 0 0 1001 11 9 9
0001 1 1 1 1010 12 10 A
0010 2 2 2 1011 13 11 B
0011 3 3 3 1100 14 12 C
0100 4 4 4 1101 15 13 D
0101 5 5 5 1110 16 14 E
0110 6 6 6 1111 17 15 F
0111 7 7 7 10000 20 16 10
1000 10 8 8 10001 21 17 11

??? 二、计算机中数的表示
在计算机中所有的数据、指令以及一些符号等都是用特定的二进制代码表示的。
??? 1.数值数据的表示
我们把一个数在计算机内被表示的二进制形式称为机器数,该数称为这个机器数的真值。机器数有固定的位数,具体是多少位受到所用计算机的限制。机器数把其真值的符号数字化,通常是用规定的符号位(一般是最高位)取0或1来分别表示其值的正或负。例如:假设机器数为8位,则其最高位是符号位,那么在整数的表示情况下,对于00101110和10010011,其真值分别为十进制数+46和-19。
机器数常采用原码和补码的形式作为其编码方式。
(1)原码
整数X的原码是指:其符号位的0或1表示X的正或负,其数值部分就是X的绝对值的二进制表示。通常用[X]原表示X的原码。
例如:假设机器数的位数是8,那么:[+17]原=00010001???[-39]原=10100111
注意:由于[+0]原=00000000,[-0]原=10000000,所以数0的原码不唯一,有“正零”和“负零”之分。
(2)反码
在反码的表示中,正数的表示方法与原码相同;负数的反码是把其原码除符号位以外的各位取反(即0变1,1变0)。通常,用[X]反表示X的反码。
例如:[+45]反=[+45]原=00101101??[-32]原=10100000???[-32]反=11011111
(3)补码
在补码的表示中,正数的表示方法与原码相同;负数的补码在在其反码的最低有效位上加1。通常用[X]补表示X的补码。
例如:[+14]补=10100100???[-36]反=11011011????[-36]补=11011100
注意1:数0的补码的表示是唯一的,即[0]补=[+0]补=[-0]补=00000000
注意2:利用公式?[X]补+[±Y]补=[X±Y]补??可以把加法和减法统一成加法。(符号位和其它位上数一样运算,如果符号位上有进位,则把这个进位的1舍去不要,即不考虑“溢出”问题)。
例如:??X=6,Y=2??求X-Y
解:??[X]补=00000110??????[-Y]补=11111110
?????? [X-Y]补=00000100

另:机器数中采用定点或浮点数的方式来表示小数!(略)

??? 2.ASCII码
计算机除了能处理数值外还能处理字符(指字母A、B、…、Z、a、b、…、z,数字0、1、…、9,其它一些可打印显示的符号如:+、-、*、/、<、>、…)。在计算机内部,这些符号也得用二进制代码来表示,目前,在国际上广泛采用的是美国标准信息交换代码(American?Standard?Code?for?Information?Interechang),简称ASCII码。
标准的ASCII码中共有128(27)个字符,所以标准的ASCII码采用7位二进制编码。因为其中的字符排列是有序的,其对应的ASCII码也是相连的,所以我们只需要记几个关键字符的ASCII码,其它可以推算。
‘0’——48????‘A’——65??????‘a’——97

注:标准的ASCII码能表示的字符较少,于是在其基础上又设计了一种扩充的ASCII码,采用的是8位二进制编码,可以表示256个字符。

??? 3.BCD码
十进制数在键盘输入和打印、显示输出时往往是将各个数字以ASCII码来表示的。但是在计算机内运算时,是以二进制形式进行的。为了便于转换,设计了一些用二进制编码表示的十进制数,称为二—十进制码,即BCD码(Binary?coded?Decimal)。
BCD码是用四位二进制代码来表示一位十进制数。有多种BCD码:8421码、2421码、余3码、格雷码。
常用BCD码
十进制数字 8421码 2421码 余3码 格雷码
0 0000 0000 0011 0000
1 0001 0001 0100 0001
2 0010 0010 0101 0011
3 0011 0011 0110 0010
4 0100 0100 0110 0010
5 0101 0101 1000 1110
6 0110 0110 1001 1010
7 0111 0111 1010 1000
8 1000 1110 1011 1100
9 1001 1111 1100 0100
注意:BCD码表示的数形式上像二进制数,但不是真正的二进制数。

⑤ 什么是Adc电路

Adc电路就是指模数转换电路。也就是将模拟信号变为数字信号。一般用在数据采集方面。
ADC,Analog-to-Digital Converter的缩写,指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数字形式。模/数转换器可以实现这个功能,在各种不同的产品中都可以找到它的身影。
典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。然而,有一些模拟数字转换器并非纯的电子设备,例如旋转编码器,也可以被视为模拟数字转换器。
数字信号输出可能会使用不同的编码结构。通常会使用二进制二补数(也称作“补码”)进行表示,但也有其他情况,例如有的设备使用格雷码(一种循环码)。
模拟信号在时域上是连续的,因此可以将它转换为时间上连续的一系列数字信号。这样就要求定义一个参数来表示新的数字信号采样自模拟信号速率。这个速率称为转换器的采样率(sampling rate)或采样频率(sampling frequency)。
可以采集连续变化、带宽受限的信号(即每隔一时间测量并存储一个信号值),然后可以通过插值将转换后的离散信号还原为原始信号。这一过程的精确度受量化误差的限制。然而,仅当采样率比信号频率的两倍还高的情况下才可能达到对原始信号的忠实还原,这一规律在采样定理有所体现。
由于实际使用的模拟数字转换器不能进行完全实时的转换,所以对输入信号进行一次转换的过程中必须通过一些外加方法使之保持恒定。常用的有采样-保持电路,在大多数的情况里,通过使用一个电容器可以存储输入的模拟电压,并通过开关或门电路来闭合、断开这个电容和输入信号的连接。许多模拟数字转换集成电路在内部就已经包含了这样的采样-保持子系统。

⑥ 什么是分离BCD码

分离BCD码亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。

BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。

相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免去使电脑作浮点运算时所耗费的时间。

(6)格雷码存储扩展阅读:

BCD码类别:

1、8421

8421 BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8、4、2、1,故称为有权BCD码。和四位自然二进制码不同的是,它只选用了四位二进制码中前10组代码,即用0000~1001分别代表它所对应的十进制数,余下的六组代码不用。

2、5421和2421

5421 BCD码和2421 BCD码为有权BCD码,它们从高位到低位的权值分别为5、4、2、1和2、4、2、1。

3、余3码

余3码是8421 BCD码的每个码组加3(0011)形成的。常用于BCD码的运算电路中。

4、余3循环码

余3循环码是无权码,即每个编码中的1和0没有确切的权值,整个编码直接代表一个数值。主要优点是相邻编码只有一位变化,避免了过渡码产生的“噪声”。

5、Gray码

Gray码(格雷码)也称循环码,在一组数的编码中,若任意两个相邻数的代码只有一位二进制数不同。这种代码除了具有单位距离码的特点外,还有一个特点就是具有反射特性,即按表中所示的对称轴为界,除最高位互补反射外,其余低位数沿对称轴镜像对称。利用这一反射特性可以方便地构成位数不同的Gray码。

⑦ 计算机原码 反码 补码是什么这跟编程有什么用

在计算机系统中,数值,一律采用补码表示和存储。

计算机中,根本就不使用原码和反码。

补码的功能,类似于:

时针,倒拨 3 小时,可以用正拨 9 小时代替。

按照这种思路,计算机中的负数,当然也可以用正数(即补码)代替。

如果这样,计算机中,就没有负数了。

同时,减法运算,也都不存在了。

那么,借助于补码,就能去掉计算机中的减法运算,从而就能简化计算机的硬件。

这就是使用补码的原因。

------------------------

在钟表中,时针转一圈,周期是 12。

正拨 9 代替倒拨 3,其算法是:9 = -3 + 周期 12。

分针,倒拨 X 分,也可用正拨(-X + 周期 60)代替。

在三角函数中,周期是 2π。

一个负角度,也能用周期,算出等效的正角度。

如:-π/2,就可以转换成成:+3π/2。

上述这些正数,就是“负数的补数”。

求补数的公式:

补数= 负数 + 周期。

------------------------

在计算机中,8 位 2 进制,称为一个字节。

其计数周期是:2^8 = 256。

那么,求负数补码的公式:

补码 = 负数 + 周期 2^n。

-1 的补码是:-1 + 256 = 255 = 1111 1111(二进制)。

-2 的补码是:-2 + 256 = 254 = 1111 1110(二进制)。

。。。

正数,则必须直接参加运算,不许作任何转换。

即:正数,根本就不存在补码。

------------------------

例如,7-2 = 5,用八位补码计算如下:

7 = 0000 0111

[-2] 补 = 1111 1110

--相加------------

得:(1) 0000 0101 = 5

舍弃进位,结果就完全正确。

由此可知,借助于补码,确实就消除了减法运算。

------------------------

补码,是从计数系统的周期性,推导出来的。

补码与“原码反码符号位”,并无半点关系。

由“取反加一”学习补码,就不会理解补码的作用和产生的原因。

那么,为什么要定义原码、反码、符号位?

老外数学不好,也就只能用这些骚操作,来求补码了。

⑧ 数字信号编码为模拟信号有哪些方法 数据通信中位同步的作用和方法 为什么在已知位同步的情况下还要字

(1)抗干扰能力强、无噪声积累。在模拟通信中,为了提高信噪比,需要在信号传输过程中及时对衰减的传输信号进行放大,信号在传输过程中不可避免地叠加上的噪声也被同时放大。随着传输距离的增加,噪声累积越来越多,以致使传输质量严重恶化。�
对于数字通信,由于数字信号的幅值为有限个离散值(通常取两个幅值),在传输过程中虽然也受到噪声的干扰,但当信噪比恶化到一定程度时,即在适当的距离采用判决再生的方法,再生成没有噪声干扰的和原发送端一样的数字信号,所以可实现长距离高质量的传输。�
(2)便于加密处理。信息传输的安全性和保密性越来越重要,数字通信的加密处理的比模拟通信容易得多,以话音信号为例,经过数字变换后的信号可用简单的数字逻辑运算进行加密、解密处理。
(3)便于存储、处理和交换。数字通信的信号形式和计算机所用信号一致,都是二进制代码,因此便于与计算机联网,也便于用计算机对数字信号进行存储、处理和交换,可使通信网的管理、维护实现自动化、智能化。�
(4)设备便于集成化、微型化。数字通信采用时分多路复用,不需要体积较大的滤波器。设备中大部分电路是数字电路,可用大规模和超大规模集成电路实现,因此体积小、功耗低。�
(5)便于构成综合数字网和综合业务数字网。采用数字传输方式,可以通过程控数字交换设备进行数字交换,以实现传输和交换的综合。另外,电话业务和各种非话业务都可以实现数字化,构成综合业务数字网。�
(6)占用信道频带较宽。一路模拟电话的频带为4kHz带宽,一路数字电话约占64kHz,这是模拟通信目前仍有生命力的主要原因。随着宽频带信道(光缆、数字微波)的大量利用(一对光缆可开通几千路电话)以及数字信号处理技术的发展(可将一路数字电话的数码率由64kb/s压缩到32kb/s甚至更低的数码率),数字电话的带宽问题已不是主要问题了。
以上介绍可知,数字通信具有很多优点,所以各国都在积极发展数字通信。近年来,我国数字通信得到迅速发展,正朝着高速化、智能化、宽带化和综合化方向迈进。�
数字信号的产生
(1)模拟信号�
信号波形模拟着信息的变化而变化,模拟信号其特点是幅度连续(连续的含义是在某一取值范围内可以取无限多个数值)。模拟信号,其信号波形在时间上也是连续的,因此它又是连续信号。模拟信号按一定的时间间隔T抽样后的抽样信号,由于其波形在时间上是离散的,它又叫离散信号。但此信号的幅度仍然是连续的,所以仍然是模拟信号。电话、传真、电视信号都是模拟信号。��
(2)数字信号
数字信号其特点是幅值被限制在有限个数值之内,它不是连续的而是离散的。二进码,每一个码元只取两个幅值(0,A):四进码,每个码元取四(3、1、-1、-3)中的一个。这种幅度是离散的信号称数字信号。
信号数字化过程
信号的数字化需要三个步骤:抽样、量化和编码。抽样是指用每隔一定时间的信号样值序列来代替原来在时间上连续的信号,也就是在时间上将模拟信号离散化。量化是用有限个幅度值近似原来连续变化的幅度值,把模拟信号的连续幅度变为有限数量的有一定间隔的离散值。编码则是按照一定的规律,把量化后的值用二进制数字表示,然后转换成二值或多值的数字信号流。这样得到的数字信号可以通过电缆、微波干线、卫星通道等数字线路传输。在接收端则与上述模拟信号数字化过程相反,再经过后置滤波又恢复成原来的模拟信号。上述数字化的过程又称为脉冲编码调制。
抽样�
话音信号是模拟信号,它不仅在幅度取值上是连续的,而且在时间上也是连续的。要使话音信号数字化并实现时分多路复用,首先要在时间上对话音信号进行离散化处理,这一过程叫抽样。所谓抽样就是每隔一定的时间间隔T,抽取话音信号的一个瞬时幅度值(抽样值),抽样后所得出的一系列在时间上离散的抽样值称为样值序列,如图2-4所示。抽样后的样值序列在时间上是离散的,可进行时分多路复用,也可将各个抽样值经过量化、编码变换成二进制数字信号。理论和实践证明,只要抽样脉冲的间隔T≤12fm(或≥2fm)(fm是话音信号的最高频率),则抽样后的样值序列可不失真地还原成原来的话音信号。��
例如,一路电话信号的频带为300~3400Hz,fm=3400Hz,则抽样频率fs≥2×3400=6800Hz。如按6800Hz的抽样频率对300~3400Hz的电话信号抽样,则抽样后的样值序列可不失真地还原成原来的话音信号,话音信号的抽样频率通常取8000Hz/s。对于PAL制电视信号。视频带宽为6MHz,按照CCIR601建议,亮度信号的抽样频率为13.5MHz,色度信号为6.75MHz。�
量化
抽样把模拟信号变成了时间上离散的脉冲信号,但脉冲的幅度仍然是模拟的,还必须进行离散化处理,才能最终用数码来表示。这就要对幅值进行舍零取整的处理,这个过程称为量化。量化有两种方式,示于图2-5中。图2-5(a)所示的量化方式中,取整时只舍不入,即0~1伏间的所有输入电压都输出0伏,1~2伏间所有输入电压都输出1伏等。采用这种量化方式,输入电压总是大于输出电压,因此产生的量化误差总是正的,最大量化误差等于两个相邻量化级的间隔Δ。图(b)所示的量化方式在取整时有舍有入,即0~0.5伏间的输入电压都输出0伏,0.5~1�5伏间的输出电压都输出1伏等等。采用这种量化方式量化误差有正有负,量化误差的绝对值最大为Δ/2。因此,采用有舍有入法进行量化,误差较小。
实际信号可以看成量化输出信号与量化误差之和,因此只用量化输出信号来代替原信号就会有失真。一般说来,可以把量化误差的幅度概率分布看成在-Δ/2~+Δ/2之间的均匀分布。可以证明,量化失真功率�,即与最小量化间隔的平方成正比。最小量化间隔越小,失真就越小。最小量化间隔越小,用来表示一定幅度的模拟信号时所需要的量化级数就越多,因此处理和传输就越复杂。所以,量化既要尽量减少量化级数,又要使量化失真看不出来。一般都用一个二进制数来表示某一量化级数,经过传输在接收端再按照这个二进制数来恢复原信号的幅值。所谓量化比特数是指要区分所有量化级所需几位二进制数。例如,有8个量化级,那么可用三位二进制数来区分,因为,称8个量化级的量化为3比特量化。8比特量化则是指共有个量化级的量化。�
量化误差与噪声是有本质的区别的。因为任一时刻的量化误差是可以从输入信号求出,而噪声与信号之间就没有这种关系。可以证明,量化误差是高阶非线性失真的产物。但量化失真在信号中的表现类似于噪声,也有很宽的频谱,所以也被称为量化噪声并用信噪比来衡量。�
上面所述的采用均匀间隔量化级进行量化的方法称为均匀量化或线性量化,这种量化方式会造成大信号时信噪比有余而小信号时信噪比不足的缺点。如果使小信号时量化级间宽度小些,而大信号时量化级间宽度大些,就可以使小信号时和大信号时的信噪比趋于一致。这种非均匀量化级的安排称为非均匀量化或非线性量化。数字电视信号大多采用非均匀量化方式,这是由于模拟视频信号要经过校正,而校正类似于非线性量化特性,可减轻小信号时误差的影响。�
对于音频信号的非均匀量化也是采用压缩、扩张的方法,即在发送端对输入的信号进行压缩处理再均匀量化,在接收端再进行相应的扩张处理。��
目前国际上普遍采用容易实现的A律13折线压扩特性和μ律15折线的压扩特性。我国规定采用A律13折线压扩特性。�
采用13折线压扩特性后小信号时量化信噪比的改善量可达24dB,而这是靠牺牲大信号量化信噪比(亏损12dB)换来的。�
编码�
抽样、量化后的信号还不是数字信号,需要把它转换成数字编码脉冲,这一过程称为编码。最简单的编码方式是二进制编码。具体说来,就是用n比特二进制码来表示已经量化了的样值,每个二进制数对应一个量化值,然后把它们排列,得到由二值脉冲组成的数字信息流,整个过程见图2-7。编码过程在接收端,可以按所收到的信息重新组成原来的样值,再经过低通滤波器恢复原信号。用这样方式组成的脉冲串的频率等于抽样频率与量化比特数的积,称为所传输数字信号的数码率。显然,抽样频率越高,量化比特数越大,数码率就越高,所需要的传输带宽就越宽。��
除了上述的自然二进制码,还有其他形式的二进制码,如格雷码和折叠二进制码等,表2-1示出了这三种二进制码。这三种码各有优缺点:(1)自然二进制码和二进制数一一对应,简单易行,它是权重码,每一位都有确定的大小,从最高位到最低位依次为,可以直接进行大小比较和算术运算。自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。(2)格雷码则没有这一缺点,它在相邻电平间转换时,只有一位生变化,格雷码不是权重码,每一位码没有确定的大小,不能直接进行比较大小和算术运算,也不能直接转换成模拟信号,要经过一次码变换,变成自然二进制码。(3)折叠二进制码沿中心电平上下对称,适于表示正负对称的双极性信号。它的最高位用来区分信号幅值的正负。折叠码的抗误码能力强。

⑨ 什么是FIFO

FIFO是First Input First Output的缩写,先入先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。

是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单。

但缺点就是只能顺序写入数据,顺序读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。