使用8线-3线优先编码器Ⅰ实现16线-4线优先编码器

描述

②请使用2片该优先编码器Ⅰ及必要的逻辑电路实现16线-4线优先编码器。优先编码器Ⅰ的真值表和代码已给出。

可将优先编码器Ⅰ的代码添加到本题答案中,并例化。

优先编码器Ⅰ的代码如下:

module encoder_83(
   input  logic    [7:0]       I   ,
   input  logic                EI  ,
   
   output logic [2:0]      Y   ,
   output logic            GS  ,
   output logic            EO    
);
assign Y[2] = EI & (I[7] | I[6] | I[5] | I[4]);
assign Y[1] = EI & (I[7] | I[6] | ~I[5]&~I[4]&I[3] | ~I[5]&~I[4]&I[2]);
assign Y[0] = EI & (I[7] | ~I[6]&I[5] | ~I[6]&~I[4]&I[3] | ~I[6]&~I[4]&~I[2]&I[1]);

assign EO = EI&~I[7]&~I[6]&~I[5]&~I[4]&~I[3]&~I[2]&~I[1]&~I[0];

assign GS = EI&(I[7] | I[6] | I[5] | I[4] | I[3] | I[2] | I[1] | I[0]);
//assign GS = EI&(| I);
         
endmodule
下表是8线-3线优先编码器Ⅰ的功能表

EI

I[7]

I[6]

I[5]

I[4]

I[3]

I[2]

I[1]

I[0]

Y[2]

Y[1]

Y[0]

GS

EO

0

x

x

x

x

x

x

x

x

0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

x

x

x

x

x

x

x

1

1

1

1

0

1

0

1

x

x

x

x

x

x

1

1

0

1

0

1

0

0

1

x

x

x

x

x

1

0

1

1

0

1

0

0

0

1

x

x

x

x

1

0

0

1

0

1

0

0

0

0

1

x

x

x

0

1

1

1

0

1

0

0

0

0

0

1

x

x

0

1

0

1

0

1

0

0

0

0

0

0

1

x

0

0

1

1

0

1

0

0

0

0

0

0

0

1

0

0

0

1

0

输入描述:

   input      [15:0]      A   ,
   input                  EI  

输出描述:

   output wire [3:0]      L   ,
   output wire            GS  ,
   output wire            EO  

解答:

解析:

因为要使用8位去处理16位的工作,因此要先将16位分为两个8位的,分别为A[15:8]与A[7:0]。

首先对于A[15:8],在他全为0时,开始进行后面的判断,即:1、他的优先级高于低8位;2、他如果不为0,只需要判断高8位即可,为0,判断低8位。则把16位的分为两个8位的。

即L[3]表示他是低8位还是高8位,L[2:0]表示他的数值。

当L[3]为1时,他表示高8位有数据为1,此时输出值记为Y1,此时不用管低8位,则输出L的构成为{1,Y1},当L[3]为0时,此时不管高8为,输出记为Y2,此时L构成为{0,Y2}.

当EO为1时,代表高8位为0,需要进行低8位的判断;

对于Y1与Y2,输出在两个中进行选择,假设使用到第二个,即高8位为0,那么输出也为0,0或Y2等于Y2,同理,Y1类似,故代码如下:

`timescale 1ns/1ns
module encoder_83(
   input   logic   [7:0]       I   ,
   input   logic               EI  ,
   
   output logic [2:0]      Y   ,
   output logic            GS  ,
   output logic            EO    
);
assign Y[2] = EI & (I[7] | I[6] | I[5] | I[4]);
assign Y[1] = EI & (I[7] | I[6] | ~I[5]&~I[4]&I[3] | ~I[5]&~I[4]&I[2]);
assign Y[0] = EI & (I[7] | ~I[6]&I[5] | ~I[6]&~I[4]&I[3] | ~I[6]&~I[4]&~I[2]&I[1]);

assign EO = EI&~I[7]&~I[6]&~I[5]&~I[4]&~I[3]&~I[2]&~I[1]&~I[0];

assign GS = EI&(I[7] | I[6] | I[5] | I[4] | I[3] | I[2] | I[1] | I[0]);
//assign GS = EI&(| I);
         
endmodule

module encoder_164(
   input   logic   [15:0]      A   ,
   input                  EI  ,
   
   output logic [3:0]      L   ,
   output logic            GS  ,
   output logic            EO    
);

logic [2:0]Y1;
logic GS1;
logic EO1;

logic [2:0]Y2;
logic GS2;

encoder_83 u0_encoder_83(
   .I   (A[15:8]),
   .EI  (EI),
   
   .Y   (Y1),
   .GS  (GS1),
   .EO  (EO1)  
);

encoder_83 u1_encoder_83(
   .I   (A[7:0]),
   .EI  (EO1),
   
   .Y   (Y2),
   .GS  (GS2),
   .EO  (EO2)  
);

assign GS = GS1 | GS2;
assign EO = EO1 & EO2;
assign L = {GS1,Y2 | Y1};

endmodule

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值