找回密码
 注册
搜索
查看: 2014|回复: 3

[FPGA资料] 一個關於FPGA的編碼想法

[复制链接]
发表于 2011-6-16 15:26:26 | 显示全部楼层 |阅读模式
一個關於FPGA的編碼想法
引言
        “北冥有魚,其名為鯤,鯤之大不知其幾千裡也。化而為鳥,其名為鵬,鵬之背不知其幾千裡也。怒而飛,其翼若垂天之云。”—《逍遙遊》莊子。
        以上為莊子《逍遙遊》中的第一段。講的是這樣一個故事,說北極的天池里生活著一種大魚,長到一定程度的時候這種魚就可以被叫做鯤,鯤的大小不知道有幾千里,這種魚可以化身為大鵬鳥,大鵬鳥的背不知道有幾千里,發怒而起飛,它的翅膀就跟天上垂下的云一般。每每讀到這裡我就感慨這鯤與FPGA何其相似。FPGA有著大鵬一樣的能力—並行運算,而卻要被困在天池中無法化而為鵬,怒而飛,這是多麼的英雄氣短。
        我們來分析一下為甚麼說FPGA英雄氣短,想象一下如果天是無限大的,鯤被困天池感到英雄氣短,所以化而為鵬,怒而飛,那麼對於FPGA來說天池是甚麼?天又是甚麼?想像一下如果有一件事情,是由無數件可獨立工作的小事情組成,而完成這些小事情所需要的時間為一瞬間,那麼在一瞬間FPGA就可以完成這件事情。可以想像嗎?完成所有的這樣的事情不需要時間了,這種工作對FPGA來說不就是大鵬鳥的天嗎?不過很可惜在吾等的有生之年估計看不到這種奇妙的景象了,也只能在腦海里意淫一下了(想想就夠悲催)。那麼現在我想各位看官應該已經瞭解到讓FPGA英雄氣短的那個天池了吧,沒錯就是時間。
不得不串行的並行
        目前為止,以及可見的遙遠的未來時間都不會消亡,所以我們要做的任何一件事都離不開它,要做的每一件事必須要被輕重緩急約束FPGA也無法逃離這一點,所以完全有能力真正來個並行的FPGA却不得不被困在時間的枷鎖中。既來之則安之,既然不能脫離這一點幹嘛不享受這一點呢。我們先不要把時間看的苦大仇深,我們把它視為真理,視為我們對FPGA編程的指導,那麼時序就成為驗證這個真理的手段,輕重緩急成為FPGA編程的教條。雖然FPGA不能對一件事情進行真正的並行,卻可以對不同的事情進行並行操作,當然只要容量允許,FPGA可以同時做無數件事情。這就是我這裡所說的不得不串行的並行。至此之後我們就應該有這樣一個概念:對於FPGA,並行是指幾件不同的事情或者一件事情中幾個獨立的步驟同時進行,串行是指一件事情中有輕重緩急關係的幾個步驟必須一步步進行。
“普適價值”的串行
        本文不談FPGA中的並行,因為並行本質上都受限於串行—時間。所以我們來談談串行。如果大家仔細想一想就會發現人類是喜歡定規則并希望別人按照這個規則進行遊戲的一類控制欲很強的動物,比如西方發達國家對欠發達國家以前的殖民和現在的普世價值。所以應該有很多人看到這個普世價值很反感。但是當我們在成長的過程中又總希望有一個指導,能夠讓自己複製別人的成功。當然在FPGA編程中這種想法就更加赤裸裸,比如當你去做一個東西的時候,手上有了手冊你並不會感到高興,可是當你拿到了例程的時候估計會歡呼雀躍。而且對於大部份事情你總能找到相關的例程,這很正常,但是當你遇到完全沒有例程的事情的時候就會很鬱悶,這也很正常。我這裡的“普適價值”(當然有點誇大),是想給FPGA編程提供一種想法,一種風格使得這種風格能夠在當你遇到一個全新的問題的時候不至於手忙腳亂,而且只要是串行的應用這種方法具有普遍適用的特性,所以我把它叫做“普適價值”的串行。
        說了很多廢話下面我就來描述一下這個“普適價值”,首先時間是這個想法的真理,時序是實現這個真理的手段,輕重緩急是這個手段的教條。當我瞭解到所有串行的事情都無法逃離時間的時候,我就認定把時間作為我這個“普適價值”的指導真理是多麼的正確。下面我以SDRAM控制器為例來逐漸的描述一下這個想法。
        首先我們來瞭解一下SDRAM的幾個特性:
1.        SDRAM的一次完整操作需要分很多步來完成。
2.        這些步驟有輕重緩急之分。比如有一定的上電順序。
3.        而且這些步驟每次只能執行一個(完美的串行)。
從以上三點我們就能分析出SDRAM的操作這件事情是多麼的符合本文要描述的想法啊。
你可以想像一下當你要動手去做一個SDRAM的控制器的時候,你手頭只有SDRAM操作手冊以及你那塊SDRAM的數據手冊,當你對這個手冊閱讀了將近八百遍的時候,你該怎麼對這樣一個以前沒有做過,也沒有相關例程的東西下手呢?我沒法回答你的問題,不過我可以告訴你我是怎麼樣利用“普適價值”來設計它的。
系統結構
        首先當我去做這個工作的時候,先考慮這個事情應該被分成幾個步驟,這樣就會在腦海裡出現一個較模糊的結構—系統結構。經過我一百遍的閱讀和分析SDRAM控制器應該至少包括了:初始化、自動刷新、讀、寫這些基本操作。這些操作在我的腦子里就會出現一個模糊的概念,我就知道要完成這個工作我的設計中應該包括了這些。如下圖:
                                         

                                        SDRAM基本操作的模糊概念圖
        這就是TOP-DOWN(自頂向下)的設計中的第一步,當有這這樣一個模糊的概念后,我就會迫不及待的想去瞭解這些操作的輕重緩急—時序。所以再經過二百遍的閱讀后我瞭解到:要想對SDRAM進行讀寫就必須先要上電(幾近廢話);上電后還不能直接讀寫要等200us左右再對它進行初始化;初始化完了才能開始讀寫操作;而且每次還只能進行一種操作;最悲催的是還要定時的給它自刷新(吃飯)不然它有可能丟掉你讓他拿著的東西;這個自刷新還應該是優先級較高的一個操作,僅次於初始化,除非你正在進行著一個操作,否則當你想讀或者寫而自刷新請求又到到來了你就得讓別人先走(自刷新果然是親兒子啊)。
        經過以上的分析,我們可以瞭解到只有那些模糊的模塊是不可能完成SDRAM讀寫操作大業的,我們必須要製造一個管理者出來帶領著這些模塊打天下,才能攻克SDRAM這座堡壘,所以一個全新的領袖級模塊—仲裁器就在我邪惡的內心誕生了,它是用來控制那些基本模塊,分時串行的去對SDRAM進行操作從而團結有序地去攻克SDRAM,達到最終與SDRAM組建和諧系統的一個必要的模塊,所以SDRAM控制器的結構在我們的心中有清晰了許多。如下圖:

SDRAM基本操作的結構圖
        功能模塊
做完大的系統結構的設計之後,我們就必須沉下心來對那些小的模塊進行精心的設計了,畢竟光有系統結構是沒有任何用處的。下面我以SDRAM初始化模塊為例來描述我對功能模塊設計的想法。要進行功能模塊的設計,就必須要求我再去進行幾百遍的閱讀。在經過幾百遍的閱讀后我發現SDRAM初始化還真是一個麻煩的過程。它要求進行一些巴拉巴拉的操作才能完成初始化(具體的我就不再這啰嗦了)。但是我發現不管怎樣我還是必須給它設計一個結構,然後給它進行一個相對標準的封裝這樣在仲裁器中對它的應用才能得心應手。
所以這裡我不會詳細的介紹SDRAM初始化到底怎麼完成,我將以SDRAM初始化的過程為例提出對於功能模塊的結構設計的想法。當我們瞭解了SDRAM初始化的過程之後,我們就應該知道:初始化不是一上電就進行的;它需要好幾步來完成;它需要消耗一定的時間。也就是說我們需要一個可以被仲裁器控制的初始化模塊,我能夠控制它什麽時候開始,在完成之後它必須告訴我它完成了,我好進行其他的操作。它會跟仲裁器有一定的數據和信號的交互。發現了上面這些,我們可以驚喜的發現這些幾乎是SDRAM操作中所有模塊都應該具備的功能,我們管這些功能叫做普適功能。那麼當我要設計一個新的模塊的時候我可以直接把這種想法套用到新的模塊上,這種想法的第一個優點就出來了,它可以讓你設計的模塊具有更高的通用性,讓你的整個設計得到較大的簡化,同樣的這種設計使得仲裁器中時序的分配也變的比較模式化和標準化。只要你精心設計好了一個模塊的時序其他有著同樣時序的模塊設計基本就是copy一下前面的再做以較小的修改就可以完成的事情。下圖為這種想法的封裝設計。

功能模塊封裝設計
上圖中除了時鐘、復位這兩個大家都熟知的通用接口,我還加入了開始、數據輸入、結束、數據輸出這些通用設計,顯然有了開始和結束,在仲裁器中很準確的控制此模塊開始工作、已經結束工作的時間。圖中in_a、out_a是關於這個模塊的一些特用信號或者數據輸入輸出這就要根據模塊特有的需要來設計了。
總結
        有了上面仲裁機制和功能模塊的設計想法下面我給出一個通用的系統結構。

系統結構
為甚麼說這是一個通用的系統結構呢?當我們回想本文開始的時候,描述的FPGA無法逃出時間的牢籠,我們應該能夠想像以上的結構符合具有時間約束的系統的設計要求。用功能模塊來實現那些系統中最小的工作單元,用仲裁器讓這些工作單元按照系統時序工作起來。
現在一個具有時間約束的系統骨架就呈現在了你的面前,至於它的優點我就不再贅述。總之呢令人驚喜的是這種結構應該能够滿足目前我們遇到的所有的FPGA系統設計(並沒有得完整的實際驗證,在我自己設計的幾個系統中都適用)。
        如果各位看客在閱讀完本文,再次在沒有例程只有手冊的情況下去設計一個新的系統不再那麼手足無措,我會很欣慰,如果沒有達到這種效果。我也能理解,我相信在不久的將來你會有和我相似的看法。



【文件名】:11616@52RD_一個關於FPGA的編碼想法.pdf
【格 式】:pdf
【大 小】:225K
【简 介】:
【目 录】:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2011-6-19 22:09:29 | 显示全部楼层
DDDDDDDDDDDDDDDDD
点评回复

使用道具 举报

发表于 2011-9-16 17:46:21 | 显示全部楼层
正在入门中,正需要
点评回复

使用道具 举报

发表于 2012-10-30 08:42:11 | 显示全部楼层
十分感谢分享
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-6-16 20:38 , Processed in 0.049523 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表