信号用wire类型还是reg类型定义

        wire类型就是一根线,线有两端,一端发生改变,经过线传递的信号当然也会发生改变,reg类型则不同,可以把reg类型理解为存储数据的寄存器,当满足一定条件时,数值才被激活发生改变。

那么,信号和输入输出端口何时用wire类型,何时使用reg类型呢?请看下图:

首先介绍一下模块的内部和外部,见代码:

module led_breath(//模块外部input	wire	rst_n,input	wire	clk,output	reg	    led);//模块内部reg	[15:0]	timer	[2:0];reg	[1:0]	breath_type;endmodule

        输入输出(input output)端口常定义于模块的外部(我认为是额外定义的,即input output端口也属于信号),用于和其他模块交互,最终需要我们配置相关的约束文件,将引脚和他们相连进而运行代码。在括号之外的属于模块的内部的信号,属于模块的内部逻辑实现部分。

        所以对于模块内部来说,端口定义为wire或reg信号就比较好理解:我认为就可以把它们看作是变量,wire类型就是需要一次次assign赋值,例如说:规定了呼吸灯闪烁的频率为 wire 类型等于1/T,reg类型就是在always循环中自动赋值,例如说:reg类型,计时器当每次时钟翻转的时候激活,使加一。
        这也是很多教程所说的连续赋值(例如assign)是wire类型,过程赋值(例如always)是reg类型

        那么对于模块外部来说,input端口不是模块能改变的,只能接收外部引脚的输入所以只能定义为wire类型,对于output端口来说,模块可以让信号经过内部不同的操作之后,输出自己想要的值,所以可以定义为wire或reg类型,原理类似于模块内部的wire和reg类型。

        可以尝试着看以下代码:因为需要output端口的信号在模块中的操作不同,所以定义的wire/reg类型也就可以不同。

module example_module(input [3:0] a,         // 输入端口,隐含 wire 类型input [3:0] b,         // 输入端口,隐含 wire 类型output reg [3:0] sum,  // 输出端口定义为 reg 类型,因为它在 always 块中被赋值output wire carry      // 输出端口定义为 wire 类型,因为它是通过 assign 驱动的
);// 内部信号wire [4:0] result;  // result 是一个内部信号,用于存储加法结果// 组合逻辑assign result = a + b;// 时序逻辑,用于生成 sumalways @(*) beginsum = result[3:0];  // 在 always 块中赋值,sum 必须是 reg 类型end// 组合逻辑生成 carryassign carry = result[4];  // carry 是通过 assign 语句赋值,因此是 wire 类型endmodule

        总的来说,在模块内部,需要进行什么样的操作,就定义什么类型的信号(wire/reg),在模块外部,定于input端口就使用wire类型,定义ouput端口,原理类似于模块内部,根据信号的操作定义wire或者reg信号。

        本文权当记录自己对于verilog中wire类型和reg类型的理解。如有错误请一定指出,感谢阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/439070.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI论文精读1】针对知识密集型NLP任务的检索增强生成(RAG原始论文)

目录 一、简介一句话简介作者、引用数、时间论文地址开源代码地址 二、摘要三、引言四、整体架构(用一个例子来阐明)场景例子:核心点: 五、方法 (架构各部分详解)5.1 模型1. RAG-Sequence Model2. RAG-Toke…

【Conda】修复 Anaconda 安装并保留虚拟环境的详细指南

目录 流程图示1. 下载 Anaconda 安装程序2. 重命名现有的 Anaconda 安装目录Windows 操作系统Linux 操作系统 3. 运行新的 Anaconda 安装程序Windows 操作系统Linux 操作系统 4. 同步原环境使用 robocopy 命令(Windows)使用 rsync 命令(Linux…

C++11新特性(基础)【2】

目录 1.范围for循环 2.智能指针 3.STL中一些变化 4.右值引用和移动语义 4.1 左值引用和右值引用 4.2 左值引用与右值引用比较 4.3 右值引用使用场景和意义 4.4 右值引用引用左值及其一些更深入的使用场景分析 4.5 完美转发 1.范围for循环 int main() {int array[10] { 1,2,3,4…

超声波清洗机哪个品牌的最好?爆款超声波清洗机测评大揭秘

面对超声波清洗机的选购疑虑,许多朋友或是担心其效用不实,落入消费陷阱,或是已经遭遇了不尽如人意的产品体验。对此,我分享的经验或许能为你指点迷津!基于亲测超过二十几款市面上热门的超声波眼镜清洗机,我…

Rust 做桌面应用这么轻松?Pake 彻底改变你的开发方式

Rust 做桌面应用这么轻松?Pake 彻底改变你的开发方式 网页应用装不下了?别担心,Pake 用 Rust 帮你打包网页,快速搞定桌面应用。比起动不动就 100M 的 Electron 应用,它轻如鸿毛,功能却一点都不少&#xff0…

JavaScript 数组方法

数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。两端的方括号是数组的标志。 var a["a","b","c"]; 除了在定义时赋值,数组也可以先定义后赋值。 var arr[];arr[1]"a"…

数据流和数据流处理技术

一数据流 首先明确数据流概念:数据流是连续不断生成的、快速变化的无界数据序列 数据流类型: 数据流大致可以分为四种类型 1.连续型数据流:不断地产生数据,数据稳定速度输入系统。 2.突发型数据流:在某特定时间或…

【通配符】粗浅学习

1 背景说明 首先要注意,通配符中的符号和正则表达式中的特殊符号具备不同的匹配意义,例如:*在正则表达式中表示里面是指匹配前面的子表达式0次或者多次,而在通配符领域则是表示代表0个到无穷个任意字符。 此外,要注意…

IDEA 配置 Git 详解

本文将介绍在IntelliJ IDEA 中如何配置Git 没有安装配置 Git 的可以参考我的这篇文章:安装配置 Git 一、操作环境及准备 1.win 10 2.已安装且配置了Git 3.有Gitee账户 4.安装了IntelliJ IDEA 2023.2.1 5.全程联网 二、配置步骤 2.1 配置git 1.采用全局设置&…

基于SpringBoot+Vue+MySQL的装修公司管理系统

系统展示 管理员后台界面 员工后台界面 系统背景 随着信息技术的快速发展,装修行业正面临数字化转型的关键时刻。传统的装修管理方式存在信息管理混乱、出错率高、信息安全性差等问题,已无法满足现代市场的需求。因此,开发一套高效、便捷的装…

Gaussian-splatting 项目环境配置笔记(Win11)

如果你是配置别的项目的过程中用到了3D GS相关的内容,然后这部分内容环境一直配不好,也可以跟随这个博客配一下环境,配完后起码3D GS部分就搞定了。 文章目录 概述项目链接:VS2019直接下载链接CUDA不同版本下载链接安装Condasetup…

谷歌收录批量查询,谷歌收录批量查询的简单方法

谷歌收录批量查询是网站管理员和SEO优化人员常见的需求,以下提供几种简单且高效的批量查询方法: 一、使用Google Search Console(谷歌搜索控制台) 注册并验证网站: 首先,确保你已经在Google Search Conso…

【JVM】垃圾释放方式:标记-清除、复制算法、标记-整理、分代回收

文章目录 1. 标记-清除2. 复制算法4. 标记-整理4. 分代回收 把标记为垃圾的对象的内存空间进行释放。主要有三种释放方式 1. 标记-清除 把标记为垃圾的对象,直接释放掉(最朴素的做法) 此时就是把标记为垃圾的对象所对应的内存空间直接释放。…

Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误

Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误 前言一、WinRiver II 测量项目 MMT 文件的结构二、WinRiver II 无法打开或操作测量项目 MMT 文件2.1 无法载入船测多线法测量文件2.2 可以载入测验项目 MMT 文件,但 ADCP 后处理软件无法写入信息2.3…

【数学分析笔记】第4章第4节 复合函数求导法则及其应用(2)

4. 微分 4.4 复合函数求导法则及其应用 【例4.4.3】 y e 1 cos ⁡ x ye^{\sqrt{1\cos x}} ye1cosx ​,求 y ′ y y′ 【解】 y ′ e 1 cos ⁡ x ⋅ 1 2 1 cos ⁡ x ⋅ ( − sin ⁡ x ) − sin ⁡ x 2 1 cos ⁡ x e 1 cos ⁡ x ye^{\sqrt{1\cos x}}\cdot\f…

JavaScript 中最快的循环是什么?

无论使用哪种编程语言,循环都是一种内置功能。JavaScript 也不例外,它提供了多种实现循环的方法,偶尔会给开发人员带来困惑:哪一种循环才是最快的? 以下是Javascript中可以实现循环的方法: For Loop While …

Pikachu- Over Permission-垂直越权

以admin 账号登陆,添加一个用户; 把添加用户的这个请求发送到 repeater; 退出admin,使用普通用户pikachu登陆; 只有查看权限; 使用pikachu 用户的认证信息,替换repeater处管理员创建用户请求的…

0基础学前端 day6 -- 搭建github pages静态网址

标题:如何通过 GitHub Pages 创建一个静态网站 GitHub Pages 是 GitHub 提供的一项免费服务,允许用户从 GitHub 仓库中托管静态网站。对于开发者和非开发者来说,这都是一个极其便利的工具,用于创建和发布个人博客、项目文档或作品…

Redis中GEO数据结构实现附近商户搜索

Redis的版本必须是6.2以上 在测试类中将数据导入Redis Testvoid loadShopData(){//1.查询店铺信息List<Shop> list shopService.list();//2.把店铺分组&#xff0c;按照typeId分组&#xff0c;typeId一致的放到一个集合Map<Long, List<Shop>> map list.s…

在vscode在使用idea编辑器的快捷键

在vscode在使用idea编辑器的快捷键 在vscode扩展在搜索idea key结果如下&#xff1a; 选择IntelliJ IDEA Keybindings安装&#xff08;注意作者是Keisuke Kato&#xff09;&#xff0c;安装后就可以在vscode编辑器中使用idea编辑器的快捷键。