文章目录

  • 前言
  • 一、题目描述
  • 二、实现思路
    • 1.模块的实例化
      • 1)命名端口连接
      • 2)顺序端口连接
      • 3)端口连接规则
        • 1>对于输入、输出以及输入输出双向口而言
        • 2>对于悬空端口而言
    • 2.具体解题思路
  • 三、代码展示
  • 总结

前言

今天我们做的是第九道题——使用子模块实现三输入数的大小比较,在这道题中我们需要清楚的知识点是如何去声明一个子模块,并且在主模块中将其实例化。接下来我们开始解这道题。使用子模块实现三输入数的大小比较


一、题目描述

在数字芯片设计中,通常把完成特定功能且相对独立的代码编写成子模块,在需要的时候再在主模块中例化使用,以提高代码的可复用性和设计的层次性,方便后续的修改。
请编写一个子模块,将输入两个8bit位宽的变量data_a,data_b,并输出data_a,data_b之中较小的数。并在主模块中例化,实现输出三个8bit输入信号的最小值的功能。

子模块的信号接口图如下:

主模块的信号接口图如下:

输入描述:
clk:系统时钟
rst_n:异步复位信号,低电平有效
a,b,c:8bit位宽的无符号数

输出描述:
d:8bit位宽的无符号数,表示a,b,c中的最小值

二、实现思路

1.模块的实例化

模块的实例化就是在一个模块中引用另一个模块,对其端口进行连接,模块的实例化建立了描述的层次。信号端口可以通过位置名称关联,下面介绍端口的两种连接方式:

1)命名端口连接

这种方法将需要例化的模块端口与外部信号按照其名字进行连接,端口顺序随意,可以与引用 module 的声明端口顺序不一致,只要保证端口名字与外部信号匹配即可。
格式为:

mod_a instance2 (.out(wc),.in1(wa), .in2(wb) );

2)顺序端口连接

这种方法将需要例化的模块端口按照模块声明时端口的顺序与外部信号进行匹配连接。
格式为:

mod_a instance1 ( wa, wb, wc );

3)端口连接规则

1>对于输入、输出以及输入输出双向口而言

从模块外部看

  • input 端口可以连接 wire 或 reg 型变量。
  • output 端口必须连接 wire 型变量
  • inout 端口必须连接wire 型变量

从模块内部看

  • input 端口必须是 wire 型变量。
  • output 端口可以是 wire 或 reg 型变量

2>对于悬空端口而言

模块实例化时,如果某些信号不需要与外部信号进行连接交互,我们可以将其悬空,即端口例化处保留空白即可,上述例子中有提及。

output 端口正常悬空时,我们甚至可以在例化时将其删除。
input 端口正常悬空时,悬空信号的逻辑功能表现为高阻状态(逻辑值为 z)。但是,例化时一般不能将悬空的 input 端口删除,否则编译会报错。

2.具体解题思路

知道如何去实例化一个模块后,我们就要开始写题了,其实这道题还是蛮简单的,但就是有一个比较容易混淆的问题。在我们正常对三个数比较时,其实只需要比较两次就可以了,但在这道题中我们却需要比较三次,因为我们的代码是并行执行的,三个模块是同时实例化的,所以我们需要用两个中间变量 m,n 来存储两次比较的结果,最后 m,n 进行比较得出最终的结果。

三、代码展示

`timescale 1ns/1ns
module main_mod(input clk,input rst_n,input [7:0]a,input [7:0]b,input [7:0]c,output [7:0]d
);wire [7:0]m,n;
//先得到ab之中的较小值m
sub_mod mod_ab(.clk(clk),.rst_n(rst_n),.data_a(a),.data_b(b),.data_c(m));
//先得到ac之中的较小值n
sub_mod mod_bc(.clk(clk),.rst_n(rst_n),.data_a(b),.data_b(c),.data_c(n));
//最后对比mn的大小
sub_mod mod_mn(.clk(clk),.rst_n(rst_n),.data_a(m),.data_b(n),.data_c(d));
endmodulemodule sub_mod(input clk,input rst_n,input [7:0]data_a,input [7:0]data_b,output  reg [7:0]data_c
);
always @(posedge clk or negedge rst_n)if(!rst_n)data_c <= 0;else if(data_a > data_b)data_c <= data_b;else data_c <= data_a;
endmodule

总结

以上就是我在做这道题时的思路,以及代码的编写,如果还有更多更好的解法,欢迎读到这篇文章的朋友们在评论区告诉我,共同进步嘛。

Verilog学习之三输入数的大小比较设计相关推荐

  1. 看图识数辨大小,人类独有的“数字感”被机器无意中学习了

    大数据文摘出品 作者:周素云 还记得从什么时候开始,你学会了看图识数,什么时候开始明白1和2的含义么? 也许我们都记不清了,因为这种直观的数字感是却是人类和动物与生俱来的优势. 与计算机不同的是,当我 ...

  2. oracle dg 增加redo组,【学习笔记】Oracle Data Guard 修改dataguard主库redo组数和大小

    天萃荷净 运维DBA反映检查到Oracle DataGuard环境redo日志较小,总结一下修改dataguard主库redo组数和大小方法 在一个dg环境中,配置的是实时同步,需要增加主库的redo ...

  3. matlab矩阵运算_MATLAB基础学习之三种基本运算

    MATLAB学习之三种运算 MATLAB软件 一.基本算数运算 在MATLAB中有两种矩阵运算:右除/和左除.如果A矩阵是非奇异方阵,则B/A等效于B*inv(A),AB等效于inv(A)*B.注:i ...

  4. verilog学习:加法器

    前言 之前的文章<verilog学习:使用VCS仿真验证一个全加器>,示范了下全加器,这篇文章就展开说一下加法器. 参考的视频有: [老邱数电]半加器与全加器基础 单片机功能这么强,为什么 ...

  5. Verilog学习笔记——入门

    Verilog学习笔记 01 基本逻辑门代码设计与仿真 Veriog基本逻辑门代码结构--以一位反相器为例 ModelSim仿真基本流程 02 组合逻辑代码设计与仿真--多路选择器 二选一逻辑--as ...

  6. Verilog学习脚印4-状态机(串口)

    Verilog学习脚印4-状态机(串口) 附:verilog语法笔记(持续更新ing) 目录 bash命令 串口协议简介(来自B站-北交李金城老师的PPT,侵删) 实例1:串口数据接收 电路原理(来自 ...

  7. C语言学习之输入一个大于三的值判断是否为素数

    C语言学习之输入一个大于三的值判断是否为素数 方法一 #include <stdio.h> int main(){int number,x; //定义变量printf("请输入一 ...

  8. ps如何修改图片大小尺寸_PS新手入门教程:学习如何修改画布的大小

    PS新手入门教程:学习如何修改画布的大小.在photoshop中,可以把画布理解为一张白纸,而我们要处理的图像可以理解为这张白纸表面上的画.我们修改画布的大小时,图像并不会随着画布的大小而整体变大或缩 ...

  9. 智能会议系统(32)---WebRTC学习之三:录音和播放

    WebRTC学习之三:录音和播放 VoiceEngine中与录音和播放相关的头文件有五个,如下表所示: 头文件 包含的类 说明 voe_base.h VoiceEngineObserver Voice ...

最新文章

  1. Nginx的应用之安装配置
  2. matlab写函数进行坐标正反算,基于matlab的坐标正反算
  3. html5游戏制作入门系列教程(二)
  4. PyTorch大更新!谷歌出手帮助开发,正式支持TensorBoard | 附5大开源项目
  5. DataList控件中使用Xml数据源
  6. php gd实现简单图片验证码与图片背景文字水印
  7. IPv4子网划分基础
  8. GitLab+Nornor3.0.0完成CI/CD流水线配置(更新版)
  9. Python3 找200以内的所有素数/质数 | break与continue
  10. C#操作.exe文件
  11. 视频mov如何转换成mp4?
  12. 使用开源人脸特征提取器进行脸部颜值评分
  13. C++实验3-税收计算
  14. 怎么设置cmd 以管理员身份运行
  15. 数据结构---散列表(哈希表)链地址法
  16. 小米手机运行linux,在小米4手机安装Linux deploy,然后安装kali linux,但过程中出现如图所示問題...
  17. 虚幻4场景渲染源码分析概述
  18. 华硕EZ模式下安装windows10成功方法总结
  19. 查找论文和代码实现的网站
  20. 12V升30V大功率2x100W双声道D类音频功放升压组合解决方案

热门文章

  1. 10个小时、120个项目,AI创业者的行业淘汰赛已经开始
  2. DAY6 for循环
  3. Springboot 根据数据库表自动生成实体类和Mapper,只需三步
  4. Research Paper 论文写作 | 写好 Discussion
  5. 360健康完成1亿元A轮融资 亚洲基金和软银中国参投
  6. 材料与工程学科相关软件
  7. 360手机刷机 360手机Magisk面具安装与使用教程
  8. 将archlinux 2013-06-01版,安装配置为个人工作站
  9. PID控制算法实践应用(二):位置式PID控制算法的C语言实现
  10. JAVA中十六进制与字符串的转换