欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数字电子技术基础(五):编码器

程序员文章站 2022-07-14 23:19:17
...

编码器:在数字系统中,为了区分一系列不同的事物,将其中的每个事物用一个二值码来表示。
编码尽量要求:将多个输入的状态用最少资源来表示。

编码器大致有两种分类,一种是普通编码器,一种是优先编码器

1、普通编码器

在普通编码器中,任何时刻只允许输入一个信号,否则输出会发生混乱。但是一般在设计普通编码器的时候,一般会有default状态,即在输入不是任何一种有效输入的情况下会指定输出一个值。

下面举个4-2编码器的例子,因为有四个输入,所以用两位二进制 数来表示,能表示完全,也最节约资源,也符合编码节约资源的要求。当然3位也能表示,不过就浪费了一位。

//4-2编码器的主要代码
case(state_in)
	4'b0001: state_out <= 00;
	4'b0010: state_out <= 01;
	4'b0100: state_out <= 10;
	4'b1000: state_out <= 11;
	default: state_out <= 00;
endcase

在设计4-2编码器的Verilog代码中,可以看到,输入的四个状态只有一位是输入了1,这就是同时只有一个输入。
即使输入不是0001,0010,0100,1000这四种状态,假设输入0111,因为0111不在前四个有效状态中,会进入到default的case中,最终也会输出一个00,具体是多少,看自己设计要求。

而在芯片设计中,肯定也有这种设计,但是最好还是不要同时输入多个值,不然输出的值与自己的预期不符。

下面看看8-3普通编码器的真值表:
数字电子技术基础(五):编码器
假设要编码15种状态的话,应该用多少位呢,用3位表示不全,但是4位又多了一个,当然最后应该用4位,因为要在保证完全表示的情况下再考虑节约资源

2、优先编码器

优先编码器允许同时输入两个及以上的编码信号。不过在设计优先编码器时,已经将所有的输入信号按照优先顺序排了队,当几个输入信号同时出现时,只对其中一个优先权最高的一个进行编码。

下面举一个8-3优先编码器74HC148的例子
数字电子技术基础(五):编码器

数字电子技术基础(五):编码器

数字电子技术基础(五):编码器
从这个表中可以看出,74HC148有一个控制信号S’;当S’ = 0时,编码器才能正常工作,否则输出全为1。
当I7 = 0,时,不管其它位为多少,最终都先编码I7,输出000,I7优先级最高
当I7 = 1,I6 = 0时,不管其它位为多少,最终编码I6,输出001,I6优先级次高
可以看出编码优先级从高到低依次为:I7,I6,I5,I4,I3,I2,I1,I0。

我们可以看到,输出里面还有Ys’和 Yex’
那么表中的Ys’和 Yex’的作用是什么呢?

Ys’和Yex’用来区分当前芯片的工作状态是什么,给主机反馈一个信息。

假设Ys’和Yex’ 输出1 1,就说明此时芯片没有正常工作,处于锁住状态,虽然Y0Y1Y2 输出 1 1 1,但并不是对0 1 1 1 1 1 1 1编码得到的输出,输出不能用
假设Ys’和Yex’ 输出0 1,就说明此时芯片,输入全为高,虽然处于选通状态,但是Y0Y1Y2Y的1 1 1并不是对0 1 1 1 1 1 1 1编码出来的,输出不能用
假设Ys’和Yex’ 输出1 0,就说明此时芯片正常工作,所有输出均是编码出来的,可以使用

这个在设计的时候可以借鉴,可以给主机反馈信息,这个很重要。