本期考点
- 数字电路中为什么大部分情况下避免使用latch?
- 现在EDA工具这么高级,为什么还需要FPGA做验证?
上期答案
【004】数字IC笔面试常见题
如图第一个方框内是异步复位和同步释放电路。有两个D触发器构成。第一级D触发器的输入时VCC,第二级触发器输出是可以异步复位,同步释放后的复位信号。
异步复位:显而易见,rst_async_n异步复位后,rst_sync_n将拉低,即实现异步复位。
同步释放:这个是关键,看如何实现同步释放,即当复位信号rst_async_n撤除时,由于双缓冲电路(双寄存器)的作用,rst_sync_n复位信号不会随着rst_async_n的撤除而撤除。
假设rst_async_n撤除时发生在clk上升沿,如果不加此电路则可能发生亚稳态事件,但是加上此电路以后,假设第一级D触发器clk上升沿时rst_async_n正好撤除,则D触发器1输出高电平“1”,此时第二级触发器也会更新输出,但是输出值为前一级触发器clk来之前时的Q1输出状态。显然Q1之前为低电平,顾第二级触发器输出保持复位低电平,直到下一个clk来之后,才随着变为高电平。即同步释放。
代码核心如下:
偶数分频
偶数分频器的实现简单,用计数器在上升沿或者下降沿计数,当计数器的值等于分频系数的一半或等于分频系数时,信号翻转。偶数分频器分频原理如下图所示:
上图的的分频系数是4,就是4分频。电路原理是用一个上升沿计数的计数器,每次计数到2时输出信号clkout翻转一次,每次计数到4时clkout再翻转一次,一直周期重复下去。其他的偶数分频器原理也是一样。从波形中可以看出cnt 从00->01->10->11->00...... 一直循环记数,如果你够仔细,就可以看出cnt的最高位其实也是一个4分频的时钟。
如果偶数分频系数是2的幂,就可以用2分频器级联得到;例如4分频就是两个2分频级联,下图就是用两个2分频器级联得到4分频器。
奇数分频
奇数分频器跟偶数分频器一样,当计数器的值等于分频系数(加1或者减1)的一半或等于分频系数时,时钟信号翻转。奇数分频器分频原理如下图:
上图的分频系数是3,用一个计数器在上升沿计数,每次计数到1翻转一次,每次计数到3再翻转一次,然后周期重复得到信号clkp1,它的周期就是clk的3倍,但是它的占空比不是50%(占空比就是clk为高的时间占整个时钟周期的百分比)。奇数分频想通过计数器直接分频出占空比是50%的时钟是不可能的,必须要通过中间的临时波形,做一些逻辑“与”“或”的动作才能得到占空比50%的分频时钟。
用一个下降沿的D触发器锁存clkp1得到信号clkn1,把信号clkp1和信号clkn1做逻辑“与”就得到了占空比50%的3分频时钟信号clkout。
分数分频
分数分频也叫小数分频器,比如8.7分频。因为没办法用计数器表示0.7这种数字,所以就用一个等效的概念来进行8.7分频,原时钟87个周期的总时间等于分频后的时钟10个周期的总时间;
先做3次8分频得到时钟周期数是24,再做7次9(8加1)分频得到时钟周期数63,总共就87个时钟周期;在这87个时钟周期里面分频时钟跳变20次总共10个周期。分数分频器的原理可以用下图来概括。
用整数部分zn(=8)作为一个分频系数,zn加1(=9)作为另外一个分频系数组成一个小数分频器。
根据上面的原理可以列出下面的二元一次方程组
zn*N (zn 1)*M=87 ……(1)
N M=10 ……(2)
可以解出N和M的值分别是3和7。
小数分频是达不到50%的占空比的。