【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 | I7 | I6 | I5 | I4 | I3 | I2 | I1 | I0 | Y2 | Y1 | Y0 | 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 :当且仅当A15:0为全0时,GS=0,因此,将两个EN的GS端经过一个**或门(OR)**输出,可包含以上情况;

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


对于输出变量L的判断:

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

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

L3=1 则说明EN2处于输出状态,最终输出的L2:0同样应为EN2的Y端

L3=0 :说明L2: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
相关推荐
云空6 分钟前
《软件专业完整学习路线图(本科4年+自学通用版,2026就业向)》
人工智能·科技·学习·计算机·编程·软件
油丶酸萝卜别吃8 小时前
前端转全栈学习路线
前端·学习
GlueNa2SiO312 小时前
第十八章 Linux故障排查与恢复
linux·服务器·笔记·学习
weixin_4316004412 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
带娃的IT创业者12 小时前
DeepTutor:当 Agent-Native 架构撞上个性化学习的临界点
学习·架构·ai agent·大模型应用·个性化学习·教育技术·agent-native架构
xian_wwq13 小时前
【学习笔记】Context Engineering,AI Agent 真正的内存管理-4/16
笔记·学习·context
寒月小酒13 小时前
AnythingLLM 学习
学习
大模型码小白17 小时前
【AI】一文讲清 RAG:从大模型局限到企业级知识库落地流程
人工智能·深度学习·学习
AI探索先锋17 小时前
A* 路径规划:四种算法的进化史-学习
学习·算法
辣知18 小时前
辣知·化智20 九千年文明记录
学习