image.png

    1. `timescale 1ns/1ns
    2. module mux4_1(
    3. input [1:0]d1,d2,d3,d0,
    4. input [1:0]sel,
    5. output[1:0]mux_out
    6. );
    7. //*************code***********//
    8. reg [1:0] mux_out_reg;
    9. //always@(sel, d0, d1, d2, d3) begin
    10. always@(*) begin
    11. case(sel)
    12. 2'b00 : mux_out_reg = d3;
    13. 2'b01 : mux_out_reg = d2;
    14. 2'b10 : mux_out_reg = d1;
    15. default : mux_out_reg = d0;
    16. endcase
    17. end
    18. assign mux_out = mux_out_reg;
    19. //*************code***********//
    20. endmodule

    【注】

    1. case语句必须always块中,由于没有时钟,所以always块中的敏感变量就是*,也就是说always块中的所有变量都会触发always块的执行;
    2. begin…end中被赋值的变量必须使用reg类型;
    3. 使用三木运算符就不需要用到begin…end,因而也不需要声明reg类型的中间变量,直接使用assign赋值即可
    1. `timescale 1ns/1ns
    2. module mux4_1(
    3. input [1:0]d1,d2,d3,d0,
    4. input [1:0]sel,
    5. output[1:0]mux_out
    6. );
    7. //*************code***********//
    8. reg [1:0] mux_out_reg;
    9. always@(*) begin
    10. if(sel == 2'b00)
    11. mux_out_reg = d3;
    12. else if(sel == 2'b01)
    13. mux_out_reg = d2;
    14. else if(sel == 2'b10)
    15. mux_out_reg = d1;
    16. else if(sel == 2'b11)
    17. mux_out_reg = d0;
    18. end
    19. assign mux_out = mux_out_reg;
    20. //*************code***********//
    21. endmodule
    1. `timescale 1ns/1ns
    2. module mux4_1(
    3. input [1:0]d1,d2,d3,d0,
    4. input [1:0]sel,
    5. output[1:0]mux_out
    6. );
    7. //*************code***********//
    8. assign mux_out = (sel == 2'b00)?d3:(sel == 2'b01)?d2:(sel == 2'b10)?d1:d0;
    9. //*************code***********//
    10. endmodule