Verilog模块概念和实例化#转载自Jason from Lofter
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的更多相关文章
- 如何将自己写的verilog模块封装成IP核
如何将自己写的verilog模块封装成IP核 (2014-11-21 14:53:29) 转载▼ 标签: 财经 分类: 我的东东 =======================第一篇========= ...
- 利用python自动生成verilog模块例化模板
一.前言 初入职场,一直忙着熟悉工作,就没什么时间更新博客.今天受“利奇马”的影响,只好宅在家中,写写技术文章.芯片设计规模日益庞大,编写脚本成了芯片开发人员必要的软技能.模块端口动不动就几十上百个, ...
- [转]System Verilog的概念以及与verilog的对比
原文地址: http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证语 ...
- System Verilog的概念以及与verilog的对比
以下内容源自:http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证 ...
- FPGA小白学习之路(1) System Verilog的概念以及与verilog的对比(转)
转自CSDN:http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证 ...
- 理解前端模块概念:CommonJs与ES6Module
前言 现代前端开发每时每刻都和模块打交道.例如,在项目中引入一个插件,或者实现一个供全局使用组件的JS文件.这些都可以称为模块. 在设计程序结构时,不可能把所有代码都放在一起.更为友好的组织方式时按照 ...
- Verilog 模块参数重定义(转)
Verilog重载模块参数: 当一个模块引用另外一个模块时,高层模块可以改变低层模块用parameter定义的参数值,改变低层模块的参数值可采用以下两种方式: 1)defparam 重定义参数语法:d ...
- Cesium原理篇:6 Render模块(6: Instance实例化)
最近研究Cesium的实例化,尽管该技术需要在WebGL2.0,也就是OpenGL ES3.0才支持.调试源码的时候眼前一亮,发现VAO和glDrawBuffers都不是WebGL1.0的标准函数,都 ...
- Javascript模块化编程(一):模块的写法 (转载 学习中。。。。)
转载地址:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 阮一峰 大神:http://www.ruanyifeng.com/ ...
随机推荐
- C# 控件 RichTextBox 显示行号,并且与Panel相互联动
我们在使用到WINFORM窗体工作中,要求RichTextBox 加入行号: 之前有看到大牛们写的,但是太复杂繁多,而且有用双TextBox进行联动,非常不错,今天我们尝试RichTextBox +P ...
- Kafka源码研究--Comsumer获取partition下标
背景 由于项目上Flink在设置parallel多于1的情况下,job没法正确地获取watermark,所以周末来研究一下一部分,大概已经锁定了原因: 虽然我们的topic只设置了1的partitio ...
- 用最简单的方式学Python单链表
Python 实现单链表 在本博客中,我们介绍单链表这种数据结构,链表结构为基于数组的序列提供了另一种选择(例如Python列表). 基于数组的序列和链表都能够对其中的元素保持一定得顺序,但采用的方式 ...
- Android9.0 如何区分SDK接口和非 SDK接口
刚刚有同学问我,不太了解 "非SDK接口" 是什么意思?android9.0有什么限制 ?apache的http也有限制 ? 而且现在的大部分系统都升级上来了,黑名单.灰名单和白名 ...
- Java集合框架个人学习笔记
从网上粘贴的结构图 Collection ├List │├LinkedList │├ArrayList │└Vector(了解,已过时) │ └Stack └Set Map ├Hashtable ...
- JVM(9) 程序编译及代码优化
一.早期(编译器)优化 1.编译期 Java 语言的 “编译期” 其实是一段 “不确定” 的操作过程,因为它可能是指 一个前端编译器(其实叫 “编译器的前端” 更准确一些)把 *.java 文件转变成 ...
- Linux 提示符格式及颜色
# 提示符颜色配置: 颜色 黑 红 绿 黄 青 紫 蓝 白 字体 30 31 32 33 34 35 36 37 背景 40 41 42 43 44 45 ...
- MybatisPlus3.X使用配置
本文讲解了MyBatis-Plus在使用过程中的配置选项,其中,部分配置继承自MyBatis原生所支持的配置 基本配置 本部分配置包含了大部分用户的常用配置,其中一部分为 MyBatis 原生所支持的 ...
- (Java) RedisUtils
package com.vcgeek.hephaestus.utils; import org.springframework.beans.factory.annotation.Autowired; ...
- IIS中如何设置域名
如何在IIS中设置域名: 1,想好我们想要配置的本地域名,我们以www.baidu.com为例. 2,打开系统盘,一般默认的系统盘为C盘,打开:C:\Windows\System32\drivers\ ...