转行上岸年薪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

相关推荐

05-04 09:38
已编辑
门头沟学院 引擎开发
个人9本海硕,本硕期间一直在投游戏相关实习/校招,岗位由客户端->引擎->TA->AIGC。最终目标肯定是独游制作人,所以程序策划美术都点了些,感觉也没谁了。值此春招末尾总结下技术向校招要点,算是回馈牛客社区了。也附上我的Github和个人博客,欢迎各种交流讨论。 前言 首先是个人惯例的劝退游戏行业。参见缅怀故人 和永远有多远 ,相比于互联网,游戏薪资大概相当但要求更高,加班严重且更为局限。如果你只是带着一腔热情想入这行,建议先找个日常实习了解下真实的游戏行业再做选择。 准备 当然,在你决定踏出这步后,第一步就是准备相关的笔试面试。这里先建议找到你感兴趣的公司岗位的JD,然后...
牛客28967172...:说的还是有道理的,我校招时就拿到过网易雷火好几个顶级项目组方向的offer,基本上流程和你说的一样。 但本质还是劝退互联网的游戏方向,本质上是代价更高,而且职业生涯容错率很低,方向比较窄。 代价是众所周知的严重加班,游戏大版本赶工基本上通宵无休,甚至国庆五一都没放假是常态。 职业生涯性价比低是因为游戏行业本质上就是赢家通吃,但你要跳槽只有腾讯网易等头部,要么就是米哈游莉莉丝库洛三七等少数中厂,然后就没了,公司是断崖的少 游戏开发相比互联网方向岗位非常非常少,比如网易整个雷火也才五六百人,里面十几个工作室,招人比例非常低,其他游戏公司也是一样。 而且方向也很窄,你做引擎开发就只能跳相关,你做游戏客户端也只能跳相关(游戏客户端都算吃香的,但市场hc也非常非常少,跳槽机会更少),基本上很难转回互联网 这里对比传统互联网,大厂多的都说不过来,而且容错率很大,你做搜索方向可以跳推荐,你做推荐方向可以跳广告,要求远没有游戏行业那么严,甚至你之前干测试都能跳槽研发方向
我的求职进度条
点赞 评论 收藏
分享
wu970:标准北漂配置,怎么看着装修风格有点像自如的😭
点赞 评论 收藏
分享
评论
13
139
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务