FPGA四选一多路选择器

目录

前言

一、四选一多路选择器原理

二、原代码

1.Verilog源码

2.测试文本

3、仿真结果

总结


前言

这里是小白新手的课后作业之——基于FPGA的四选一数据选择器的设计!!


一、四选一多路选择器原理

四选一多路选择器共由四个1位的输入端口(int0、int1、int2、int3)、一个2位控制端口(sel)和一个输出端口(out)组成,原理如图1所示,真值表如下:

四选一多路选择器真值表
selout
00int0
01int1
10int2
11int3

图1 


二、原代码

1.Verilog源码

//四位选一多路选择器
   // 定义模块名及输入输出变量
module mux4_1 (
   input   wire [0:0]   int0   ,
   input   wire [0:0]   int1   ,
   input   wire [0:0]   int2   ,
   input   wire [0:0]   int3   ,
   input   wire [1:0]   sel    ,
   output  reg  [0:0]   out  
);                                
//逻辑功能描述
always @(*) begin
    case (sel)
        2'b00   : out = int0;  // sel=0,输出为int0
        2'b01   : out = int1;  // sel=0,输出为int1
        2'b10   : out = int2;  // sel=0,输出为int2
        2'b11   : out = int3;  // sel=0,输出为int3
        default : out = 1'bx ; //默认处理输出为空
    endcase
end
    
endmodule

2.测试文本

`timescale 1ns/1ns // 定义时间单位和延时精度
module mux4_1_tb(); // 定义模块名

// 定义激励信号
 reg          tb_int0 ;
 reg          tb_int1 ;
 reg          tb_int2 ;
 reg          tb_int3 ;
 reg   [1:0]  tb_sel  ;

// 定义输出信号
 wire         out;

parameter TIME = 20;

// 模块例化
mux4_1 mux4_1_tb(
    .int0 (tb_int0) ,
    .int1 (tb_int1) ,
    .int2 (tb_int2) ,
    .int3 (tb_int3) ,
    .sel  (tb_sel)  ,
    .out  (out)
);

// 模拟输入
initial begin
    tb_int0 = 0;         // 将tb_int0初始化为0
    forever begin
        #TIME;
        tb_int0 = ~tb_int0; // 每20个时间单位内,将tb_int0的值取反
    end
end

initial begin
    tb_int1 = 0;         // 将tb_int1初始化为0
    forever begin
        #(TIME*2);
        tb_int1 = ~tb_int1; // 每40个时间单位内,将tb_int1的值取反
    end
end

initial begin
    tb_int2 = 0;         // 将tb_int2初始化为0
    forever begin
        #(TIME*3);
        tb_int2 = ~tb_int2; // 每60个时间单位内,将tb_int2的值取反
    end
end

initial begin
    tb_int3 = 0;         // 将tb_int3初始化为0
    forever begin
        #(TIME*4);
        tb_int3 = ~tb_int3; // 每80个时间单位内,将tb_int3的值取反
    end
end

initial begin
    tb_sel = 0;         // 将tb_sel初始化为0
    forever begin
        #(TIME*6);
        tb_sel = ~tb_sel; // 每160个时间单位内,将tb_sel的值取反
    end
end
endmodule

3、仿真结果

总结

咔嚓又是一天

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值