微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 我写的任意奇数分频,大家挑一下毛病

我写的任意奇数分频,大家挑一下毛病

时间:10-02 整理:3721RD 点击:
module divide(clk,reset,clk_out,clk_out1,clk_out2);
input clk,reset;
output clk_out,clk_out1,clk_out2;
parameter N=7;
reg[N/2:0] qq,dq;
reg clk_out1,clk_out2;
always @(posedge clk)
begin
if(!reset)
qq<=0;
else
qq<=qq+1;
if(qq==N-1)
begin
qq<=0;
end
end
always @(qq)
begin
if(qq<N/2)
clk_out1<=1;
else
clk_out1<=0;
end
always @(negedge clk)
begin
if(!reset)
dq<=0;
else
dq<=dq+1;
if(dq==N-1)
begin
dq<=0;
end
end
always @(dq)
begin
if(dq<N/2)
clk_out2<=1;
else
clk_out2<=0;
end
assign clk_out=clk_out1||clk_out2;
endmodule

怎么没人说呀?

我学vhdl的,不懂你的东东。

呵呵,我也是学vhdl看不懂啊,能给个vhdl的么?

大概看了看,应该是50%的duty cycle
不错不错,

就是不应该在always的触发事件中用negedge,
所有dff都应该用一样的edge触发,

可以用时钟取反再去count,用“clk_neg”来做dq,

还有一个always下用两套if-else会不会不太好,
不大清楚,但是很少见这样写code
可以只用一个if-else,但是多层嵌套
一家之言,呵呵

以前面试写过一个19分频,
要求近似50%dutycycle,
所以做了两个14,15counter,
没有用反沿来做

不错,粘下来研究研究

always 中可以使用negedge的吧,如果如上所说修改时钟的话反而不好,无故的增加时钟树的难度
另外,always触发条件中用电平触发容易产生锁存器,是不好的编码风格吧
我也只学了1年半哈,有不对的地方大家多指教哈

我写过三分频的,认为任意奇数分频不成问题

reg[N/2:0] qq,dq;
这是什么?N=7,7/2=3.5吗?
他们的宽度是3,还是4,还是3.5,
汗,我搞了3年FPGA了,这个问题现在才考虑到!

ISE上的综合结果是4个位宽
看回复才知,这个论坛上的人多数"很傻很天真",可能也包括我自己!

总觉的这种实现方式不大好
既然用到时钟的双沿,其实就相当于了倍频
首先要考虑输入时钟的稳定性
再者要考虑实际器件是否能达到倍频的时钟频率,如果器件比较低端,输入时钟很高,这种方式就不大可行.
奇数分频时钟要达到50%的占空比不大好实现.
尽量减少奇数分频的情况

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top