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

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 ;
    generate
        for(i=0; i<4; i=i+1) begin
        full_adder1  u_adder(
            .Ai     (a[i]),
            .Bi     (b[i]),
            .Ci     (co_temp[i-1]), //上一个全加器的溢位是下一个的进位
            .So     (so[i]),
            .Co     (co_temp[i]));
        end
    endgenerate


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


http://www.kler.cn/a/576991.html

相关文章:

  • 大数据表高效导入导出解决方案,mysql数据库LOAD DATA命令和INTO OUTFILE命令详解
  • AORO P9000 PRO三防平板携手RTK高精度定位,电力巡检效率倍增
  • ShardingSphere 和 Spring 的动态数据源切换机制的对比以及原理
  • 解决电脑问题(5)——鼠标问题
  • 后门攻击仓库 backdoor attack
  • 计算机毕业设计SpringBoot+Vue.js制造装备物联及生产管理ERP系统(源码+文档+PPT+讲解)
  • 基于Asp.net的驾校管理系统
  • Windows 远程桌面多端口访问,局域网虚拟IP映射多个Windows 主机解决方案
  • 使用 Docker 部署 Nginx,配置后端 API 轮询与多个子域名前端应用
  • RHCE9.0版本笔记4:聚焦网络安全基础技术
  • 头歌作业-mysql数据库系统(全部)
  • 【Json RPC框架】框架介绍与环境搭建(Ubuntu 22.04)
  • 解决电脑问题(3)——显示器问题
  • AArch64架构及其编译器
  • Wpf-ReactiveUI-Usercontrol与主界面交互
  • 国密SSL证书如何为企业筑牢安全防线?
  • Python函数自学指南:从基础到高级(第三天)
  • Redis为什么要自定义序列化?如何实现自定义序列化器?
  • 引用细讲解
  • DeepSeek使用教程--教师领域方面的提示词库