实现一个上升沿触发的占空比不为50%的n分频信号
在实现一个下降沿触发的占空比不为50%的n分频信号(n 为奇数)
将两路信号相或
module clkn(clr,clk,clkout);
input clr;
input clk;
output clkout;
input clr;
input clk;
output clkout;
reg rise_clkn;
reg down_clkn;
reg [3:0] rCount;
reg [3:0] dCount;
parameter nData=4'd5; //用来控制奇数分频数
reg down_clkn;
reg [3:0] rCount;
reg [3:0] dCount;
parameter nData=4'd5; //用来控制奇数分频数
/***********************************************/
always@(posedge clk or negedge clr)
begin
if(!clr)
begin
rise_clkn<=1'b1;
rCount<=4'd0;
end
else
if(rCount==nData)
begin
rCount<=1'b1;
rise_clkn<=~rise_clkn;
end
else if(rCount==((nData-1'b1)/2))
begin
rise_clkn<=~rise_clkn;
rCount<=rCount+1'b1;
end
else
rCount<=rCount+1'b1;
end
begin
if(!clr)
begin
rise_clkn<=1'b1;
rCount<=4'd0;
end
else
if(rCount==nData)
begin
rCount<=1'b1;
rise_clkn<=~rise_clkn;
end
else if(rCount==((nData-1'b1)/2))
begin
rise_clkn<=~rise_clkn;
rCount<=rCount+1'b1;
end
else
rCount<=rCount+1'b1;
end
/***************************************************/
always@(negedge clk or negedge clr)
begin
if(!clr)
begin
down_clkn<=1'b1;
dCount<=4'd0;
end
else
if(dCount==nData)
begin
dCount<=1'b1;
down_clkn<=~down_clkn;
end
else if(dCount==((nData-1'b1)/2))
begin
down_clkn<=~down_clkn;
dCount<=dCount+1'b1;
end
else
dCount<=dCount+1'b1;
end
begin
if(!clr)
begin
down_clkn<=1'b1;
dCount<=4'd0;
end
else
if(dCount==nData)
begin
dCount<=1'b1;
down_clkn<=~down_clkn;
end
else if(dCount==((nData-1'b1)/2))
begin
down_clkn<=~down_clkn;
dCount<=dCount+1'b1;
end
else
dCount<=dCount+1'b1;
end
assign clkout=rise_clkn || down_clkn;
endmodule
endmodule
本文介绍了一种使用Verilog实现非50%占空比的n分频信号的方法,该方法可以针对上升沿和下降沿分别生成特定的分频信号,并通过或运算组合起来。代码详细展示了如何控制信号的占空比,适用于需要精确控制时钟频率和占空比的应用场景。
9421

被折叠的 条评论
为什么被折叠?



