偶分频与奇分频

主要分为:

占空比50%;占空比非50%;

下面为:占空比50%;

1、偶分频:对时钟信号进行2、4、6、8等等偶数分频,比较容易,例如4分频,代码如下:

module div_4
(
    input    wire    sys_clk    ,
    input    wire    rst_n    ,
    output    reg    clk_4
);
    reg    cnt;
    always@(posedge sys_clk or negedge rst_n)
        if(~rst_n)
            cnt <= 1'b0;
        else
            cnt <= cnt + 1'b1;
    
    always@(posedge sys_clk or negedge rst_n)
        if(~rst_n)
            clk_4<= 1'b0;
        else if(cnt==1'b1)
            clk_4<= ~clk_4;
        else
            clk_4<= clk_4;
endmodule

2、奇分频,3/5/7等等,例如5分频,

module div_5
(
	input	wire	sys_clk	,
	input	wire	sys_rst_n,
	output	wire	clk_5
);
	reg	[2:0] cnt1;
	reg	[2:0] cnt2;
	reg clk_1;
	reg	clk_2;
	always@(posedge sys_clk or negedge sys_rst_n)
		if(~sys_rst_n)
			cnt1 <= 3'd0;
		else if(cnt1==3'd4)
			cnt1 <= 3'd0;
		else
			cnt1 <= cnt1 + 1'b1;
	always@(posedge sys_clk or negedge sys_rst_n)
		if(~sys_rst_n)
			clk_1 <= 1'b0;
		else if(cnt1>3'd2&&cnt1<=3'd4)
			clk_1<= 1'b1;
		else
			clk_1 <= 1'b0;
	always@(negedge sys_clk or negedge sys_rst_n)
		if(~sys_rst_n)
			cnt2 <= 3'd0;
		else if(cnt2==3'd4)
			cnt2 <= 3'd0;
		else
			cnt2 <= cnt2 + 1'b1;	
	always@(negedge sys_clk or negedge sys_rst_n)
		if(~sys_rst_n)
			clk_2 <= 1'b0;
		else if(cnt1>3'd2&&cnt1<=3'd4)
			clk_2 <= 1'b1;
		else
			clk_2 <= 1'b0;
	assign clk_5 = clk_1 | clk_2;
endmodule

占空比非50%:不管是偶分频还是奇分频,都比较简单。

按照具体要求实现即可。

你可能感兴趣的:(fpga基础学习,fpga开发)