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

写在前面

牛客网中有各类题库,其中就有 FPGA/IC 的 Verilog 题库,通过刷题可以巩固基础。

牛客网 Verilog 题库包括基础、进阶以及企业笔试真题,并且全部免费!

本系列持续更新自己的刷题历程。

牛客网刷题直达链接

 牛客网 Verilog 刷题链接(FPGA/IC)
【牛客网刷题】VL1 四选一多路器_第1张图片


目录

题目描述

题目分析

Verilog 代码

testbench 代码

仿真结果


题目描述

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

状态转换:

d0

11

d1

10

d2

01

d3

00

信号示意图:

【牛客网刷题】VL1 四选一多路器_第2张图片

波形示意图:

【牛客网刷题】VL1 四选一多路器_第3张图片

题目分析

多路选择器又称数据选择器,常用的有 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的组合逻辑函数。

【牛客网刷题】VL1 四选一多路器_第4张图片

生成一个四选一的多路选择器,并且输出为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

仿真结果

电路结构

【牛客网刷题】VL1 四选一多路器_第5张图片

仿真波形

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

【牛客网刷题】VL1 四选一多路器_第6张图片

你可能感兴趣的:(Verilog,fpga开发,牛客网,Verilog,数字IC,刷题)