• 「Verilog学习笔记」使用子模块实现三输入数的大小比较


    专栏前言

    本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网

    分析

    题目要求编写子模块实现两个输入数的大小比较并输出较小值,可以使用if-else语句实现。同时要求在主模块中实现三个输入数值的大小比较,假设三个输入变量为a,b,c。则可以先比较得到a,b中的较小值m,再得到b,c之中的较小值n。最后比较m,n的大小,输入较小值,即可得到a,b,c的最小值。

    Verilog HDL中,在声明过程中,主模块和子模块在声明方式上没有差别,都是以module开始,endmodule结束。当在一个模块中例化另外一个模块,则后者成为前者的子模块。题目要求编写一个模块,比较两个数值的大小,并输出较小值,该模块本身可以独立完成功能,通过在主模块中例化可以配合其他语句完成更丰富的功能。

    模块的例化需要指定例化的模块名称和端口连接关系,对于没有使用的端口,可以不列出。例化模板如下:

    1. module_a a_inst(
    2. .data_a(data_m),
    3. .data_b(data_n)
    4. );

    module_a是子模块的模块名,a_inst是例化之后的子模块名,当多次例化同一个模块,需要使用不同的例化模块名称。端口列写于括号之中,.data_a(data_a),前一个data_a是子模块的端口名称,括号中的data_m是存在于主模块的信号名,表示子模块的data_a连接到主模块的data_m。题目要求实现输出三个输入的最小值。以a,b,c为例,可以先比较a.b,得到其中的较小值d,再比较得到c,d的较小值e。最后比较d,e的大小,得到最小值。可以按照如下的方式例化。

    1. `timescale 1ns/1ns
    2. module main_mod(
    3. input clk,
    4. input rst_n,
    5. input [7:0]a,
    6. input [7:0]b,
    7. input [7:0]c,
    8. output wire [7:0]d
    9. );
    10. wire [7:0] m, n ;
    11. //先得到ab之中的较小值m
    12. sub_mod mod_ab(
    13. .clk(clk),
    14. .rst_n(rst_n),
    15. .data_a(a),
    16. .data_b(b),
    17. .data_c(m)
    18. );
    19. //先得到ac之中的较小值n
    20. sub_mod mod_bc(
    21. .clk(clk),
    22. .rst_n(rst_n),
    23. .data_a(b),
    24. .data_b(c),
    25. .data_c(n)
    26. );
    27. //最后对比mn的大小
    28. sub_mod mod_mn(
    29. .clk(clk),
    30. .rst_n(rst_n),
    31. .data_a(m),
    32. .data_b(n),
    33. .data_c(d)
    34. );
    35. endmodule
    36. module sub_mod(
    37. input clk,
    38. input rst_n,
    39. input [7:0] data_a,
    40. input [7:0] data_b,
    41. output reg [7:0] data_c
    42. );
    43. always @ (posedge clk or negedge rst_n) begin
    44. if (~rst_n) data_c <= 0 ;
    45. else if (data_a > data_b) data_c <= data_b ;
    46. else data_c <= data_a ;
    47. end
    48. endmodule
  • 相关阅读:
    用好 DIV 和 API,在前端系统中轻松嵌入数据分析模块
    Troubleshooting 专题 - 问正确的问题 得到正确的答案
    如何搭建Linux环境
    ELK之Logstash启动异常:Logstash could not be started because there is already...
    CPP-Templates-2nd--第 22 章 桥接 static 和 dynamic 多态
    Flutter笔记:聊一聊依赖注入(上)
    【k8s资源调度-StatefulSet】
    Midjourney-01 初试上手 注册使用并生成你的第一张AI图片 详细流程 提示词 过程截图 生成结果 付费文生图的天花板!
    Spring原理
    第五章 目标检测中K-means聚类生成Anchor box(工具)
  • 原文地址:https://blog.csdn.net/m0_54689021/article/details/134286096