[轉載]FPGA/CPLD重要設計思想及工程應用(時序及同步設計)

來源:http://www.eetop.cn/blog/html/11/317611-13412.html

數字電路中,時鐘是整個電路最重要、最特殊的信號。

第一, 系統內大部分器件的動作都是在時鐘的跳變沿上進行, 這就要求時鐘信號時延差要非常小, 否則就可能造成時序邏輯狀態出錯.

第二, 時鐘信號通常是系統中頻率最高的信號.

第三, 時鐘信號通常是負載最重的信號, 所以要合理分配負載。出于這樣的考慮在FPGA這類可編程器件內部一般都設有數量不等的專門用于系統時鐘驅動的全局時鐘網絡。這類網絡的特點是:一、負載能力特別強, 任何一個全局時鐘驅動線都可以驅動芯片內部的觸發器; 二是時延差特別小; 三是時鐘信號波形畸變小, 工作可靠性好。

因此, 在FPGA設計中最好的時鐘方案是: 由專用的全局時鐘輸入引腳驅動單個主時鐘去控制設計項目中的每一個觸發器。同步設計時, 全局時鐘輸入一般都接在器件的時鐘端, 否則會使其性能受到影響。

對于需要多時鐘的時序電路, 最好選用一個頻率是它們的時鐘頻率公倍數的高頻主時鐘。

各個功能模塊要使用統一的復位電路。在使用帶時鐘的觸發器、計數器等有復位端的庫器件時, 一般應盡量使用有同步復位的器件。注意復位時保證各個器件都能復位, 以避免某些寄存器的初始狀態不確定而引起系統工作不可靠。

?

若想掌握時鐘設計方法首先需要了解建立時間和保持時間的概念。

建立時間(setup time):是指在觸發器的時鐘信號上升沿到來以前,數據穩定不變的時間,如果建立時間不夠,數據將不能在這個時鐘上升沿被打入觸發器;保持時間(hold time):是指在觸發器的時鐘信號上升沿到來以后,數據穩定不變的時間,如果保持時間不夠,數據同樣不能被打入觸發器。

?

對于一個設計項目來說,全局時鐘(或同步時鐘)是最簡單和最可預測的時鐘。在CPLD/FPGA設計中最好的時鐘方案是:由專用的全局時鐘輸入引腳驅動的單個主時鐘去鐘控設計項目中的每一個觸發器。只要可能就應盡量在設計項目中采用全局時鐘。CPLD/FPGA都具有專門的全局時鐘引腳,它直接連到器件中的每一個寄存器。這種全局時鐘提供器件中最短的時鐘到輸出的延時。

?

在許多應用中只將異步信號同步化還是不夠的,當系統中有兩個或兩個以上非同源時鐘的時候,數據的建立和保持時間很難得到保證,我們將面臨復雜的時間問題,那么這個時候怎么辦呢?

最好的方法是將所有非同源時鐘同步化,那么又怎么樣將非同源時鐘同步化呢?

我們可以使用帶使能端的D觸發器,并引入一個高頻時鐘(頻率高于系統中的所有源時鐘),便可以達到使系統中所有源時鐘同步的效果。

系統時鐘設計:

系統有兩個不同源時鐘,一個為3MHz,一個為5MHz,不同的觸發器使用不同的時鐘。為了系統穩定,假設我們引入一個20MHz時鐘,那么這個20MHz的時鐘怎么才能將3M和5M時鐘同步化呢?

20M的高頻時鐘將作為系統時鐘,輸入到所有觸發器的的時鐘端。3M_EN 0和5M_EN將控制所有觸發器的使能端。即原來接3M時鐘的觸發器,接20M時鐘,同時3M_EN 將控制該觸發器使能,原接5M時鐘的觸發器,也接20M時鐘,同時5M_EN 將控制該觸發器使能。這樣我們就可以將任何非同源時鐘同步化。

異步信號輸入總是無法滿足數據的建立保持時間,所以建議大家把所有異步輸入都先經過雙觸發器進行同步化。(實際是在20M時鐘下,對3M和5M進行上升沿檢測,以實現同步) ---GOOD!具體實現代碼請參考:博客http://www.cnblogs.com/oomusou/archive/2008/07/06/verilog_edge_detection_circuit.html

?module posedge_detection (
?? input? clk,
?? input? rst_n,
?? input? i_data_in,
?? output o_rising_edge
?);
?
?reg r_data_in0;
?reg r_data_in1;
?
?assign o_rising_edge = ~r_data_in0 & r_data_in1;
?
?always@(posedge clk, negedge rst_n) begin
?? if (!rst_n) begin
???? r_data_in0 <= 0;
???? r_data_in1 <= 0;
?? end
?? else begin
???? r_data_in0 <= r_data_in1;
???? r_data_in1 <= i_data_in;
?? end
?end
?
?endmodule

在通常的FPGA設計中對時鐘偏差的控制主要有以下幾種方法:

1、控制時鐘信號盡量走可編程器件的的全局時鐘網絡。在可編程器件中一般都有專門的時鐘驅動器及全局時鐘網絡,不同種類、型號的可編程器件,它們中的全局時鐘網絡數量不同,因此要根據不同的設計需要選擇含有合適數量全局時鐘網絡的可編程器件。一般來說,走全局時鐘網絡的時鐘信號到各使能端的延時小,時鐘偏差很小,基本可以忽略不計。

2、若設計中時鐘信號數量很多,無法讓所有的信號都走全局時鐘網絡,那么可以通過在設計中加約束的方法,控制不能走全局時鐘網絡的時鐘信號的時鐘偏差。

3、異步接口時序裕度要足夠大,局部同步電路之間接口都可以看成是異步接口,比較典型的是設計中的高低頻電路接口、I/O接口,那么接口電路中后一級觸發器的建立-保持時間要滿足要求,時序裕度要足夠大。

4、在系統時鐘大于30MHz時,設計難度有所加大,建議采用流水線等設計方法。

5、要保證電路設計的理論最高工作頻率大于電路的實際工作頻率。

?

復位和置位信號處理:

在設計時應盡量保證有一全局復位信號,或保證觸發器、計數器在使用前已經正確清零狀態。在設計寄存器的清除和置位信號時,應盡量直接從器件的專用引腳驅動。另外,要考慮到有些器件上電時,觸發器處于一種不確定的狀態,系統設計時應加入全局復位/Reset。

這樣主復位引腳就可以給設計中的每一個觸發器饋送清除或置位信號,保證系統處于一個確定的初始狀態。需要注意的一點是:不要對寄存器的置位和清除端同時施加不同信號產生的控制,因為如果出現兩個信號同時有效的意外情況,會使寄存器進入不定狀態。

轉載于:https://www.cnblogs.com/zlh840/archive/2012/11/28/2792114.html

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

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

相關文章

duration java_Java Duration類| ofMinutes()方法與示例

duration javaDuration Class of Minutes()方法 (Duration Class ofMinutes() method) ofMinutes() method is available in java.time package. ofMinutes()方法在java.time包中可用。 ofMinutes() method is used to represent the given minutes value in this Duration. of…

實驗五 圖形設計

每復制一個方法都要綁定Paint事件 一、創建Windows窗體應用程序&#xff0c;要求如下&#xff1a;&#xff08;源代碼運行界面&#xff0c;缺少任一項為0分&#xff0c;源代碼只需粘貼繪制圖形代碼所在的方法&#xff0c;不用粘貼太多&#xff09; 例如: &#xff08;1&…

yuv編碼成h264格式寫成文件

yuv編碼成h264格式寫成文件 &#xff08;使用ffmpeg 編碼yuv420p編碼成h264格式&#xff09; #include <stdio.h> #include <stdlib.h> #include <stdint.h>#include <libavcodec/avcodec.h> #include <libavutil/time.h> #include <libavut…

c++ stl隊列初始化_聲明,初始化和訪問向量| C ++ STL

c stl隊列初始化Here, we have to declare, initialize and access a vector in C STL. 在這里&#xff0c;我們必須聲明&#xff0c;初始化和訪問C STL中的向量。 向量聲明 (Vector declaration) Syntax: 句法&#xff1a; vector<data_type> vector_name;Since, vec…

ADO.NET與SQL Server數據庫的交互

7.3.1 使用SqlConnection對象連接數據庫 例如&#xff1a;建立與SQL Server數據庫的連接。 string connstring"Data Sourceservername;uidusername;pwdpassword;Initial Catalogdbname";SqlConnection connnew SqlConnection(connstring);conn.Open(); 例如&#xf…

nsis 修改exe執行權限

通過修改注冊表的方式&#xff0c;修改exe的執行權限。&#xff0c;以下例子是使用管理員運行。 ;添加admin權限 SectionWriteRegStr HKCU "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\spp.exe" "RUNASADMIN&qu…

linux ftp日志_linux學習筆記(一)——Linux分區和目錄結構

linux學習筆記&#xff08;一&#xff09;——Linux分區和目錄結構安裝Linux時&#xff0c;手動掛載分區的情況下&#xff0c;/ 和 swap 是必須要掛載的&#xff0c;其他/home、/boot 等可以根據需要自行掛載。一般來說&#xff0c;簡單的話&#xff0c;建議掛載三個分區&#…

C#通過VS連接MySQL數據庫實現增刪改查基本操作

創建一個數據庫wsq 里面有一張beyondyanyu表 表里面有id(int)、names(varchar)、count(int)、passwords(varchar) 數據可以自己添 1、導入MySQL引用&#xff0c;你需要從官網或者其他地方下載&#xff0c;私聊我也可以 using MySql.Data.MySqlClient; 2、創建MySqlConnection對…

使用ffmpeg的filter處理yuv數據包括split filter(分流)、crop filter(裁剪)、vflip filter(垂直向上的翻轉)、overlay filter(合成)

使用ffmpeg的filter處理yuv數據包括split filter(分流)、crop filter(裁剪)、vflip filter(垂直向上的翻轉)、overlay filter(合成) #include <stdio.h>#include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libavfilter/avfil…

vc++ 6.0 堆棧_在C ++中使用鏈接列表實現堆棧

vc 6.0 堆棧To implement a stack using a linked list, basically we need to implement the push() and pop() operations of a stack using linked list. 要使用鏈接列表實現堆棧 &#xff0c;基本上&#xff0c;我們需要使用鏈接列表實現堆棧的push()和pop()操作。 Exampl…

煙雨小書店

煙雨小書店演示視頻 源碼

協議地址結構_TCP/IP 協議 講解

計算機網絡體系結構分層太厲害了&#xff0c;終于有人能把TCP/IP 協議講的明明白白了計算機網絡體系結構分層不難看出&#xff0c;TCP/IP 與 OSI 在分層模塊上稍有區別。OSI 參考模型注重“通信協議必要的功能是什么”&#xff0c;而 TCP/IP 則更強調“在計算機上實現協議應該開…

ffmpeg進行混音,將兩路音頻pcm數據合成一路輸出

ffmpeg進行混音&#xff0c;將兩路音頻pcm數據合成一路輸出 audiomixer.h #ifndef AUDIOMIXER_H #define AUDIOMIXER_H#include <map> #include <mutex> #include <cstdio> #include <cstdint> #include <string> #include <memory>exter…

python sep函數_Python中帶有print()函數的sep參數

python sep函數sep parameter stands for separator, it uses with the print() function to specify the separator between the arguments. sep參數代表分隔符&#xff0c;它與print()函數一起使用以指定參數之間的分隔符。 The default value is space i.e. if we dont us…

關于 MySQL 主從復制的配置(轉)

來源&#xff1a;http://www.oschina.net/bbs/thread/10388設置Mysql的主從設置很重要&#xff0c;有如下幾點用處&#xff1a;1 做備份機器&#xff0c;一旦主服務器崩潰&#xff0c;可以直接啟用從服務器作為主服務器2 可以直接鎖定從服務器的表只讀&#xff0c;然后做備份數…

Silverlight 同域WCF免跨域文件

在sl3使用wcf時常常會因為sl中調用了不同域的wcf服務而導至調用服務失敗&#xff0c;記得在很久以前sl當是只支持同域的訪問&#xff0c;那么讓我有一個想法&#xff0c;就是在sl引用時可以動態地取得當前sl所在的域&#xff0c;而wcf服務也必須同時部署到這個域下邊&#xff0…

使用ffmpeg 的 filter 給圖片添加水印

使用ffmpeg 的 filter 給圖片添加水印。 main.c #include <stdio.h>#include <libavfilter/avfilter.h> #include <libavfilter/buffersrc.h> #include <libavfilter/buffersink.h> #include <libavformat/avformat.h> #include <libavcodec…

程序崩潰 分析工具_程序分析工具| 軟件工程

程序崩潰 分析工具A program analysis tool implies an automatic tool that takes the source code or the executable code of a program as information and produces reports with respect to a few significant attributes of the program, for example, its size, multif…

28335接兩個spi設備_IIC和SPI如此流行,誰才是嵌入式工程師的必備工具?

IICvs SPI現今&#xff0c;在低端數字通信應用領域&#xff0c;我們隨處可見 IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身影。原因是這兩種通信協議非常適合近距離低速芯片間通信。Philips(for IIC)和 Motorola(for SPI) 出于不同背景和市場需求…