完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
经过网上的搜索及自己的实验,总结在Modelsim仿真中显示状态机名称的三种方法。下面以一个具体的实例进行讲解。 实例功能:引入状态机实现2分频,这里使用状态机完全只是为了说明如何在仿真中显示状态机名称。 状态转移图: ![]() 设计文件代码:
testbench文件代码:
仿真波形: ![]() 在波形图中,看到状态机状态只能以各种进制的数进行显示,当状态比较多的时候不太便于查看波形查找一些问题,下面将用3种不同的方式对状态机状态以名称的形式显示在波形图中。 方法一:在testbench文件中对设计文件中的各种状态进行映射 实现过程: 在tb文件加入一个reg变量monitor_state,将设计文件中的状态state映射到monitor_state,通过映射将不同的状态state在tb文件中通过monitor_state用字符串表示,具体实现代码如下。与开始相比,tb文件增加了9~16行的代码,在modelsim波形显示窗口将信号monitor_state添加进行,将数据显示格式设置为ASCII码,这样就能看到monitor_state信号名称就显示为状态机名了,并且与state是一一对应的。 注:这里的monitor_state的位宽设置是根据状态名称最长字符的个数确定的,一个ASCII码字符要用8bit表示,这里最长的是4个字符,所以这里设置的位宽是32位。
仿真波形: ![]() 方法二:在testbench文件中对设计文件中的状态机编码进行重定义 实现过程: 在tb文件中将设计文件中的状态机编码用 defpara 进行重定义,具体可见下面代码8、9行,这里就涉及到重定义前后状态机状态寄存器的位宽发生了变化,重定义后的位宽变成了32位,这样就需要在设计文件中将状态寄存器state的位宽也设置成32bit。即将设计文件代码的第10行代码更改为 “reg [31:0]state;” 。这种情况不需要在波形文件额外添加信号,直接让状态机状态寄存器显示状态名。仿真波形见下面。
仿真波形: ![]() 方法三:使用虚拟对象显示状态机名称 实现过程: 该种方法不需要对设计代码和tb代码进行更改,这个只需要在modelsim软件上进行一些Tcl命令的操作,首先使用ModelSim的virtual type命令定义一个新的枚举类型(FSM_TYPE),该枚举类型可以在随后的仿真中使用,其命令格式为:virtual type { {val1 s1} { val2 s2} … { valn sn} } newVirtualType,其中val表示枚举值,s表示枚举名。而newVirtualType表示新的枚举类型名称。 注:virtual type与 { 之间,里面的 {} 与 {} 之间,} 与newVirtualType 一定要有空格。 具体在本实例中在使用最开始的tb文件进行仿真后,然后再modelsim软件的tcl console窗口依次输入如下命令:
![]() |
|
相关推荐
|
|
双目视觉处理系统开发实例-基于米尔安路国产DR1M90开发板
877 浏览 0 评论
1517 浏览 0 评论
基本FPGA或者树莓派或者其它微处理器(尽量压缩成本且完成项目)DFB激光器稳频
2058 浏览 1 评论
3163 浏览 1 评论
助力AIoT应用:在米尔FPGA开发板上实现Tiny YOLO V4
1315 浏览 0 评论
2461 浏览 58 评论
6265 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-24 05:02 , Processed in 0.474913 second(s), Total 63, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191