奇数分频器(verilog)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

奇数分频器

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

Filename : odd_divider.v

Author : Cardinal

Company : Cardinal

Revision : 2010/03/15 17:20

Description : Exercise of a odd divider

描述: 这是一个奇数分频器

奇数分频法有多种实现方式,这里采用的是

错位相“或”法.这里实现的实现的是3分频

占空比是50%,类似可以实现任意的N次奇数

分频

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

module ODD_DIVIDER(

clk_in,

rst_n,

clk_out

);

parameter width=2;

input clk_in;

input rst_n;

output clk_out;

reg [width-1:0] cnt_posedge,cnt_negedge;

reg clk_1toN_p,clk_1toN_n;

always@(posedge clk_in) //上升沿分频,占空比1:2

begin

if(!rst_n)

begin

cnt_posedge<=0;

clk_1toN_p<=0;

end

else if(cnt_posedge==2'b10)

cnt_posedge<=0;

else

begin

cnt_posedge<=cnt_posedge+1;

clk_1toN_p<=~clk_1toN_p;

end

end

always@(negedge clk_in) //下升沿分频,占空比1:2 begin

if(!rst_n)

begin

cnt_negedge<=0;

clk_1toN_n<=0;

end

else if(cnt_negedge==2'b10)

cnt_negedge<=0;

else

begin

cnt_negedge<=cnt_posedge+1;

clk_1toN_n<=~clk_1toN_n;

end

end

assign clk_out=clk_1toN_n||clk_1toN_p; //错位相或endmodule

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

Filename : odd_divider_tp.v

Author : Cardinal

Company : Cardinal

Revision : 2010/03/15 22:50

Description : the testbench of a odd divider

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

`timescale 1ns/1ns

`include "odd_divider.v"

module odd_divider_tp;

parameter width=2;

parameter DELAY=100;

reg clk_in;

reg rst_n;

wire clk_out;

reg [width-1:0] cnt_posedge;

reg [width-1:0] cnt_negedge;

reg clk_1toN_p;

reg clk_1toN_n;

ODD_DIVIDER my_divider(

.clk_in(clk_in),

.clk_out(clk_out),

.rst_n(rst_n)

);

always #50 clk_in=~clk_in;

initial

begin

clk_in=0;

rst_n=0;

cnt_posedge=0;

cnt_negedge=0;

clk_1toN_p=0;

clk_1toN_n=0;

#DELAY rst_n=1;

#(DELAY*20) $stop;

end

initial $monitor($time,,

,"clk_in=%d rst_n=%d clk_out=%d"

, clk_in

, rst_n

, clk_out

);

endmodule

相关文档
最新文档