• 牛客刷题一<四选一多路器>


    题目:四选一多路器_牛客题霸_牛客网

    解法一:

    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_out1;
    9. always@(*)
    10. begin
    11. case(sel)
    12. 2'b00:mux_out1 = d3;
    13. 2'b01:mux_out1 = d2;
    14. 2'b10:mux_out1 = d1;
    15. 2'b11:mux_out1 = d0;
    16. default:mux_out1 = d3;
    17. endcase
    18. end
    19. assign mux_out = mux_out1;
    20. //*************code***********//
    21. endmodule

    易出错的地方:容易写成2'b0,2'b1,2'b2,2'b3,但可以写成2'd0,2'd1,2'd2,2'd3,如下:

    解法二:

    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_out1;
    9. always@(*)
    10. begin
    11. case(sel)
    12. 2'd0:mux_out1 = d3;
    13. 2'd1:mux_out1 = d2;
    14. 2'd2:mux_out1 = d1;
    15. 2'd3:mux_out1 = d0;
    16. default:mux_out1 = d3;
    17. endcase
    18. end
    19. assign mux_out = mux_out1;
    20. //*************code***********//
    21. endmodule

    注意:.always模块内被赋值的变量必须是reg型,赋的值类型随意,因此mux_out1必须是reg类型,而d0,d1,d2,d3类型无所谓。

    解法三:

    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. //assign mux_out = sel[0]?(sel[1]?d0:d2):(sel[1]?d1:d3);
    8. assign mux_out = sel[1]?(sel[0]?d0:d1):(sel[0]?d2:d3);
    9. //先判断高位需保证低位相同,先判断低位,则保证高位相同
    10. endmodule
    11. //通过2选1选择器进行判断,需要三个这种结构

    此种方法是通过2选1选择器进行判断,先判断高位需保证低位相同,先判断低位,则保证高位相同。d0、d2高位不同,d1、d3高位不同,d0、d1低位不同,d2、d3低位不同

    解法四:

    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. wire [1:0] sel_1,sel_2;
    8. assign sel_1 = (sel[0]) ? d2 : d3;
    9. assign sel_2 = (sel[0]) ? d0 : d1;
    10. assign mux_out = (sel[1]) ? sel_2 :sel_1;
    11. endmodule
    12. //通过2选1选择器进行判断,需要三个这种结构

    笔记:

    Verilog Tips

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

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

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

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

    5输入输出都是wire型,直接放弃always块

    Testbench Tips

    1.testbench里需要根据Verilog里的输入输出重新定义变量,再实例化设计模块

    2.initial作为初始化模块,被初始化的变量必须是reg型

    Testbench

    1. `timescale 1ns/1ns
    2. module testbench();
    3. reg clk=0;
    4. //always #5 clk = ~clk; // Create clock with period=10
    5. //initial作为初始化模块,被初始化的变量必须是reg型
    6. reg [1:0] d0,d1,d2,d3,sel;
    7. // A testbench
    8. initial begin
    9. $dumpfile("out.vcd"); //这两个一定要在initial中写,否则编译无法通过,
    10. $dumpvars(0, testbench); //会无法生成out.vcd文件
    11. d0 = 3;
    12. d1 = 0;
    13. d2 = 1;
    14. d3 = 2;
    15. sel = 0;
    16. #5 sel = 1;
    17. #5 sel = 2;
    18. end
    19. mux4_1 mux4_1_inst
    20. (
    21. .d1 (d1),
    22. .d2 (d2),
    23. .d3 (d3),
    24. .d0 (d0),
    25. .sel (sel),
    26. .mux_out (mux_out)
    27. );
    28. endmodule

  • 相关阅读:
    一个简单的基于形态学处理的报纸图像版面分割算法matlab仿真
    云原生基础知识:容器技术的历史
    ExecutorService接口线程池
    Linux 15:基于C/S架构——微云盘
    Pai到用时方恨少
    深度学习pytorch之tensorboard和transform的使用
    cas-client基于CAS协议客户端搭建
    Java中Spring AOP讲解
    Spring 08: AOP面向切面编程 + 手写AOP框架
    Flink开发语言使用Java还是Scala合适?
  • 原文地址:https://blog.csdn.net/mxh3600/article/details/126332053