欢迎光临散文网 会员登陆 & 注册

数字IC手撕代码-兆易创新笔试真题

2022-09-21 18:11 作者:不吃葱的酸菜鱼  | 我要投稿


题目描述:

        有一随机产生的pulse,其最小脉宽大于5ns。现有一时钟周期为20ns的时钟,他们的关系如下图所示,请写出计算该脉冲个数的verilog代码。

解决思路:

        这道题的解决思路就是将pulse信号转换到clk域来进行处理。

        首先,每次检测到pulse的上升沿,我们就对Q1进行取反。这是在pulse域下改变Q1的值。

        其次,在每一次的时钟上升沿,我们对Q1数据进行打两拍。将Q1赋给Q2,将Q2赋给Q3,然后检测pulse的信号为:edge_dect = Q2 ^ Q3;

        最后,对edge_dect 进行计数,数字就是pulse的个数。

        这样做的原理其实就是延长pulse的宽度,让pulse能够被clk采样,接着再利用双边沿检测的方法(打两拍取异或,edge_dect = Q2 ^ Q3)得到clk域的pulse,再对其进行计数即可。

        约束:这种方法使用的前提是相邻两个pulse之间的距离要大于clk一个时钟周期,否则会出现漏采样的现象。

        针对本题pulse之间的距离均大于一个clk周期,所以可以采用该方案。

       ps:如果有人有更好的方案相邻1ns的两个5ns pulse都能检测到的话,可以在评论区讲解自己的方法。(倍频方法就算了)

代码:

testbench:

波形图

ps:由于b站截图显示不全,up将完整代码传至网盘自取,总计代码量35行左右,总体难度:简单。

代码自取

链接:https://pan.删除中文baidu.com/s/1qWJrw删除中文_OwGIHhUamXdElFJQ 

提取码:sh4p 



数字IC手撕代码-兆易创新笔试真题的评论 (共 条)

分享到微博请遵守国家法律