奇数分频(例7分频)
module 7fenpin(clkin, clkout);
input clkin;
output clkout;
reg [2:0] step1, step2;
always @(posedge clkin)
begin
case (step1)
3'b000: step1<=3'b001;
3'b001: step1<=3'b010;
3'b010: step1<=3'b011;
3'b011: step1<=3'b100;
3'b100: step1<=3'b101;
3'b101: step1<=3'b110;
3'b110: step1<=3'b000;
default :step1<=3'b000;
endcase
end
always @(negedge clkin)
begin
case (step2)
3'b000: step2<=3'b001;
3'b001: step2<=3'b010;
3'b010: step2<=3'b011;
3'b011: step2<=3'b100;
3'b100: step2<=3'b101;
3'b101: step2<=3'b110;
3'b110: step2<=3'b000;
default :step2<=3'b000;
endcase
end
assign clkout=step1[2]|step2[2];
endmodule
奇数分频(例7分频)
其实就是采用计数器分频
奇数分频(例7分频)
老大,好像不对吧
奇数分频(例7分频)
老兄,你这样做真的太浪费了,上升沿和下降沿都是一样的3bit计数器,你完全可以用下降沿把上升沿生成的信号打一拍嘛,另外计数器采用格雷码会好一些,虽然最后一个数会有多个bit翻转,但其它情形会好很多啊。
另外,我以前说过,如果对占空比没有太严格的要求,3/7、4/7的分频也可以啊,43:57的占空比完全符合40:60的要求了。这样就可以做到寄存器输出了。
注意是电路设计,不是代码设计。
奇数分频(例7分频)
clkout好象要定义为REG型吧
呵呵 班门弄斧了
如果CLKIN时钟有抖动怎么办?如果CLKIN出现毛刺又怎么办?这样得出的时钟不可靠!
为什么要定义为REG型,就应该是wire;reg型能assign吗?
hehe, The rtl code maybe good.
上述设计没有什么特别的,比较耗资源,最优的设计占用4个Reg。
哇,大家考虑的都好全啊,多学习学习
使用始终管理模块 随便怎么分都可以 ~FPGA 内部的模块很重要
有点问题哦
回复 #7 cat-floating 的帖子
分频电路很常见的问题啊
大家给个标准的啊,我也好学习一下
个人觉得只需用一个计数器counter,它的变化就只放在一个always语句里面就OK了吧?
就这样:
always@(clkin)
……
counter=counter+1;
……
if(counter==4b'1101) counter=4b'1111;
else if(counter<=4b'0110)clkout=0;
else clkout=1
counter=counter+1;
……
不知道这样可不可以?
各位多多指教!
不好意思,刚才写多了一句
改成:
always@(clkin)
……
if(counter==4b'1101) counter=4b'1111;
else if(counter<=4b'0110)clkout=0;
else clkout=1
counter=counter+1;
……
如果没有占空比要求,直接用时钟的上升沿实现就可以了。用计数器。
always 例化语句必须得用reg。
assign这里不用!
关于奇数数分频的原理
代码写不太清楚,只讲一下个人理解的实现原理
对于奇数分频,根据占空比可分为精确的50%占空比和对占空比没有要求两种类型。从实现角度来讲,采用模拟电路和纯数字电路来实现两种。
我们以纯数字电路实现50%占空比的7分频为例介绍:
主要的观点就是要利用上时钟沿的正负沿。
实现方式,利用正沿设计一个4/7分频器,利用负沿设计一个4/7分频器,将两个计数器的输出相与得到占空比为50%的3.5/7分频器
sdfdddsdfsdfsdfsdfsfwewfgsdfsd
看起来总是怪怪的啊!
学生作品,鉴定完毕!
这样做效果不好的
计数器分频的确比较方便啊!
班门弄斧了?