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

    文章

    335

    浏览量

    35526
  • 端口
    +关注

    关注

    4

    文章

    1110

    浏览量

    34042
  • Verilog HDL
    +关注

    关注

    17

    文章

    126

    浏览量

    51482
  • 可逆计数器
    +关注

    关注

    0

    文章

    2

    浏览量

    6842

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深度剖析 LTC1164:通用滤波器构建模块的卓越之选

    深度剖析 LTC1164:通用滤波器构建模块的卓越之选 一、引言 在电子设计领域,滤波器的重要性不言而喻。无论是抗混叠滤波、电信滤波,还是频谱分析等应用场景,都离不开高性能滤波器的支持。今天,我们要
    的头像 发表于 04-02 10:15 173次阅读

    LTC1061高性能三重通用滤波器构建模块:特性、应用与设计指南

    LTC1061高性能三重通用滤波器构建模块:特性、应用与设计指南 在电子工程师的日常工作,滤波器的设计和应用是一个关键领域。今天我们要深入探讨的是Linear Technology
    的头像 发表于 04-02 09:55 103次阅读

    Verilog HDL语法学习笔记

    Verilog HDL 语 言 最 初 是 作为 Gateway Design Automation 公 司 ( Gateway DesignAutomation 公司后来被著名的 Cadence Design Systems 公司收购)模拟器产品开发的硬件
    的头像 发表于 03-04 15:04 5767次阅读
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>语法学习笔记

    线性科技LTC1060:通用双滤波器构建模块的卓越性能与应用

    线性科技LTC1060:通用双滤波器构建模块的卓越性能与应用 在电子工程师的日常设计,滤波器的选择至关重要。今天,我们将深入探讨线性科技(Linear Technology)的LTC1060通用双
    的头像 发表于 01-20 11:40 495次阅读

    LTC1164:低功耗、低噪声的通用滤波器构建模

    LTC1164:低功耗、低噪声的通用滤波器构建模块 在电子设计领域,滤波器的性能对整个系统的稳定性和可靠性起着至关重要的作用。今天,我们要深入探讨 Linear Technology 公司推出
    的头像 发表于 01-20 10:55 297次阅读

    LTC1067/LTC1067 - 50:通用双滤波器构建模块的深度剖析与应用

    LTC1067/LTC1067 - 50:通用双滤波器构建模块的深度剖析与应用 引言 在电子工程师的日常设计工作,滤波器的选择和设计至关重要。LTC1067/LTC1067 - 50作为一款出色
    的头像 发表于 01-19 17:05 511次阅读

    FPGA 入门必看:Verilog 与 VHDL 编程基础解析!

    很多开发者第一次接触FPGA,都会有同样的疑问:FPGA是硬件,不是软件,怎么写程序?答案就是用硬件描述语言(HDL),最常用的就是Verilog和VHDL。今天,我们就带你入门,搞清楚FPGA编程
    的头像 发表于 01-19 09:05 703次阅读
    FPGA 入门必看:<b class='flag-5'>Verilog</b> 与 VHDL 编程基础解析!

    【产品介绍】Modelsim:HDL语言仿真软件

    概述ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核
    的头像 发表于 11-13 11:41 676次阅读
    【产品介绍】Modelsim:<b class='flag-5'>HDL</b>语言仿真软件

    如何利用Verilog HDL在FPGA上实现SRAM的读写测试

    本篇将详细介绍如何利用Verilog HDL在FPGA上实现SRAM的读写测试。SRAM是一种非易失性存储器,具有高速读取和写入的特点。在FPGA实现SRAM读写测试,包括设计SRAM接口模块
    的头像 发表于 10-22 17:21 4554次阅读
    如何利用<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>在FPGA上实现SRAM的读写测试

    使用Simulink自动生成浮点运算HDL代码(Part 1)

    引言 想要实现浮点运算功能,如果自己写Verilog代码,需要花费较多的时间和精力。好在Simulink HDL Coder工具箱提供了自动代码生成技术。下图展示了HDL Coder如何生成浮点运算
    发表于 10-22 06:48

    MBSE工具+架构建模:从效率提升到质量赋能

    MBSE解决方案,以架构建模为纽带,工具链集成为支撑,帮助客户有效应对汽车电子系统日益增长的复杂性挑战。通过打破信息孤岛、实现变更协同、提升工具链流畅度,加速开发进程、降低返工成本、提升系统整体质量与可靠性。
    的头像 发表于 06-20 10:57 530次阅读
    MBSE工具+架<b class='flag-5'>构建模</b>:从效率提升到质量赋能

    VirtualLab Fusion应用:Herriott池的建模

    摘要 在气体光谱学,为了获得足够灵敏的吸收测量,通常要求具有较长的光程长度。充气体积包裹在反射镜之间的多通道单元是满足这一要求的一种方式,同时在途中控制光束发散,避免了对超大设备的需求
    发表于 06-11 08:52

    利用MATLAB对交流电机调速系统进行建模和仿真

    原理结构图的仿真方法,对交流电机调速系统进行研究,从而实现对典型电机定子调压调速模型的构建与仿真。 纯分享帖,需要者可点击附件免费获取完整资料~~~*附件:利用MATLAB对交流电机调速系统进行建模和仿真
    发表于 06-06 14:31

    verilog模块的调用、任务和函数

    在做模块划分时,通常会出现这种情形,某个大的模块包含了一个或多个功能子模块,verilog是通过模块调用或称为模块实例化的方式来实现这些子模块与高层模块的连接的.
    的头像 发表于 05-03 10:29 1734次阅读
    <b class='flag-5'>verilog</b>模块的调用、任务和函数

    VirtualLab应用:傅科刀口测试的建模

    建模任务 系统构建模块——抛物面镜 系统构建模块 – 球面镜 系统构建块 – 光阑 系统构建模块——理想准直透镜 系统
    发表于 04-26 10:37