FPGA邏輯設計系列文章 模組劃分

2021-10-06 14:18:43 字數 1604 閱讀 3593

1.   fpga是自頂向下的設計模式,開始寫**時第一項面臨的就是模組劃分。模組劃分說容易就容易,說難就難,根據工程師的碼齡,可以分為下列幾種情況:

第一階段:有啥好分的,就乙個.v檔案看著多方便;

第二階段:**寫的有點多啊,嘗試著分一下;

第三階段:動手前,先想怎樣劃分:按a情況的劃分,介面端子數量太多啊

第四階段:這個功能需要復用,單獨寫個.v

第五階段:這樣分怎麼樣,客戶需求變了的話,也好改

第六階段:這是最好的劃分方法了,不能追求太完美

......

總的來說,模組劃分的意思在於,將複雜的功能一一分解開來,是設計思路的一種體現,模組劃分的好,後期維護或者**留用都比較方便。一旦劃分成單獨的模組,就可以將每個模組分配給不同的工程師來做,當然這是大公司的策略。大部分的情況還是乙個人負責乙個專案的,或者負責一塊fpga的。

2. 模組劃分的依據

首先按功能和所處的位置進行劃分:比如輸入介面模組、輸出介面模組、內部處理模組、及必要的時鐘和復位控制模組。每個介面模組根據協議的複雜程度考慮是否進行細分。

其次模組間埠數量盡量不要太多,資料線除外。太多的話,一是寫起來麻煩,浪費時間,容易出錯;二是後期維護也不方便。實在不行的話,就將同功能的埠進行編碼合併,增加單個訊號的位寬。

再次,多個地方需要用到的功能要單獨劃分成模組。這樣的好處是可以直接呼叫,也可以為後面的專案進行留用,有了問題只更改這乙個模組即可。

最後模組劃分並不是畫幾個框圖而已,尤其是初學的時候要注意,一定要將各模組的埠名列出來。當你很清楚的列出埠名時,這個專案某種意義上已經做完了。

3. 模組間資料的處理方式-推拉門

資料(包括命令)在模組間進行傳輸時,根據情況有下來幾種方式:

(1)這種情況用於b模組有能力夠處理完a模組的資料,此時不需要協商,也是最簡單的模式

(2)這種情況用於b模組沒有持續處理資料的能力,或者在上電後的一段時間內尚未完成初始化,此時a需要看b的狀態(ready訊號)進行傳輸資料

(3)這種情況多半b模組佔據著主控位置,在a模組準備好後,b決定何時去取資料

(4)多用於資料傳送方不止乙個情況,b內部需要進行仲裁

(5)情況同上,區別在於b主動去讀取資料

整體來看,資料(包括命令)在模組間進行如何傳輸,某種程度上就是在決定誰是主模組,誰是從模組;主模組既可以主動去讀取資料,也可以叫從模組主動傳送資料,如同大門一樣,既可以推也可以拉。

4. 最後一點,模組劃分的最終歸宿往往是如何對訊號進行命名,畢竟起個好名字,bug都會少些o(∩_∩)o哈哈~

介面邏輯設計

之前寫dds那部分時,對於spi介面琢磨了好久,當然了,首先想得到的狀態機,控制dds輸出的資料送至後端da。將整個資料傳輸過程分解成四個狀態 idle wr start wr data stop,根據事件猝發每個狀態的跳轉,例如idle wr start的跳轉條件是out en 1,這種設計思想是...

業務邏輯設計

1.action設計 shfwpgdzlbdmanager.copy mannager裡面的相應方法 shfwpgdzlbd.getbdtpid 傳入的引數從哪獲取,型別應和mannager的方法需要的引數型別相同 2.manager設計 設計之前宣告物件 private shfwpgdzlbdda...

分頁邏輯設計

分頁,是每乙個開發者必然會面臨的乙個問題。由於資料量大,不可能全部載入出來放置記憶體中,然後在頁面展示。這種方式的優點 1 簡單明瞭,邏輯清晰。2 實時查詢,資料準確。缺點 io次數太多,每次查詢都要請求兩次sql。增加db壓力 db資源很稀缺,而且每次查詢總記錄數是一次全表掃瞄,進行的是表級鎖 優...