通用的Verilog HDL 奇数偶数分频器

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

基于Verilog HDL的分频器设计

Verilog HDL的分频器设计作者:nyj

文中的第一个模块为通用的偶分频模块,第二个模块为通用的奇分频模块,2个模块分频占空比都为1:1,使用时只需将相应模块中parameter DIV_N = N; 中的N改为想要的分频数即可。

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

**File name: Divide_Frequency_module

**Author: nyj

**Version:

**Data: 11/7/17

**Description: Even divide FPGA CLK frequency

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

module Divide_Frequency_module

(

input CLK_In,

input RSTn,

output CLK_Out

);

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

parameter DIV_N = N;

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

reg [DIV_N:0] count;

reg clk_N;

always @ ( posedge CLK_In or negedge RSTn )

begin

if(!RSTn)

begin

count <= 1'b0;

clk_N <= 1'b0;

end

else if( count == DIV_N/2 - 1'b1)

begin

count <= 1'b0;

clk_N <= ~clk_N;

else

count <= count + 1'b1;

end

/***********************************************/ assign CLK_Out = clk_N;

/*************************************************/ endmodule

module Divide_Frequency_module

(

input CLK_In,

input RSTn,

output CLK_Out

);

/*****************************************/ parameter DIV_N = N;

/***********************************************/ reg [DIV_N:0] count_p;

always @ ( posedge CLK_In or negedge RSTn )

begin

if(!RSTn)

count_p <= 1'b0;

else if( count_p == DIV_N - 1'b1)

count_p <= 1'b0;

else

count_p <= count_p + 1'b1;

end

/***********************************************/ reg [DIV_N:0] count_n;

always @ ( negedge CLK_In or negedge RSTn)

if(!RSTn)

count_n <= 1'b0;

else if(count_n == DIV_N - 1'b1)

count_n <= 1'b0;

else

count_n <= count_n + 1'b1;

end

/************************************************/ reg clk_N_p;

always @ ( posedge CLK_In or negedge RSTn )

begin

if(!RSTn)

clk_N_p <= 1'b0;

else if(count_p <= DIV_N/2)

clk_N_p <= 1'b1;

else

clk_N_p <= 1'b0;

end

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

reg clk_N_n;

always @ ( negedge CLK_In or negedge RSTn )

begin

if(!RSTn)

clk_N_n <= 1'b0;

else if(count_n <= DIV_N/2)

clk_N_n <= 1'b1;

else

clk_N_n <= 1'b0;

end

/***************************************************/ assign CLK_Out = (clk_N_p & clk_N_n) ? 1'b1 : 1'b0;

/*************************************************/ endmodule

相关文档
最新文档