牛客网Verilog快速入门题目收获——四选一多路器(VL1)

题目中给出了状态转换、信号示意图以及波形图
题目要求:输入输出均为wire类型
为了更清楚题目所给的状态转移,采用表格的形式来展现


状态转换:

dsel
d011
d110
d201
d300

信号示意图:
在这里插入图片描述
波形示意图:
在这里插入图片描述

注意波形图给出的d1,d3是错误的,状态转换中,d1 为10,因此是2,而波形中是0,d3为00,因此为0,而波形中是2。本题以波形图为标准来编写Verilog。
同学解答了我的疑问,数据和波形没有问题,但是题目的状态转移我觉得写的也不是很规范,理解起来会有偏差,在写任何数据的时候,建议大家也要标记清楚各个数据代表的意思,一目了然。

如下编写可运行通过,但与题目不符,题目要求输出必须是wire,因此我们需要引入一个变量来寄存输出数据,然后通过线网类型wire给最终的输出变量mux_out

`timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output reg [1:0]mux_out
);
//*************code***********//
always @ (*)
begin
        case(sel) 
            2'b00 : mux_out = d3;
            2'b01 : mux_out = d2;
            2'b10 : mux_out = d1;
            2'b11 : mux_out = d0;
            default : mux_out = d0;
        endcase
end
//*************code***********//
endmodule

如下引入了reg类型的变量,mux_out_reg。符合要求且正常运行。

`timescale 1ns/1ns
module mux4_1(
input  [1:0]d1,d2,d3,d0,
input  [1:0]sel,
output [1:0]mux_out
);
//*************code***********//
reg [1:0] mux_out_reg;
always @ (*)
begin
        case(sel) 
            2'b00 : mux_out_reg = d3;
            2'b01 : mux_out_reg = d2;
            2'b10 : mux_out_reg = d1;
            2'b11 : mux_out_reg = d0;
            default : mux_out_reg = d0;
        endcase
end
assign mux_out = mux_out_reg;
//*************code***********//
endmodule

题目的收获:
1、区分二进制表示形式与十进制表示形式(之前一直搞不懂该写2‘b0,还是
2’d0)

2’b00 = 2’d0
2’b01 = 2’d1
2’b10 = 2’d2
2’b11 = 2’d3

2、begin … end 中的变量必须用reg类型,但这里并不是给定了reg型,就非得是阻塞赋值或者非阻塞赋值,上面代码虽然是begin end中的变量是reg类型,但是还是使用的 =

3、case语句中,always块中的敏感列表直接写 * ,always@(*) ,表示所有的输入均为敏感变量。

4、用case语句,后面要加default,本来我认为sel输入包含了所有的01情况,也可不加,但是输入还有可能出现x或者h高阻态类型的情况,因此仍然需要加入default,建议不管输入是否包含所有情况,都加default

题库

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Fighting_FPGA

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

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

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

打赏作者

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

抵扣说明:

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

余额充值