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

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

作者头像
空白的贝塔
发布2021-04-23 15:21:58
1.3K0
发布2021-04-23 15:21:58
举报
文章被收录于专栏:摸鱼范式摸鱼范式

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

上期答案

[201] 什么是时钟块?在interface中使用时钟块有什么好处?

时钟块类似于modport,除了具备modport的信号方向指定,还能够建模信号的时序行为。下面是一个时钟块的例子。

代码语言:javascript
复制
clocking sample_cb @(posedge clk);
    default input #2ns output #3ns;
    input a1, a2;
    output b1;
endclocking

在上面的示例中,定义了一个名为sample_cb的时钟块,关联的时钟为clk。default关键字定义默认的时钟偏斜,输入为2ns,输出为3ns。输入偏斜定义了时钟采样在时钟边沿前多少个时间单位。输出偏斜定义了时钟驱动在时钟边沿后的多少个时间单位。

时钟块只能在module或者interface中定义

[202] 下面两种定义时钟偏斜的方式有什么不同?
代码语言:javascript
复制
1)     input  #1 step req1; 
2)     input  #1ns  req1;

定义时钟偏斜有两种方式

  1. 以time step为单位,这是由全局的时间精度定义的,即`timescale
  2. 之间指明具体的时间长度
[203] systemveirlog仿真里在一个timestep中有哪些主要的阶段?

systemverilog仿真器是事件驱动的仿真器,明确定义了不同的阶段来计划和执行所有事件。在仿真中,所有的事件都以timeslot为单位进行。timeslot被划分为一组有序阶段,提供设计和测试代码之间的可预测交互。如下图所示,一个timeslot可以划分为五个主要阶段,每个阶段都可以进一步的被划分为细分的子阶段。

  1. Prepone:这是timeslot最先执行的阶段,并且只执行一次。来自测试平台对设计信号的采样发生在这个阶段。
  2. Active:Active阶段包括三个子阶段:Active,Inactive和NBA(Nonblocking assignment)阶段.RTL代码和行为代码在Active阶段执行。阻塞赋值在Active阶段执行。非阻塞赋值,RHS的计算在Active阶段执行,赋值操作在NBA阶段执行。如果由#0的赋值行为,则在inactive阶段执行。
  3. Observed:Observed用于计算property(并发断言中)表达式的触发行为。在property计算期间,通过或者失败的调度会在当前timeslot的Reactive阶段进行。
  4. Reactive:Reactive阶段包括三个子阶段:Re-Active,Re-Inactive和Re-NBA(Re-Nonblocking assignment)阶段。用于执行systemverilog中program块的阻塞赋值,#0阻塞赋值,非阻塞赋值。这个独立的响应阶段确保在测试代码执行之前,设计代码的状态已经稳定。使用OVM/UVM不需要程序块,因此Reactive阶段可能使用得不多。
  5. Postponed:Postponed阶段是当前timeslot的最后一个阶段。
monitor,

strobe和其他类似的事件在此区域执行。而$dislpay事件在Active 和 Reactive(如果在program块中调用)阶段执行

[204] 根据下面的约束,哪一个选项是错误的?
代码语言:javascript
复制
rand logic [15:0] a, b, c;
constraint c_abc {
    a < c;
    b == a;
    c < 30;
    b > 25;
} 
  1. b可以取26-29之间的任意值
  2. c可以取0-29之间的任意值
  3. c可以取26-29之间的任意值

将约束内容取交集,c可以取27-30之间的任意值。

[205] 什么是systemverilog中的unique约束?

unique约束会令一组成员两两各不相同。下面是一个示例。

代码语言:javascript
复制
class Test;
    rand byte a[5];
    rand byte b;
    constraint ab_cons { unique {b, a[0:5]}; }
endclass

你答对了吗

本期题目

[206] 如何选择性的激活或者关闭一个类中的约束?
[207] 现有下面的一个类,如何生成addr大于200的Packet对象?
代码语言:javascript
复制
class  Packet;
    rand bit[31:0] addr;
    constraint c_addr { addr inside [0:100];}
endclass
[208] 什么是pre_randomize()和post_randomize()函数?
[209] 编写一个约束,为下面对象中的动态数组生成约束,使得每个元素都小于10,数组大小也小于10
[210] 编写约束,创建随机整数数组,使数组大小在10-16之间,并且数组按照降序排列

欢迎在留言区给出你的答案,正确答案将在下一期公布,或者到下面的文章获取答案

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 上期答案
  • 本期题目
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档