【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL16

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

描述

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

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

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

cpp 复制代码
module encoder_83(
   input      [7:0]       I   ,
   input                  EI  ,
   
   output wire [2:0]      Y   ,
   output wire            GS  ,
   output wire            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

解题思路:

16-4线优先编码器与8-3优先编码器工作状态类似:

对于编码器1 :令其I7~I0对应16-4编码器的A7~A0,将编码器1记为EN1;

同理,编码器2I7~I0 对应16-4编码器的A15~A8,将编码器2记为EN2;

将EN1的使能端EI做为整个编码器的使能端EI;

其中,我们希望当EN1为EI=1时,EN2的EI端同样为1,即两个编码器EN1,EN2同时进入工作状态;根据8-3编码器的功能表,发现,当E1=1时,无论什么情况,GS和EO端的输出值总有一个值为1,即GS | EO = 1;因此,将EN1的GS端和EO端经过一个或门(OR)再接入EN2的EI端

GS :当且仅当A[15:0]为全0时,GS=0,因此,将两个EN的GS端经过一个**或门(OR)**输出,可包含以上情况;

EO :当且仅当A[15:0]为全0时,EO=1,因此,将两个EN的EO端经过一个**与门(AND)**输出;


对于输出变量L的判断:

L[3] :当L[3]=0时,说明待编码的数据为前8个数据(EN1);当L[3]=1时,说明待编码的数据为后8个数据(EN2);

对于L[3]的状态的判定,只需要判定EN2的输出端Y与GS的按位相或是否为1(观察8-3编码器功能表),

L[3]=1 则说明EN2处于输出状态,最终输出的L[2:0]同样应为EN2的Y端

L[3]=0 :说明L[2:0]应对应于EN1的输出端Y

(因为设定的是EN2的为高端输出,因此EN2优先级高)

因此,根据以上所述画出其电路图:


代码如下:
cpp 复制代码
`timescale 1ns/1ns

module encoder_164(
   input      [15:0]      A   ,
   input                  EI  ,
   
   output wire [3:0]      L   ,
   output wire            GS  ,
   output wire            EO    
);
wire [2:0] E1_Y, E2_Y;
wire Eo_1, Eo_2;
wire Ei_2;
wire GS_1, GS_2;
//编码器1
encoder_83 EN1(.I(A[7:0]),
              .EI(EI),
              .Y(E1_Y),
              .GS(GS_1),
              .EO(Eo_1));
//编码器2
assign Ei_2 = GS_1 | Eo_1;

encoder_83 EN2(.I(A[15:8]),
              .EI(Ei_2),  
              .Y(E2_Y),
              .GS(GS_2),
              .EO(Eo_2));

assign L[3] = |{E2_Y[2:0], GS_2} ;
assign L[2:0] = (L[3])? E2_Y : E1_Y;

assign EO = Eo_1&Eo_2;
assign GS = GS_1 | GS_2;

endmodule
相关推荐
因为奋斗超太帅啦1 小时前
React学习笔记(三)——React 组件通讯
笔记·学习·react.js
exploration-earth2 小时前
缓存技术的核心价值与应用
学习
武汉凯迪正大电气2 小时前
武汉凯迪正大—变压器空负载特性参数测试仪 变压器容量及损耗参数测试仪
fpga开发
IM_DALLA2 小时前
【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL18
学习·fpga开发
芯冰乐2 小时前
综合时如何计算net delay?
后端·fpga开发
完球了2 小时前
【Day02-JS+Vue+Ajax】
javascript·vue.js·笔记·学习·ajax
怀九日3 小时前
C++(学习)2024.9.19
开发语言·c++·学习·重构·对象·
白帽黑客cst3 小时前
网络安全(黑客技术) 最新三个月学习计划
网络·数据结构·windows·学习·安全·web安全·网络安全
RS&4 小时前
python学习笔记
笔记·python·学习