马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
分频电路(9分频)
本文章是自己编写,转载请加http://blog.eetop.cn/sunyuan214
附件是PlanB和planC,用更少的逻辑资源完成相同的
这次的题目是做一个等占空比(低电平时间等于高点平时间)的9分频电路(同步电路).因为大家第一能想到的就是verilog行为级描述分频电路,下面是一段行为级描述. 原理:通过posedge clk来实现一个计数器,计数范围为0-8.(因为做的9分频,计数到8就可以,大家可以从3,5,7分频去画一下波形就可以知道规律).然后在计数器在4和8的时候将div_p信号线反转;同样negedge clk也实现一样的动作,产生一个div_n信号线,然后div_p||div_n就可以得到占空比为50%的9分频电路。这里大概描述了9分频产生的过程,可能不是很好。后面的电路中会渗透这方面的知识。
因为服务器的原因,不能把.v文件下载下来,还请谅解。这里的代码就是通过设置N来实现几分频。 通过代码我们可以去仿真得到最终波形,这里我提供testbench,但是仿真大家仿一下,结果是正确的,我验证过了。
通过行为级的描述,不难发现,电路核心部分是计数器,那计数器应该怎么用DFF去搭建呢。对于一个组合逻辑,我们肯定知道组合逻辑的输入,那么通过组合逻辑的逻辑门肯定能推出逻辑电路的输出是什么,但是一个计数器电路,是通过时钟沿来计数,输入只有clk和rst,输出只有div_clk,这里大家可能就是蒙的,我也处于蒙的状态,还好上大学做过JK触发器的计数器电路,这就好办了。 计数器也就是0-8,那计数器需要几个能,因为最大计数到8,所以2的4次方肯定能满足8,所以只需要4个DFF就可以,我们看到计数器最终的变化是在4个DFF的Q端看到,这里记为cnt[3:0],第一个DFF的Q就是cnt[0],后面依次类推;DFF的原理是通过clk的上升沿将D端输入输出到Q端,那么是不是只要得到D端的输入逻辑电路,就可以得到Q下次要变化的值。 计数器计数过程 0(4’b0000)->1(4’b0001)->2(4’b0010)-> 3(4’b0011)-> 4(4’b0100)->5(4’b0101)->6(4’b0110)-> 7(4’b0111)-> 8(4’b1000)-> 0(4’b0000) 我们是不是看到Q端下一次要变化的趋势了,其实也就是真值表了。 这里我们用卡诺图来推导各个D端的表达式,也就是Qn+1 这里不会卡诺图化简的可以去这个网站学习一下,看一道例题就能学会https://jingyan.baidu.com/article/a681b0de6c6b223b184346d7.html
这个就是计数器8的真值表,但是对于每一个的Qn+1(D)的真值表如下,并且我已经画圈。
可以得到Q0n+1 = Q3B&Q0B
可以得到Q1n+1 = Q1B&Q0+Q1&Q0B
可以得到Q2n+1 = Q2&Q1b+Q3b&Q2B&Q1&Q0+ Q3b&Q2&Q1&Q0B
可以得到Q3n+1 = Q3b&Q2&Q1&Q0 最后可以得到一组方程 D0=Q0n+1 = Q3B&Q0B D1=Q1n+1 = Q1B&Q0+Q1&Q0B D2=Q2n+1 = Q2&Q1B+Q3b&Q2B&Q1&Q0+Q3B&Q2&Q1&Q0B D3=Q3n+1 = Q3B&Q2&Q1&Q0 这一组方程就是每个DFF的D端组合逻辑,大家照着连接一下就行,我没有直接用DFF做计数器,用的JKFF来实现,这里用JK不太好,但是JK看起来很简便,后面再说这个坑。 想要用JKFF来做计数器,就要得到J和K的输入逻辑电路,由于JKFF可以由DFF搭建出来,所以就可以将上面一组方程转换成JKFF的输入逻辑。DFF和JKFF之间的关系是Qn+1=J&QB+KB&Q;所以把上面的方程转换为JKFF的逻辑,这里举例D1和D2转换的过程,其他的可以类推。 D0=Q0n+1 = Q3B&Q0B是不是可以变化成 D0=Q0n+1 = Q3B&Q0B+0&Q0 这里根据Qn+1=J&QB+KB&Q是不是可以把对应的J0和K0提取出来 J0 = Q3B K0B = 0 -> K0 = 1 D2=Q2n+1 = Q2&Q1B+Q3B&Q2B&Q1&Q0+Q3B&Q2&Q1&Q0B我们整理一下D2=Q2n+1 = Q3B&Q1&Q0&Q2B+( Q1B+Q3b &Q1&Q0B) &Q2 这里根据Qn+1=J&QB+KB&Q是不是可以把对应的J2和K2提取出来 J2 = Q3B&Q1&Q0 K2B= ( Q1B+Q3b &Q1&Q0B)-> K2= ( Q1B+Q3b &Q1&Q0B)B 最终我们可以得到JK的方程组 J0 = Q3B K0= 1 J1 = Q0 K1= Q0 J2 = Q3B&Q1&Q0 K2= (Q1B+Q3b &Q1&Q0B)B J3 = Q2&Q1&Q0 K3= 1
|