【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
相关推荐
今天AI了吗2 小时前
Hermes Agent 搭建全流程:从本机试跑到可持续运行的个人 AI Agent
java·人工智能·python·学习·embedding
一只小菜鸡..3 小时前
Stanford CS144 学习笔记 (二):传输层与数据通信机制
网络·笔记·学习
天选之子1233 小时前
tabulate学习
学习
子非鱼94273 小时前
06-Flutter 鸿蒙实战 06:上传后处理流程,照片识别、故事生成和状态刷新
学习·flutter·华为·harmonyos
天天爱吃肉82184 小时前
# 商用车多体动力学整车仿真学习笔记(开篇总览)
人工智能·笔记·python·功能测试·学习·汽车
xd1855785554 小时前
藏头诗工坊-基于鸿蒙的AI藏头诗创作应用开发实践
人工智能·学习·华为·harmonyos·鸿蒙
一起努力啊~5 小时前
DataWhale组队学习笔记--llm-algo-leetcode(三)
笔记·学习·llm
云空5 小时前
《Three.js 可操控3D魔方(键盘转动+打乱+复原)》
javascript·学习·游戏·3d·three.js
忆锦紫5 小时前
vivado报错及解决【十一】
fpga开发·fpga·vivado·xilinx
kdxiaojie6 小时前
Linux 驱动研究 —— V4L2 (3)
linux·运维·笔记·学习