友情提示:同学您好,此页面仅供预览,在此页面学习不会被统计哦! 请进入学习空间后选择课程学习。

1.编码器

(1)普通编码器

普通编码器中,在某一确定时刻,只能对一个输入信号编码,不允许两个或两个以上的输入信号同时有效,否则将出现乱码。8线-3线普通编码器的功能表如表7.1所示。

7.1   83编码器的功能表

.

 

 

 

 

 




1.是描述8线-3线普通编码器的Verilog-HDL程序,

module  encoder8_3(i0,i1,i2,i3,i4,i5,i6,i7,y2,y1,y0);

input i0,i1,i2,i3,i4,i5,i6,i7;

output y2,y1,y0;

reg   y2,y1,y0;

wire  [7:0]   A;

assign  A={i0,i1,i2,i3,i4,i5,i6,i7};

always  @(A)

  begin

   case(A)

8'b00000001:  begin  y2=1'b0;y1=1'b0;y0=1'b0; end

8'b00000010:  begin y2=1'b0;y1=1'b0;y0=1'b1; end 

8'b00000100:  begin y2=1'b0;y1=1'b1;y0=1'b0; end

8'b00001000:  begin y2=1'b0;y1=1'b1;y0=1'b1; end

8'b00010000:  begin y2=1'b1;y1=1'b0;y0=1'b0; end

8'b00100000:  begin y2=1'b1;y1=1'b0;y0=1'b1; end

8'b01000000:  begin y2=1'b1;y1=1'b1;y0=1'b0; end

8'b10000000:  begin y2=1'b1;y1=1'b1;y0=1'b1; end

default: begin y2=1'b1;y1=1'b1;y0=1'b1; end

endcase

end

endmodule

(2)优先编码器

优先编码器中,同一时刻可以允许两个或两个以上输入信号同时有效。不过,在设计优先编码器时,需要将所有的输入信号按优先顺序排队,如果几个输入信号同时出现时,只对优先权最高的一个信号进行编码。与用普通门电路实现的优先编码器不同的是,优先级的顺序可以很方便的修改。

7.2  4线-2线优先编码器的功能表

输入

输出

E

I0

I1

I2

I3

Y1

Y0

1

×

×

×

×

0

0

0

×

×

×

1

1

1

0

×

×

1

0

1

0

0

×

1

0

0

0

1

0

1

0

0

0

0

0

2是描述4线-2线优先编码器的Verilog-HDL程序

module  encoder4_2(E,I0,I1,I2,I3,Y1,Y0);

input E,I0,I1,I2,I3;

output Y1,Y0;

reg   Y1,Y0;

always  @(E,I0,I1,I2,I3)

  begin

  if (E) begin Y1=1'b0;Y0=1'b0; end

else if (I3) begin  Y1=1'b1;Y0=1'b1; end

else if (I2) begin  Y1=1'b1;Y0=1'b0; end

else if (I1) begin  Y1=1'b0;Y0=1'b1; end

else if (I0) begin  Y1=1'b0;Y0=1'b0; end

else begin  Y1=1'b0;Y0=1'b0; end

  end

endmodule

2.译码器

译码是编码的逆过程,也就是把一个二进制代码表示的信息翻译出来。译码器的输入为n位二进制代码,输出为2n个表征代码原意的状态信号,2n个输出信号中有且只有一个是有效的。7.33线-8线译码器对应的功能表。

7.3  3线-8线译码器的功能表

输入

输出

S1

S2+S3

A2

A1

A0

Y0

Y1

Y2

Y3

Y4

Y5

Y6

Y7

0

×

×

×

×

1

1

1

1

1

1

1

1

×

1

×

×

×

1

1

1

1

1

1

1

1

1

0

0

0

0

0

1

1

1

1

1

1

1

1

0

0

0

1

1

0

1

1

1

1

1

1

1

0

0

1

0

1

1

0

1

1

1

1

1

1

0

0

1

1

1

1

1

0

1

1

1

1

1

0

1

0

0

1

1

1

1

0

1

1

1

1

0

1

0

1

1

1

1

1

1

0

1

1

1

0

1

1

0

1

1

1

1

1

1

0

1

1

0

1

1

1

1

1

1

1

1

1

1

0

 

3是描述3线-8线译码器的Verilog-HDL程序,其中S1,S2,S3,是对应的使能端,S11,同时S2S30时输入信号有效。

module  decoder3_8(S1,S2,S3,A2,A1,A0,Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0);


input   S1,S2,S3,A2,A1,A0;

output   Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0;

wire S;

wire [2:0]  A;

reg   [7:0] Y;

assign  S=S2 | S3;

assign  A={A2,A1,A0};

always  @(A,S1,S)

  begin

   if (S1 && !S) begin

  case(A)

   3'b000: Y=8'b11111110;

   3'b001: Y=8'b11111101;

   3'b010: Y=8'b11111011;

   3'b011: Y=8'b11110111;

   3'b100: Y=8'b11101111;

   3'b101: Y=8'b11011111;

   3'b110: Y=8'b10111111;

   3'b111: Y=8'b01111111;

  default:  Y=8'b11111111;

  endcase

  end

else begin Y=8'b11111111;

end

end

assign Y0=Y[0];

assign Y1=Y[1];


assign Y2=Y[2];

assign Y3=Y[3];

assign Y4=Y[4];

assign Y5=Y[5];

assign Y6=Y[6];

assign Y7=Y[7];

endmodule