做一下笔记,关于奇数分频

奇数分频之前本科做过很多,现在突然又忘了,最近在整理代码,把一些简单的小代码整理起来,以便以后随时查看。

奇数分频采用时钟的上升沿和下降沿分别计数分频得到两个占空比不为50%的时钟信号,然后在进行或操作得到输出的占空比为50%的时钟。

下面是奇数分频的小代码,亲测可以实现。

//奇数分频代码

//作者:昌磊

//单位:电子科技大学

//时间:2017.9.28

module odd_divide(
      clk,
		rst_n,
		clk_odd,
		clk_up,
		clk_down,
      cnt_down,
      cnt_up		
);
input clk;
input rst_n;


output clk_odd;
output clk_up;
output clk_down;


output cnt_up;
output cnt_down;


reg clk_up;
reg clk_down;


reg [3:0]cnt_up;
reg [3:0]cnt_down;


parameter N1=3,N2=6;//假设为N分频,则,N1=(N-1)/2,N2=N-1


assign clk_odd=clk_down|clk_up;


always@(posedge clk or negedge rst_n)
    if(rst_n==1'b0)
	    begin 
		   clk_up<=0;
	    end
	 else if(cnt_up==N1)
	         begin 
				clk_up<=~clk_up;
				end
	 else if(cnt_up==N2)
	         begin 
			   clk_up<=~clk_up;
				end	
    else clk_up<=clk_up;
	 
always@(negedge clk or negedge rst_n)
    if(rst_n==1'b0)
	    begin 
		   clk_down<=0;
	    end
	 else if(cnt_down==N1)
	         begin 
				clk_down<=~clk_down;
				end
	 else if(cnt_down==N2)
	         begin 
			   clk_down<=~clk_down;
				end	
    else clk_down<=clk_down;
/********************************************/
always@(posedge clk or negedge rst_n)
    if(rst_n==1'b0)
		    cnt_up<=4'd0;
	 else if(cnt_up==N2)
	       cnt_up<=4'd0; 
	      else
          cnt_up<=cnt_up+1'b1;
	
always@(negedge clk or negedge rst_n)
    if(rst_n==1'b0)
	      cnt_down<=4'd0;
	 else if(cnt_down==N2)
	       cnt_down<=4'd0;
			else
			 cnt_down<=cnt_down+1'b1;


endmodule 


//测试代码

`timescale 1 ns/1 ns


module odd_divide_simulation();


reg clk;
reg rst_n;


wire clk_odd;
wire clk_up;
wire clk_down;
wire [3:0]cnt_down;
wire [3:0]cnt_up;




/***********************/


odd_divide U1(
    .clk(clk),
	 .rst_n(rst_n),
	 .clk_odd(clk_odd),
	 .clk_up(clk_up),
	 .clk_down(clk_down),
	 .cnt_down(cnt_down),
    .cnt_up(cnt_up)
	 );


/*************************/


initial 
begin
    rst_n=0; #1000;rst_n=1;
	 clk =0;forever #25 clk=~clk;
end
endmodule 


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值