- 博客(26)
- 资源 (2)
- 收藏
- 关注
原创 Spyglass使用教程——实验四
在本练习中,我们将分析lint目标运行期间产生的违规。我们可以在SpyGlass GUI中使用各种调试工具来理解违规,在RTL代码中调试其根本原因,并查看如何在SpyGlass环境本身中修复这些违规。同时在运行Goal**同时会生成多个报告,不同报告提供不同信息,可在Report》More Report下查看。在GUI底部的Violations可查看违规信息。在显示出违规信息后,点击违规信息窗口顶部的Group By,然后选择Goal by Rule。此字段确定批处理运行中的违规在消息树中的排序方式。
2022-11-19 17:02:24
2101
原创 Spyglass使用教程——实验三
其中Run Status显示目标是否运行,如果运行会有生成了多少错误、警告和信息消息。注意有的Goal的运行要求使用额外的SpyGlass组件。参考:https://blog.youkuaiyun.com/qq_30843953/article/details/109629618。至此,通过该实验知道了如何运行Goal及如何查看报告信息。本实验在实验二的基础上进行目标设置和结果检查。
2022-11-19 16:13:02
951
原创 Spyglass使用教程——实验二
要预编译一个HDL库,您必须指定要在逻辑库中预编译的文件列表,以及逻辑库名称和物理目录之间的映射。这是使用lib_hdlfiles(定义要编译到命名库的文件)和lib(将命名库映射到物理目录)选项完成的(添加到**.prj文件的##Data Import Section**部分)这些单元格很可能是使用-y/-v选项传递的,所以让我们浏览一下“usb”中的目录,看看是否有任何丢失的库文件。 通过上面的文件添加和设置消除了之前的黑盒问题,但因为新的文件加载也引入新的黑盒问题,如下所示。
2022-11-19 15:38:33
2714
原创 Spyglass使用教程——实验一
之后点击“Read Design”,再在左侧点击“Run Design Read”开始进行设计文件编译和分析,在读取完成后会在下方窗口列出问题。如果需要修改代码,可以在代码窗口中点击有问题的代码行,使得光标落于该行,然后点击e即可将打开默认的编辑器进行代码编辑。错误信息以红色显示,警告以橙色显示,信息以绿色显示。在窗口上方中间点击Goal Setup ,然后在主窗口区勾选Lint_rtl(在lint中点击+即可见),如下图。左侧选择文件后点击中间的“Add”即可完成文件的添加,点击“OK”退出当前窗口。
2022-11-19 14:36:50
4789
原创 UVM事务级建模
1、用户定义的transaction类,必须要扩展于uvm_sequence_item2、需要为transaction的成员指定rand属性,这样可以产生随机激励。note:rand属性不是必须的
2022-07-06 20:45:04
137
原创 UVM之sequence机制
定义:控制和产生一系列的事务,并将事务发送给driver的一套机制。(一系列动作的集合)例子:driver向sequencer发送事务请求,sequencer再向其关联的sequence发送请求,sequence接收到请求之后,立即将已经生成好的事务发送出去。发送出去的事务通过sequencer之后再转发给请求事务的对象。请求该事务的对象处理完事务之后,发送处理完事务的响应,再以sequencer为中介,转发到sequence。接着sequence将产生下一个事务,等待下一次事务请求。优点:将事务的
2022-07-06 15:31:30
657
原创 uvm-phase机制
uvm中的phase有耗时和不耗时两种类型。下图中灰色部分为耗时的类型,task;白色部分为不耗时的类型,function。不耗时的 build_phase,这个 phase 主要用来实例化各个组件环境,理论上为了 uvm_tree 的顺利构建应该从上往下执行。如下图,不耗时的phase从树顶到数叶自上而下执行,构建整个验证环境。不同层次所有组件的 build_phase() 从空间(uvm-tree)上从上而下执行从树根到树叶的全部组件类 build_phase(),而同层次的组件类则是按照 ne
2022-07-06 11:24:28
638
原创 UVM——field automation机制
filed automation机制UVM field automation机制是为了方便用户对事物进行打印、复制、打包、解压、比较、记录等一些列功能而建立的一套服务机制,即使用UVM内建的函数对事务进行处理。要使用UVM field automation机制,在事务中对数据使用`uvm_field_*进行注册,例如class my_transaction extends uvm_sequence_item; rand bit [3:0] sa; rand bit [3:0] da;
2022-02-16 12:40:12
788
原创 UVM——sequence library
sequence library本质是一个sequence,包含了一组在其内部注册了的sequence类型,可通过对其进行配置,创建并执行一系列的sequence、sequence_item。向sequence library永久注册sequence首先创建sequence library类class my_sequence_lib extends uvm_sequence_library #(my_transaction); `uvm_object_utils(my_sequence_l
2022-02-15 22:03:56
1119
原创 UVM——Callback
步骤1、将UVM Callback方法内嵌入组件中。2、创建一个最基本的UVM Callback类以供扩展。3、从上一步所创建的类中扩展出所需的Callback类。4、在顶层实例化并注册Callback对象。代码示例步骤1,首先,在driver中关联实现Callback方法的类(最基本的UVM Callback类)。class my_driver extends uvm_driver #(my_transaction); `uvm_component_utils(my_driver)
2022-02-15 13:26:23
525
原创 UVM——普通TLM端口的用法
put模式producer调用consumer中重载的put方法,把数据发送到consumer。代码示例如下。此处的代码示例为monitor向reference model发送数据。monitorclass my_monitor extends uvm_monitor; `uvm_component_utils(my_monitor); virtual dut_interface m_vif; uvm_blocking_put_port #(my_transaction
2022-02-14 23:04:07
347
原创 UVM——configuration机制
这里使用三个示例具体介绍uvm_config_db的用法配置sequence产生transaction的数量1、添加控制变量item_num2、使用get()获取控制变量item_num的配置获取:class my_sequence extends uvm_sequence #(my_transaction_da3); `uvm_object_utils(my_sequence) int item_num = 10; function new(string name
2022-02-14 20:04:13
568
原创 UVM factory机制
factory机制的运作步骤1、将用户自定义的类向factory的注册表中进行注册。2、要使用“class_name::type_id::create()"来代替new实例化对象。3、根据具体要求向替换表添加替换条目。4、在运行仿真时,UVM会根据这两张表自动实现factory机制。factory机制的使用1、使用`uvm_object_utils()对uvm_object类进行注册。2、使用`uvm_component_utils()对uvm_component类进行注册。3、使用“cla
2022-02-14 15:43:34
583
原创 UVM学习——UVM phase的objection属性
UVM Objection作用1、控制taskphase的运行和终止2、同步各个component同名的task phase代码示例示例一在上一篇博客的基础上对driver的代码进行修改,之后运行仿真。class my_driver extends uvm_driver #(my_transaction); `uvm_component_utils(my_driver) function new(string name = "my_driver", uvm_componen
2022-02-14 11:15:51
387
原创 UVM学习——构建一个简单的UVM验证平台
构建一个简单的UVM验证平台本次构建的验证平台不包含DUT。创建transaction和sequencetransaction代码如下:class my_transaction extends uvm_sequence_item; rand bit [4:0] sa; rand bit [3:0] da; rand reg [7:0] payload[$]; //定义数据成员 `uvm_object_utils_begin(my_transaction)
2022-02-13 22:25:45
1932
原创 GVIM编辑技巧
:sv/sp,切屏,方便两个文件的对比。:q退出:E显示当前目录下文件,可移动光标选择需要打开的文件Ctrl+q,往下移动光标,选中一列,输入大写的i,输入字符,之后按esc,可在该列前插入一列字符。选中包含多列内容的块之后可以用Ctrl+q得到多列的内容,之后可进行复制等操作。:%s/input/reg /gc把input替换成reg,gc表示在替换的时候要确认23,46s/ input/reg /gc 限定替换的行范围dd删除光标所在行,dnd删除n行p粘贴yy复制光标所在行,dnd复
2022-01-25 23:08:55
1761
原创 Synopsys system veriolog Lab学习(5)
Lab5前面四个实验理解起来相对容易一些,Lab5相对难一些。该实验把测试平台的每个组件都封装为一个类,要考虑每个组件之间的通信,还要控制互斥资源的访问(本实验中为不同驱动器驱动数据通过router时,多个数据包对同一输出端口的竞争)。本实验需要封装的类如下图所示,类之间的通信通过信箱实现。测试平台框架如下图所示,在测试平台中,各个组件是同时开始工作的。该框架和Lab4的区别之一是具有多个驱动器和接收器,同时驱动数据和接收数据。Generator在该类中,通过start()任务产生数据包。
2022-01-23 11:05:17
699
原创 Synopsys system veriolog Lab学习(4)
Lab4该实验在Lab3的基础上,把数据包封装起来,即把数据封装到一个类中。class Packet; //Lab 4 - Task 2, Step 4 // //In the body of the class create the following properties //rand bit[3:0] sa, da; //rand logic[7:0] payload[$]; // string name; //ToDo rand bit[3:0] sa,
2022-01-22 23:18:30
1703
原创 Synopsys system veriolog Lab学习(3)
Lab3该实验在Lab2的基础上增加了Monitor和checker,检测接口输出的数据包和验证和发送的数据一致。测试平台框图如下:捕获接口输出数据的任务定义如下: //Lab 3 - Task 3, Step 3 // //Declare the get_payload() task //ToDo task get_payload(); //Lab 3 - Task 3, Step 4 // //In get_payload() delete cont
2022-01-22 22:52:01
300
原创 Synopsys system veriolog Lab学习(2)
Lab2该实验在Lab1的基础上在test中增加发数据包的任务。改动主要在Test部分代码。具体如下:program automatic test(router_io.TB rtr_io); //Lab 2 - Task 2, Step 2 // //Declare the program global variables sa, da and payload //ToDo bit[3:0] sa; bit[3:0] da; logic[7:0] payload[$];
2022-01-21 12:22:22
397
原创 Synopsys system veriolog Lab学习(1)
这里写自定义目录标题Lab1测试平台总体框图DUTInterfaceTestTB_TOPLab1该实验创建一个测试平台对DUT进行复位的测试测试平台总体框图DUTDUT为一个16输入,16输出的路由器,这个路由器的功能是把数据通过各个输入端(Input)发送到任意输出端(Output)。代码如下:module router( reset_n, clock, frame_n, valid_n, din, dout, busy_n, valido_n, frameo_n);input
2022-01-20 17:00:44
479
原创 valid/ready握手协议之ready打拍
协议实现相信网上已经有很多文章对valid/ready的原理与应用等进行了很详细的描述,这里就不再赘述,直接上代码:module frs #(parameter DW='d256)( input [DW-1:0] m_data , input m_valid , output m_ready , output reg [DW-1:0] s_data , output reg
2021-11-30 21:21:41
1629
原创 Formality使用总结1
formality流程总结1@TOC一、图形界面启动方式在命令行输入formality,接着可以看到如下界面以下1~6为进行formality的流程0、Guid在这一步导入DC综合产生的.svf文件,该文件记录了DC在综合时对设计所作的优化。然后底下log一栏返回“1”表示加载成功。1、Ref这一步是加载你的设计文件,RTL代码及IP等。可以看到有三个步骤需要执行,分别为1)Read Design File2) Read DB Libraries3) Set Top Desig
2021-11-22 19:12:05
5129
1
原创 ZYNQ 或ZYNQ Ultrascale PS/PL交互
1、在PYNQ框架下,PS/PL 交互可以用MMIO这个PYNQ类。如该处的例子https://blog.youkuaiyun.com/qq_35290955/article/details/1076719302、在SDK中,可以用xil_io.h这个头文件的IO读写函数。如该处的例子https://blog.youkuaiyun.com/narutoinspire/article/details/79401559?utm_medium=distribute.pc_relevant.none-task-blog-title-2&
2020-11-05 23:08:54
7512
哈夫曼序列检测器
2019-09-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人