Verilog实现奇偶分频代码.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Verilog实现 奇偶分频 我把其中的实现奇数分频 50 % 做成了IP(具体 原理可以参见),调用时只需将参数传递过去就行了。 建议大家在写这种基本模块时,写成parameter 定义参数的形式家锐的Blog,方便日后的调用。 Source Code ------------------------------------------------------------------------------------------------------- module div( ???????? input clk, ???????? output clk_div ???????? ); ???????? ??? parameter N=2; ??? integer counter_pos=0; ??? integer counter_neg=0; ??? reg clk_pos=0; ??? reg clk_neg=0; ??? ??? or o1(clk_div,clk_pos,clk_neg); ??? ??? always@(posedge clk) ?????? begin ?????????? if(counter_pos!=N) ????????????? counter_pos=counter_pos+1; ??????????? else ?????????????? counter_pos=0; ?????????????? ?????? end ??? always@(negedge clk) ?????? begin ?????????? if(counter_neg!=N) ????????????? counter_neg=counter_neg+1; ??????????? else ?????????????? counter_neg=0; ?????????????? ?????? end ?????? ??? always@(counter_pos) ?????? begin ?????????? if(counter_pos==0 || counter_pos==N1) ?????????? clk_pos=~clk_pos; ?????? end ?????? ??? always@(counter_neg) ?????? begin ?????????? if(counter_neg==0 || counter_neg==N1) ?????????? clk_neg=~clk_neg; ?????? end ?????? ?? endmodule ------------------------------------------------------------------------ 使用说明: 在调用时只需要将参数传递就行了 如:我们实现(M+1)分频,其中M是偶数,实例化时 div? #(.N(M)) d(.clk(),.clk_div()); ps: 今天突然想到了一种可以实现任意整数 50%占空比的分频方法。 大体思路是根据时钟每个周期都有两次电平变化,实现N分频的时,总共有2xN次电平变化,分频时将时钟分成前N个 时间,和后N个时间,就可以实现50%站空比了。 Source Code ------------------------------------------------------------------------------------------------------------ module div_half( ??????????? input clk, ??????????? output reg clk_out=0 ??????????? ); parameter N=3; integer counter=0; always@(clk) ?? begin ?????? if(counter != ((N1) -1)) ????????? counter=counter+1; ??????? else ?????????? counter=0; ?? end ?? always@(counter) ?? begin ?????? if(counter == N || counter ==0) ?????? clk_out=~clk_out; ?? end ? endmodule ------------------------------------------------------------ ? testbench ———————————————————————— module div_half_test; ???

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档