当前位置: 首页 > 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 ;
    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


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

相关文章:

  • 【洛谷P1080国王游戏】2025-3-7
  • K8S学习之基础十三:k8s中ReplicaSet的用法
  • VUE3开发-4、组件引入
  • 《A++ 敏捷开发》- 18 软件需求
  • java 重点知识 — JVM存储模块与类加载器
  • js基本功(五)
  • 【Linux网络#13】:网络层(IP 协议 网络通信 全球网络 路由转发)
  • STM32F4 UDP组播通信:填一填ST官方HAL库的坑
  • 【JAVA架构师成长之路】【电商系统实战】第12集:秒杀系统性能优化实战(CAN + Nginx + Sentinel)
  • Myslq表的内外连接
  • tomcat安装
  • [数据抓取] Python 网络爬虫 - 学习手册
  • WIFI ESP8266以及基础功能介绍
  • Python环境安装(3.8)
  • C++学习之格斗小游戏综合案例
  • 线性代数--矩阵基本计算(加减乘法)
  • Linux 配置静态 IP
  • el-table(elementui)表格合计行使用以及滚动条默认样式修改
  • 【动态规划 矩阵快速幂】P8624 [蓝桥杯 2015 省 AB] 垒骰子|普及+
  • Zypher Network :基于零知识证明方案为 AI 赋予可信框架
  • php网站开发是什么意思/电商运营
  • 系统开发生命周期法/百度推广优化是什么意思
  • 天津市做网站的公司有哪些/seo标题优化关键词
  • 什么牛网站建设/企业营销管理
  • 网站前端设计公司/优化大师官方免费
  • 网站建设鸿儒/做网站哪家好