发布网友 发布时间:2024-04-02 23:50
共1个回答
热心网友 时间:2024-07-24 16:59
你好,使用以下程序即可,使用时只需改变N值,N的取值大小请看注释,此程序适合对任意时钟的整数分频(包括奇偶),此程序已通过验证。根据你的情况,想得到1HZ,N取50000000即可;想得到5HZ,N取10000000即可。/******************************************************************************************Author:BobLiuE-mail:shuangfeiyanworld@163.comDevice:EP2C8Q208C8Tool:Quartus8.1Function:实现时钟的任意整数分频Version:2012-1-9v1.0********************************************************************************************/modulediv_N(inputCLK,//基准时钟outputCLK_div_N//N分频后得到的时钟);wire[31:0]N=20;//N为分频系数,N≥2即可,N的值为CLK除以CLK_div_N后取整(四舍五入)/********************产生备用时钟1***************/reg[31:0]cnt1;regCLK_div_N_1;always@(posedgeCLK)beginif(N%2==0)//如果N为偶数beginif(N==2)//如果N为2CLK_div_N_1<=~CLK_div_N_1;elsebeginif(cnt1==(N-2)/2)begincnt1<=0;CLK_div_N_1<=~CLK_div_N_1;endelsecnt1<=cnt1+1;endendelse//如果N为奇数beginif(cnt1==N-1)cnt1<=0;elsecnt1<=cnt1+1;if((cnt1==N-1)||(cnt1==(N-1)/2))CLK_div_N_1<=~CLK_div_N_1;else;endend/***********************产生备用时钟2*********************/wireCLK0=(N%2)?(~CLK):0;//如果N为偶数,备用时钟2(CLK_div_N_2)恒为0,即不需要用到此备用时钟reg[31:0]cnt2;regCLK_div_N_2;always@(posedgeCLK0)beginif(cnt2==N-1)cnt2<=0;elsecnt2<=cnt2+1;if((cnt2==N-1)||(cnt2==(N-1)/2))CLK_div_N_2<=~CLK_div_N_2;end/********************产生最终分频时钟************************/assignCLK_div_N=CLK_div_N_1|CLK_div_N_2;endmodule--BobLiu原创