数字电子技术基础(五):编码器
编码器:在数字系统中,为了区分一系列不同的事物,将其中的每个事物用一个二值码来表示。
编码尽量要求:将多个输入的状态用最少资源来表示。
编码器大致有两种分类,一种是普通编码器,一种是优先编码器。
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,就说明此时芯片正常工作,所有输出均是编码出来的,可以使用。
这个在设计的时候可以借鉴,可以给主机反馈信息,这个很重要。