Menu
CoddyTech

4 选 1 多路复用器设计

本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 65 课,共 90 课。

challenge icon

挑战

4 选 1 多路复用器

4 选 1 多路复用器有四个数据输入(in0、in1、in2、in3)、两个选择位(sel[1:0])和一个输出(out)。这两个选择位决定哪个输入传递到输出:

  • 当 sel = 2'b00 时,输出为 in0
  • 当 sel = 2'b01 时,输出为 in1
  • 当 sel = 2'b10 时,输出为 in2
  • 当 sel = 2'b11 时,输出为 in3

你将用两种方式构建这个多路复用器:先使用 if-else 语句,然后在下一课中使用 case 语句。这两种方法都可行,但有很多选项时,使用 case 通常更简洁。

4 选 1 多路复用器根据 2 位选择信号,从四个输入中选出一个并将其传递到输出。

真值表

sel1sel0out
00out = in0
01out = in1
10out = in2
11out = in3

当 sel 为 00 时,输出跟随 in0。当 sel 为 01 时,输出跟随 in1。当 sel 为 10 时,输出跟随 in2。当 sel 为 11 时,输出跟随 in3。

要做什么:

  1. 创建一个名为 mux4to1 的模块
  2. 添加输入 in0(1 位)
  3. 添加输入 in1(1 位)
  4. 添加输入 in2(1 位)
  5. 添加输入 in3(1 位)
  6. 添加输入 sel(2 位)
  7. 添加输出 out(1 位,类型为 reg)
  8. 添加一个 always @(*) 块
  9. 在块内添加一个检查 sel 的 if-else 语句:
    • 如果 sel == 2'b00,设置 out = in0
    • 否则,如果 sel == 2'b01,设置 out = in1
    • 否则,如果 sel == 2'b10,设置 out = in2
    • 否则,设置 out = in3
  10. 用 endmodule 结束

亲手试试

// 第 1 步:创建名为 mux4to1 的模块


  // 第 2 步:添加输入 in0
  
  // 第 3 步:添加输入 in1
  
  // 第 4 步:添加输入 in2
  
  // 第 5 步:添加输入 in3
  
  // 第 6 步:添加输入 sel(2 位)
  
  // 第 7 步:添加输出 out(reg 类型)
  

  // 第 8 步:添加 always @(*) 代码块
  

    // 第 9 步:添加 if-else 语句
    // 如果 sel == 2'b00,则 out = in0
    // 否则,如果 sel == 2'b01,则 out = in1
    // 否则,如果 sel == 2'b10,则 out = in2
    // 否则,out = in3
    

// 第 10 步:结束模块

基础知识中的所有课

自己练习: Verilog 在线编译器