hxc7206043的个人空间 https://blog.eetop.cn/andrew [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

【Cocotb系列】五、Cocotb验证平台激励的产生

已有 6172 次阅读| 2021-2-6 21:48 |系统分类:芯片设计| cocotb, python, 验证, python

“Cocotb系列”前面的文章中有提到过我们对信号的驱动的方式如红框所示:

image.png

Cocotb平台使用“dut”关键词来作为被验证模块的句柄,由该句柄来指向其端口或内部层次的信号。如上图示例中所表达的含义是对一个加法器的端口A和B分别赋值,check 输出端口X的值是否等于参考模块A+B的计算结果。

关键词“dut”如何指向被验证模块的顶层模块名,其系统内部连接关系在系统文件__init__.py中体现:image.png

从上图中我们看出,由Makefile中定义好的"TOPLEVEL",在__init__.py系统函数中经过"root_name"、"handle"的传递而传递到"dut"句柄上。从而"dut"句柄则代表了被验证模块的顶层模块名。

如何给信号分配值,可以采用两种方式:

一、使用句柄的value属性给信号赋值

image.png

二、通过信号层次直接对信号赋值

image.png

我们还可以通过信号的层次对内部信号做赋值

image.png

注:笔者使用Cocotb 1.4.0版本在VCS仿真器下驱动一个带有generate例化的信号时,如dut.sub_block.GEN_INST[0].memory.data <= 2,信号层次中由于使用了generate语法而多出来的"GEN_INST[0]"使得仿真器内部无法得到信号的句柄,从而无法对信号做驱动,参照issue:https://github.com/cocotb/cocotb/issues/2190

"sig <= new_value"赋值方式是"sig.value = new_value"赋值方式的一种简写形式。两种方式均不会立即写入到端口,而是会延迟到下一个写周期生效。如果需要使赋值即时生效,可以使用“setimmediatevalue()”系统函数,赋值方式如下:sig.setimmediatevalue(new_val)。

针对信号的有符号和无符号赋值,可以参考如下的赋值方式,如针对一个位宽3bit的data_in做有符号赋值:

image.png

当赋值超过信号的位宽,cocotb则会报Overflow相关ERROR

对信号的操作除了基本的赋值以外,还可以做信号的Force/Freeze/Release等操作,使用方法如下:

image.png

有了如上信号驱动的方法,用户可以根据不同模块的业务特点来构造不同类别的激励。

内容如有错误还请各位指正,欢迎各位读者交流经验。邮箱:xiaochuan7206043@163.com


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 8

    粉丝
  • 2

    好友
  • 4

    获赞
  • 7

    评论
  • 392

    访问数
关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 01:46 , Processed in 0.014649 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部