相关阅读
Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm=1001.2014.3001.5482
本文是对Spyglass CDC Hands-on Training中第二个实验的翻译(有删改),Lab文件可以从以下链接获取。
Spyglass CDC Hands-on Traininghttps://download.csdn.net/download/weixin_45791458/90875640
实验二、CDC设置检查
本实验旨在验证CDC设置是否正确。通过本实验,用户将学习如何检查设置中的问题,并展示如何即时创建约束(如set_case_analysis命令)。
通过本实验,用户将学习以下内容:
- 如何进行交互式时钟设置
- 如何从潜在的候选时钟中识别出真实的时钟
- 如何验证时钟设置信息的正确性
- 如何完成复位信号的设置
添加主时钟约束
1、选择Goal Setup阶段,勾选cdc/cdc_setup_check并点击Run Goal(s),如图1所示。
图1 选择目标
2、一旦运行完成,工具将自动跳转至Analyze Results阶段,在GUI左上角确保选中cdc/cdc_setup_check目标,这样才能分析该目标的运行结果,如图2所示。
图2 选择目标
3、在Violations窗口选择Group By Goal by Rule,这表示将结果按照目标->规则的方式分组,如图3所示。
图3 选择分组方式
4、点击cdc/cdc_setup_check目标前的加号以展开分组,结果如图4所示。
图4 cdc/cdc_setup_check目标
5、注意到有许多来自Clock_info03a规则和Reset_info09a规则的错误,这是由于即使实验一中的cdc/cdc_setup目标生成了约束文件,但并未进行读取。将autoclocks.sgdc文件和autoresets.sgdc文件的内容复制到SGDC/training.sgdc文件(该文件最初为空,已在项目文件中读取)中并重新运行cdc/cdc_setup_check目标。
% cat ../sg_results/training/training/cdc/cdc_setup/spyglass_reports/clock-reset/autoclocks.sgdc >> ../SGDC/training.sgdc
% cat ../sg_results/training/training/cdc/cdc_setup/spyglass_reports/clock-reset/autoresets.sgdc >> ../SGDC/training.sgdc
添加生成时钟约束
1、查看结果发现大部分错误都解决,双击选中Clock_info03a错误,右键单击在菜单中选择Open Spreadsheet,如图5所示。
图5 打开表格
2、点击表格中第一条消息,使用快捷键I或者点击窗口上的符号查看原理图,如图6所示。
图6 生成时钟
3、使用Schematic Debug Data窗口,单击选择线网,可以清晰地观察到该线网上并没有时钟信号传播(在满足某些条件下,时钟信号可以跨越触发器,但此时并没有),只有数据/控制信号,如图7所示。
图7 观察线网信息
4、下面将在原理图界面添加这个缺失的时钟约束,右键单击线网在菜单中选择Set SpyGlass Constraints...,如图8所示。
图8 设置约束
5、在窗口顶部的菜单中选择clock作为约束命令,指定时钟域名字为MyDomain,添加注释,点击Generates生成,最后点击Append将约束添加到约束文件中,如图9所示。
图9 添加约束
6、在左侧的Constraints窗口点击第一个约束文件,查看约束是否添加成功,如10所示。
图10 查看约束文件
7、重新运行cdc/cdc_setup_check目标,查看结果发现Clock_info03a错误已解决。
添加时钟条件约束
1、双击选中Clock_info05错误,错误信息指出时钟信号在选择器上出现汇聚,使用快捷键I或者点击窗口上的符号查看原理图,如图11所示。
图11 时钟汇聚
2、从图1中可以看出,两个时钟信号通过一个选择器汇聚了,下面将此选择器约束为仅选择一个时钟。右键单击线网在菜单中选择Clock_info05_sel,如图12所示。
图12 设置约束
3、在窗口顶部的菜单中选择clock作为约束命令,指定值为0,添加注释,点击Generates生成,最后点击Append将约束添加到约束文件中,如图13所示。
图13 添加约束
4、重新运行cdc/cdc_setup_check目标,查看结果发现Clock_info05错误已解决。
查看端口约束
1、查看来自Setup_port01规则的信息,如图14所示,该规则提供了端口的约束报告并生成了端口约束文件。
sg_results/training/training/cdc/cdc_setup_check/spyglass_reports/clock-reset/training_input_abstract.sgdc
图14 端口约束
2、双击第二条消息将打开一个表格,显示每个端口的约束信息,如图15所示。
图15 端口约束情况
可以看出,有些端口定义了clock约束,有些端口则由自动推导的abstract_port约束(该约束与clock约束不一样,无需用户显示读取,因为use_inferred_abstract_port参数的默认值为yes,而use_inferred_clocks的默认值为no),还有一个端口由上一节中的set_case_analisys约束。
3、双击第一条消息将打开Setup_port01规则生成的端口约束文件,如图16所示。
图16 端口约束文件
请注意以下几点:
- abstract_port -ignore约束会在输入端口的扇出为空时生成(即端口为空或被阻塞)。
- 如果输入端口通过组合逻辑连接到未约束的输出端口不会生成abstract_port约束。
- 如果输入端口连接到受时钟约束的时序单元的数据端口或使能端口,该时序单元的时钟域会被添加到生成的abstract_port约束中。
- 输入端口由用户定义(如clock约束、quasi_static约束或set_case_analysis约束)约束时,不会生成abstract_port约束。