当前位置: 首页 > news >正文

FPGA学习篇——Verilog学习5(reg,wire区分及模块例化)

1 何时用reg,何时用wire?

这个我找了一些网上的各种资料,大概说一下自己的理解,可能还不太到位...

wire相当于一根线,是实时传输的那种,而reg是一个寄存器,是可以存储数据的,需要立刻感受,或者说实时传输的则用wire,需要暂时用一个存放工作的则用reg。

比如:

initial语句我们常用于赋初值,那么,传进来的输入数据就需要暂时存放赋初值,之后才能进行电平的变化,因此,要用reg。

而在任意一个模块输入时,追求一个真实性,需要实时的传输数据,故则用一个wire类型。


以下列出了常用wire和reg的情况:

  • always和initial 过程块中被赋值的变量必须是 reg 、,用 assign 连续赋值的对象必须定义成 wire。(端口定义常常在前面,若后续用到这些语句时,前面的端口就要定义特定的类型)
  • 元件例化时候的输出必须用wire。
  • 子模块输入时用wire。
  • inout类型只能用wire。

该图引用于博主“数码逐渐远去”
                        
原文链接:https://blog.csdn.net/kofiliu2018/article/details/128260502

2 模块例化

在我看来,模块例化就相当于C语言中函数调用。

在C语言中,我们常常写到main函数和一些其他功能的函数,而在Verilog里面就有一个顶层模块和子模块的概念:main函数就相当于顶层模块,其他功能的函数就相当于子模块。

再形象生动一点,我们学习数电的时候画的一些电路,子模块就相当于你使用的一个个与门,非门等等,顶层模块就相当于把这些门连起来,将顶层模块里端口与每个门对应的输入输出相连接的这个过程就可以理解为模块例化。

2.1 模块例化语法:

模块例化有两种方法,命名端口连接和顺序端口连接。

2.1.1 命名端口连接

将顶层模块中的端口与子模块中的对应端口用名字直接相连。

这种连接方式可不按照子模块各端口定义的顺序。

要例化的模块名  给例化的模块重新名

       . 子模块的端口名对应要连接的顶层模块的端口名字),

       .子模块的端口名对应要连接的顶层模块的端口名字),    

       ...

);

  其中,“.”可理解为将两个端口连接的意思。

给个例子来理解上述语法:

子模块:                              

模块例化:

                          

2.1.2 顺序端口连接

顺序端口连接只需要打出顶层模块端口名即可按照子模块中各端口对应的顺序进行连接,因此,要注意顶层模块端口名的摆放顺序,才能实现对应端口相连

要例化的模块名  给例化的模块重新名顶层模块的端口名字顶层模块的端口名字顶层模块的端口名字...);

同样,由2.1.1的子模块,改为顺序端口连接的方式来例化:

2.1.3 用generate简化多次重复例化情况

当需要多次进行相同的例化时,可用generate来实现

常见的有generate搭配for循环语句使用:


genvar i;
generate
    for ( 条件 ) begin

          ....

    
   );
    end
endgenerate


PS:...处内容及上述例化括号内的内容。

以下是实现一个全加器的代码例子:

   genvar  i ;generatefor(i=0; i<4; i=i+1) beginfull_adder1  u_adder(.Ai     (a[i]),.Bi     (b[i]),.Ci     (co_temp[i-1]), //上一个全加器的溢位是下一个的进位.So     (so[i]),.Co     (co_temp[i]));endendgenerate


 注:以上为学习网上各类资源经验所得,如有侵权,请联系我,欢迎指正!


http://www.mrgr.cn/news/93725.html

相关文章:

  • 大数据_数仓建模_八股
  • 考研机试常见基本题型
  • 蓝桥杯嵌入式组第七届省赛题目解析+STM32G431RBT6实现源码
  • C#模拟鼠标点击,模拟鼠标双击,模拟鼠标恒定速度移动,可以看到轨迹
  • 数据结构第五节:二叉搜索树(BST)的基本操作与实现
  • RuoYi框架添加自己的模块(学生管理系统CRUD)
  • [Linux]进程
  • 在IDEA中进行git回滚操作:Reset current branch to here‌或Reset HEAD
  • 代码随想录算法营Day59,61 | 寻找存在的路径, 冗余连接,冗余连接II
  • SpringBoot集成MQ,四种交换机的实例
  • Vue3实战学习(Vue3的基础语法学习与使用(超详细))(3)
  • docker 常用命令教程
  • Ubuntu 下 nginx-1.24.0 源码分析 (1)
  • 【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Servlet 过滤器:实现请求的预处理与后处理
  • VBA 列方向合并单元格,左侧范围大于右侧范围
  • WSL安装及问题
  • Nginx快速安装-Linux-CentOS7
  • 美杜莎:带多个解码头的简单LLM推理加速框架
  • UI自动化测试Selenium安装教程(1)
  • 【Linux内核系列】:深入解析输出以及输入重定向