首页 > 其他分享 >IC验证面试经验分享——Verilog篇

IC验证面试经验分享——Verilog篇

时间:2024-08-18 21:22:18浏览次数:15  
标签:异步 同步 复位 亚稳态 面试 时间 Verilog IC 时钟

面试官(高冷脸):说说离职原因?(内心os:看看你小子是不是也被裁了还是初生牛犊不知道当今环境的恶劣在这玩裸辞)
我(已读乱回):如果可以,我想和它回到那天相遇,让时间停止那场面试,红线划过拒绝offer的按钮,我用尽全力。–改自歌曲《如果可以》(内心os:挥手错的才能和对的相拥)

IC验证面试经验分享


好久没更新了,因为博主忙于面试实在是无暇整理更新,也不知道有没有掉粉,裸辞一个月拿下新offer,火速开启新的牛马生活了。之前感觉软件的面经满天飞,IC的面经还是略显小众,并且免费的帖子更少了,借此机会给大家分享一下面经,不用太感谢博主哈哈哈(自豪脸),那就开始把!


Verilog篇

作为一个合格的IC验证er,技能树上必然缺不了Verilog,这不一定是验证面试的重点,但是验证不是目的,不过是对设计的手段,所以最后还是回回归Verilog设计,这也是会在很多面试官的考察范围内的。这里只整理被常问的几大问题,欢迎补充

1.同步复位、异步复位、异步复位同步释放

  • 同步复位:只有时钟上升沿到来,复位信号才能产生有效的变化
    • 优点
      • 一般能保证电路是同步
      • 确保复位只发生再时钟有效沿,可以过滤毛刺
    • 缺点
      • 复位信号的有效时长必须大于时钟周期,才能完成复位
      • 目前大部分触发器都有异步复位接口,采用同步复位相对耗费逻辑资源
        在这里插入图片描述
module dff_sync(
	input clk,
	input d,
	input r_n,
	output q);
	always @(posedge clk) begin
		if(!r_n)
			q <= 0;
		else
			q <=d ;
	end
endmodule
  • 异步复位:无论时钟边沿到来与否,只要复位信号有效输出就会被复位。(与时钟没有关系)。
    • 优点
      • 设计相对简单
      • 大部分器件库的触发器都有异步复位的端口,节省资源
    • 缺点
      • 复位信号释放时容易出现亚稳态的问题
        在这里插入图片描述
module dff_async(
	input clk,
	input d,
	input ar_n,
	output q);
	always @(posedge clk or ar_n) begin
		if(!ar_n)
			q <= 0;
		else
			q <=d ;
	end
endmodule
  • 异步复位同步释放:复位是异步的,但是释放是同步的,实现原理就是用两个D触发器打两拍实现两级同步,第一个D触发器的输入口D固定为1。
    • 优点
      • 兼具了同步复位和异步复位的优点,也解决了他们的缺点
      • 相比同步复位,不需要复位信号时长大于时钟周期,因为复位是异步的
      • 相比异步复位,可以解决亚稳态问题,因为释放是同步的
module dff_sync_async(input clk,
	input r_n,
	output rst_syn_n);
    reg reg1, reg2;
 
    always @(posedge clock or negedge r_n) begin
        if(!r_n) begin
			reg1 <= 1'b0;
            reg2 <= 1'b0;		//异步复位
        end
        else begin
			reg1 <= 1'b1;
			reg2 <= reg1;		//同步释放
		end
    end
	
	assign rst_sync_n = reg2;				
endmodule							

2.亚稳态

围绕亚稳态一般是必问的问题,尤其是下面的跨时钟域处理,想知道亚稳态必须先知道建立时间和保持时间的概念。

1)建立时间,保持时间

	建立时间Tsu:时钟有效沿到来之前数据必须保持稳定的最小时间;
	保持时间Th:时钟有效沿到来之后数据必须保持稳定的最小时间;

这里学习期间还遇到容易混淆的概念:

  • 同步系统中会涉及到建立和保持时间,因为无论是控制信号还是数据信号,都需要提前保持稳定,等待CLK触发,再继续保持稳定,触发器的输出才是稳定的。
  • 异步系统中会涉及到后恢复和去除时间,因为某一个时钟上升沿到底能否有效驱动工作,取决于时钟信号和复位信号之间是否满足恢复时间或者去除时间。)

2)亚稳态的产生

	亚稳态的产生:不满足建立时间和保持时间,不满足恢复时间和移除时间。

3)亚稳态的结果

亚稳态是触发器的一个固有特性,正常采样也会有一个亚稳态时间,所以亚稳态并不会完全消除。当建立时间和保持时间满足时,触发器也会经历采样---亚稳态---稳定输出的一个过程。

而出现亚稳态问题时,亚稳态(也就是中间态)时间变长,最终输出稳定但无法保证正确(虽然你输出的是稳定的标准电平信号,但难以保证是输入对应输出)。

之前看过一个亚稳态的后果的一个很好的解释,说给大家听:

触发器的类似于一个球在一个光滑的山上滚动,上山和下山的两边山底是稳定状态,假设左边是稳态0,右边是稳态1,而山顶就是亚稳态的状态。

  • 当上山的推力足够,也就是满足建立时间和保持时间,那么不会出现亚稳态问题,球能顺利从稳态0到稳态1;

  • 但是如果推力不足,也就是不满足建立时间和保持时间,那么可能出现两种情况:

    • (1)球抵达山顶,过一段时间顺利下山,达到稳态1,但是会造成延迟稳定时间;
    • (2)球没到山顶或者刚到就折返回了山下,回到了稳态0,那就不能保证是结果的正确。

3.跨时钟域处理

接下来就到了逢面必问的问题了,也可以说时亚稳态的处理,让我们逐一分析其中的知识点,每一个都很重要。

1) 对于单bit信号

慢时钟域到快时钟域
  • 解决办法两级同步,打两拍
  • 要求目标时钟域频率比源时钟域频率高1.5倍以上, 并且源时钟域数据adata为持续时间较长的电平信号,能确保被目标时钟域采到。通常来说,如果时钟域bclk的频率是aclk频率的1.5倍以上,那么通过“打两拍”的方式进行同步)
快时钟域到慢时钟域:
  • 解决办法:脉冲展宽,然后进行边沿检测和两级同步
打两拍就一定能消除亚稳态吗?
只是消减或降低概率,亚稳态是触发器的一个固有特性,正常采样也会有一个亚稳态时间。前文已解释)

3) 对于多bit信号:

  • 解决办法:格雷码+两级同步,常见于异步fifo的设计中
格雷码为什么可以?
  • 为什么需要格雷码

    • 使用DFF打两拍可以基本消除亚稳态的问题,但是如果要采样的是一个多bit的跨时钟域信号,比如4bit信号,那么由于建立时间和保持时间的不满足,虽然在打两拍之后可以得到一个稳定的数据,但数据的每一个bit都不一定是正确的,其可能的值有2^4=16种,这显然是无法保证正确的数据。
  • 格雷码的特点

    • 格雷码相邻的两个编码之间只有一位是不一样的
    • 因此,在进行跨时钟域传输时,只有发生变化的那个bit有可能处于亚稳态,而其余bit由于保持不变,因此是稳定的,故多比特格雷码的跨时钟域传输相当于单比特信号的跨时钟域传输,我们再采用打两拍的方法即可处理。
格雷码的编码在异步fifo设计中是把什么用格雷码编码:

异步fifo的地址用格雷码编码

4.毛刺

因为亚稳态和毛刺我初学时会分不清二者,所以这里加一个,不过面试中问毛刺的貌似不多。

  • 毛刺的产生:信号由于经由不同路径传输达到某一汇合点的时间有先有后的现象,就称之为竞争,英文名Race;由于竞争现象所引起的电路输出发生瞬间错误的现象,就称之为冒险,英文名Hazard或者Risk。有竞争不一定有冒险,但出现了冒险就一定存在竞争。发生冒险时往往会出现一些不正确的尖峰信号,这些尖峰信号就是“毛刺”
  • 毛刺的消除:一般采用非阻塞赋值等

总结

不知不觉码字俩小时了,时间有限今天就先梳理Verilog篇吧,后续还有SV、UVM、协议篇,敬请期待嘻嘻。

标签:异步,同步,复位,亚稳态,面试,时间,Verilog,IC,时钟
From: https://blog.csdn.net/m0_62972188/article/details/141286825

相关文章

  • HTTP Error 503. The service is unavailable.
    第一次遇见这个问题,装了IIS重写模块导致的。查了资料才知道,是URLRewrite的版本和2012系统的lIS不兼容导致。最新的URLRewrite的版本是2018年9月20日的7.1.1993.2351版,就是这个版本产生问题,不能用在2012上,在它前面的一个版本是2017年6月7日的7.1.1980.0版,这个......
  • AIGC时代算法工程师的面试秘籍(第二十式2024.8.5-8.18) |【三年面试五年模拟】
    写在前面【三年面试五年模拟】旨在整理&挖掘AI算法工程师在实习/校招/社招时所需的干货知识点与面试方法,力求让读者在获得心仪offer的同时,增强技术基本面。也欢迎大家提出宝贵的优化建议,一起交流学习......
  • (nice!!!)LeetCode 552. 学生出勤记录 II(动态规划dp递归版、记忆化dfs)
    题目:552.学生出勤记录II思路:记忆化搜索dfs,细节看注释classSolution{public:constintmod=1e9+7;//状态f[u][a][b]表示:在选择第u个位置前,缺勤次数为a次,且当前连续迟到次数为b次时,可以得到的合法出勤次数intf[100010][5][5];intdfs(intu,int......
  • Android usb广播 ACTION_USB_DEVICE_ATTACHED流程源码分析
    整体流程图大概意思就是UsbHostManager启动监控线程,monitorUsbHostBus会调用usb_host_run函数(使用inotify来监听USB设备的插拔)不停的读取bus总线,读取到以后,当1、设备插入:发送广播ACTION_USB_DEVICE_ATTACHED2、设备拔出:发送广播ACTION_USB_DEVICE_DETACHED本篇只分析插入......
  • LuckyPico 启动速度优化 一 (Linux 启动速度优化 )
    内核压缩方式速度优化Linux内核启动一般采用自解压的方式,在编译的时候压缩,而Linux启动时对内核固件进行自动解压。因此,在这一方面,影响内核启动速度的分为两个部分,一个是内核固件的读取时间,另一个是内核解压的时间压缩算法越复杂,则内核固件尺寸越小,内核解压时间越长压缩算法越......
  • 最佳实践:在AvaloniaChat中接入SiliconCloud
    AvaloniaChat介绍AvaloniaChat是一个基于大语言模型用于翻译的简单应用。在看英文文献的过程中,比较喜欢对照着翻译看,因此希望一边是英文一边是中文,虽然某些软件已经自带了翻译功能,但还是喜欢大语言模型的翻译,但每次都要将英文复制粘贴过去还要自己手动添加prompt,还无法对照......
  • 【工具速通】Github+PicGo+VSCode编辑md文档并将插图同步图床教程
    1.配置Github1.1创建新仓库设置为public,否则无法正常访问勾选addareadmefile1.2生成token在个人主页setting里找到developersettings用于picGo访问beta是用不上的,classic就够了填写完note,修改expiration(默认30d,作者改成了无限期)勾选repo......
  • CORDIC算法解释及FPGA实现(圆坐标系)
    CORDIC算法原理阐述CORDIC(CoordinateRotationDigitalComputer)算法,即坐标旋转数字计算方法,是J.D.Volder1于1959年首次提出,主要用于三角函数、双曲线、指数、对数的计算。伪旋转在笛卡尔坐标平面(下方左图)由\(({x_1},{y_1})\)旋转θ角度至\(({x_2},{y_2})\)得到:\(({\hat......
  • 2024年图像配准最新算法EfficientLoFTR(cvpr2024) 【补丁For 双鱼眼全景视频拼接】
    前言对于双鱼眼全景拼接这个项目来说,单应性矩阵是最重要的一环。单应性矩阵中它既包含了相机的内参,也包含了相机的外参。因此就算你的相机没有特别好的定位,也能通过好的单应性矩阵救回来。2024最新DNN配准算法在双鱼眼相机拼接中,特征点检测与匹配是影响单应性矩阵最......
  • flink + iceberg 快速搭建指南
    flink+iceberg快速搭建theenvironmentincludes:minioicebergflinkCentos更换tencent的yum源备份系统旧配置文件mv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.backup获取对应版本的CentOS-Base.repo到/etc/yum.repos.d/目录各版......