【牛客网刷题】VL1 四选一多路器

👉 写在前面

👉 本系列博客记录牛客网刷题记录

👉 日拱一卒,功不唐捐!


目录

题目描述

题目分析

Verilog 代码

testbench 代码

仿真结果


题目描述

制作一个四选一的多路选择器,要求输出定义上为线网类型

状态转换:

d0

11

d1

10

d2

01

d3

00

信号示意图:

波形示意图:

题目分析

多路选择器又称数据选择器,常用的有 2 选 1、4 选 1、8 选 1、16 选 1 等。当输入数据更多时则可以由上述选择器扩大功能而得,如 32 选1、64 选 1 等。在数据选择器中,通常用地址输入信号来完成挑选数据的任务。如一个 4 选 1 的数据选择器,应有 2 个地址输入端,它共有 4 种不同的组合,每一种组合可选择对应的一路输入数据输出。同理,对一个 8 选 1 的数据选择器,应有 3 个地址输入端。

图所示的是四选一数据选择器的原理图。图中的D0、D1、D2、D3是四个数据输入端,Y为输出端,A1、A0是地址输入端。从表中可见,利用指定A1A0的代码,能够从D0、D1、D2、D3这四个输入数据中选出任何一个并送到输出端。因此,用数据选择器可以实现数据的多路分时传送。
此外,数据选择器还广泛用于产生任意一种组合逻辑函数。在图示电路中,若将Y看成是A0、A1及D0、D1、D2、D3的函数,则可写成

如果把A1、A0视为两个输入逻辑变量,同时把D0、D1、D2和D3取为第三个输入逻辑变量A2的不同状态(即A2、/A2、1或0),便可产生所需要的任何一种三变量A2、A1、A0的组合逻辑函数。可见,利用具有n位地址输入的数据选择器可以产生任何一种输入变量数不大于n +1的组合逻辑函数。

生成一个四选一的多路选择器,并且输出为wire类型,可以用 assign 语句、case 语句、if 语句进行描述,这里选用 assign 语句。

Verilog 代码

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
// Engineer    : Linest-5                                                             
// File        : mux4_1.v                                                              
// Create      : 2022-09-27 19:42:13                                                   
// Revise      : 2022-09-27 19:42:13                                                  
// Module Name : mux4_1                                                                 
// Description : 四选一多路器                                                                         
// Editor : sublime text3, tab size (4)                                                                                                 
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
`timescale 1ns/1ns
module mux4_1(
	input  [1:0]   d1,d2,d3,d0,
	input  [1:0]   sel,
	output [1:0]   mux_out
);
//*************code***********//
assign mux_out = (sel == 2'b00) ? d3 : ((sel == 2'b01) ? d2 : ((sel == 2'b10) ? d1 : d0));

//*************code***********//
endmodule

testbench 代码

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
// Engineer    : Linest-5                                                             
// File        : tb_mux4_1.v                                                              
// Create      : 2022-09-27 19:55:06                                                   
// Revise      : 2022-09-27 21:02:02                                                  
// Module Name :                                                                  
// Description :                                                                          
// Editor : sublime text3, tab size (4)                                                                                                 
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

`timescale 1ns/1ns

module tb_mux4_1();
//	reg clk=0;
//	always #5 clk = ~clk;  // Create clock with period=10
// A testbench
    reg  [1:0] d1,d2,d3,d0,sel;
    wire [1:0] mux_out;

    initial begin
        d1  = 2'd0;
        d2  = 2'd1;
        d3  = 2'd2;
        d0  = 2'd3;
        sel = 2'd0;
        #10
        sel = 2'd1;
        #10
        sel = 2'd2;
        #10
        sel = 2'd3;
        #10
        sel = 2'd2;
        #10
        sel = 2'd0;
        #10
        sel = 2'd1;
        #10
        sel = 2'd3;
    end
    
mux4_1 mux4_1_inst(
    .d1(d1),
    .d2(d2),
    .d3(d3),
    .d0(d0),
    .sel(sel),
    .mux_out(mux_out)
);    

//verdi     
initial begin
   $fsdbDumpfile("tb_mux4_1.fsdb");
   $fsdbDumpvars(0);
end
    
endmodule

仿真结果

电路结构

仿真波形

可以看到下图的波形输出逻辑和题目要求一致,验证成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Linest-5

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

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

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

打赏作者

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

抵扣说明:

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

余额充值