非整數分頻的實現

2021-06-20 16:48:37 字數 2661 閱讀 2893

時鐘分頻是數位電路設計的基礎,我們在數字系統設計過程會遇到多種分頻需求,常見的有偶數分頻、奇數分頻,和一些非整數的分頻等。

在某些設計中,對分頻出時鐘的占空比也有嚴格的要求。

常見的分頻思路(這裡以50%占空比情況舉例):

一、偶數分頻:

比如分頻係數為n,宣告乙個計數器count,count從0計數到n-1,if語句直接判斷令前半週期為0,後半個週期為1即可

如下例子:n2是乙個偶數,clk3是輸出時鐘;

always @(posedge clk or negedge rst)

begin

if (!rst)

begin

count3<=4'd0;

clk3<=1'b0;

endelse

if(count3

二、奇數分頻

參考文庫

設計思想 

對於實現占空比為50%的n倍奇數分頻,由於輸出時鐘的上公升沿是在系統時鐘的下降沿,因此不能只通過上公升沿或者下降沿決定時鐘翻轉。

首先進行上公升沿觸發進行模n計數,計數到某乙個值n時輸出時鐘進行翻轉,然後再計數(n-1)/2次,再次進行翻轉得到乙個占空比非50%奇數n分頻時鐘。同理,同時進行下降沿觸發的模n計數,等計數到n時,輸出時鐘進行翻轉,同樣再計數(n-1)/2次,輸出時鐘再次翻轉生成占空比非50%的奇數n分頻時鐘。兩個占空比非50%的n分頻時鐘進行相或運算,即得到占空比為50%的奇數n分頻時鐘。

always @(posedge clk or negedge rst)

begin

if (!rst)

begin

count1<=4'd0;

clk1<=1'b0;

endelse

if(count1

三、非整數分頻

結合前面兩中分頻原理的思想,既用整數分頻又用奇數分頻,如10/3分頻,可以做兩個3倍分頻和乙個4倍分頻;

計數器在前六個時鐘設為奇數分頻狀態,後四個時鐘切換到偶數分頻狀態;

**如下:

`timescale 1ns / 1ps

//// company: bupt,abs_lab

// engineer: mr.bai

// // create date: 10:11:46 02/27/2014

// design name:

// module name: div1

// project name:

// target devices:

// tool versions:

// description:

//// dependencies:

//// revision:

// revision 0.01 - file created

// additional comments:

////

module div1(clk,rst,clk_out);

input clk;

input rst;

output clk_out;

parameter n1=3;

parameter n2=4;

parameter idle=3'b000;

parameter sa = 3'b010;

parameter sb = 3'b100;

reg [3:0] count=4'd0;

reg [3:0] count1=4'd0;

reg [3:0] count2=4'd0;

reg [3:0] count3=4'd0;

reg [2:0] state=idle;

reg clk1=1'b0;

reg clk2=1'b0;

reg clk3=1'b0;

assign clk_out=clk1 | clk2 | clk3;

always @(posedge clk or negedge rst)

begin

if(!rst)

begin

count<=4'd0;

state<=idle;

endelse

if(count<9)

begin

count<=count+1'b1;

if(count<5)

state<=sa;

else

state<=sb;

endelse

begin

count<=4'd0;

state<=sa;

endendalways @(posedge clk )

begin

case (state)

idle: state<=sa;

sa: if (!rst)

begin

count1<=4'd0;

clk1<=1'b0;

endelse

if(count1xilinx ise **如下:

modelsim **圖

Verilog任意整數分頻電路

define n 5module div n input clk,基準時鐘output clk div n,n分頻後得到的時鐘input rst wire 31 0 n 5 n為分頻係數,n 2即可,n的值為clk除以clk div n後取整 四捨五入 產生備用時鐘1 reg 31 0 cnt1 r...

分數分頻的FPGA實現

分頻對於許多fpga的學習者來說很常見,無論是偶數分頻還是奇數分頻。但是分數分頻在我們製作時並不常見。現在我們來說分數分頻。分數分頻顧名思義分頻比並不是乙個整數,而是乙個分數。往常我們接觸的積分頻,偶分頻分頻比都是整數,而分數分頻的小數如何實現就是這個的核心問題。在實現分數分頻的過程中,我們並不是使...

如何實現奇偶分頻和小數分頻

乙個計數器的奇數分頻 小數分頻 偶數分頻比較簡單,如果分頻係數是n 且n是偶數,那麼n 2是整數 那麼在輸入時鐘的每隔n 2個週期時 計數器從0到n 2 1 改變輸出時鐘的電平即可得到50 固定占空比的時鐘。1.如果n是奇數,那麼n 2非整數,使用2個暫存器,分別用上公升沿暫存器計數到 n 1 2 ...