《基于verilog的分频器设计-(可实现任意整数分频)(共3页).doc》由会员分享,可在线阅读,更多相关《基于verilog的分频器设计-(可实现任意整数分频)(共3页).doc(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上1. 讲废话 就像鱼儿离不开水一样,在CPLD/的世界里,没有时钟也是万万不行的。不仅如此,有时候在我们的设计中或多或少会需要用到不同频率的时钟信号,这就要求我们对系统时钟进行分频。 如果你现在去网上搜索关于FPGA分频器的设计,会有不少大牛已经做出来了。比如“任意奇数分频” “任意偶数分频” “任意小数分频” , 类似云云。作为一个爱折腾的小菜,我总是觉得,搞这么多好麻烦哦,我不就是需要分一下频嘛,干哈还要整出这么多样式出来,顿时觉得不会再爱了。 后来的后来,我实在受不了这么多种分频方法给我带来的困扰和烦恼,决定来一个大统一,把“任意偶数分频”和“任意奇数分频” 整
2、合成一个模块,实现“任意整数分频”。所以,各位大大们,如果实在没事儿,就不要再“捡肥皂”了,试一试下面的分频方法吧,相信会让你在以后的FPGA道路上走得更加顺畅和游刃有余。2. 晒干货例化时,仅需要按您的需求修改代码中带号的参数 ps.这里只有一处需要修改/*Author:Bob LiuE-mail:Device:EP2C8Q208C8Tool:Quartus 8.1Function:实现时钟的任意分频Version: 2012-1-9 v1.0*/module div_N ( input CLK,/ 基准时钟 output CLK_div_N / N分频后得到的时钟 );wire 31:0
3、N=20; /N为分频系数,N2即可,N的值为CLK除以CLK_div_N后取整(四舍五入)/* 产生备用时钟1 */reg 31:0 cnt1;reg CLK_div_N_1;always (posedge CLK)beginif(N0=0) / 如果N为偶数,比N%2=0这种判断方式更节省资源begin if(N=2) / 如果N为2 CLK_div_N_1 1) /比cnt1=(N-2)/2这种判断方式更节省资源 begin cnt1 = 0; CLK_div_N_1 = CLK_div_N_1; end else cnt1 = cnt1+1; endendelse / 如果N为奇数be
4、gin if(cnt1=N-1) cnt1 = 0; else cnt1 = 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;reg CLK_div_N_2;always (posedge CLK0)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;endmodule3. 扯犊子 忘了交代一点,上面的设计可实现任意整数分频,任意小数分频这样的精度要求还没有加进去,请小伙伴儿们见谅啊。不过根据我的使用经验,可实现任意整数分频就够了,反正我目前还没遇到过非要采用小数分频才能用的高要求。专心-专注-专业