任意小數分頻設計

對于任意小數分頻,如果有PLL的話,直接倍頻再分頻即可;或常用的方法有雙模前置小數分頻和脈沖刪除小數分頻。前一種方法設計較為復雜,因此主要以第二種方式為主設計了一下。

?

任意小數均可以化為分數,例如要進行5.3分頻即53/10分頻,因此之后全部以分數來表示。

?

以13/4分頻為例,我們首先要想明白什么是13/4分頻。什么是2分頻呢?就是每兩個輸入時鐘得到一個輸出時鐘,4分頻就是4/1即四個輸入時鐘得到一個輸出時鐘,因此13/4分頻其實就是13個輸入時鐘得到4個輸出時鐘,想明白這一點很重要。

?

在雙模前置小數分頻設計中,雖然這個設計我還沒完成不過也提一下,是通過分數值的前后兩個正數數分頻選擇輸出得到最終結果的。對于13/4而言:

?

M = 13/4 = 3 ... 1

這意味著13/4的分頻可以通過3分頻和4分頻選擇輸出得到,繼續計算:

?

?

a + b = 4
3a + 4b = 13

得到a=3,b=1。也就是說通過3個3分頻和1個4分頻可以得到13/4分頻。

?

?

在不考慮其他情況僅僅做簡單選擇輸出的話,可以畫出這樣的時序圖:

可以看到通過3分頻和4分頻“湊”出了13/4分頻,不過這樣的時鐘我覺得用處不大。當然了真正這樣設計時不能這樣簡單的先3個3分頻再1個4分頻,還有一些處理,這里就先不提了。

?

還是回到剛剛話,13/4分頻其實就是13個輸入時鐘得到4個輸出時鐘,因此脈沖刪除小數分頻相對比較簡單。意思就是在13個輸入時鐘里我刪掉9個時鐘周期,這樣不就書粗了4個時鐘周期了么,就是這樣。那應該怎么刪呢,查了一些論文后得到結論:

1.設置寄存器cnt位寬自定,我用的[7:0],初始值為0;

2.在clk_in的上升沿+4,并判斷是否大于13,若大于13在下一周期-13;

3.cnt小于13時候,刪除脈沖信號delete=1,大于13時候delete=0;

說起來比較亂,畫個表表示下,每12個周期我們作為一個循環來看:

?

時鐘序號cnt值是否刪除
04Y
18Y
212Y
3(16->)3N
47Y
511Y
6(15->)2N
76Y
810Y
9(14->)1N
105Y
119Y
12(13->)0N
04?

?

從表中可以看到每13個周期有4個周期沒有被刪除,剛好滿足要求。

?

我們再來試一個,11/9吧:

時鐘序號cnt值是否刪除
09Y
118->7N
216->5N
314->3N
412->1N
510Y
619->8N
717->6N
815->4N
913->2N
1011->0N
09?

可以看到11個時鐘里有刪除了2個,輸出了9個,完美。

?

下面以代碼用進行測試設計,代碼中fraction是分頻的分子,denominator 是分母,以參數形式設置,testbench中進行傳入。

module DIV(input clk_in			,input rst				,output clk_out);
parameter fraction = 1;
parameter denominator = 1;reg  [7:0]cnt;
reg delete;
always @(posedge clk_in or posedge rst) beginif (rst) begin// resetcnt <= 0;delete <= 0;endelse if (cnt > fraction) begincnt <= cnt + denominator - fraction;delete <= 0;endelse begincnt <= cnt + denominator;delete <= 1;end
endassign clk_out = delete ? 1 : clk_in;
endmodule

?

testbench文件,測試21/8分頻。cnt_in和cnt_out僅僅是為了方便數輸入時鐘和輸出時鐘而設置的,沒有實際意義:

module tb;// Inputsreg clk_in;reg rst;// Outputswire clk_out;parameter fraction = 21;parameter denominator = 8;// Instantiate the Unit Under Test (UUT)DIV #(.fraction(fraction),.denominator(denominator))uut (.clk_in(clk_in),.rst(rst),.clk_out(clk_out));initial beginclk_in = 0;forever #2 clk_in = ! clk_in;endinitial beginrst = 1;forever #50 rst = 0;endreg [7:0]cnt_in, cnt_out;
always @(posedge clk_in or posedge rst) beginif (rst) begin// resetcnt_in <= 0;endelse if (cnt_in == fraction) begin// resetcnt_in <= 1;endelse begincnt_in <= cnt_in + 1;end
endalways @(posedge clk_out or posedge rst) beginif (rst) begin// resetcnt_out <= 0;endelse if (cnt_out == denominator) begin// resetcnt_out <= 1;endelse begincnt_out <= cnt_out + 1;end
endendmodule


仿真波形圖:?

從紅框區域可以看得出,21個輸入周期剛好輸出8個輸出周期,當然這計數可以不怎么看,我們自己會數嘛。

?

ps.

在網上還看到了另外一種方式,感覺思路有點相似,也是相加超過分子后就減去分子再相加,把實現的代碼貼在這里:

module DIV(input clk_in			,input rst				,output reg clk_out);
parameter fraction = 1;
parameter denominator = 1;reg  [8:0]cnt;
wire vld;assign vld 	 = ((cnt >= fraction>>1) && (cnt < fraction)) ? 1 : 0;always @(posedge clk_in or posedge rst) beginif (rst) begin// resetcnt <= 0;endelse if(cnt > fraction) begincnt <= cnt + denominator - fraction;endelse begincnt <= cnt + denominator;end
endalways @(posedge clk_in or posedge rst) beginif (rst) begin// resetclk_out <= 0;endelse if (vld) beginclk_out <= 1;endelse beginclk_out <= 0;end
endendmodule

?

同樣用之前的testbench做21/8的分頻,看波形:?

的確是實現了目的,不過好亂的波形呀。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253814.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253814.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253814.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Bootstrap--圓角圖片`圓形圖

轉載于:https://www.cnblogs.com/qiyiyifan/p/6159823.html

邏輯綜合——概述與基本概念

邏輯綜合系列主要說明以下問題&#xff1a; 為什么要邏輯綜合邏輯綜合的基本原理邏輯綜合需要提供哪些文件邏輯綜合過程中施加約束邏輯綜合能產生那些結果 綜合是前端設計的重要步驟之一&#xff0c;其過程是將行為描述的電路、RTL級的電路轉換到門級&#xff0c;其目的在于&a…

Swoole 源碼分析——Server模塊之初始化

前言 本節主要介紹 server 模塊進行初始化的代碼&#xff0c;關于初始化過程中&#xff0c;各個屬性的意義&#xff0c;可以參考官方文檔&#xff1a; SERVER 配置選項 關于初始化過程中&#xff0c;用于監聽的 socket 綁定問題&#xff0c;可以參考&#xff1a; UNP 學習筆記—…

linux下搭建git服務器

安裝 Git Linux 做為服務器端系統&#xff0c;Windows 作為客戶端系統&#xff0c;分別安裝 Git 服務器端&#xff1a; #yum install -y git 安裝完后&#xff0c;查看 Git 版本 [rootlocalhost ~]# git --version git version 1.7.1 客戶端&#xff1a; 下載 Git for Windows&…

mkcramfs 命令學習

mkcramfs :創建只讀文件系統 語 法 mkcramfs[必要參數][選擇參數][源目錄][目標文件]功 能mkcramfs 命令&#xff1a;用來創建CRAMFS只讀文件系統 類似命令: fdisk cramfsck mount 執行權限: 超級用戶 普通用戶 命令屬性: 磁盤維護 參數必要參數 -e 設置文件系…

對于Eclipse的正確用法

有時候我們剛剛修改了工程里的文件 但是啟動的時候它硬是說你有東西沒有聲明 而那個東西又明明在那里。。 這時候我們可以認為實際與它調用的工程關系文件&#xff08;我假想的&#xff09; 不同步。。 我們可以通過clean功能來同步實際情況和工程關系文件 所以說我們每次改了之…

邏輯綜合——工藝庫

一、庫文件的設置 運行DC時需要用到的庫文件有&#xff1a;目標庫&#xff08;target library&#xff09;、鏈接庫&#xff08;link library&#xff09;、符號庫&#xff08;symbol library&#xff09;、算術運算庫&#xff08;synthetic library&#xff09;。 1、目標庫…

weka 初練之 文本分類

0.注意weka的中文編碼RunWeka.ini-----》fileEncodingutf-81.首先對分詞后的 無新詞發現的分詞文件&#xff0c;轉換成arff文件 命令java weka.core.converters.TextDirectoryLoader -dir D:\weibo\catagory\data10W\nlpirSegment\noNI > D:\weibo\catagory\data10W\nlpirSe…

[COGS 0065][NOIP 2002] 字串變換

65. [NOIP2002] 字串變換 ★★ 輸入文件&#xff1a;string.in 輸出文件&#xff1a;string.out 簡單對比時間限制&#xff1a;1 s 內存限制&#xff1a;128 MB [問題描述] 已知有兩個字串A\$, B\$及一組字串變換的規則&#xff08;至多6個規則&#xff09;: A1\$ ->…

基與datatable的分頁

在進行分頁操作前&#xff0c;必須知道開啟服務器模式后會向服務器發送的參數的含義&#xff1a; length:告訴服務器每頁顯示的數據條數 start&#xff1a;第一條數據的起始位置 draw:繪制計數器&#xff0c;&#xff08;特殊&#xff1a;服務器接收到參數后&#xff0c;需要返…

linux sock_raw原始套接字編程

sock_raw原始套接字編程可以接收到本機網卡上的數據幀或者數據包,對與監聽網絡的流量和分析是很有作用的.一共可以有3種方式創建這種socket1.socket(AF_INET, SOCK_RAW, IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP)發送接收ip數據包2.socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP|E…

邏輯綜合——施加約束

Design Compiler時一個約束驅動&#xff08;constraint-driven&#xff09;的綜合工具&#xff0c;它的結果與設計者施加的約束條件密切相關。 一、面積約束 進行面積的約束&#xff0c;也就是告訴DC綜合的電路面積要在多少以內。在介紹約束命令之前&#xff0c;先了解一下面積…

[Codevs] 1004 四子連棋

1004 四子連棋 時間限制: 1 s空間限制: 128000 KB題目等級 : 黃金 Gold題目描述 Description在一個4*4的棋盤上擺放了14顆棋子&#xff0c;其中有7顆白色棋子&#xff0c;7顆黑色棋子&#xff0c;有兩個空白地帶&#xff0c;任何一顆黑白棋子都可以向上下左右四個方向移動到相鄰…

鏈接中獲取文件名

算得上是-test.pdf 獲取文件名 var str http://aaa.com/s/ddd/算得上是-test.pdf; console.log(str.match(/([^/*.])\.\w$/)) console.log(str.match(/([^/*.])\.\w$/)[0]) // 轉載于:https://www.cnblogs.com/cssfirefly/p/6163370.html

邏輯綜合——優化電路

對進行時序路徑、工作環境、設計規則等進行約束完成之后&#xff0c;DC就可以進行綜合、優化時序了&#xff0c;DC在優化過程中主要的策略將在下面進行說明。然而&#xff0c;當普通模式下不能進行優化的&#xff0c;就需要我們進行編寫腳本來改進DC的優化來達到時序要求。 DC…

DOM包裹wrap()方法

DOM包裹wrap()方法 如果要將元素用其他元素包裹起來&#xff0c;也就是給它增加一個父元素&#xff0c;針對這樣的處理&#xff0c;JQuery提供了一個wrap方法 .wrap( wrappingElement )&#xff1a;在集合中匹配的每個元素周圍包裹一個HTML結構 簡單的看一段代碼&#xff1a; &…

usleep函數

usleep功能把進程掛起一段時間&#xff0c; 單位是微秒&#xff08;百萬分之一秒&#xff09;&#xff1b; 頭文件&#xff1a; unistd.h 語法: void usleep(int micro_seconds); 返回值: 無 內容說明&#xff1a;本函數可暫時使程序停止執行。參數 micro_seconds 為要暫停的微…

限制Xamarin獲取圖片的大小

限制Xamarin獲取圖片的大小在App開發中&#xff0c;經常會使用網絡圖片。因為這樣不僅可以減少App的大小&#xff0c;還可以動態更新圖片。但是手機使用網絡環境千差萬別。當網絡環境不是理想的情況下&#xff0c;加載網絡圖片就是一個棘手的問題了。為了避免長時間加載圖片影響…

Linux應用開發自學之路

前言 在 「關于我 」那篇博文里&#xff0c;朋友們應該知道了我不是科班出身&#xff0c;是由機械強行轉行到Linux應用開發方向。下面我就詳細向大家介紹自己這一路上的轉行歷程&#xff0c;希望對大家有所啟發。 我是學機械專業的&#xff0c;對于機械專業我還是很感興趣&…

Verdi 基礎教程

一、Verdi 功能 查看設計debugVerdi不能自己產生波形 二、Verdi使用流程 1、Verdi環境配置 .bashrc中配置 export Verdi_HOME$Synopsys_Dir/Verdi2015 #export NOVAS_HOME$Synopsys_Dir/Verdi2015 export PATH$Verdi_HOME/bin:$PATH export LD_LIBRARY_PATH"/opt/Syno…