日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

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

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

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

            接上篇

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

            4 設(shè)置簡(jiǎn)單系統(tǒng)

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

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

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

            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)枚舉變量,用于表達(dá)該FSM中的狀態(tài)。使用枚舉與否可以選擇,不過(guò)能讓代碼更容易閱讀,因?yàn)榭梢越o狀態(tài)適當(dāng)?shù)孛?。不過(guò)使用任何整數(shù)或ap_unit變量也能得到與之類(lèi)似的結(jié)果。第5行用于聲明一個(gè)“axiWord”類(lèi)型的變量,用于存儲(chǔ)準(zhǔn)備從輸入中讀取的分組數(shù)據(jù)。

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

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

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



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

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

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉