转行上岸年薪40W+学长吐血整理:面试之verilog(下)

19、说一下pre_randomize, post_randomize, randomize

①randomize()函数对代码中的rand和randc属性的变量做随机初始化,randomize()函数执行成功,返回值为1,执行失败,返回值为0。

②pre_randomize()和post_randmize()函数可以被用户重写,用户使用pre_randomize()函数,在随机前修改代码中非随机变量的值,如上下限、权重等,post_randmize()函数可以在随机后修改随机值或做一些其它的计算。

③执行顺序是   pre_randomize- randomize- post_randomize;

④randomize()函数执行失败,意味着代码中的约束constrain不可用,代码中的随机变量将保持之前的值;randomize()执行失败后,不会执行后面的post_randomize()函数;randomize()函数不能被重写(override);randomize()函数的随机种子可以被srandom()函数修改;randomize()是system verilong的内置函数,不是VMM和UVM的函数,可以随时调用,其只会修改代码中rand和randc修饰的变量的值。

①属性的区别:

(1)this访问本类中的属性,如果本类没有这个属性则访问父类中的属性。

(2)super访问父类中的属性。

②方法的区别:

(1)this访问本类中的方法,如果本类没有这个方法则访问父类中的方法。

(2)super访问父类中的方法。

③构造的区别:

(1)this调用本类构造构造,必须放在构造方法的首行。

(2)super调用父类构造,必须放在子类构造方法首行。

(3)其他区别:this表示当前对象。super不能表示当前对象

(1)this.变量:调用的当前对象的变量;

(2)super.变量:直接调用的是父类中的变量。

⑤this(参数)和super(参数)方法

(1)this(参数):调用(转发)的是当前类中的构造器;

(2)super(参数):用于确认要使用父类中的哪一个构造器。

21、实现一个5分屏的电路,占空比50%

22、手撕同步FIFO、异步FIFO;及最小深度计算

①同步FIFO代码:

②异步FIFO框图及代码

框图:

③最小深度计算(背靠背)

23、fork join、fork join_any、fork join_none(必问)

①fork…join内的所有语句都是并发执行, 其内所有线程完成了,父线程才会运行

②fork join_any:一旦fork…join_any内任何一个线程完成,父线程就会继续运行

③fork join_none:不管其内的线程是否完成,子线程和父线程都会同时执行

24、SV常用的通信手段Mailbox是怎么通信的?

①mailbox是一中允许不同进程相互交换数据的方法,mailbox是一个内置类,本质上类似于队列,但和queue队列的数据类型有很大不同,使用semaphore来控制存储队列中的push和pull。无法访问邮箱队列中的给定索引,只能按照fifo的顺序检索项目。

②mailbox前一个端口put进数据,后面连接的端口get数据,从而完成通信。

25、static function/task和automatic function/task的区别

①静态方法/任务的特点:(program/module默认为static)

如果方法被static修饰,那么其内部所有的声明的变量都是static的;

静态方法可以在类没有被实例化时被调用,通过::操作符获取,具有全局的静态生命周期;

如果方法被声明为static,那么在仿真开始时即会被创建,且可以被多个进程和方法共享;

②动态方法/任务的特点(class默认为automatic):

如果方法被修饰为 automatic,那么其内部所有的声明的变量默认都是automatic的;

如果被修饰为 automatic,那么在进入该方法后,automatic变量会被创建,而离开该进程/方法后就被销毁;

26、function和task区别;

①函数能调用另一个函数,但是不能调用任务 任务可以调用另一个任务,也可以调用函数

  ②函数总是在仿真时刻0开始 任务可以在非零时刻开始执行

  ③函数一定不能包含任何延迟,事件或者时序控制声明语句 任务可以包含延迟,事件或者时序控制声明语句

  ④函数至少要有一个输入变量,也可以有多个输入变量 任务可以没有或者有多个输入,输出,输入输出变量

  ⑤函数只能返回一个值,函数不能有输出或者双向变量 任务不返回任何值,或者返回多个输出或双向变量值

27、阻塞和非阻塞区别,在什么场景下使用;

阻塞和非阻塞赋值都是过程赋值。

28、异步复位同步释放的电路

Verilog:

电路:

29、虚方法

①通过在父类里定义虚方法(task or function),可以在当父类句柄调用一个方法时候,前提是若是这个句柄指向了子类对象,则调用的方法为子类的方法而不是父类的方法。

②将父类对象赋值给子类句柄,ERROR不会执行

③父类的句柄指向子类的对象,但是不能访问子类成员,使用虚方法可以访问子类的函数或者任务

④使用系统函数$cast()进行类型转换,转换之后的新句柄可以访问函数与变量

30、深复制和浅复制

浅复制只复制了对象的属性,也就是只为属性开辟内存空间,而方法仍然使用的是被复制对象的方法。

深复制就是将被复制对象的属性和方法都复制过去;其实现比较麻烦,需要自己定义copy函数。

31、ref类型

①ref 在外部传递的参数改变时,其调用的task或function能够实时更新数值;

②ref 操作不需要消耗仿真时间,而inout则需要消耗仿真时间。

32、#0

a=b;

#0 c=a;

#0的作用是指定后面的语句后执行。

#芯片IC验证工程师##数字IC设计工程师##数字ic#
全部评论
【内推码:NTAKmfH】中兴通讯2023校园招聘内推,网申通道:https://app.mokahr.com/m/campus-recruitment/zte/46903 (或关注中兴通讯招聘公众号进入)→ 校园招聘→选择岗位→投递简历→一键创建微简历→选择意向城市+输入内推码NTAKmfH 享受优先筛选!
点赞 回复 分享
发布于 2022-07-22 14:25

相关推荐

北京移动 网络AI工程师 传闻30w
点赞 评论 收藏
分享
10-31 14:54
已编辑
门头沟学院 算法工程师
点赞 评论 收藏
分享
12-10 19:11
重庆大学 Java
香梨想要offer:一样啊朋友,我也是被驳回了,真的挺让人无语的,为什么不一开始就挂了算了,内耗我这么多天。如果华为给每个人造成的内耗能汇聚起来,该是多大一股能量
点赞 评论 收藏
分享
评论
13
137
分享
牛客网
牛客企业服务