法一
author : Mr.Mao
e-mail : 2458682080@qq.com
module div11x
(
input clk,
input reset_n,
output q
);
reg [3:0] cnt;
reg x_p,x_n;
always @(posedge clk,negedge reset_n)
if(!reset_n)
cnt <= 0;
else if(cnt < 11-1)
cnt <= cnt + 1'b1;
else
cnt <= 0;
always @(posedge clk,negedge reset_n)
if(!reset_n)
x_p <= 0;
else if(cnt < 11/2)
x_p <= 1;
else
x_p <= 0;
always @(negedge clk,negedge reset_n)
if(!reset_n)
x_n <= 0;
else
x_n <= x_p;
assign q = x_p | x_n;
endmodule
法二
author : Mr.Mao
e-mail : 2458682080@qq.com
module Fre_div_11(clk , clk_out, rst_n) ; //11分频
input clk,rst_n ; //奇数分频需要对上升沿和下降沿分别采样,得到占空比为50%的时钟
output clk_out ;
reg [3:0] cnt_p, cnt_n;
reg clk_p, clk_n;
always@(posedge clk or negedge rst_n) //上升沿触发
begin
if(!rst_n) begin cnt_p <= 0; clk_p <=0; end
else
begin
if(cnt_p == 10)
cnt_p <= 0 ; //计数清零
else
cnt_p <= cnt_p + 1 ;
if(cnt_p == 4)
clk_p <=~ clk_p ; //时钟翻转
else if(cnt_n == 9)
clk_p <=~ clk_p ; //时钟翻转
end
end
always@(negedge clk or negedge rst_n) //下降沿触发
begin
if(!rst_n) begin cnt_n <= 0; clk_n <= 0 ; end
else
begin
if(cnt_n == 10)
cnt_n <= 0 ; //计数清零
else
cnt_n <= cnt_n + 1 ;
if(cnt_n == 4)
clk_n <= ~ clk_n ; //时钟翻转
else if(cnt_n == 9)
clk_n <= ~ clk_n ; //时钟翻转
end
end
assign clk_out = clk_n | clk_p ; //两输出波形相或运算,assign只能是net型
endmodule