<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 網(wǎng)絡(luò )與存儲 > 設計應用 > Vivado HLS推動(dòng)協(xié)議處理系統蓬勃發(fā)展(下)

Vivado HLS推動(dòng)協(xié)議處理系統蓬勃發(fā)展(下)

作者:KimonKarras JamesHrica 時(shí)間:2015-04-29 來(lái)源:電子產(chǎn)品世界 收藏

  接上篇

本文引用地址:http://dyxdggzs.com/article/273295.htm

  4 設置簡(jiǎn)單系統

  協(xié)議處理一般情況下屬于狀態(tài)事務(wù)。必須先順序讀取在多個(gè)時(shí)鐘周期內進(jìn)入總線(xiàn)的數據包字,然后根據數據包的某些字段決定進(jìn)一步操作。通常應對這種處理的方法是使用狀態(tài)機,對數據包進(jìn)行迭代運算,完成必要的處理。例3是一種簡(jiǎn)單的狀態(tài)機,用于根據上一級的輸入丟棄或轉發(fā)數據包。該函數接收三個(gè)參數:一個(gè)是通過(guò)“inData”流接收到的輸入分組數據;一個(gè)是通過(guò)“validBuffer”流顯示數據包是否有效的1位旗標;第三個(gè)是稱(chēng)為“outData”的輸出分組數據流。注意 HLS函數中的參數是按引用傳遞的。這在使用較為復雜的 HLS流的時(shí)候是必要的。ap_uint等較為簡(jiǎn)單的數據類(lèi)型則可按值傳遞。

  第2行中的流水線(xiàn)編譯指令指示 HLS將該函數流水線(xiàn)化,讓初始化間隔為1(II=1),即每個(gè)時(shí)鐘周期處理一個(gè)新的輸入數據字。Vivado HLS負責核驗設計,并確定需要在設計中引入多少個(gè)流水線(xiàn)級來(lái)滿(mǎn)足調度限制要求。

  例3:使用Vivado HLS的有限狀態(tài)機

  1 void dropper(stream& inData,
  stream>& validBuffer,
  stream& outData) {
  2 #pragma HLS pipeline II=1 enable_flush
  3
  4 static enum dState {D_IDLE = 0, D_STREAM, D_
  DROP} dropState;
  5 axiWord currWord = {0, 0, 0, 0};
  6
  7 switch(dropState) {
  8 case D_IDLE:
  9 if (!validBuffer.empty() && !inData.empty()) {
  10 ap_uint<1> valid = validBuffer.read();
  11 inData.read(currWord);
  12 if (valid) {
  13 outData.write(currWord);
  14 dropState = D_STREAM;
  15 }
  16 }
  17 else
  18 dropState = D_DROP;
  19 break;
  20 case D_STREAM:
  21 if (!inData.empty()) {
  22 inData.read(currWord);
  23 outData.write(currWord);
  24 if (currWord.last)
  25 dropState = D_IDLE;
  26 }
  27 break;
  28 case D_DROP:
  29 if (!inData.empty()) {
  30 inData.read(currWord);
  31 if (currWord.last)
  32 dropState = D_IDLE;
  33 }
  34 break;
  35 }
  36 }

  第4行用于聲明一個(gè)靜態(tài)枚舉變量,用于表達該FSM中的狀態(tài)。使用枚舉與否可以選擇,不過(guò)能讓代碼更容易閱讀,因為可以給狀態(tài)適當地命名。不過(guò)使用任何整數或ap_unit變量也能得到與之類(lèi)似的結果。第5行用于聲明一個(gè)“axiWord”類(lèi)型的變量,用于存儲準備從輸入中讀取的分組數據。

  第7行中的開(kāi)關(guān)語(yǔ)句用于表達實(shí)際的狀態(tài)機。建議使用開(kāi)關(guān),但非強制要求。使用if-else決策樹(shù)也能執行同樣的功能。開(kāi)關(guān)語(yǔ)句能夠讓Vivado HLS工具更高效地枚舉所有狀態(tài),并優(yōu)化得到的狀態(tài)機RTL代碼。

  執行從D_IDLE狀態(tài)開(kāi)始,此時(shí)FSM從第10行和第11行的兩個(gè)輸入流讀取。這兩行分別代表兩種流對象讀取方法。這兩種方法均從設定的流讀取,然后將結果存儲到給定變量中。這種方法采取阻塞式讀取,意味著(zhù)如果該方法調用無(wú)法順序執行,就會(huì )暫停執行該函數調用中的其余代碼。在試圖讀取空流的時(shí)候會(huì )發(fā)生這種情況。

c++相關(guān)文章:c++教程



上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: Vivado FIFO 存儲器 RAM C/C++

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>