关于奇数分频
本帖最后由 fpgaw 于 2010-7-6 06:25 编辑module odddiv(rst,clk,clkout);
parameter N=3;//计数器的位数N的最大计数值要大于或等于M
parameter M=7; //要分频的模,取奇数
input rst;
input clk;
output clkout;
reg tempp,tempn;
reg count;
always @(negedge rst or posedge clk)
if(!rst)
begin
count<=0;
tempp<=0;
end
else
begin
count<=count+1;
if(count==M/2)
tempp<=1;
else if(count==M-1)
begin
tempp<=0;
count<=0;
end
end
always @(negedge rst or negedge clk)
if(!rst)
tempn<=0;
else
tempn<=tempp;
assign clkout=tempp|tempn;
endmodule
此处if(count==M/2)
tempp<=1;
M/2 怎么解释M是奇数啊
搞不明白 首先,从奇数分频的实质来说?其实这种方法是利用时钟的上升沿和下降沿在count不同时分别输出1,然后将两个不同的1组合起来形成输出的clkout,而之所以要用到下降沿,是因为下降沿可以让时序落后半个周期,其同上升沿组合(逻辑加)起来来满足占空比的要求<br>
举个例子来说,要实现50%占空比的5分频,则有<br>
0 1 2 3 4<br>
上升沿 高 低 低 低 低<br>
下降沿 高 高 高/低 低 低<br>
+<br>
----------------------------<br>
高 高 高/低 低 低 <br>
注意此处第高/低表示一半周期高一半周期低,满足题目要求 <br>
回到本题,我们有M/2其实就是指第三个时钟下降沿来的时刻<br>
同样,从verilog的语法上来讲:在进行整数除法运算时,结果要略去小数部分,只取整数部分<br>
你再结合程序看看,应该会明白的 多谢指点<br>
多谢! 原帖由 tingwhere 于 2007-1-22 16:28 发表<br>
首先,从奇数分频的实质来说?其实这种方法是利用时钟的上升沿和下降沿在count不同时分别输出1,然后将两个不同的1组合起来形成输出的clkout,而之所以要用到下降沿,是因为下降沿可以让时序落后半个周期,其同上升沿组 ... 谢谢呀,真是学习了,多少天的疑惑今天终于明白了!!
http://bbs.vibesic.com/images/smilies/default/smile.gif
http://bbs.vibesic.com/images/smilies/default/smile.gif
http://bbs.vibesic.com/images/smilies/default/smile.gif 这种双沿采样不是很好 原帖由 Moqi 于 2007-1-23 12:46 发表<br>
这种双沿采样不是很好 这也是我比较困惑的地方,你有什么比较好的算法来进行奇数分频(5分频以上)呢? 如果一定要50%的占空比<br>
似乎一定要利用到时钟的下沿啊<br>
<br>
但是我不理解的是,干吗非要50%的占空比?〔实际中总是利用上升沿的,很多时钟发生电路,只是保证上升沿很陡……)<br>
(N-1)/2N的占空比是很容易的<br>
<br>
给我的感觉是,这样的“设计”,其实是“算法问题”原帖由 Moqi 于 2007-1-23 12:46 发表<br>
这种双沿采样不是很好
页:
[1]