在构建测试平台时,经常会用到interface用来简化模块和测试平台或者模块之间的连接,可以将一堆相关的信号封装在其中,为硬件模块的端口提供了一种标准化的封装方式,其中的modport(module port)结构对interface中的相关信号进行分组并指定方向,这样会使接口的定义条理更加清晰,明确了站在不一样的角度相关信号的输入输出方向。
例如在monitor中,信号大部分都是输入的,所以此时modport分组时将相关信号的方向都指定为输入,并且可以在具体模块定义的时候通过interface名直接使用modport名,那么此时就会有个问题:既然模块定义的时候直接了使用modport名,那么模块在例化的时候与interface的实例如何进行连接呢?本文将通过示例对此进行说明。
为了方便说明,文中相关模块的实现为“empty”,但是不影响其端口对于信号的可见性。
【示例】
【仿真结果】
示例中,接口定义时指定了modport,其中只包含了sig0这一个变量,sig1并没有包含在内。test0定义端口列表采用“接口名.modport名”方式声明了接口变量,而test1定义端口列表采用“接口名”方式声明了接口变量。在模块例化时,dut0与“接口实例名”直接连接;dut1与“接口实例名.modport名”直接连接;dut2与“接口实例名”直接连接;dut3与“接口实例名.modport名”直接连接;
通过仿真结果可以看到,test0的两个实例,不管实例与接口采用何种方式进行连接,此时在实例中仅能观测到接口中modport分组中的变量sig0,其实主要原因在于test0在定义时其端口列表就已经限定了仅访问接口分组dut中的变量。所有的实例中只有dut2中可以观测到接口中所有变量,这是因为首先test1在定义时其端口列表采用了“接口名”方式,其次例化连接接口时也是直接与接口例化名直接相连,而dut3因为在与接口连接时,限制了仅与接口中的modport分组tb进行连接,所以在dut3中观测不到sig1的变化。
为此,可以将上例进行简化汇总之间关系如下图所示,即如果模块定义时指定的端口采用了“接口名.modport名 接口变量”的方式,那么不管这个模块在实例化时与接口实例如何连接,模块实例对于接口仅可观测到对应modport分组中的变量。而如果模块定义时指定的端口采用了“接口名 接口变量”方式,那么模块实例具体能够观测到接口哪些变量,则取决于实例化连接时与接口实例的连接方式。
多功能电力仪表要走哪些路线才会比较好
IOT赋能气象墒情监测,推进农业生产降本增效
半导体科普:晶体管形成区域
Synaptics 携手英特尔和联想增强PC网络安全
通过自动限流调节保护您的集成式FET功率开关
接口中的modport连接模块都能看见什么
多功能食品安全检测仪 产品介绍
区块链产业园是什么?区块链产业园遍地开花湖南长沙也开园
感抗与容抗计算器
柔性印刷电路(FPC)使设计人员能够找到几种途径?
Java遭遇滑铁卢!
IO耦合器如何通过CANopen总线进行通讯
扩频降低EMI的DC/DC稳压器电路设计
智能电网有哪八大特征?
2019年人工智能给大家的生活带来的改变会越来越明显
雷克萨斯新款CT200h外观造型和内饰大幅度升级,延续现款动力系统!预售价23万起
人工智能正在悄悄进入新闻业
小米MIX2最新消息:小米MIX2再爆光 性能怪兽+逆天颜值!
详细解析MCU降功耗的6个方法
无线通信技术有哪些