邏輯開發專題筆記

2021-07-10 04:53:15 字數 3790 閱讀 9127

fpga開發任務稱為邏輯設計,開發過程是把使用者的十位邏輯轉換成數位電路邏輯,最有效的設計方法時狀態機。

6.1verilog hdl設計高階

6.1.1面向硬體的程式設計思維

面向硬體的程式設計思維就是指,如何將具體功能形成贏家rtl級模型,在選擇具體的物理電路來實現,再用合適的語言去實現。

1.程式的並行執行特點

hdl語言代表著閘電路和觸發電路。任何時候上電,各個模組將同時工作。並行思維考慮演算法結構。模組內部的執行順序比較複雜。

「begin end」之間存在阻塞賦值和非阻塞賦值兩種賦值方式,為避免競爭和冒險,必須遵循兩條準則:

(1)在描述組合邏輯always塊中用阻塞賦值=(2)時序邏輯always塊中用非阻塞賦值<=。

組合來喲及中阻塞賦值只與電平有關,往往和觸發沿沒有關係,可以看成並行執行;時序邏輯中,非阻塞賦值是並行執行的。因此begin end內部語句也是並行執行的。

2.時鐘是程式的執行控制器

程式設計中需要序列的控制功能,比如等待某個指令到來後配置模組然後反饋輸出,這就需要通過實踐的精確定位來獲取嚴格的先後關係(應該是實際中經常講到的對時序)。

按照時鐘節拍來完成序列控制,利用乙個count作為計數控制,再呼叫case(count)行為語句。

3.程式的可綜合性

並不是所有verilog hdl語言寫的程式都是可綜合的,可**不一定可綜合。綜合時候分為支援(大部分常用的),不支援(某些型別比如trireg等),和忽略三種(比如initial)。

6.1.2面積和速度的轉換原則

面積:主要是值設計所占用的fpga邏輯資源數目,即用消耗的觸發器ff和查詢表lut來衡量。

速度:主要指在晶元上穩定執行時候能達到的最高頻率。

面積和速度的對立統一關係,他們是一對矛盾體。一方面要提高速度就要消耗更多的資源及需要更大的面積;另一方面為了減小面積就需要降低處理速度就需要降低處理速度。所以既提高速度又要減小面積是不可能同時實現的。二者平衡二者互換。

互換具體實現:模組復用、桌球操作、串並變換、流水線操作。比如串並變換例子:資料速率是乘法器模組處理速度的3倍,那麼憂鬱乘法器模組的資料吞吐量滿足不了要求,就可以利用面積換速度的思想,複製三個乘法器模組。首先將輸入資料串/並轉換,然後利用三個模組並行處理所分配的資料,最後將處理結果並/串轉換,達到資料速率的要求。

6.1.3同步電路設計原則

1.同步電路與非同步電路區別在於觸發是否與驅動時鐘同步,所有店裡是否在同一時鐘沿的觸發下同步處理資料。

同步復位:always@(posedge clk)   ;只有乙個觸發條件 ;如果來了reset訊號,要等到clk上公升沿才能觸發;

非同步復位:always@(posedge clk or posedge reset);兩個觸發條件 ; 如果來了reset訊號,立即觸發;

實際系統,常存在多時鐘情況,這時應該使設計區域性同步,即統一市中區東的電路同步於同一時鐘沿,這是同步電路的理念。

2.同步電路有點 

(1)有效避免毛刺影響,提高可靠性;

(2)簡化時序分析過程;

(3)減少工作環境對設計的影響,而非同步電路易受到溫度電壓器件等影響,時序苛刻。

3.同步電路的準則

(1)單時鐘策略。盡量使用單時鐘,走全域性時鐘,效能最優。在多時鐘應用中要做到區域性時鐘同步。

(2)單時鐘沿策略。posedge或negedge,盡量避免使用混合時鐘沿來取樣或驅動電路。混合時鐘沿會使得工作頻率降低,時序分析複雜。

(3)禁止在模組內部使用計數器分頻產生所需時鐘。各個模組內部各自分頻會導致時鐘管理混亂,。

6.2 fpga晶元底層單元的使用

底層單元為專用硬體資源,硬核,包括全域性時鐘網路,ddl,dcm,內嵌塊儲存單元,硬核乘法器,高速收發器,嵌入式處理器等,都已經過asic驗證。

6.2.1 全域性時鐘網路

是一種全域性佈線資源,保證時鐘訊號到達各個目標邏輯單元的延時基本相同。不同器件時鐘效能數量有不同。全域性時鐘具有最小偏移最大扇出能力,盡量在設計中使用全域性時鐘,最簡單最可靠。

6.2.2 cmt時鐘管理模組的使用

virtex5後,開始增加了pll模組,也就是cmt包括dcm兩個和pll乙個,兩種底層單元,提供靈活的高效能時鐘控制。

dcm數字時鐘管理模組,是基於以前使用的數字延遲鎖相環dll模組而公升級的。dcm功能:消除時鐘延遲,頻率合成,時鐘相位調整等。dcm的優點和組成(dll,dfs,dps,dss)有很多理論,不一一枚舉。

pll能作用各種頻率的頻率綜合器,並且與dcm聯合使用還可以作為輸入時鐘的抖動濾波器。

dcm有現成的ip核可以呼叫。

6.2.3內嵌塊儲存器

xilinx儲存資源包括內嵌塊儲存器、分布式儲存器、16位移位暫存器。這些資源科生成深度位寬可配置的ram rom fifo 移位暫存器等儲存邏輯。

塊儲存器是硬體儲存器不占用邏輯資源其餘兩種是xilinx專有的儲存結構,一般來講塊儲存器用於大資料量的場合,其餘兩類用於小資料量環境。

塊儲存器ram幾乎是fpga器件中除了邏輯資源之外用的最多的功能塊,分為單埠、簡單雙埠、真雙埠ram等模式、rom模式、fifo模式(fifo類似簡單雙埠,最重要特徵是具有full和empty指示訊號,full有效就不能再寫,empty有效就不能再讀)。

塊ram有現成的ip核可以呼叫,可以封裝為fifo、移位暫存器以及延遲器。

6.2.4硬核乘加器的使用

乘法器兩種方式:硬核乘法器實現 和 邏輯單元搭建的乘法器。

乘加器再乘法器後面級聯了加法器;乘累加器則是在乘法器後面級聯了累加器,乘加器ip核使用 multiply accumulator。

6.3**風格

6.3.1**風格的含義

兩層:一是verilog**書寫習慣; 二是對於特定電路,用哪一種形式的語言描述們才能將電路描述的更準確,綜合後更合理。

6.3.2**書寫風格

乙個專案內應該有一套完整的**編寫規範作為約束,使得具有良好的可讀性。

1.訊號命名規則

如微軟的匈牙利法:在變數和函式名前加入字首法。

(1)系統級訊號的命名。rst、clk等全域性訊號clk_32p768mhz,系統級sys_dout,sys_din 等;

(2)低電平有效***x_n

2.模組命名規則 略

3. **格式規範

(1)分節書寫格式,每節基本上完成乙個功能,會有很多always,每個always是一節;

(2)注釋的規範 根據具體要求吧;細節:說明模組思路,可以有自己的想法;函式的適用方法;強調可能出錯地方;注釋要記錄更改日期;

(3)空格的舒勇這個比較容易忽視,但影響最小;

(4)begin...end書寫規範;begin跟在always@(.....) begin

end與alwyas對其。

不同層次之間用tab來縮排,每加深一層縮排乙個tab; 在endmodule加注釋說明**塊的名稱。

4.模組呼叫規範,應該用訊號對映法 模組名 (. 埠1訊號名(連線埠1訊號名),

. 埠2訊號名(連線埠2訊號名));

6.3.3通用設計**風格

1.邏輯復用與邏輯複製,前者通過速度換面積,後者通過面積換速度;

2.邏輯結構,鏈狀結構和樹狀結構,前者指序列執行,後者指串並結合;前者延遲較大,後者延遲較小。

3.if和case語句的區別;if是有一定優先順序的編碼邏輯,case是邏輯並行的不具有優先順序;前者多種表示式,後者用乙個公共的表示式;if-else速度慢占用面積小,case速度快占用面積大;

4.關機路徑訊號處理原則 5.避免意外鎖存器 6.流水線技術使用---- 不細說了

6.3.4xilinx專用設計**風格  盡可能利用晶元結構及底層紅單元以獲取最佳綜合和實現效果   -------------------不太懂,感覺偏晶元底層資源理解,具體用到再說吧。

專題分綱目錄 邏輯強化

專題分綱目錄 均為索引,本綱為 邏輯強化 邏輯強化 01 復合推理 知識 練習 邏輯強化 02 復合推理 答案 解析 邏輯強化 03 真假推理 知識 練習 邏輯強化 04 真假推理 答案 解析 邏輯強化 05 分析推理 知識 練習 邏輯強化 06 分析推理 答案 解析 邏輯強化 07 削弱質疑 知識...

學習筆記 專題1 1 1 2

專題1 1 matlab系統環境 當命令語句一行寫不下時,可用 作為續行符 clear命令,可清除工作區的所有變數,用clc命令時可以清除介面的所有內容 新建乙個資料夾的方法 cd c lxdm 按enter鍵即可 當變數名與系統函式相同時,優先呼叫的是變數。如 設定檔案搜素路徑 1 2 matla...

專題 Linux驅動開發前奏

硬體訪問技術 暫存器讀寫 驅動分類 常規分類法 字元裝置,塊裝置,網路裝置。驅動分類 匯流排分類法 usb裝置,pci裝置,平台匯流排裝置。字元裝置 字元裝置是一種按位元組來訪問的裝置,字元驅動則負責驅動字元裝置,這樣的驅動通常支援open,close,read,write系統呼叫。例如 串列埠,l...