当前位置:首页 > 公众号精选 > ZLG致远电子
[导读]就我个人而言,我觉得编写sequence是在验证任何IP时最具挑战性的部分。首先需要仔细构想场景,然后coding。如果没有任何程度的复用,我们需要从头为每个场景编写一个sequence,这使得sequence难以维护和调试。sequence的编写和调试是非常体现验证工程师编码能...

就我个人而言,我觉得编写sequence是在验证任何IP时最具挑战性的部分。首先需要仔细构想场景,然后coding。如果没有任何程度的复用,我们需要从头为每个场景编写一个sequence,这使得sequence难以维护和调试。


sequence的编写和调试是非常体现验证工程师编码能力的地方之一,如果每一个sequnce都有着完全不同的工作模式,那么维护起来非常痛苦。


网络上有一个段子,程序员最讨厌4件事情:

1、写文档

2、别人不写文档

3、写注释

4、别人不写注释


想象一下,如果你验证同事离职,交接给你上百个定向且诡异的测试用例或者sequence?你会不会立马想去重构。


sequences 由多个事务激励组成,在UVM中其继承自参数化类uvm_sequence。通过这些事务触发一些验证工程师希望触及的场景,而sequence的分层会创建一些更加复杂的场景激励。验证空间随着设计规模指数级上升,验证激励自然也会越来越复杂。

class usb_simple_sequence extends uvm_sequence #(usb_transfer);rand int unsigned sequence_length;constraint reasonable_seq_len { sequence_length < 10 };//Constructorfunction new(string name=”usb_simple_bulk_sequence”);super.new(name);endfunction//Register with factory`uvm_object_utils(usb_simple_bulk_sequence)//the body() task is the actual logic of the sequencevirtual task body();repeat(sequence_length)`uvm_do_with(req, {//Setting the device_id to 2req.device_id == 8’d2;//Setting transfer type to BULKreq.type == usb_transfer::BULK_TRANSFER;})endtask : bodyendclass

在上面的sequence 中,我们试图将发送多次id为2的事务,在uvm_test中将该sequence指定为default sequence即可。

class usb_simple_bulk_test extends uvm_test;virtual function void build_phase(uvm_phase phase );uvm_config_db#(uvm_object_wrapper)::set(this, "sequencer_obj.main_phase","default_sequence", usb_simple_sequence::type_id::get());endfunction : build_phaseendclass
到目前为止,sequence看起来既简单又直接。但是直接的代码往往意味着麻烦的堆叠。为了确保sequence在更复杂的场景中重用,我们必须遵循一些准则或者说代码规范。


1、只在base sequence 类中的pre_start和post_start任务中raising objections和 dropping objections来管理测试用例的开始和结束。通过这种方式,能够减少每一个sequence子类中的相关phase控制代码。

task pre_start()if(starting_phase != null)starting_phase.raise_objection(this);endtask : pre_starttask post_start()if(starting_phase != null)starting_phase.drop_objection(this);endtask : post_start

需要注意的是,只有被定义为default sequence才会自动执行starting_phase,否则就需要手动调用了。

class usb_simple_bulk_test extends uvm_test;usb_simple_sequence seq;virtual function void main_phase(uvm_phase phase );//User need to set the starting_phase as sequence start methodis explicitly called to invoke the sequenceseq.starting_phase = phase;seq.start();endfunction : main_phaseendclass

2、使用UVM configurations 机制从测试用例中获取值。在上面的示例中,没有给出控制sequence的按钮,一些都靠sequence自身的随机,这对于扩展用例非常不友好。我们可以对sequence做如下的修改,以提供更加精确的激励控制。

class usb_simple_sequence extends uvm_sequence #(usb_transfer);rand int unsigned sequence_length;constraint reasonable_seq_len { sequence_length < 10 };virtual task body();usb_transfer::type_enum local_type;bit[7:0] local_device_id;//Get the values for the variables in case toplevel//test/sequence sets it.uvm_config_db#(int unsigned)::get(null, get_full_name(),“sequence_length”, sequence_length);uvm_config_db#(usb_transfer::type_enum)::get(null,get_full_name(), “local_type”, local_type);uvm_config_db#(bit[7:0])::get(null, get_full_name(),?“local_device_id”, local_device_id);repeat(sequence_length)`uvm_do_with(req, {req.device_id == local_device_id;req.type == local_type;})endtask : bodyendclass

通过上述修改,我们对测试用例进行了控制,以配置device_id、sequence_length和type。

这里需要注意的是:

uvm_config_db#()::set中使用的参数类型和字符串(第三个参数)应该与

uvm_config_db#()::get中使用的类型相匹配,否则将无法正确配置。这个地方如果出错会非常痛苦,但好在不需要经常修改,痛苦一次就好。另外,这几个配置项是随机类型,相应的配置值也需要满足约束范围。


3、在创建复杂sequence的时候尽量去复用简单的sequence。例如,在下面的sequence 中顺序发送不同的sequnce(层次化和模块化,永远是编码规范之一):

class usb_complex_sequence extends uvm_sequence #(usb_transfer);//Object of simple sequence used for sending bulk transferusb_simple_sequence simp_seq_bulk;//Object of simple sequence used for sending interrupt transferusb_simple_sequence simp_seq_int;virtual task body();//Variable for getting device_id for bulk transferbit[7:0] local_device_id_bulk;//Variable for getting device_id for interrupt transferbit[7:0] local_device_id_int;//Variable for getting sequence length for bulkint unsigned local_seq_len_bulk;//Variable for getting sequence length for interruptint unsigned local_seq_len_int;//Get the values for the variables in case top level//test/sequence sets it.uvm_config_db#(int unsigned)::get(null, get_full_name(),“local_seq_len_bulk”,local_seq_len_bulk);uvm_config_db#(int unsigned)::get(null, get_full_name(),“local_seq_len_int”,local_seq_len_int);uvm_config_db#(bit[7:0])::get(null, get_full_name(),“local_device_id_bulk”,local_device_id_bulk);uvm_config_db#(bit[7:0])::get(null, get_full_name(),“local_device_id_int”,local_device_id_int);//Set the values for the variables to the lowerlevel//sequence/sequence item, which we got from//above uvm_config_db::get.//Setting the values for bulk sequenceuvm_config_db#(int unsigned)::set(null, {get_full_name(),”.”,”simp_seq_bulk”}, “sequence_length”,local_seq_len_bulk);uvm_config_db#(usb_transfer::type_enum)::set(null, {get_full_name(),“.”,“simp_seq_bulk”} , “local_type”,usb_transfer::BULK_TRANSFER);uvm_config_db#(bit[7:0])::set(null, {get_full_name(), “.”,”simp_seq_bulk”}, “local_device_id”,local_device_id_bulk);//Setting the values for interrupt sequenceuvm_config_db#(int unsigned)::set(null, {get_full_name(),”.”,”simp_seq_int”}, “sequence_length”,local_ seq_len_int);uvm_config_db#(usb_transfer::type_enum)::set(null, {get_full_name(),“.”,“simp_seq_int”} , “local_type”,usb_transfer::INT_TRANSFER);uvm_config_db#(bit[7:0])::set(null,{get_full_name(),“.”,”simp_seq_bulk”},“local_device_id”,local_device_id_int);`uvm_do(simp_seq_bulk)simp_seq_bulk.get_response();`uvm_send(simp_seq_int)simp_seq_int.get_response();endtask : bodyendclass

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭