四选一、八选一的多路选择器

1、多路选择器设计方式

  • case语句
  • if else 语句

2、四选一的选择器

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

状态转换:
d0    11
d1    10
d2    01
d3    00

2.1 采用case语句 

always块中,输出信号用reg ;  时序用 <=      reg [1:0] mux_out;

1.module里定义时自动为wire型变量

2.always的@内变量设置为*可以自动匹配输入

3.always模块内被赋值的变量必须是reg型,赋的值类型随意

4.assign时被赋值的变量必须是wire型,赋的值类型随意

`timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output[1:0]mux_out
);
//*************code***********//

//always块中,输出信号用reg ;  时序用 <=
reg [1:0] mux_out;

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<= 2'b00;
        endcase
    end

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

3、Testbench编写

1.testbench里需要根据Verilog里的输入输出重新定义变量,再实例化设计模块
2.initial作为初始化模块,被初始化的变量必须是reg类型

3.时钟 always +时钟延时反转

`timescale 1ns/1ns

module testbench();

  reg [1:0] d0,d1,d2,d3,sel;
  initial begin
    d0=3;
    d1=0;
    d2=1;
    d3=2;
    sel=0;
    #1 sel=1;
    #20 sel=2;
    #20 $finish;
     end

  mux4_1 simulation_test (
    .d1(d1),
    .d2(d2),
    .d3(d3),
    .d0(d0),
    .sel(sel),
    .mux_out(mux_out));

      initial begin
    $dumpfile("out.vcd");
    $dumpvars(0, testbench);
  end

    
endmodule

本文是FPGA系列的第一篇文章,用于分享和记录自己的学习过程,希望以后可以持续更新下去。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值