在写FPGA代码进行参数类型定义时,对于写reg还是wire常常叫人迷惑,下面我将分为以下三种情况,详细解释如何定义参数类型

目录

一 、输入输出定义

二 、例化定义

三 、 仿真定义


一 、输入输出定义

输入输出定义是指,在写程序的时候,向各个程序模块里面输入和输出某些参数,例如下面的流水灯程序,PLL,time,water_led三个模块分别有不同的输入输出

针对这种情况应该这样定义

input 都为wire型;

output 若在always块下定义为reg型,写作output reg xxxxx

(不加reg默认wire,不用写output wire xxxx)

(原因:在设计中,输入信号一般来说你是不知道上一级是寄存器输出还是组合逻辑输出,那么对于本级来说就是一根导线,也就是wire型。而输出信号则由你自己来决定是寄存器输出还是组合逻辑输出,wire型、reg型都可以。always块下面进行赋值时,参数相当于被寄存器寄存,所以需要写reg型)

二 、例化定义

这种情况是指,top层汇总各个模块时进行的例化,如上面的图就是system上需要例化PLL,time,water_led三个模块

针对这种情况应该这样定义:

首先top层的输入和输出依然按照上面的定义方法写

把不包含在输入输出里的参数(如上面的图就是clk_25m,locked,time_en)挑出来,写wire型

(原因:例化时,可以把里面的参数都当做信号线,只有连接作用)

三 、 仿真定义

这种情况是指在写TB文件的时候进行参数定义

首先说一下写TB文件的过程,TB文件可以测试小模块也可以测试top层,比如我要测试time模块,那么我就需要把time模块的输入输出复制到TB文件里面,也就是module后面的(....);

复制过去按照例化的步骤进行例化

先将模块里面为input的变量写reg型,为output的变量写wire型

(注意不要忘写位宽,reg[ x:x]  wire[ x:x])

但是有些时候会报错,所以按照上面的方法写完之后需要进行一些检测修改:

TB文件里面的参数在initial进行赋值的写reg型,其他的写wire型

然后就没有问题了


输入输出定义,例化定义,仿真定义已经几乎包含了FPGA里面所有的参数定义情况,按照我上面的方法定义不会有问题,下面来介绍一下原理:

Verilog 中变量的物理数据分为线型和寄存器型,线型数据包括wire,wand,wor等几种类型,其中wire最常用,对应于实际的数字电路,线型wire实际上就对应着硬件的连线,起到连接作用。寄存器是存储单元的抽象,寄存器数据类型的关键字是reg。常用来表示always模块内的指定信号,代表触发器。在always模块内被赋值的每一个信号都必须定义成reg型。

所以reg相当于存储单元,wire相当于物理连线

在需要赋值计算的时候就用reg,只是连接作用就用wire

FPGA参数定义 regwire 详解相关推荐

  1. linux mount命令参数及用法详解

    linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...

  2. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  3. python 参数拼接token_对python的unittest架构公共参数token提取方法详解

    额...每个请求都有token值的传入,但是token非常易变,一旦变化,所有的接口用例都得改一遍token,工作量太大了... 那么有没有一种方法能把token提取出来,作为一个全局变量,作为一个参 ...

  4. java怎么跟qtp脚本传参数_QTP多个Action之间传递参数的方法详解

    脚本的朋友们都会碰到多个Action之间传递参数的问题,想当年我也是研究了好久才成功的,网上虽然有很多文章都在讲这个问题,但是大多都是雷同的抄来抄去不能解决实际问题,也有可能是我太笨了吧.下面我们来详 ...

  5. 笔记 | 百度飞浆AI达人创造营:深度学习模型训练和关键参数调优详解

    笔记 | 百度飞浆AI达人创造营:深度学习模型训练和关键参数调优详解 针对特定场景任务从模型选择.模型训练.超参优化.效果展示这四个方面进行模型开发. 一.模型选择 从任务类型出发,选择最合适的模型. ...

  6. 深度学习模型训练和关键参数调优详解

    深度学习模型训练和关键参数调优详解 一.模型选择 1.回归任务 人脸关键点检测 2.分类任务 图像分类 3.场景任务 目标检测 人像分割 文字识别 二.模型训练 1.基于高层API训练模型 加载数据集 ...

  7. java方法怎么写_java方法定义格式详解,java方法怎么写?

    对于java方法你了解多少呢?你知道java方法应该如何写吗?下面要给大家介绍的就是和java方法相关的内容,一起来了解一下这个概念吧. 在学习运算符的时候,都为每个运算符单独的创建一个新的类和mai ...

  8. Unity Shader中各部分定义内容详解

    Unity Shader中各部分定义内容详解 样板 Shader "Practice/Unlit/SimpleUnlit" {Properties{_MainTex (" ...

  9. python中的sep参数_Python sep参数使用方法详解

    Python sep参数使用方法详解 这篇文章主要介绍了Python sep参数使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Pyth ...

  10. sort+参数+linux,linux sort下令参数及用法详解

    linux sort命令参数及用法详解 功能说明:将文本文件内容加以排序. 语 法:sort[-bcdfimMnr][-o][-t][+-][--help][--verison][文件] 补充说明:s ...

最新文章

  1. 《Android App开发入门:使用Android Studio 2.X开发环境》——导读
  2. 嵌入式linux系统,给WIFI模块增加一个开关
  3. javaweb里边的重定向与转发的区别
  4. AUTOSAR从入门到精通100讲(二十五)-AutoSar架构中的Methodology
  5. 应用软件使计算机的内存分配更合理,应用软件使计算机的内存分配更合理,运行更加稳定()...
  6. 壮观霉素抗性基因原理_基因组学深入挖掘·研究方案(下篇)
  7. aidl使用_Android进阶之AIDL如何使用自定义类型
  8. c1和c2语言水平,为什么驾校不建议考C2,驾驶证C1和C2的区别
  9. java应用程序怎样获取外接设备信号 通过usb
  10. (47)FPGA面试题LATCH和DFF的区别
  11. 【java笔记】线程状态
  12. R语言预测初步(R语言预测实战-节选)
  13. fullPage最后一屏自适应
  14. 图书管理系统的结构流程图
  15. 江苏省×××局数据复制软件招标
  16. Airbnb产品数据分析
  17. Win10下的WSL(Linux子系统)开发环境搭建(PHP+Nginx+Mysql+Composer)
  18. 2021年广西省安全员C证免费试题及广西省安全员C证考试试卷
  19. 20172323 2017-2018-2 《程序设计与数据结构》第九周学习总结
  20. linux中各目录的意思,linux各个目录的意思?

热门文章

  1. C/C++指针详解(经典,非常详细)
  2. SpringBoot笔记(五)Linux系统与项目部署
  3. mysql语句解决查询乱码_sql命令查询出现乱码的解决方法详解
  4. 格式工厂 wav 比特率_这可能是 Mac 上最强格式转换工具
  5. 腾讯android一键root工具,腾讯一键Root工具
  6. SH-SSS丨《ISSD: 基于迭代式语音分离的说话人日志系统》论文线上分享
  7. 校友厅——只有一层的“校友楼”
  8. 阿尔伯塔计算机硕士要求,阿尔伯塔大学计算机硕士专业介绍
  9. 巴菲特致股东的一封信:1990年
  10. 用无线热点入门树莓派4详解