编码器设计——Verilog HDL语言

任务描述

设计一个3位二进制优先编码器。运用Verilog HDL进行设计,完善3位二进制优先编码器的功能描述风格代码,具备组合逻辑电路的设计仿真和测试的能力。

相关知识

  1. 3位二进制优先编码器的功能;
  2. 如何用always语句、if语句进行逻辑功能的描述。

3位二进制优先编码器的功能

优先编码器允许同时输入两个以上编码信号,并按照事先规定的优先级别,对优先权最高的一个输入信号进行编码,编码器框图如下所示。
在这里插入图片描述

always语句

通俗的理解,always就是:一直运行。
always过程从关键字always开始,可以连续多次运行,当过程的最后一行代码执行完成后,再次从第一行代码开始执行。
一个模块中可以包含多个过程,各个过程相互之间是并发执行的。不过,过程不能够嵌套使用。如果过程中有多个语句,则需要使用关键字begin、end或fork、join将它们组成一个代码块。这两种关键字组合代表着顺序代码块和并行代码块。

事件时序控制

事件时序控制的意思是,如果指定的事件发生,则代码被触发执行。它的关键字为@,后面可以加变量或者事件名称。例如:

@(a or b) y = ~a; //当a或b其中任意一个变量发生变化时,则将a非赋值给y
@(posedge clk) y = 1; //在变量clk的上升沿,将1赋值给y

编程要求

根据真值表,设计一个输入输出均为高电平有效的3位二进制优先编码器。
I0~I7(八种状态)是八个编码信号输入端, I7的优先权最高,I0的优先权最低;Y0、Y1、Y2是三位二进制代码输出端。
输入输出均为高电平1有效的3位二进制优先编码器真值表如下所示。
在这里插入图片描述

源代码

测试平台:EduCoder

//设计一个输入输出均为高电平有效的3位二进制优先编码器
//I[7]的优先权最高,I[0]的优先权最低
module encoder8_3_test(I,Y);
input [7:0] I;
output [2:0] Y;
// 请在下面添加代码,完成设计任务
/* Begin */
wire[7:0] I;
reg [2:0] Y;
always@(*)
begin
if(I[7]==1) Y = 3'b111;
    else if(I[6]==1) Y =3'b110;
    else if(I[5]==1) Y =3'b101;
    else if(I[4]==1) Y =3'b100;
    else if(I[3]==1) Y =3'b011;
    else if(I[2]==1) Y =3'b010;
    else if(I[1]==1) Y =3'b001;
    else if(I[0]==1) Y =3'b000;
    else Y = 3'b000;
end
/* End */
endmodule

觉得有帮助的可以点个赞再走哦!!

  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MMagicLoren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值