原创 浅谈FPGA学习之奇葩分频体验

2016-3-23 21:57 1131 2 4 分类: FPGA/CPLD

前几天在一家做逻辑设计的公司里做了一道笔试题,有些心塞。用Verilog HDL描述三分频的实现。说实话,一开始我是拒绝的。我之前做过分频实验,几百毫秒的LED闪烁,控制蜂鸣器发出不同音频段的声音,都是分频实验的例子。现在想想,基本都是偶数分频。

一开始我是6分频的基础上做了2倍频,结果描述内容过于繁琐,以致写着写着就放弃挣揣,没经历过得东西是编不出来的。回来在网上找到了许多解决奇、偶数的分频实现。说实话,理论知识还是比较多的,就是代码实现有些欲盖迷彰,我抄写下来验证几乎都是错的。好在理论知识分析透彻,而后我自己尝试编写了一下,写下作为分享。

        偶数分频,例如二分频,简单讲就是一个时钟周期的高电平和一个时钟周期的低电平。设reg  cnt,默认一位,每一个时钟上升沿自加1,则cnt的电平变化就可以作为二分频输出。由此,设reg [3:0] cnt,则cnt[1],cnt[2],cnt[3]对应4/8/16分频。这些操作,我们常常在led延时处理上用到。

20160323215451332.jpg

语言描述如下:

module test2_1(clk,rst_n,clk_out2,clk_out4,clk_out8);

input clk;

input rst_n;

output clk_out2;

output clk_out4;

output clk_out8;

reg [2:0]cnt;

always@(posedge clk or negedge rst_n)

if(!rst_n)

cnt <= 3'd0;

else

cnt <= cnt +1'b1;

assign clk_out2 = cnt[0];

assign clk_out4 = cnt[1];

assign clk_out8 = cnt[2];

endmodule

       另类偶数分频如6/10/12分频,可在前3/5/6个整数周期处理输出高/低电平,后3/5/6个整数周期取反,操作相对简单,可实现输出为占空比为1:1的分频信号。占空比不等的情况就更简单。

20160323215538803.jpg

关键语言描述如下: N=6

if(cnt < N/2-1)begin

cnt <= cnt + 1'b1;

end

else begin

cnt <= 3'd0;

clk_out <= ~clk_out;

End

在设计中,我处理为cnt < N/2,cnt小于等于 N/2-1,结果实现均为8分频。我开始分析cnt < 3,cnt就只有取0,12为一种状态的电位,记满到3时,电位取反,cnt清零,重复执行得到效果。而事实上cnt < N/2-1才正确。我寻思着这样不是取了01两次数吗。后来在奇数分频遇到类似问题。

奇数分频占空比为1:1的实现比较复杂,以5分频为例,我采用两个计数器,一个计数器在时钟上升沿触发计数,另一个计数器在时钟下降沿触发计数(或clk_n = ~clk)。各自控制产生一个5分频信号,调节占空比为32(容易)。第一个5分频比第二个5分频快半个周期,两个信号取或,完美将占空比分配为1:1,通俗点说,就是3-0.5 = 2+0.5

此时,我也遇到了cnt < N-1cnt2 == (N-1)/2的问题,尤其是cnt2 == (N-1)/2,表面上让我误以为是占空比为2:3,但事实上是信号占空比为3:2。后来在仿真中我多添加了cnt的检测,效果就明显看出来了。而究其根源是alwaysclk上升沿采样与赋值改变之间的先后关系,而这在后仿真中逻辑延时能体现出来。语言描述较长,在附录中呈现。

20160323215625474.jpg

因为上升沿和赋值几乎一条线,我没有混淆是先采集还是先赋值,而是会纠结于多算一个周期或少算一个周期。我还发现自己的逻辑设计不熟练导致与理想效果还是有差距的。调试时,花在逻辑优化的时间较长,另外在后仿真中cnt始终为Z态,不便于我观察,这是我的疑惑,也是接下来要解决的吧。

备注:我会在智慧科技(优先)、EDN、电子产品世界更新内容,信息不涉及商业用途。

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户377235 2016-3-29 09:47

恩,常考奇数分频

用户1849145 2016-3-24 09:59

相关推荐阅读
用户1826666 2016-04-17 20:44
自平衡小车从入门到放弃
文章风格不同与以往,带着随意写下我不擅长的所谓自平衡,在意者慎入。我不知道该如何写这篇文章,因为一提到制作自平衡小车的时候,我是拒绝的,其中缘由不谈也罢。我很少接触控制类的项目,也就略显羞涩了许多。跟...
用户1826666 2016-03-29 09:30
浅谈FPGA学习之思想与状态机的碰撞(上)
      FPGA设计不是简单的语言描述,更应关心它的底层逻辑实现。状态机不仅仅是一种时序电路的设计方式,更是一种思维模式,能够让人理顺思路,攻克设计中的难点。希望把这些点滴记录下来,以便强化FPG...
用户1826666 2016-03-21 10:06
浅谈FPGA学习之逻辑初体验
        校招未至,社招先行。网投了几家公司,基本都有回复,算是多一些机会吧。几天忙在笔试与面试中,说实话,社招公司对项目经历更看重,相应能力要求就更高。但面试输不在气场,人总要尝试,只要能...
用户1826666 2016-03-06 12:25
浅谈GSM远程图像传输及拓展
一、硬件平台        主控芯片选用STC12系列单片机(双通道232),GSM通信模标准(SIM300),VC0706串口摄像头。 二、功能实现        用户发送拍照的短息...
用户1826666 2016-02-21 03:26
夜寂寥、生活、随笔
行走中的反思     离上次写随笔有一年光阴了,写在冬天可能它给人的冷静更多些吧。感到欣慰的是今年陪伴外婆的时间比以往长许多,也会主动去关心他们的身体状况。可能是外婆得病后我更能体会这份情谊的...
EE直播间
更多
我要评论
2
2
关闭 站长推荐上一条 /3 下一条