手撕代码verilog-任意整数分频
(1)可实现奇数分频和偶数分频,占空比非50%;
(2)可实现奇数分频和偶数分频,占空比50%;
(1)
// 奇数 或 偶数分频;占空比非百分之50
module oddevendiv(
input clk,
input rst_n,
input [7:0] div_number,
output reg clk_out);
// 在 N-1 时,cnt归零;
// 在 (N-1)>>1 时, clk_out 反转
reg [7:0] cnt;
always@(posedge clk or negedge rst_n)
if(!rst_n)
cnt<=0;
else if(cnt== div_number-1)
cnt<=0;
else
cnt<=cnt+1;
always@(posedge clk or negedge rst_n)
if(!rst_n)
clk_out<=0;
else if(cnt==0)
clk_out<=1;
else if(cnt== (div_number-1)>>1 )
clk_out<=0;
endmodule
// 总结:核心 模N计数器;在(N-1)>>1 信号翻转
(2)
// 奇偶分频,50%占空比
module oddevendiv(
input clk,
input rst_n,
input [7:0] div_number,
output clk_out);
// 分频和上述一样;只,奇数分频 在negedge