資料庫fpga
㈠ FPGA的乙太網ip核具體實現步驟,怎樣模擬其功能
你用的是Altera還是xilinx的IP核?
一般的ip核都有自動生成工具,比如Altera有megacore wizard,按照你需要的功能enable或者disable選項就可以了。具體步驟可以上Altera或者Xilinx的網站,搜索你需要的乙太網ip核關鍵字,比如GE或者FE,以及是否需要MAC,PCS功能等。
模擬方面,ip核提供商都是考慮好了的:提供有模擬模型,一般生成core的時候都有sim文件夾,可以用來實現模擬。
㈡ arm、linux 、嵌入式linux,嵌入式系統、DSP、FPGA、CPLD、PLC、SOC、unix到底是什麼意思什麼關系
專業術語 請參考 三樓的回答
方向嘛
首先要學習下基礎課程單片機,匯編和c語言等等,然後再學習嵌入式,
如果說你要想水平高的話,最好學習下操作系統,數據結構,演算法及一些硬體方面的知識等等。
看你是想在什麼方面發展,在硬體方面還是軟體方面。假如是軟體方面,
當然對編程要側重,反之在硬體方面,那麼就要對單片機,電子電路,數電,模電等等要多加學習才是。
做嵌入式的大概有這樣幾個方向:
驅動/BSP/內核移植類:這一類要求你了解硬體晶元和電路原理圖多一些,需要多學習大學這類基礎課,
然後看一些基本的CPU晶元外圍晶元手冊,知道什麼是CPU內部匯流排、外設控制器和寄存器。這類人在產品項目
中人數需要不大,但是工資不低。(內核移植和內核開發暫且不提)
(輔助知識:
通信:串口,usb口,網口,RS232,RS285,LINE2.0,CANBUS,RF,藍牙,紅外
數模:ADC,DAC,放大器應用電路
電源,存儲器,時鍾,感測器等應用)
嵌入式操作系統類:這一類要求你能根據產品需要設計出能多任務處理並控制一些外設或者與外設通訊的程序。
需要你有很好的C語言基礎,單片機基礎,然後是嵌入式操作系統基礎,知道各種多任務處理的模型,然後還需要
一些數據結構知識。你要知道程序是如何燒寫到晶元里變成能控制設備的東西的。
嵌入式系統應用類:這一類要求更加偏向軟體一些,有時甚至只是知道內存限制就可以了,其它硬體都不必考慮太多
,比如做嵌入式GUI的(miniGUI, Qt)、嵌入式資料庫的、嵌入式webserver程序等,這一類歸根結底是軟體開發,
需要有強大的閱讀源碼能力和程序設計基礎。高級嵌入式相關應用程序開發類:如手機開發的,特別是iphone android
的應用開發,這一類實際上是純軟體開發,要求有很好的程序設計基礎、面向對象概念、結構化開發概念等,UI相關的
現在還需要有一些UX用戶體驗理念。
大概就這幾類,如果你是學生建議自己買一個三星的ARM9開發板,很便宜的,從讀晶元手冊、學習移植ucosII,寫寫
ucosII應用程序,深入的可以學習嵌入式linux下應用程序開發等,總之一年之內學透一個開發板,那麼你就可以合格勝任前兩類工作了。
總體來說
第一類:模擬電子 數字電子 微機控制等技術很好,對嵌入式各個模塊很熟悉,單片機應用的爐火純清,
能獨來開發(軟體,硬體,PCB)測試,控制等項目(能力很強,適合獨立開發項目)
第二類:能把操作系統移植到嵌入式,並且能編寫驅動程序(適合團隊開發,和應用軟體工程師配合)
第三類:熟悉BS/CS架構和設計,操作系統原理和內核有相當的認識,有美工經驗,熟悉嵌入式應用
軟體的開發(適合開發上位機,或與第二者協作開發嵌入式)
在此建議 統籌全部 專於一個方面
㈢ 從c語言到fpga高手,我是怎麼煉成的
這些日子我一直在寫一個實時操作系統內核,已有小成了,等寫完我會全部公開,希望能夠為 國內IT的發展盡自己一份微薄的力量。最近看到很多學生朋友和我當年一樣沒有方向 ,所以把我的經歷寫出來與大家共勉,希望能給剛入行的朋友們一點點幫助。一轉眼我在IT行業學習工作已經七年多了,這期間我做過網頁,寫過MIS、數據 庫,應用程序,做過通信軟體、硬體驅動、協議棧,到現在做操作系統內核和 IC相關開發,這中間走了很多彎路,也吃了不少苦。
我上的是一個三流的高校,就連同一個城市的人多數都不知道。因為學校不好也就沒有指望能靠學校名氣找一個好工作。所有的希望都寄託在自己的努力上了, 大一開學前的假期我就開始了學習,記得我買的第一本書是《計算機基礎DOS3.0》,大家別嚇著了,其實當時已經普及了DOS6.22了,只是我在書店裡 看到了DOS4.0,5.0,6.0的書,以為像英語那樣是第四、五、六冊,記得當時到處找DOS1.0,現在想想也幸好我沒有找到:)開學前我學完了 PASCAL,那時既沒有計算機也沒有人可以請教,我連程序是什麼的概念都沒有,只好死記硬背代碼,然後拿紙寫,我一直到大三才有了一台486,在這之前 用紙寫了多少程序我也記不清楚了,只知道最長的一個我拿A4大小的草稿紙寫了30 多頁,我的C語言、C++ 、VC都是在這樣的條件下入門的。所以說條件是可以克服的,希望我的經歷多少給條件艱苦的同學們一點信心。第一次上機是在我姐夫的機房,我的心情激動的無 與倫比,但是一上機我立刻傻了眼,他們用的是英文版的Win3.1,我的那點DOS知識都見了鬼,上機提心吊膽的一陣瞎摸,一不小心把Word弄成了全 屏,怎麼都還不了原,當時真是心急如焚,我以為機器被我弄壞了。第一個C語言程序,就是那個經典的HelloWorld,我調了幾個星期,上機機會非常 少,也沒有書告訴我開發環境(TC2.0)需要設置,而且開始我都不知道有編譯器,我甚至自作聰明把寫好的程序擴展名從.c改成.exe,結果可想而知。 大一學完了C、X86的匯編、數據結構、C++。由於精力都花在自學上了,大一下四門課掛了彩,三類學校就是這點好,掛上一二十門也照樣畢業。不過扯遠點 說,我那麼刻苦都及不了格,可見我們國家的計算機教育有多死板。
大二准備學VC和BC,當時難以取捨,後來選了VC,不為別的,只為書店裡兩本書,VC 那本便宜6塊錢。我的努力在班上無人能及,學的日夜不分,大三有了計算機後更是如此,很多次父親半夜教訓我說我不要命了,我一直覺得自己基礎差,記憶又不 行,條件也不好,所以覺得只有多花點時間才能趕上別人。居然後來有許多朋友說我有學計算機的天賦,讓我哭笑不得。我用的是486,16M內存,1G硬碟, 當時同學們的配置都是P166MMX,我安裝 一個Windows NT4.0需要一個通宵,編譯一個BC5.0向導生成的程序需要近兩個小時,我的顯示器是個二手的,輻射非常大,開機屏幕冒火花,看起來很酷的:),有一 次程序寫的太久,覺得怎麼白色的編輯器背景變成了紫色,以為顯示器壞了,後來才發現眼睛不行了,不過說來也奇怪,到今天我的視力還能保持1.5,真是個奇 跡。但是就是那台破機器陪伴了我兩年,讓我學會了VC、Delphi、SQLServer等。後來那台機器給我阿姨打字用,據她說一天她正打的開心,一股 青煙夾著火苗從顯示器鑽出來,之後它才壽終正寢。
大三假期找了個機會在一個計算機研究所實習,與其說實習不如說是做義工,工作了兩個月一分錢沒有拿。但是這兩個月對我的發展幫助很大,讓我早一步了解 了社會,剛去的時候我當然是一竅不通,在那裡我熟悉了網路,學會了Delphi和Oracle。由於工作很認真,得到了比較好的評價,在一位長者的引薦 下,我開始和他們一起做項目,這使我在大三大四就有了自己的收入,大四又找了兩家MIS公司兼職,雖然錢不多,但是在學生期間有1000多的收入我已經非 常滿足了,我終於用自己賺的錢把計算機換了。大四下開始找工作,這時我的工作經驗已經比較多(當然現在想想非常幼稚),開始聽父母的想去那個研究所, 實習過那個部門也希望我能去,但是不知道為什麼最後不了了之,這種單位就是比較官僚,我一氣之下就到了我兼職的一個公司做MIS的TeamLeader。 在大三到畢業一年的時間,做過了各種MIS,從煤氣、煙廠、公安、鐵路、飲食到高校,什麼有錢做什麼,工作也很辛苦,經常加班和熬通宵,從跟客戶談需求到 設計、編碼、測試、交付都要上。那時覺得很有成就感,覺得自己還不錯,現在想想真是很膚淺。
剛走上工作崗位的學生很容易被誤導,各種開發工具讓人眼花繚亂,同時也覺得很受公司器重,但這樣工作永遠是一個低層次的開發者。不要跟我說什麼系統分 析有多麼多麼重要,多麼多麼難。你以為自己跟用戶談需求做設計就是系統分析和設計了嗎,國內又有幾個公司能夠做的很到位很規范?我是ISO9000內審 員,也在Rational公司受過多次培訓,拿了4個證書,還有一個公司讓我去做 CMM。這些我聽過很多,但是很多事情到國內就變了性質,一個公司不是通過了ISO9000或者CMM就能規范了,我現在在一家有幾十年歷史的外企工作, 裡面的管理不是一般國內企業能及的。作為一個畢業不久以前沒有步入過社會的學生,幾乎不可能在很短的時間掌握系統分析和設計,面向對象、UML只是一個工 具,關鍵是人本身的思想,不是說你熟悉了C++、Rose就能夠做出好的設計,相反如果你具備了很高的素質,你可以用C寫出比別人用C++更加模塊化的程 序。
話說遠一些,國內軟體開發行業有一個怪圈,很多人覺得VC > Delphi > VB,真是很搞笑。這幾個軟體我都做過開發,說白了他們都是工具,應該根據應用的需要選擇採用哪個,而不是覺得哪個上層次。如果你因為用某個開發工具很有 面子而選擇的話,只能說明你很淺薄。如果說層次,那麼這些工具都不上層次,因為它們用來用去都是一些系統的API,微軟的朋友不會因為你記住他們多少個 API或者多少個類就會覺得你很了不起,你永遠只是他們的客戶,他們看重的是你口袋裡的銀子。我也做過系統內核,我也封裝過很多API,同樣我也不會看重 那些使用這些API做二次開發的客戶,除非他能夠作出自己獨到的設計。
至於有人認為C++ > C那更是讓人笑掉大牙,不妨你去打聽一下,現在有幾個操作系統內核是用C++寫的,又有幾個實時系統用的是C++,當然我也不是說C++不好,但是目前的 內核和實時系統中C++還無法與C匹敵,至於說C++適合做應用系統的開發那是另外一回事。所以我的觀點是不在於你用什麼工具和語言,而在於你干什麼工 作。你的設計體現了你的技術層次。
這樣幹了一年我覺得非常苦悶,做的大多數都是熟練工種的活,個人技術上沒有太多的提高也看不到方向。所以決定離開這個城市去上海,尋求更好的發展,並且打算放棄我以前的MIS轉到通信行業。
寫到這里不能不提到我女朋友,我們是在來上海前半年認識的,她大四在我公司實習,公司派她給我寫文檔,我們的感情發展的很快。她告訴我很多事情,她家 原本是改革開放的第一批暴發戶,她母親愛打牌,輸掉了幾百萬,還欠了很多債,她有男朋友,但是她對他沒有感情,只因為他給了她母親兩萬多塊錢,後來還強迫 她寫了四萬塊的借條,她男朋友背叛過她並且不止一次打她,現在逼她結婚不然就要她還錢。這人居然還是一個高校的老師!她母親把父親給她的學費花了,因為拖 欠學費她沒有辦法拿到畢業證。她母親現在有病需要錢,我拿出了自己的一點積蓄並且跟朋友們借了一些,替她交了學費並給她母親看病(後來才知道看病的錢又不 知所終,就連她母親是不是有病我都不知道,但她也是沒有辦法)。這個時候我家知道了一些事情,堅決反對我和她在一起,她原來的男朋友也極力破壞。無奈之下 我們決定早一點離開這個傷心的城市,並且瞞著我們家。由於時間倉促,我只准備了4000塊錢,她僅有的幾百塊錢也被她母親要去了,我買了三張票,一張是中 午的,兩張是晚上的,中午我的家人把我送上船,他們一離開我就下了船,我和她乘坐晚上的船離開了這個我和她生活了很多年的城市,帶走的只是一身債務。沒有 來過上海的我們兩個性倔強,都不願意去麻煩同學和朋友。來到上海是傍晚6點半,我們都不知道該去哪裡,我們找了一個20塊錢的旅館,這個房間連窗戶都沒 有,7月份的天氣酷熱難耐,房間里非常悶熱。第二天我們開始租房子,因為身上的錢不多,我們基本都是步行,花了一個星期時間,不知道在浦東轉了多少圈後找 到了一個400塊的房子,但是我們都不了解上海是付三壓一,還要付半個月的中介費,買了一些鍋碗瓢盆後,我們身上只有800塊錢了,工作都還沒有著落,這 800塊錢要支持到我們拿到第一個月工資,為了省錢我們自己做飯,每天買菜只花兩塊錢,她非常喜歡吃(也可能她在大學經常挨餓的原因),看到她現在這樣省 吃儉用我真的很不忍心。她以前的男朋友也沒有放過她,經常打電話來騷擾,並且來上海看她,還說了不少恐嚇她的話,她過於善良,說他以前畢竟幫助過她,叫我 不要與他一般見識。以後的每天在家就是苦等面試通知,原本我想迅速找一家MIS公司解決眼前的困難,但是她堅持讓我不要放棄自己的理想,終於功夫不負有心 人,我找到了一家通信公司,4000塊的工資雖然趕不上MIS公司給我開出的價位,但也夠在上海生存。她也找到了工作,第一天上班她哭了,這是她來上海第 一次流淚,我心裡很難受也很感動。
由於是全新的行業,我把自己降到了零點,我學的VC、Delphi、資料庫派不上用場,擺在我面前的是嵌入式、協議、信令一些我從未接觸過的知識。我 知道我沒有退路,於是拚命的學習,我把自己當做一個應屆畢業生一樣,一分努力一分收獲,半年過去我終於熟悉了工作,並且得到了公司的表彰,薪水也加了一 級。後面的日子裡我們省吃儉用,把欠朋友的1萬多塊錢還了,日子終於上了正軌。這時女朋友告訴我她想考研究生,我也很支持,於是她辭職在家備考。
另外,在這里我要感謝我的ProjectManager,他原來是一個大通信公司的產品經理,對人非常和善,我從他那裡學到了很多知識,而且他也給了 我許許多多無私的幫助。在工作上他給我充分的空間和信任。記得公司安排我維護一個接入伺服器軟體,由於代碼量不算太小(5萬行),資料和文檔都不齊全,我 維護起來非常吃力,所以想重新把它做一遍,公司領導不太支持,可能覺得工作量太大,但是他極力支持我,私下裡他讓我放手去做,我的維護工作他擠時間做。在 他的支持下,我花了半年時間完成了接入伺服器的軟體,並且實現了一個相對完整的TCP/IP協議棧。在這里我學會了嵌入式系統設計、驅動開發、TCP /IP和很多通信的知識,我花了一年時間終於使自己從MIS開發轉到了通信行業,並且站穩了腳跟。我的開發大量是對硬體的直接操作,不再受微軟的操作系 統,VC、Delhpi這些開發工具的約束,我終於看到了另外一片天空。
我做事情喜歡追根問底,隨著開發的深入,軟體開發與硬體聯系越來越緊密,硬體知識的匱乏又對我的發展產生了障礙,而且晶元技術基本上掌握在國外公司的 手裡,這對做系統級設計是一個非常大的制約,一個新產品出來,第一道利潤(也往往是最豐厚的利潤)常常都被IC公司如Intel、Motorola賺去 了,國內的廠商只能喝點湯。所以我決心解決自己的硬體技術障礙,並打算離開通信行業,進入IC設計相關領域。
當然我明白如果我對硬體了解的非常少,沒有哪家IC公司會仁慈到招我這樣一個一竅不通的人來培訓。所以我必須努力打好基礎,學一些相關知識為以後做准 備。就像我開始從MIS轉到通信一樣,我看過大量通信方面的書,並且給一個ISP做過RADIUS計費分揀台,在這樣的背景下這家通信公司才給了我這個機 會。我在的通信公司是做系統設計的,有不少PCB Layout硬體人員,平常我就注意向他們學習,由於我做的是軟體,在公司看硬體資料不好意思,所以開始只好在家看,剛來上海工作我連續一年都在加班,後 來不加了,因為我要擠出時間學習,通常我12點左右睡,第二天5點半起,我上班比較早,地鐵上如果人不多我也用來看書。學習當然不會是一帆風順的,有些實 在不懂的問題就積累起來問硬體人員,他們的幫助使我學習進度快了很多,因為在沒有人點撥的情況下自學,我的一半時間是花在解決疑難問題上,但這種問題經常 是別人的一句話就可以讓我豁然開朗,我非常慶幸我有這樣的學習環境。在後面的一年裡,我學會了看硬體原理圖,學會了簡單的硬體設計(模擬電路方面還有不小 的差距),事情就是這樣的,當你安安份份做軟體,別人永遠認為你是軟體開發人員,在你開始學習硬體時別人未必會認同,有位中興通訊的朋友還對我說過,一個 人不可能把所有東西都學完。我也明白這一點,但我希望自己做的更好。但當你熟悉硬體後大家又會覺得你好像原本就是軟硬體都懂的,同事們也都習以為常了。這 個時候我可以把硬體資料堂堂正正的拿到公司看,沒有人再大驚小怪了。讓我比較自豪的是我通過自己的努力做了一個IAD(軟交換的終端設備)系統方案,包含 軟硬體的選型、設計等內容,這個方案得到了公司和同事們的認同,讓我感到非常欣慰。
技術是相輔相成的,當我的硬體有了一定的進步後,我的軟體設計也有了很大的提高,我可以從更深層次理解問題,我做的接入伺服器CPU是 Motorola PowerPC860,熟悉的朋友都知道860 QMC與軟體的批量數據傳輸通常採用BD表的方式,硬體人員做驅動的時候習慣採用固定BD表,每接收或發送數據都將數據從BD表拷貝到用戶Buffer, 或從用戶Buffer拷貝到BD表,由於理解的比較深入,我自己重新實現了這個過程,採用動態BD表的方式,驅動從一個網口接收數據,提交給我的軟體進行 三層交換,直至從另外的介面發送出去,沒有進行一次拷貝。這樣的設計大大提高了性能,使系統的指標接近理論值。軟硬體的結合使我的設計水平上了一個台階。 我現在寫的這個操作系統,編譯後我把程序反編譯成匯編,找出其中不優化的代碼,然後在C程序中進行調整。舉個例子,很多CPU沒有專門的乘法指令,這個大 家應該都知道,在這種CPU上進行一個乘法操作常常會花費大量的指令周期,有的朋友會說這個我知道,我會盡量避免採用×號,但是事情往往不是那麼簡單,你 知道 C語言中數組的下標操作是怎麼實現的嗎?仔細看看反匯編的代碼你就會明白,同樣是通過下標的定位操作,C編譯器會有時候會產生位移指令,但有時候會用乘法 實現,兩者效率往往是天壤之別,所以明白這些問題你才能將系統性能提升到極致。這些問題就不多說了,有興趣的話以後可以共同探討。
話說遠一點,我由衷的希望在軟體上做的比較深入的朋友們有機會學學硬體以及其它相關知識,尤其是做底層開發和嵌入式設計的。這對軟體技術的提高有非常 大的幫助,否則很多事情你只知道該這樣但不會明白為什麼該這樣。我這個觀點在我現在的IC公司Project Manager那裡也得到了驗證。他告訴我們公司現在的802.11晶元產品的軟體經理原本是做該晶元硬體設計的,某某某原本是做軟體的,現在在做IC, 類似的例子還有很多,只是在國內這樣的風氣不是非常流行。
我有一些心得體會與大家分享,只有當我干好本職工作後,我才會學習與工作關系不大的技術,這樣公司的上司才不至於反感,在入門階段的問題我通常不去問 那些資深人士,而是問一些資歷比較淺的朋友,比如剛畢業不久的學生,因為他們往往會跟你詳細的講解,而資深人士通常覺得你的問題太簡單,所以回答的也很簡 單,我又不好意思多問。等技術上了一定的層次後我才會問他們,他們也能給你比較深入的回答。另外,有些朋友說我機會比較好,他們也希望能從事新的工作可惜 沒有機會,我聽了只有苦笑,我的機會了解的人都應該知道,我沒有出生在什麼IT世家:)也沒有誰一路提拔我,所有的路都是自己走出來的,我母親去世比較 早,我的後母(我叫她阿姨)看著我努力過來的,一次她看我大年30還在寫程序,她說像我這樣努力木頭都能學出來。
我的最終目的是IC而不是PCB,所以我下一步的准備開始學習IC設計的知識。公司的同事沒有懂IC設計的,後面的路又要靠自己了,我買了不少相關的 書,在網上也查了很多的資料,我花了大量的時間去學習VHDL,並且用軟體進行了一些簡單的設計和模擬(沒有設計ASIC,只是針對FPGA),隨著學習 的深入,我漸漸明白了IC設計的基本流程,同時也明白了這條路的艱辛。這個時候我已經做好了跳槽的准備,我向一家業界有一定知名度的IC設計公司投了簡 歷,並通過了漫長的面試(4個多小時)。其他的一切我都比較滿意,唯獨薪資差強人意,我也明白原因,因為我是這個行業的新人,我沒有經驗,我再一次將自己 清零了。公司老闆問我6000多一個月能不能接受,我知道他也是照章辦事。想想我通信行業的朋友們,基本上都是年薪10萬以上,月薪過萬的也比比皆是,朋 友們也幫我介紹了不少待遇不錯的公司,我該怎麼選擇,當時我很猶豫,我熱愛我的事業,我嚮往我的追求,但我也是一個普通的人,我也需要養家糊口,我也想早 一點買房買車。生活給我出了一道難題。
愛因斯坦在63歲時說過「一個人沒有在30歲以前達成科學上的最大成就,那他永遠都不會有。」這句話給了我很大的壓力和震動,我馬上就26歲了,離 30隻有四年時間,我必須抓緊這幾年寶貴的時間,努力達到我技術上的最高峰。為了這個理想,為了能離自己的夢更近一些,我選擇了這家IC公司,我明白自己 的薪資和公司剛進來的碩士研究生相差無幾,但為了今後的發展只能忍受,一切又得重新開始。換行業是一個非常痛苦的過程,尤其從一個春風得意的位置換到一個 陌生的崗位,感覺象從溫暖的被子里鑽出來跳進冰水中,讓人難以接受。在原來那家通信公司,我是唯一兩年時間漲了五次工資的員工,公司和同事都給了我極大的 認可,工作上也常常被委以重任。但現在這一切都成了過去,在新的公司我只是一個新人,沒有人知道也沒有人在意我過去的成績。我決定重新開始,我把自己看作 新畢業的學生,我要用自己的努力得到公司的認可。進入新的行業是非常痛苦的,我告訴自己必須忍受這一切,雖然外面有很多誘惑,但是既然作出了選擇我就不允 許自己輕易放棄。
我現在已經在這家新公司上了一個多月的班,開始非常艱難,現在慢慢適應了。第一 個月結束時,Team Leader找我談話,說我是新進員工中最優秀的一個,我心裡很欣慰,這也算對我努力的一個肯定吧。在這里還要感謝我的女朋友,她給了我很大的支持和鼓 舞,每次在我動搖的時候她都在鼓勵我,讓我堅持自己的理想,剛來上海是她讓我不要勉強去做MIS,這次也是她讓我頂住了月薪過萬的誘惑,沒有她我可能不會 有今天的成績。現在的公司有自己的操作系統,自己的CPU、DSP和其它晶元,在這里我能學到世界上最先進的技術,我們的設計開發不再完全依賴別人的硬體 和系統,這讓我很開心。我打算等工作步入正軌後,全力學習新的知識,實現我的理想。在後面的兩年裡我給自己定下了幾個目標:
努力做好本職工作,在工作上得到公司和同事們的認同;
努力學習IC硬體設計知識,多向同事請教,並利用一切機會多實踐;
實現我的實時操作系統的主要部分,完成TCP/IP協議棧模塊,並免費發布源代碼;
和我女朋友結婚並買一套小房子,這是最重要的,因為我明白事業是可以重來的,但是珍貴的感情很難失而復得。
在這里提一下我現在開發的操作系統,它是一個實時嵌入式系統,目前支持:
a.時間片輪轉調度和基於優先順序調度,最多64個優先順序;
b.搶占式實時內核;
c.為了便於移植,主體用標准C實現;
d.匯編代碼非常少,不到100行;
e.支持任務管理,各任務有獨立的堆棧;
f.進程同步和通信目前完成了Semaphore,Message Queue正在調試;
g.實現了定時系統調用;
h.可以在windows上模擬調試
我還打算下一步實現優先順序反轉保護,Event Flag,Data Pipe,內存管理(以前實現過)、驅動介面等。 在這之後我還會努力完善它,比如加入文件系統,協議棧、調試介面等。希望朋友們提出自己的意見和建議,在此不勝感激!
就像有的朋友說的,我的經歷或許會給一些朋友產生誤導,在這里我必須說明一下。我來上海以前學習過於拚命,常常晚上只睡3個多小時,我身高1米71, 那時只有108斤(我現在130多),家人也說我這樣拚命活不過60歲,但是當時的我太固執,我對他們說只要能實現理想活50歲我就夠了。那時的拚命使我 的身體受到了影響,有一次早上突然腰肌劇痛難忍,痛的我倒在床上站不起來。雖然我現在已經比較注意,但有時候還會隱隱作痛。後來在女朋友說服了我,來上海 以後我不再如此。我經常引用父親的一句話,而且我也發現拚命不是辦法,我可以熬一兩個通宵,最多的一次我連續工作了三天三夜,但是我半個月都沒有恢復過 來,這樣是不是得不償失?
學習工作應該是一個長期的過程,像馬拉松而不是百米沖刺。我現在非常注意調整學習和工作的強度,我要保證每天盡量有相對充沛的精 力,一些年輕的朋友覺得自己也應該拚命努力,這讓我多少有些擔心,如果我的故事能讓你在學習工作上多一點興趣,我會感到很開心,但如果誤導了某些朋友,讓 你做一些不值得的付出,我會感到很內疚。
㈣ FPGA從事的工作是什麼啊
FPGA從事的工作主要分為硬體部分和軟體部分:硬體工程師主要根據FPGA的數據手冊分析其內部構架,工作環境及相關驅動條件來構造硬體平台,需具備良好的英語水平,深厚的模電數電功底,電路與系統、信號完整性及EMC相關知識,和精通一款制圖軟體;
FPGA軟體工程師主要負責一些相關的演算法,並以軟體代碼加以實現,你做什麼行業的產品就要掌握什麼行業的一系列專業課程,和一種編程語言(V/VHDL)-硬體描述語言。
FPGA(Field-Programmable Gate Array)是現場可編程門陣列的簡稱,簡單來說是一種邏輯數字電路設計的方法。它是作為專用集成電路(ASIC)領域中的一種半定製電路而出現的,既解決了定製電路的不足,又克服了原有可編程器件門電路數有限的缺點。
拓展資料:
FPGA
基礎問題
FPGA的基礎就是數字電路和VHDL語言,想學好FPGA的人,建議床頭都有一本數字電路的書,不管是哪個版本的,這個是基礎,多了解也有助於形成硬體設計的思想。在語言方面,建議初學者學習Verilog語言,VHDL語言語法規范嚴格,調試起來很慢,Verilog語言容易上手,而且,一般大型企業都是用Verilog語言,VHDL語言規范,易讀性強,所以一般軍工都用VHDL。
工具問題
熟悉幾個常用的就可以的,開發環境Quartus II ,或ISE 就可以了,這兩個基本是相通的,會了哪一個,另外的那個也就很Easy了。功能模擬建議使用Modelsim ,如果你是做晶元的,就可以學學別的模擬工具,做FPGA的,Modelsim就足夠了。綜合工具一般用Synplify,初學先不用太關心這個,用Quartus綜合就OK了。
思想問題
對於初學者,特別是從軟體轉過來的,設計的程序既費資源又速度慢,而且很有可能綜合不了,這就要求我們熟悉一些固定模塊的寫法,可綜合的模塊很多書上都有,語言介紹上都有,不要想當然的用軟體的思想去寫硬體。在學習FPGA開發過程,首先要對電路設計熟悉,明白電路的工作過程:電路是並行執行。
習慣問題
FPGA學習要多練習,多模擬,signaltapII是很好的工具,可以看到每個信號的真實值,建議初學者一定要自己多動手,光看書是沒用的。關於英文文檔問題,如果要學會Quartus II的所有功能,只要看它的handbook就可以了,很詳細,對於IT行業的人,大部分知識來源都是英文文檔,一定要耐心看,會從中收獲很多的。
演算法問題
做FPGA的工程師,最後一般都是專攻演算法了,這些基礎知識都是順手捏來的,如果你沒有做好搞理論的准備,學FPGA始終只能停留在初級階段上。對於初學者,數字信號處理是基礎,應該好好理解,往更深的方向,不用什麼都學,根據你以後從事的方向,比如說通信、圖像處理,雷達、聲納、導航定位等。
㈤ fpga系統論文哪個資料庫里搜
FPGA系統設計中硬體資源分配的分析與研究 摘要:基於FPGA(現場可編程門陣列)的電子系統設計中,需要用戶充分了解晶元內部的各項 資源利用情況,包括邏輯單元、RAM、I/O單元、DSP(數字信號處理器)等,以在各種資源利用之間達到 一種平衡,從而最大限度地發揮器件的功用。文中研究了基於FPGA的電子系統設計中資源分配問 題,以設計基於FPGA的多首音樂演奏晶元為例,說明了兩種設計方案,並以Altera公司的FPGA為研 究對象,在QuartusⅡ5. 0設計平台下得到了不同方案中硬體資源的分配情況,並對實驗結果進行了分 析與比較。由實驗結果可知,對於同一設計任務,採用不同設計方法所佔用的FPGA硬體資源是不同 的。 關鍵詞:FPGA;音樂演奏晶元;高速集成硬體描述語言;資源分配 0引言 FPGA(現場可編程門陣列)作為未來數字系統的 三大基石(FPGA、DSP(數字信號處理器)和CPU)之 一,成為目前硬體設計研究的熱點。與傳統電路設計 方法相比, FPGA具有功能強大、開發過程投資小、周 期短、可反復編程修改、保密性能好、開發工具智能化 等特點。我國可編程邏輯器件設計技術落後於國外, 目前立足工程實踐,系統地介紹最新FPGA設計方法 的中文書籍較為貧乏。在這種情況下, FPGA設計工 程師們苦於沒有完備的設計方法學來指導,沒有系統 的設計技術幫他們將設計做得最優化。而當一個設計 在實現時,由於其中一種或多種資源數量上的限制,造 成設計不能實現到目標器件中,這時就需要對資源利 用進行優化[1]。 本文從資源分配角度討論FPGA設計中資源優化 問題,以學會靈活地使用FPGA硬體資源為目的,以基 於FPGA的多首音樂演奏晶元的設計為例,討論了兩 種不同的實現方案,以及這兩種方案不同的硬體資源 佔用情況。 1系統要求及基本原理 1. 1系統要求 當今的電子設計自動化技術採用自頂向下的設計 方法[2],從系統要求描述到系統方案確立再到系統實 現,逐層實現。為了說明在實踐中FPGA的設計方法 及晶元的資源分配問題,本文以一個設計實例來說明。 首先,給出本設計的系統要求:用兩種不同方法實現基 於FPGA的多首音樂演奏晶元的設計,靈活使用FPGA 不同類型的資源,並對不同方案進行資源使用分析。 1. 2基本原理 音調和音長是樂曲的兩大要素。樂譜中的每一音 符對應著一個確定的頻率值(音調),而音樂的節奏即 是每個音符的持續時間(音長)。因此,設計一個基於 FPGA的音樂演奏晶元,實際上只要控制FPGA某個引 腳輸出一定頻率的矩形波,將矩形波輸出到揚聲器發 聲系統即可聽到樂曲[3]。 1. 3音符與分頻系數及分頻預置數的關系 為了產生各音符的頻率,本文採用對一個基準時 鍾進行不同分頻系數分頻的方法。分頻演算法由一個初 值可變的12位加法計數器實現,該計數器的計數初值 由分頻系數決定,計數器的模為213-1=8 191,當計 數器計滿時,計數器產生一個溢出信號,此溢出信號用 作發音的頻率信號。本文實驗中取4 MHz的基準頻 率,根據下面兩表達式得到對應於各音符的分頻系數 及分頻預置數: 分頻系數=基準頻率音符的頻率值(1) 分頻預置數=8 191-分頻系數(2) 1. 4音長的控制 如所演奏的音樂最小的節拍為1/4,將1拍的時 長定為1 s,則只需要提供一個4 Hz的時鍾頻率即可 以產生1/4拍的時長,佔用時間較長的節拍只需將該 音調連續記錄幾次即可。 3. 2兩種方案的比較研究 3. 2. 1兩種方案的結構不同 方案1由一個完整的VHDL程序實現,系統中每 一個功能模塊由程序中相應的進程完成,並不需要其 他工具來輔助,思路比較清晰。但是寫入音符部分程 序稍顯冗長,特別是在實現多首音樂播放功能時,程序 大量重復。 方案2將系統中的各個功能賦予了相應的獨立模 塊,結構清晰,易於調試。同時,方案採用LPM-ROM 存儲音符,更換音樂時只要修改LPM-ROM對應的 mif數據文件即可,不需要重寫程序,設計具有移植性 和靈活性。 3. 2. 2兩種方案佔用FPGA資源不同 由於這兩種方案完全不同的結構,使其對於器件 的資源利用是完全不同的。採用方案1設計,系統占 用了EFF10K10LC84-4器件43% (247/576)的邏輯資 源,但是沒有使用器件內部的RAM資源。方案2的邏 輯資源佔用率為15% (84/576),器件內部的存儲資源 佔用率為33% (2 048/6 144)。 從本質上講,本實驗結果表明的也是一個邏輯資 源與存儲資源之間的相互轉換和折衷的問題,可以用 一部分邏輯資源來替代存儲資源,也可以用一部分存 儲資源來替代邏輯資源。實驗表明,在某些實際的設 計中,設計方案的選擇與資源分配問題息息相關。 4結束語 在FPGA設計中,需要用戶充分了解晶元內部的 各項資源利用情況,包括邏輯單元、RAM、I/O單元、 DSP等,以在各種資源利用之間達到一種平衡,從而最 大限度地發揮器件的功用。實驗採用兩種設計方案實 現了基於FPGA的多首音樂演奏晶元,該實驗通過不 同的方案對FPGA資源作了靈活的分配,並用數據說 明問題。因此,在一些設計場合,如果某些專用硬體模 塊(諸如RAM)資源不夠用,而邏輯單元資源豐富,同 樣可以用邏輯單元實現這些專用硬體模塊,以平衡設 計的資源使用,同時提高設計的性能,反之亦然。這些 在實踐中得到的經驗對於初學者來說相當寶貴,同時 也使我們對FPGA內部結構有了進一步的認識。 參考文獻 [1]吳繼華,王誠. Altera FPGA/CPLD設計[M].北京:人民 郵電出版社, 2005. [2]李東生.電子設計自動化與IC設計[M].北京:高等教育 出版社, 2004. [3]饒敏,邱德慧,符宇同. EDA設計樂曲硬體演奏電路[J]. 微計算機信息, 2007, 23(11-2): 298-300. [4]譚會生,張昌凡. EDA技術及應用[M].西安:西安電子 科技大學出版社, 2001.
㈥ 如何將資料庫設置在FPGA晶元的內部片內ROM中
使用coe文件,在ise幫助中輸入coe即可找到coe文件格式
㈦ 基於FPGA的信號發生器 的TESTBENCH(測試文本)程序怎麼編
1.激勵的設置
相應於被測試模塊的輸入激勵設置為reg型,輸出相應設置為wire類型,雙向埠inout在測試中需要進行處理。
方法1:為雙向埠設置中間變數inout_reg作為該inout的輸出寄存,inout口在testbench中要定義為wire型變數,然後用輸出使能控制傳輸方向。
eg:
inout [0:0] bi_dir_port;
wire [0:0] bi_dir_port;
reg [0:0] bi_dir_port_reg;
reg bi_dir_port_oe;
assign bi_dir_port=bi_dir_port_oe?bi_dir_port_reg:1'bz;
用bi_dir_port_oe控制埠數據方向,並利用中間變數寄存器改變其值。等於兩個模塊之間用inout雙向口互連。往埠寫(就是往模塊裡面輸入)
方法2:使用force和release語句,這種方法不能准確反映雙向埠的信號變化,但這種方法可以反映塊內信號的變化。具體如示:
mole test();
wire data_inout;
reg data_reg;
reg link;
#xx; //延時
force data_inout=1'bx; //強製作為輸入埠
...............
#xx;
release data_inout; //釋放輸入埠
endmole
從文本文件中讀取和寫入向量
1)讀取文本文件:用 $readmemb系統任務從文本文件中讀取二進制向量(可以包含輸入激勵和輸出期望值)。$readmemh 用於讀取十六進制文件。例如:
reg [7:0] mem[1:256] // a 8-bit, 256-word 定義存儲器mem
initial $readmemh ( "mem.data", mem ) // 將.dat文件讀入寄存器mem中
initial $readmemh ( "mem.data", mem, 128, 1 ) // 參數為寄存器載入數據的地址始終
2)輸出文本文件:打開輸出文件用?$fopen 例如:
integer out_file; // out_file 是一個文件描述,需要定義為 integer類型
out_file = $fopen ( " cpu.data " ); // cpu.data 是需要打開的文件,也就是最終的輸出文本
設計中的信號值可以通過$fmonitor, $fdisplay,
2. Verilog和Ncverilog命令使用庫文件或庫目錄
ex). ncverilog -f run.f -v lib/lib.v -y lib2 +libext+.v //一般編譯文件在run.f中, 庫文件在lib.v中,lib2目錄中的.v文件系統自動搜索
使用庫文件或庫目錄,只編譯需要的模塊而不必全部編譯
3.Verilog Testbench信號記錄的系統任務:
1). SHM資料庫可以記錄在設計模擬過程中信號的變化. 它只在probes有效的時間內記錄你set probe on的信號的變化.
ex). $shm_open("waves.shm"); //打開波形資料庫
$shm_probe(top, "AS"); // set probe on "top",
第二個參數: A -- signals of the specific scrope
S -- Ports of the specified scope and below, excluding library cells
C -- Ports of the specified scope and below, including library cells
AS -- Signals of the specified scope and below, excluding library cells
AC -- Signals of the specified scope and below, including library cells
還有一個 M ,表示當前scope的memories, 可以跟上面的結合使用, "AM" "AMS" "AMC"
什麼都不加表示當前scope的ports;
$shm_close //關閉資料庫
2). VCD資料庫也可以記錄在設計模擬過程中信號的變化. 它只記錄你選擇的信號的變化.
ex). $mpfile("filename"); //打開資料庫
$mpvars(1, top.u1); //scope = top.u1, depth = 1
第一個參數表示深度, 為0時記錄所有深度; 第二個參數表示scope,省略時表當前的scope.
$mpvars; //depth = all scope = all
$mpvars(0); //depth = all scope = current
$mpvars(1, top.u1); //depth = 1 scope = top.u1
$mpoff //暫停記錄數據改變,信號變化不寫入庫文件中
$mpon //重新恢復記錄
3). Debussy fsdb資料庫也可以記錄信號的變化,它的優勢是可以跟debussy結合,方便調試.
如果要在ncverilog模擬時,記錄信號, 首先要設置debussy:
a. setenv LD_LIBRARY_PATH :$LD_LIBRARY_PATH
(path for debpli.so file (/share/PLI/nc_xl//nc_loadpli1))
b. while invoking ncverilog use the +ncloadpli1 option.
ncverilog -f run.f +debug +ncloadpli1=debpli:deb_PLIPtr
fsdb資料庫文件的記錄方法,是使用$fsdbDumpfile和$fsdbDumpvars系統函數,使用方法參見VCD
注意: 在用ncverilog的時候,為了正確地記錄波形,要使用參數: "+access+rw", 否則沒有讀寫許可權
在記錄信號或者波形時需要指出被記錄信號的路徑,如:tb.mole.u1.clk.
………………………………………………………………………………………………………
關於信號記錄的系統任務的說明:
在testbench中使用信號記錄的系統任務,就可以將自己需要的部分的結果以及波形文件記錄下來(可採用sigalscan工具查看),適用於對較大的系統進行模擬,速度快,優於全局模擬。使用簡單,在testbench中添加:initial begin
$shm_open("waves.shm");
$shm_probe("要記錄信號的路徑「,」AS「);
#10000
$shm_close; 即可。
4. ncverilog編譯的順序: ncverilog file1 file2 ....
有時候這些文件存在依存關系,如在file2中要用到在file1中定義的變數,這時候就要注意其編譯的順序是
從後到前,就先編譯file2然後才是file2.
5. 信號的強制賦值force
首先, force語句只能在過程語句中出現,即要在initial 或者 always 中間. 去除force 用 release 語句.
initial begin force sig1 = 1'b1; ... ; release sig1; end
force可以對wire賦值,這時整個net都被賦值; 也可以對reg賦值.
6.載入測試向量時,避免在時鍾的上下沿變化
為了模擬真實器件的行為,載入測試向量時,避免在時鍾的上下沿變化,而是在時鍾的上升沿延時一個時間單位後,載入的測試向量發生變化。如:
assign #5 c=a^b
……
@(posedge clk) #(0.1*`cycle) A=1;
******************************************************************************
//testbench的波形輸出
mole top;
...
initial
begin
$mpfile("./top.vcd"); //存儲波形的文件名和路徑,一般是.vcd格式.
$mpvars(1,top); //存儲top這一層的所有信號數據
$mpvars(2,top.u1); //存儲top.u1之下兩層的所有數據信號(包含top.u1這一層)
$mpvars(3,top.u2); //存儲top.u2之下三層的所有數據信號(包含top.u2這一層)
$mpvars(0,top.u3); //存儲top.u3之下所有層的所有數據信號
end
endmole
//產生隨機數,seed是種子
$random(seed);
ex: din <= $random(20);
//模擬時間,為unsigned型的64位數據
$time
ex:
...
time condition_happen_time;
...
condition_happen_time = $time;
...
$monitor($time,"data output = %d", dout);
...
//參數
parameter para1 = 10,
para2 = 20,
para3 = 30;
//顯示任務
$display();
//監視任務
$monitor();
//延遲模型
specify
...
//describ pin-to-pin delay
endspecify
ex:
mole nand_or(Y,A,B,C);
input A,B,C;
output Y;
AND2 #0.2 (N,A,B);
OR2 #0.1 (Y,C,N);
specify
(A*->Y) = 0.2;
(B*->Y) = 0.3;
(C*->Y) = 0.1;
endspecify
endmole
//時間刻度
`timescale 單位時間/時間精確度
//文件I/O
1.打開文件
integer file_id;
file_id = fopen("file_path/file_name");
2.寫入文件
//$fmonitor只要有變化就一直記錄
$fmonitor(file_id, "%format_char", parameter);
eg:$fmonitor(file_id, "%m: %t in1=%d o1=%h", $time, in1, o1);
//$fwrite需要觸發條件才記錄
$fwrite(file_id, "%format_char", parameter);
//$fdisplay需要觸發條件才記錄
$fdisplay(file_id, "%format_char", parameter);
$fstrobe();
3.讀取文件
integer file_id;
file_id = $fread("file_path/file_name", "r");
4.關閉文件
$fclose(fjile_id);
5.由文件設定存儲器初值
$readmemh("file_name", memory_name"); //初始化數據為十六進制
$readmemb("file_name", memory_name"); //初始化數據為二進制
//模擬控制
$finish(parameter); //parameter = 0,1,2
$stop(parameter);
//讀入SDF文件
$sdf_annotate("sdf_file_name", mole_instance, "scale_factors");
//mole_instance: sdf文件所對應的instance名.
//scale_factors:針對timming delay中的最小延時min,典型延遲typ,最大延時max調整延遲參數
//generate語句,在Verilog-2001中定義.用於表達重復性動作
//必須事先聲明genvar類型變數作為generate循環的指標
eg:
genvar i;
generate for(i = 0; i < 4; i = i + 1)
begin
assign = din[i] = i % 2;
end
endgenerate
//資源共享
always @(A or B or C or D)
sum = sel ? (A+B):(C+D);
//上面例子使用兩個加法器和一個MUX,面積大
//下面例子使用一個加法器和兩個MUX,面積小
always @(A or B or C or D)
begin
tmp1 = sel ? A:C;
tmp2 = sel ? B:D;
end
always @(tmp1 or tmp2)
sum = tmp1 + tmp2;
******************************************************************************
模板:
mole testbench; //定義一個沒有輸入輸出的mole
reg …… //將DUT的輸入定義為reg類型
……
wire…… //將DUT的輸出定義為wire類型
……
//在這里例化DUT
initial
begin
…… //在這里添加激勵(可以有多個這樣的結構)
end
always…… //通常在這里定義時鍾信號
initial
//在這里添加比較語句(可選)
end
initial
//在這里添加輸出語句(在屏幕上顯示模擬結果)
end
endmole
一下介紹一些書寫Testbench的技巧:
1.如果激勵中有一些重復的項目,可以考慮將這些語句編寫成一個task,這樣會給書寫和模擬帶來很大方便。例如,一個存儲器的testbench的激勵可以包含write,read等task。
2.如果DUT中包含雙向信號(inout),在編寫testbench時要注意。需要一個reg變數來表示其輸入,還需要一個wire變數表示其輸出
㈧ 基於FPGA的數據採集的系統研究 相關的英文文獻和翻譯
急你所急,如你所願-小米粒資源網【網路第一】
2010年3月 萬方資料庫、cnki知網或者維普資料庫免費賬號
網路搜索「小米粒資源網」,就能出來鏈接
其實不需要賬號密碼也是可以的。完全免費 把 ACS Sciencedirect、springerlink AIAA wileyinterscience萬方 維普 cnki、中國知網 等輕松搞定!!去過了你就知道了 ,我用的2年的辦法了,與大家分享
國內老牌文獻互助網-小米粒資源網
完全免費 一勞永逸,終生免費,速度飛快
具體得到文獻的方法,
1 先申請成為會員
2 把你想要的文獻到那個紅色的【文獻互助區】發貼求助就可以了!就這么簡單,這里下文章的高手很多,主要是些在校大學生,5分鍾之內馬上不論你要的什麼文獻都能提供下載。比你自己找都快..
可求助的文獻資料庫包括
國內:cnki 維普 萬方 cnki(中國知網 中國期刊網),超星書籍 讀秀書籍
國外:ScienceDirect 、ProQuest 、Science、ACS,RSC,Ebsco ,Springer,Blackwell ,ieee、nature wileyinterscience sae paper aip 文獻等各大資料庫文獻! 5d
㈨ 資料庫原理與設計、Java程序設計、FPGA技術及應用、電工技術 這幾樣都是什麼課
資料庫原理與設計課程是設計資料庫的,一般用的資料庫有MySql,MS SQL,Oracle等。資料庫保存數據,而不用文本文件保存。
Java程序設計,就是編程語言,多用於網站後台編寫,安卓程序編寫。
FPGA技術及應用,用於FPGA開發,開發硬體的。
電工技術,大學中的電工技術會講一些電路的知識,例如諾頓,戴維寧電路,電壓控制電流源。