前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【日更计划097】数字IC基础题【SV部分】

【日更计划097】数字IC基础题【SV部分】

作者头像
空白的贝塔
发布于 2021-04-23 07:23:45
发布于 2021-04-23 07:23:45
87200
代码可运行
举报
文章被收录于专栏:摸鱼范式摸鱼范式
运行总次数:0
代码可运行

欢迎大家加入2022届数字IC交流群,QQ群号 1060380138

上期答案

[206] 如何选择性的激活或者关闭一个类中的约束?
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//<object>.constraint_mode(0) :: 关闭对象中的所有约束
//<constraint>.constraint_mode(0) :: 选择性关闭某一个约束
class  ABC;
    rand int length;
    rand  byte SA;
    constraint c_length { length inside [1:64];}
    constraint c_sa {SA inside [1:16];}
endclass ABC abc = new();
abc.constraint_mode(0) // 关闭所有约束
abc.c_length.constraint_mode(0) // 只关闭约束c_length
[207] 现有下面的一个类,如何生成addr大于200的Packet对象?
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class  Packet;
    rand bit[31:0] addr;
    constraint c_addr { addr inside [0:100];}
endclass

大于200与内置约束冲突,所以需要先关闭内置约束,然后通过内联约束进行随机化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Packet p = new();
p.c_addr.constraint_mode(0);
p.randomize with {addr > 200;};
[208] 什么是pre_randomize()和post_randomize()函数?

这些是systemverilog内建的回调函数。在调用randomize之前会自动调用pre_randomize函数,之后会自动调用post_randomize函数。可以通过定义这两个函数,完成在随机化之前或者之后进行某些操作。

[209] 编写一个约束,为下面对象中的动态数组生成约束,使得每个元素都小于10,数组大小也小于10
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class  dynamic_array;
    rand unsigned int abc[];
endclass
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
constraint c_abc_len {
    abc.size() < 10;
    foreach (abc[i])
        abc[i] < 10;
}
[210] 编写约束,创建随机整数数组,使数组大小在10-16之间,并且数组按照降序排列
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class array_abc;
    rand unsigned int  myarray[];
endclass
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
constraint  c_abc_val {
    myarray.size inside { [10:16] };
    foreach (myarray[i])
        if (i>0) myarray[i] < myarray[i-1];
}

你答对了吗

本期题目

[211] 如何对一个生成一个随机动态数组,并且元素两两各不相同?参考下面的代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class TestClass;
    rand bit[3:0] my_array[];//dynamic array of bit[3:0]
endclass
[212] “fork - join”, “fork - join_any” 和“fork - join_none”之间有什么区别?
[213] “wait fork”和“disable fork”的作用是什么?
[214] 硬约束和软约束有什么区别?
[215] 下面每个线程的输出是什么?
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
initial begin
 for (int j=0; j<3; j++) begin
     fork
         automatic int result;
         begin
             result= j*j;
             $display("Thread=%0d value=%0d", j, value);
         end
     join_none
     wait
     fork;
 end
end

正确答案将在下一期公布,或者到下面的文章获取答案

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 摸鱼范式 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【日更计划098】数字IC基础题【SV部分】
systemverilog支持三种类型的动态进程,可以在运行时创建,并作为独立线程执行。
空白的贝塔
2021/04/23
5530
【日更计划098】数字IC基础题【SV部分】
【日更计划095】数字IC基础题【SV部分】
时钟块类似于modport,除了具备modport的信号方向指定,还能够建模信号的时序行为。下面是一个时钟块的例子。
空白的贝塔
2021/04/23
1.4K0
【日更计划095】数字IC基础题【SV部分】
【日更计划099】数字IC基础题【SV部分】
约束表达式中,至多只有一个关系运算符(<,<=,==,>=或>)。如果要实现变量的顺序约束,需要多个表达式。
空白的贝塔
2021/04/23
5760
【日更计划099】数字IC基础题【SV部分】
【日更计划100】数字IC基础题【SV部分】
mailbox是一种通信机制,用于线程之间的数据交换。数据在一个线程存入mailbox中,在另一个线程中检索。下面是mailbox的声明与创建的示例:
空白的贝塔
2021/04/23
1.3K0
【日更计划100】数字IC基础题【SV部分】
【日更计划101】数字IC基础题【SV部分】
在约束中,不允许调用方向为ref的函数,除非使用“const ref”,这保证函数在内部不会修改参数。
空白的贝塔
2021/04/23
5210
【日更计划101】数字IC基础题【SV部分】
【日更计划102】数字IC基础题【SV部分】
2比1更好,在1中,每次迭代都需要计算length*count,2中只需要计算一次
空白的贝塔
2021/04/23
5270
【日更计划102】数字IC基础题【SV部分】
【日更计划115】数字IC基础题【UVM部分】
virtual sequence是控制多个sequencer中激励生成的序列。由于sequence,sequencer和driver集中在单个接口上,因此几乎所有测试平台都需要virtual sequence来协调不同接口之间的激励和交互。virtual sequence在子系统或系统级别的测试台上也很有用,可以使单元级别的sequence以协调的方式运行。下图从概念上展示了这一点,其中virtual sequence具有三个sequencer的句柄,这些sequencer连接到driver,以连接到DUT的三个独立接口。然后,virtual sequence可以在每个接口上生成subsequence,并在相应的subsequencer上运行它们。
空白的贝塔
2021/06/17
8600
【UVM COOKBOOK】Sequences||激励
uvm_sequence_base 类通过添加body方法扩展了 uvm_sequence_item 类。sequence用于通过执行其body来产生激励。sequence item被设计为一个瞬态动态对象,这意味着它可以在被取消引用后被创建、使用和垃圾回收。
空白的贝塔
2021/11/17
9100
【UVM COOKBOOK】Sequences||激励
【UVM COOKBOOK】Sequences||UVM Sequences
UVM sequence在事务层面提供了一种面向对象的激励生成方法,一方面让测试用例编写更加高效,另一方面提高了测试用例的可复用性。
空白的贝塔
2021/10/28
9670
【UVM COOKBOOK】Sequences||UVM Sequences
【日更计划094】数字IC基础题【SV部分】
function中不能使用任何延时语句。上面的例子中,function调用了一个耗时的task,这是非法的。
空白的贝塔
2021/04/07
7330
【日更计划119】数字IC基础题【UVM部分】
UVM具有phase机制,由一组构建阶段,运行阶段和检查阶段组成。在run()阶段进行实际的测试仿真,并且在此phase中,每个组件都可以在开始时提出raise_objection和drop_objection。一旦所有组件都drop_objection,则run_phase完成,然后所有组件的check_phase执行,然后测试结束。
空白的贝塔
2021/06/17
6150
SystemVerilog的一个简单验证demo
是一个简单的memory。就六个信号,时钟信号clk,复位信号reset(高有效),读使能信号rd_en,写使能信号wr_en,写数据信号wdata,读数据信号rdata。
数字IC小站
2020/07/01
2.1K0
【日更计划088】数字IC基础题【SV部分】
struct表示不同数据类型的集合。例如:在下面的示例中,我们定义了一个名为instruction_s的struct,该struct由24位地址和8位操作码构成。
空白的贝塔
2021/04/07
5380
【日更计划089】数字IC基础题【SV部分】
ref关键字用于通过引用而不是值的方式传递参数。子例程/函数与调用者共享句柄以访问值。这是传递诸如类对象或对象数组之类的参数的有效方法,否则创建副本将消耗更多内存。同样,由于调用方和function/task共享相同的引用,因此使用ref在函数内部完成的任何更改也对调用方可见。
空白的贝塔
2021/04/07
6880
【UVM COOKBOOK】UVM基础【二】
testbench分析部分的第一个任务是监测DUT上的活动。和driver一样,monitor也是agent的组成部分。类似于driver组件,执行的也是实际信号活动和该活动的抽象表示之间的转换(接口上的信号变化翻译成环境中的transaction)。Monitor和Driver之间的关键区别是Monitor总是被动的,不驱动接口上的任何信号。当agent处于passive模式时,Monitor仍将执行。
空白的贝塔
2021/08/10
1.8K0
【UVM COOKBOOK】Sequences||sequence item与事务方法
UVM产生激励是通过sequence sequencer以及driver三者配合实现的。生成激励的flow的框架是围绕sequence构建的,但是生成数据流使用sequence_items作为数据对象。由于 sequence_items 是构建sequence的基础,因此在设计时需要注意一些问题。Sequence_item的内容由driver在pin一级的时序决定的;通过支持随即约束,sequence item能够更加简单地生成新的item;此外,还包括了其他参数如用于分析的回调钩子。
空白的贝塔
2021/10/28
1.9K0
【UVM COOKBOOK】Sequences||sequence item与事务方法
【日更计划092】数字IC基础题【SV部分】
上面的例子中,如果表达式与指定的内容完全匹配,则执行后续语句,如果出现x或者z,将执行默认语句。
空白的贝塔
2021/04/07
3250
【日更计划090】数字IC基础题【SV部分】
function和task的每一个参数都有他的方向,input,ouput,inout或者ref。如果没有显式声明,则默认与前面的参数保持一致,如果前面没有参数,则默认为输入。上述代码中,第一个参数array的方向为ref,而后续a和b没有显式声明,所以将延续前者的方向,即为ref。
空白的贝塔
2021/04/07
5560
【日更计划114】数字IC基础题【UVM部分】
try_next_item(), item_done(), and put() 是非阻塞的
空白的贝塔
2021/06/17
7340
SV数组维度定义迷思
经过大佬指点,错误的原因在于,两者定义维度的时候不一致,bit [255:0] mem_fmap_in [2048];和bit [255:0] mem_fmap_in [2047:0];的索引顺序是不一致的,如果将我定义时的代码改成下面的一种,都能避免错误。
空白的贝塔
2020/11/27
8380
相关推荐
【日更计划098】数字IC基础题【SV部分】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验