0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Verilog HDL中的结构建模方式细述

电子工程师 来源:FPGA设计论坛 作者:FPGA设计论坛 2021-03-14 09:31 次阅读

结 构 建 模

本章讲述Verilog HDL中的结构建模方式。结构建模方式用以下三种实例语句描述:

• Gate实例语句

• UDP实例语句

• Module实例语句

第5章和第6章已经讨论了门级建模方式和U D P建模方式,本章讲述模块实例语句。

9.1 模块

Verilog HDL中,基本单元定义成模块形式,如下所示 :

m o d u l e m o d u l e _ n a m e(p o r t _ l i s t) ;

D e c l a r a t i o n s _ a n d _ S t a t e m e n t s

e n d m o d u l e

端口队列p o rt _ l i s t列出了该模块通过哪些端口与外部模块通信

9.2 端口

模块的端口可以是输入端口、输出端口或双向端口。缺省的端口类型为线网类型(即wire类型)。但是,端口可被显式地指定为线网。输出或输入输出端口能够被重新声明为reg型寄存器。无论是在线网说明还是寄存器说明中,线网或寄存器必须与端口说明中指定的长度相同。下面是一些端口说明实例。

m o d u l e M i c r o (PC, Instr, NextAddr );

/ /端口说明

i n p u t [3:1] P C;

o u t p u t [1:8] I n s t r;

i n o u t [16:1] N e x t A d d r;

/ /重新说明端口类型:

w i r e [16:1] N e x t A d d r; //该说明是可选的,但如果指定了,就必须与它的端口说明保持相同长度。

r e g [1:8] I n s t r;

/ /I n s t r已被重新说明为r e g类型,因此它能在always 语句或在i n i t i a l语句中赋值。

。 . 。

e n d m o d u l e

9.3 模块实例语句

一个模块能够在另外一个模块中被引用,这样就建立了描述的层次。模块实例语句形式

如下:

module_name instance_name (p o r t _ a s s o c i a t i o n s) ;

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

p o r t _ e x p r / /通过位置。

.P o r t N a m e (p o r t _ e x p r) / /通过名称。

p o rt _ e x p r可以是以下的任何类型:

1) 标识符(r e g或n e t)

2) 位选择

3) 部分选择

4) 上述类型的合并

5) 表达式(只适用于输入端口)

在位置关联中,端口表达式按指定的顺序与模块中的端口关联。在通过名称实现的关联中,模块端口和端口表达式的关联被显式地指定,因此端口的关联顺序并不重要。下例使用两个半加器模块构造全加器;逻辑图如图 9 - 1所示。

在第一个模块实例语句中, H A是模块的名字 ,h 1是实例名称,并且端口按位置关联,即

信号P与模块(H A)的端口A连接,信号Q与端口B连接,S 1与S连接,C 1与模块端口C连接。在第二个实例中,端口按名称关联,即模块( H A)和端口表达式间的连接是显示地定义

的。下例是使用不同端口表达式形式的模块实例语句。

Micro M1 (U d I n[3:0], {WrN, RdN}, S t a t u s[0], S t a t u s[ 1 ] ,

& U d O u t [0:7], T x D a t a) ;

这个实例语句表示端口表达式可以是标识符( T x D a t a)、位选择(S t a t u s[ 0 ]) 、 部分位选择(U d I n[ 3 : 0 ])、合并({Wr N,R d N})或一个表达式(& u d O u t[ 0 : 7 ]);表达式只能够连接到输入端口。

9.3.1 悬空端口

在实例语句中,悬空端口可通过将端口表达式表示为空白来指定为悬空端口,例如:

DFF d1 ( .Q(Q S), .Q b a r(), .D a t a( D ) ,

.P r e s e t(), .C l o c k(CK)); //名称对应方式。

DFF d2 (QS, , D, , CK ) ; / /位置对应方式。

/ /输出端口Q b a r悬空。

/ /输入端口P r e s e t打开,其值设定为z。

在这两个实例语句中,端口Q b a r和P re s e t悬空。

模块的输入端悬空,值为高阻态z。模块的输出端口悬空,表示该输出端口废弃不用。

9.3.2 不同的端口长度

当端口和局部端口表达式的长度不同时,端口通过无符号数的右对齐或截断方式进行匹

配。例如:

在对C h i l d模块的实例中, B d l[ 2 ]连接到P b a[ 0 ],B d l[1] 连接到P b a[ 1 ],余下的输入端口P b a[ 5 ]、P b a[ 4 ]和P b a[ 3 ]悬空,因此为高阻态 z。与之相似,M p r[ 6 ]连接到P p y[ 0 ],M p r[ 5 ]连接到P p y[ 1 ],M p r[4] 连接到P p y[ 2 ]。参见图9 - 2。

9.3.3 模块参数

当某个模块在另一个模块内被引用时,高层模块能够改变低层模块的参数值。模块参数值的改变可采用下述两种方式:

1) 参数定义语句(d e f p a r a m);

2) 带参数值的模块引用。

1. 参数定义语句

参数定义语句形式如下:

d e f p a r a m hier_path_name1 = v a l u e 1,

hier_path_name2 = v a l u e 2, 。..;

较低层模块中的层次路径名参数可以使用如下语句显式定义(层次路径名在下一章中讲述)。下面是一个例。模块FA和H A已在本节前面描述过。

2. 带参数值的模块引用

在这种方法中,模块实例语句自身包含有新的参数值。下面的例子在前几节中也出现过,本例中采用带参数的模块引用方式。

模块实例语句中参数值的顺序必须与较低层被引用的模块中说明的参数顺序匹配。在模块TO P 3中,A N D _ D E L AY已被设置为5,X O R _ D E L AY已被设置为2。

模块TO P 3和TO P 4解释说明了带参数的模块引用只能用于将参数值向下传递一个层次(例如,O R _ D E L AY),但是参数定义语句能够用于替换层次中任意一层的参数值。

应注意到:在带参数的模块引用中,参数的指定方式与门级实例语句中时延的定义方式相似;但由于对复杂模块的引用时,其实例语句不能像对门实例语句那样指定时延,故此处不会导致混淆。参数值还可以表示长度。下面是通用的 M×N乘法器建模的实例。

第1个值8指定了参数E M的新值,第2个值6指定了参数E N的新值。

9.4 外部端口

在迄今为止所见到的模块定义中,端口表列举出了模块外部可见的端口。例如,

A r b、C t r l、M e m _ B l k和B y t e为模块端口。这些端口同时也是外部端口,即在实例中,当采用名称关联方式时,外部端口名称用于指定相互连接。下面是模块 S c r a m _ A的实例。

Scram_A SX( .B y t e(B 1) , .M e m _ B l k(M 1) , .C t r l(C 1) , .A r b(A 1) ) ;

在模块S c r a m _ A中,外部端口名称隐式地指定。Verilog HDL中提供显式方式指定外部端

口名称。这可以通过按如下形式指定一个端口来完成:

.e x t e r n a l _ p o r t _ n a m e(i n t e r n a l _ p o r t _ n a m e)

下面是同一个例子,只不过是显式地指定外部端口。

模块S c r a m _ B在此实例中指定的外部端口是 D a t a、C o n t ro l、M e m _ Wo rd和A d d r。端口表显式地表明了外部端口和内部端口之间的连接。注意外部端口无需声明,但是模块的内部端口却必须声明。外部端口在模块内不可见,但是却要在模块实例语句中使用,而内部端口因为在模块中可见,所以必须在模块中说明。在模块实例语句中,外部端口的使用如下所示:

Scram_B S1 ( .A d d r(A 1) , .D a t a(D 1) , .C o n t r o l(C 1) ,

.M e m _ W o r d(M 1) ) ;

在模块定义的端口表中,这两种概念不能混淆,即在模块定义中所有端口必须指定显式的端口名称,或者没有一个端口带有显式的端口名称。如果模块端口通过位置连接,则模块实例语句中不能使用外部端口名称。

内部端口名称可以是标识符,也可以是下述类型的表达式:

• 位选择;

• 部分选择;

• 位选择、部分选择和标识符的合并。

例如,

在S c r a m _ C的模块定义中,端口表包括部分选择( A r b[ 0 : 2 ])、标识符( C t r l)、合并({M e m _ B l k[ 0 ],M e m _ B l k[ 1 ] } )和位选择(B y t e[ 3 ])。在内部端口是位选择、部分选择或合并的情况下,没有隐式地指定外部端口名。因此,在这样的模块实例语句中,模块端口必须通过位置关联相互连接。例如,

Scram_C SYA (L 1[ 4 : 6 ] ,C L , M M Y[ 1 : 0 ] ,B T) ;

在这个实例语句中,端口通过位置关联相连接,因此 L 1[ 4∶6 ]连接到A r b[ 0∶2 ],C L连接

到C t r l,M M Y[ 1 ]连接到M e m _ B l k[ 0 ] ,M M Y[ 0 ]连接到M e m _ B l k[ 1 ],B T连接到B y t e[ 3 ]。

若使用端口名称关联(即当内部端口不是标识符时),必须对模块中的端口指定外部端口名。如下面的S c r a m _ D模块定义所示。

在S c r a m _ D模块实例语句中,端口既能够使用位置连接,也能够使用名称连接,但是不能混合使用。下例的模块实例语句端口通过名称连接。

Scram_D SZ ( .D a t a(L 1[ 4 : 6 ] , .C o n t r o l(C L) ,

.M e m _ W o r d(M M Y[ 1 : 0 ],.A d d r(B T) ) ;

模块中可以只有外部端口而没有内部端口。即模块在引用中其外部端口可以悬空,不与内部信号相连。例如:

模块S c r a m _ E 有两个外部端口D a t a和A d d r,这两个端口在使用时被悬空。

一个内部端口是否能与多个外部端口连接?Verilog HDL允许这样连接。例如,

内部端口C o n d O u t 与两个外部端口B和C连接,所以C o n d O u t的值在B和C上都出现。

9.5 举例

下例采用结构模型描述十进制计数器。十进制计数器的逻辑图如图 9 - 3所示。

ad29dd00-8434-11eb-8b86-12bb97331649.png

注意常数作为输入端口信号的用法,以及悬空端口。

下面是另一个例子,3位可逆计数器的逻辑结构如图9 - 4所示,其结构描述如下:

ade46cba-8434-11eb-8b86-12bb97331649.png

责任编辑:lq6

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • UDP
    UDP
    +关注

    关注

    0

    文章

    327

    浏览量

    33996
  • 端口
    +关注

    关注

    4

    文章

    979

    浏览量

    32108
  • Verilog HDL
    +关注

    关注

    17

    文章

    126

    浏览量

    50443
  • 可逆计数器
    +关注

    关注

    0

    文章

    2

    浏览量

    6778

原文标题:Verilog入门-结构建模

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Verilog 电路仿真常见问题 Verilog 在芯片设计的应用

    在现代电子设计自动化(EDA)领域,Verilog作为一种硬件描述语言,已经成为数字电路设计和验证的标准工具。它允许设计师以高级抽象的方式定义电路的行为和结构,从而简化了从概念到硅片的整个设计流程
    的头像 发表于 12-17 09:53 308次阅读

    Verilog 与 ASIC 设计的关系 Verilog 代码优化技巧

    Verilog与ASIC设计的关系 Verilog作为一种硬件描述语言(HDL),在ASIC设计扮演着至关重要的角色。ASIC(Application Specific Integr
    的头像 发表于 12-17 09:52 162次阅读

    Verilog与VHDL的比较 Verilog HDL编程技巧

    理解。 VHDL :VHDL 的语法更接近于 Ada 语言,它是一种更正式的语言,具有丰富的数据类型和结构。VHDL 支持数据流、行为和结构化三种描述方式。 2. 可读性和可维护性 Veril
    的头像 发表于 12-17 09:44 234次阅读

    数字系统设计与Verilog HDL

    数字系统设计与Verilog HDL 1.兼职职位 ,不坐班,等待公司分配任务,时间自由 2.薪资: 200-5000不等可具体协商 3.要求:国内985/211院校在读或毕业,或者国外前100的院校 4.英语水平:四级500+/六级440+/雅思6.5+/托福90+
    发表于 11-06 17:57

    Verilog硬件描述语言参考手册

    一. 关于 IEEE 1364 标准二. Verilog简介三. 语法总结四. 编写Verilog HDL源代码的标准五. 设计流程
    发表于 11-04 10:12 2次下载

    Verilog HDL的基础知识

    本文继续介绍Verilog HDL基础知识,重点介绍赋值语句、阻塞与非阻塞、循环语句、同步与异步、函数与任务语法知识。
    的头像 发表于 10-24 15:00 506次阅读
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>的基础知识

    FPGA Verilog HDL有什么奇技巧?

    今天给大侠带来在FPAG技术交流群里平时讨论的问题答疑合集(九),以后还会多推出本系列,话不多说,上货。 交流问题(一) Q:Verilog 有什么奇技淫巧? A:在 Verilog ,以下这些
    发表于 09-12 19:10

    FPGA设计 Verilog HDL实现基本的图像滤波处理仿真

    今天给大侠带来FPGA设计中用Verilog HDL实现基本的图像滤波处理仿真,话不多说,上货。 1、用matlab代码,准备好把图片转化成Vivado Simulator识别的格式,即每行一
    发表于 05-20 16:44

    有什么好用的verilog HDL编辑工具可用?

    有什么好用的verilog HDL编辑工具可用?最好能集成实时的verilog HDL语法检测、自定义模块识别触发等功能,最好能够免费;
    发表于 04-28 11:00

    veriloginput和output作用

    以完成各种计算和控制任务。本文将详细介绍input和output在Verilog的作用及其使用方式。 一、input的作用及使用方式 作用 在Ve
    的头像 发表于 02-23 10:29 3293次阅读

    verilog调用模块端口对应方式

    Verilog是一种硬件描述语言(HDL),广泛应用于数字电路设计和硬件验证。在Verilog,模块是构建电路的基本单元,而模块端口对应
    的头像 发表于 02-23 10:20 1840次阅读

    veriloginitial和always的区别

    Verilog是一种硬件描述语言(HDL),用于设计和模拟数字电路。在Verilog,关键字initial和always都是用于描述电路行为的特殊语句。它们被用来生成仿真模型,并控制
    的头像 发表于 02-22 16:09 3031次阅读

    verilog function函数的用法

    Verilog 是一种硬件描述语言 (HDL),主要用于描述数字电子电路的行为和结构。在 Verilog ,函数 (Function) 是
    的头像 发表于 02-22 15:49 5881次阅读

    Verilog HDL数字集成电路设计方法概述

    电子发烧友网站提供《Verilog HDL数字集成电路设计方法概述.zip》资料免费下载
    发表于 02-03 09:27 2次下载

    #2024,立Flag了嘛? #spinal HDL的基本模块结构

    {//Component可以视为Verilogmodule val a = Bool() val b = Bool() } object Demo01{ def main(args:Array[String
    发表于 01-21 11:15