fpga廣泛應用於通訊、影象處理、航天航空、自動化等領域,其中通訊是fpga應用最大的領域。在通訊中,傳送端首先將資料封裝成乙個個包文,接收端按包文為單位進行接收。例如乙太網,傳送端將資料封裝成包文格式,該包文包含了目的位址、源位址、檢驗域、包文長度和包文資料等訊號。接收端根據這些資訊,就能正確地接收資料。可以說包文是通訊中處理的基本單元。
明德揚的練習,大部分都是對包文的處理,因此明德揚先統一解釋包文概念和包文介面訊號,從而避免做練習時出現功能歧義,如果連功能都不明確,那是不可能做好設計的。
下面就是乙個典型的乙太網包文,該包文由14位元組的乙太網頭、2位元組的報文頭、44至1498位元組的包文內容和4位元組的檢驗碼組成。
在fpga可以定義如下訊號來方便地傳輸,即能保留全部報文的資訊,又能適合fpga的介面。
訊號名意義
一般約定
data
包文資料,例子中的乙太網頭至crc等全部內容。
還可以用din來表示輸入的資料;dout表示輸出的資料。介面位寬一般是8、16、24、32等8的整數倍。
vld為1時表示當拍的資料的有效;為0時表示資料無效。
包文在傳輸時,有可能不是連續過來的,例如傳了乙太網頭後,等幾個始終才來報文頭資料。我們可以通過vld來指示資料是有效還是無效。無效的資料就不用理會。
sop為1時表示這個是包文的第乙個資料。
如無特別說明,只有vld=1時,sop才有效。表示該時刻的data中包含了該報文的第乙個位元組資料。
eop為1時表示這個是包文的最後乙個資料
如無特別說明,只有vld=1時,eop才有效。表示該時刻的data中包含了該報文的最後一位元組資料。
err為1時表示這個包文有錯誤
如無特別說明,只有vld=1且eop=1時,err才有效,否則err無效,不用理會。
mty表示無效位元組數。0全部有效。
vld=1且eop=1時,mty才有效,其他時候為一定為0。(也就是說包文中間vld=1時,data全部有效)
假如data的位寬是32位,也就是4個位元組。但包文有可能不是4位元組的倍數。例如包文長度為127位元組時,eop時刻肯定是只有3個位元組有效,此時就可以用mty訊號來指示出來。
mdy值得定義:
0:全部資料都有效;
1:除了data[7:0],其他資料有效。
2:除了data[15:0],其他資料有效。
3:除了data[23:0],其他資料有效。
4:除了data[31:0],其他資料有效。
……以此類推。
rdy模組準備好訊號。當rdy=1時,表示下游模組準備好,可以傳送資料。rdy=0時,絕對不能傳送資料。
當模組a發資料給模組b,如果b正在處理資料,來不及接收時,b將rdy訊號拉低,告訴a不要發資料過來。假如ryd=1,a發資料過來,b處理出錯,則是b的問題。而如果rdy=0,a發資料過來導致b出錯,那就是a的問題。
要注意此訊號由b產生的。
上面的**非常重要,做練習如果不清楚訊號定義,請務必回到此處查詢。基本上所有模組的輸入輸出訊號都可以參考這**來定義,對於劃分模組也有重要參考價值。
python包的概念
python的包就是乙個資料夾 這個資料夾與普通資料夾的區別在於他必須包含乙個 init py的檔案 這個檔案可以包含 也可以沒有內容 只是用於標識乙個包 這個檔案本身是乙個模組 這個模組的名字是資料夾的名字 而不是 包名.init 而是包的名字 即這個資料夾的名字 命名空間 import只能匯入模...
python包的概念
1 python程式由包 package 模組 module 和函式組成。包是由一系列模組組成的集合。模組是處理某一類問題的函式和類的集合。2 包就是乙個完成特定任務的工具箱。3 包必須含有乙個 init py檔案,它用於標識當前資料夾是乙個包。4 python的程式是由乙個個模組組成的。模組把一組...
閉包的概念
因此 可以訪問外部函式的變數,其內部變數只能內部可訪問 閉包時塊級作用域,可以定義自己的變數,避免變數命名衝突,汙染外部變數 使用場景一 封裝私有變數,對外暴露get,set方法或其中一種 使用場景二 儲存外部函式的變數 使用場景三 使用場景三 當閉包被賦值給乙個生命較長的變數時,其所依賴的父函式的...