Verilog模块概念和实例化

模块的概念

模块(module)是verilog最基本的概念,是v设计中的基本单元,每个v设计的系统中都由若干module组成。

1、模块在语言形式上是以关键词module开始,以关键词endmodule结束的一段程序。

2、模块的实际意义是代表硬件电路上的逻辑实体

3、每个模块都实现特定的功能。

4、模块的描述方式有行为建模结构建模之分。

5、模块之间是并行运行的。

6、模块是分层的,高层模块通过调用、连接低层模块的实例来实现复杂的功能。

7、各模块连接完成整个系统需要一个顶层模块(top-module)。

无论多么复杂的系统,总能划分成多个小的功能模块。系统的设计可以按照下面三个步骤进行:

(1)把系统划分成模块;

(2)规划各模块的接口;

(3)对模块编程并连接各模块完成系统设计。

模块的结构

module <模块名>(<端口列表>);

<定义>

<模块条目>

endmodule

其中:

<模块名>是模块唯一的标识符;

<端口列表>是输入、输出和双向端口的列表,这些端口用来与其他模块进行连接。

<定义>是一段程序,用来指定数据对象为寄存器型、存储器型、线型以及过程块,诸如函数块和任务块;

<模块条目>也是一段程序,将上面<定义>和<端口>组合起来,是说明这个模块要做什么的语句;

endmodule之后没有分号。

模块的调用

在做模块划分时,通常会出现这种情形:某个大的模块中包含了一个或多个功能子模块。verilog是通过模块调用或称为模块实例化的方式来实现这些子模块与高层模块的连接的。

调用模块实例的一般形式为:

<模块名><参数列表><实例名>(<端口列表>);

module_nameinstance_name(port_associations) ;

其中参数列表是传递到子模块的参数值,参数传递的典型应用是定义门级时延。

信号端口可以通过位置名称关联;但是关联方式不能够混合使用。

port_expr          //位置关联

.PortName (port_expr)      //名称关联

定义模块:module Design(端口1,端口2,端口3……);

1)引用时,严格按照模块定义的端口顺序来连接,不用标明原模块定义时规定的端口名。

Design u_1(u_1的端口1,u_1的端口2,u_1的端口3,u_1的端口……);//和Design对应

2)引用时用”.”符号,标明原模块定义时规定的端口名:

Design u_2(    .(端口1(u_1的端口1),

.(端口2(u_1的端口2),

.(端口3(u_1的端口3),

……  );  //建议:在例化的端口映射中采用名字关联,这样,当被调用的模块管脚改变时不易出错。

eg.

module and (C,A,B);

input A,B;

output C;

...

and A1 (T3,A,B); //实例化时采用位置关联,T3对应输出端口C,A对应A,B对应B。

and A2 (     .C(T3),

.A(A),

.B(B) );//实例化时采用名字关联,.C是and器件的端口,其与信号T3相连

port_expr 可以是以下的任何类型:

1) 标识符(reg 或net )如 .C(T3),T3 为wire 型标识符。

2) 位选择,如 .C(D[0]),C 端口接到D 信号的第0bit 位。

3) 部分选择,如 .Bus (Din[5:4])。

4) 上述类型的合并,如 .Addr({ A1,A2[1:0]}。

5) 表达式(只适用于输入端口),如 .A (wire Zire = 0 )。

参数传递:引用模块时,注意对运用参数编写的模块的灵活引用。

eg.

module Decoder(A,F);

parameterWidth=1,Polarity=1;

…….

endmodule

引用时:

module Top;

wire[3:0] A4;

wire[4:0] A5;

wire[15:0] F16;

wire[31:0] F32;

Decoderu_D1(A4,F16);    //u_D1使用默认参数,Width为1,Polarity为1

Decode #(4,0) u_D2(A4,F16);   //u_D2的Width为4,Polarity为0

#(4,0)这个参数改变方法是内容对应于被引用的module的,参数的改变还可以像module的引用一样使用”.”:

module_name #( .parameter_name(para_value),.parameter_name(para_value)) inst_name (port map);

悬空端口的处理

在实例化中,可能有些管脚没用到,可在映射中采用空白处理。

eg.

DFF d1 (     .Q(QS),

.Qbar ( ),

.Data (D ) ,

.Preset ( ), // 该管脚悬空

.Clock (CK) ); //名称对应方式。

输入管脚悬空,该管脚输入为高阻 Z,

输出管脚悬空,该管脚废弃不用。

Verilog模块概念和实例化#转载自Jason from Lofter的更多相关文章

  1. 如何将自己写的verilog模块封装成IP核

    如何将自己写的verilog模块封装成IP核 (2014-11-21 14:53:29) 转载▼ 标签: 财经 分类: 我的东东 =======================第一篇========= ...

  2. 利用python自动生成verilog模块例化模板

    一.前言 初入职场,一直忙着熟悉工作,就没什么时间更新博客.今天受“利奇马”的影响,只好宅在家中,写写技术文章.芯片设计规模日益庞大,编写脚本成了芯片开发人员必要的软技能.模块端口动不动就几十上百个, ...

  3. [转]System Verilog的概念以及与verilog的对比

    原文地址: http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证语 ...

  4. System Verilog的概念以及与verilog的对比

    以下内容源自:http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证 ...

  5. FPGA小白学习之路(1) System Verilog的概念以及与verilog的对比(转)

    转自CSDN:http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证 ...

  6. 理解前端模块概念:CommonJs与ES6Module

    前言 现代前端开发每时每刻都和模块打交道.例如,在项目中引入一个插件,或者实现一个供全局使用组件的JS文件.这些都可以称为模块. 在设计程序结构时,不可能把所有代码都放在一起.更为友好的组织方式时按照 ...

  7. Verilog 模块参数重定义(转)

    Verilog重载模块参数: 当一个模块引用另外一个模块时,高层模块可以改变低层模块用parameter定义的参数值,改变低层模块的参数值可采用以下两种方式: 1)defparam 重定义参数语法:d ...

  8. Cesium原理篇:6 Render模块(6: Instance实例化)

    最近研究Cesium的实例化,尽管该技术需要在WebGL2.0,也就是OpenGL ES3.0才支持.调试源码的时候眼前一亮,发现VAO和glDrawBuffers都不是WebGL1.0的标准函数,都 ...

  9. Javascript模块化编程(一):模块的写法 (转载 学习中。。。。)

    转载地址:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 阮一峰 大神:http://www.ruanyifeng.com/ ...

随机推荐

  1. Google研发面试题

    今天很开心找到了一个很不错的研发面试题,很考验临时反应能力,特地拿出来和大家分享一下此题以及自己做该题的心得体会!!! 题目: 总共有12个外表都一样的金属球,其中有11个球的重量是相同的,1个球的重 ...

  2. SPDK发送和接收连接请求的处理

    因工作需要分析了部分SPDK代码,主要梳理login请求以及响应的处理,供参考. 参考代码——SPDK代码实现(以PLOGI为例): SPDK处理PLOGI分为三个阶段: 第一阶段通过一条GET_PA ...

  3. Flink 从 0 到 1 学习 —— 如何自定义 Data Source ?

    前言 在 <从0到1学习Flink>-- Data Source 介绍 文章中,我给大家介绍了 Flink Data Source 以及简短的介绍了一下自定义 Data Source,这篇 ...

  4. 4.Linux文件管理相关命令(上)

    1.复制命令cp cp - copy files and directories 拷贝 文件 和 目录 -r 递归复制,通常用来复制目录 -p 保持复制源文件的属性 -v 显示复制的过程 1. 将当前 ...

  5. 3M隔音耳罩拆分、清洗教程

    简介 3M隔音耳罩用起来真爽,十分适合喜欢安静的人.再者,被动和别人同住(学校.厂里宿舍.公司宿舍).公共场合时使用,效果刚刚的.题外话:有些人的素质……%¥%(*¥*! 3M隔音耳罩平时戴着也没觉得 ...

  6. 前端Vue框架-vuex状态管理详解

    新人报道!多多关照-多提宝贵意见 谢谢- vuex理解 采用集中式存储管理模式.用来管理组件的状态,并以自定义规则去观测实时监听值得变化. 状态模式管理理解 属性 理解 state 驱动应用的数据源 ...

  7. 使用cordova + vue搭建混合app框架

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/zxj0904010228/article ...

  8. 中国大学MOOC-数据结构与算法实战 P6 括号匹配 (15 分)

    检查一段C语言代码的小括号( ). 中括号 [ ] 和大括号{ } 是否匹配. 输入格式: 在一行中输入一段C语言代码,长度不超过1000个字符(行末以换行符结束). 输出格式: 第一行输出左括号的数 ...

  9. Redis(五)持久化

    一.RDB RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发. 1.触发机制 (1)手动触发:save命令和bgsave命令 save命令:阻塞当前Re ...

  10. Apache Solr Velocity模板注入RCE漏洞复现

    Apache Solr Velocity模板注入RCE漏洞复现 一.Apache Solr介绍 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于web-service的API接口,用户可以通 ...