国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在C代碼中插入寄存器?

FPGA技術驛站 ? 來源:Lauren的FPGA ? 作者:Lauren的FPGA ? 2021-02-02 17:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

對于邏輯級數較高的路徑,常用的方法之一是在其中插入流水寄存器,將路徑打斷,從而降低邏輯延遲,這在HDL代碼中實現起來比較容易。此外,從RTL代碼風格角度講,對于關鍵模塊,設計時常將其輸入/輸出端口寄存。這起到了隔離關鍵路徑的作用。

但是,如果使用的RTL代碼是HLS轉換生成的,例如使用Vitis HLS綜合的,其可讀性較差,想要在其生成的HDL代碼中插入寄存器就變得比較困難。為此,我們想到了能否在C代碼中插入寄存器,并保證Vitis HLS綜合后的結果是寄存器。

這要解決四個問題:一是這樣的C代碼要具備一定的可復用性,比如,以模板函數的形式呈現。二是這樣的C代碼是參數化的,尤其是數據類型,因為需要寄存的數據其數據類型不盡相同。這仍然可以借助模板函數實現。三是保證這個函數不被優化合并掉。因為這個函數功能比較單一,輸出等于輸入,這就要用到INLINE的功能。四是C語言是不具備時序特征的,要實現輸出與輸入的延遲,就要借助相應的pragma,我們想到了Latency。

在此基礎上,我們構造了下面的C++代碼。不難看出,這是一個模板函數,數據類型是參數化的,使用了三個pragma。其中PIPELINE用于限定II為1,LATENCY用于限定延遲為1,INLINE用于防止該函數被合并。

66d4998e-5fc8-11eb-8b86-12bb97331649.png

看一個具體的使用案例,如下圖所示代碼。功能很簡單,就是實現兩個數的相加。這里對兩個輸入數據a和b分別做了寄存,同時對結果c也做了寄存。最終的綜合報告顯示Latency為2,和我們預期的一致。對于生成的HDL代碼,將其添加到Vivado中進行綜合,綜合后的結果也是符合預期的。

6a37c740-5fc8-11eb-8b86-12bb97331649.png

6dcf1afc-5fc8-11eb-8b86-12bb97331649.png

這里,我們對比一下三種情形。情形1:不添加流水寄存器;情形2:僅對輸出添加流水寄存器;情形3:輸入輸出均添加流水寄存器。Vitis HLS綜合結果以及其生成的HDL代碼在Vivado下的綜合結果對比如下圖所示。首先,可以看到Latency符合預期,同時II始終為1;其次,Vivado下綜合后的資源利用率與Vitis HLS的結果是不一致的。這一點也很容易理解,因為Vivado綜合時會有很多優化。

6e165a70-5fc8-11eb-8b86-12bb97331649.png

進一步,我們看到這里的延遲為1,如果需要兩級延遲,就要兩次調用模板函數。能否將延遲的時鐘周期也設置成參數呢?答案是肯定的,如下圖代碼所示。這里定義了L,用來管理延遲的時鐘周期個數,對應pragma Latency的min和max值。

6e600c38-5fc8-11eb-8b86-12bb97331649.png

6f7ac52c-5fc8-11eb-8b86-12bb97331649.png

原文標題:在C代碼中插入寄存器

文章出處:【微信公眾號:Lauren的FPGA】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5608

    瀏覽量

    129968
  • C語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145570
  • 代碼
    +關注

    關注

    30

    文章

    4967

    瀏覽量

    73960

原文標題:在C代碼中插入寄存器

文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術驛站】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    STPIC6C595:8位移位寄存器的性能剖析與應用解讀

    STPIC6C595:8位移位寄存器的性能剖析與應用解讀 在電子設計領域,對于需要控制相對中等負載功率的系統而言,合適的移位寄存器至關重要。STPIC6C595作為一款單片、
    的頭像 發表于 01-26 17:40 ?647次閱讀

    LAT1170+如何理解 RAMECC FAR 寄存器的值

    電子發燒友網站提供《LAT1170+如何理解 RAMECC FAR 寄存器的值.pdf》資料免費下載
    發表于 01-09 16:12 ?0次下載

    請問如何實現C語言訪問MCU寄存器

    系列KeilC擴充sfr關鍵字,舉例如下:   sfr P0 = 0x80;   這樣操作0x80單元直接寫P0即可。   下面對AVR的歌C編譯對訪問MCU寄存器的方法進行簡介。
    發表于 12-26 07:00

    【NCS隨筆】nRF54L15使用UICR寄存器保存數據

    nRF54L15使用UICR寄存器保存數據 本文章主要是講解如何使用nRF54L15的UICR寄存器保存一些基礎數據 一、UICR寄存器的說明 UICR(用戶信息配置寄存器)**是非易
    的頭像 發表于 11-27 17:09 ?1508次閱讀

    嵌入式系統必懂的 20 個寄存器

    了嵌入式系統開發者必懂的20個寄存器,讓你快速掌握MCU的核心操作方法。01寄存器基礎寄存器是CPU內部用于高速存取數據的小容量存儲單元,是計算機執行指令、處理
    的頭像 發表于 11-14 10:28 ?1085次閱讀
    嵌入式系統必懂的 20 個<b class='flag-5'>寄存器</b>

    ?SN74HCT595 8位移位寄存器技術解析與應用指南

    Texas Instruments SN74HCT595/SN74HCT595-Q1 8位移位寄存器包含8位串進并出移位寄存器,向8位D類存儲寄存器饋送信號。存儲寄存器具有并行 3 狀
    的頭像 發表于 09-19 14:31 ?947次閱讀
    ?SN74HCT595 8位移位<b class='flag-5'>寄存器</b>技術解析與應用指南

    TPIC6595 8位功率移位寄存器技術文檔摘要

    該TPIC6595是一款單片、高壓、大電流功率的8位移位寄存器,設計用于需要相對較高負載功率的系統。該器件在輸出端包含一個內置電壓鉗位,用于電感瞬態保護。功率驅動應用包括繼電器、螺線管和其他電流
    的頭像 發表于 09-09 11:10 ?923次閱讀
    TPIC6595 8位功率移位<b class='flag-5'>寄存器</b>技術文檔摘要

    ?TPIC6B595 8位功率移位寄存器技術文檔總結

    TPIC6B595器件是一款單片、高壓、電流功率8位移位寄存器,設計用于需要相對高負載功率的系統。該器件在輸出端包含一個內置電壓鉗位,用于電感瞬態保護。功率驅動應用包括繼電器、螺線管和其他
    的頭像 發表于 09-09 10:16 ?1010次閱讀
    ?TPIC6B595 8位功率移位<b class='flag-5'>寄存器</b>技術文檔總結

    ?TPIC6C595 8位移位寄存器數據手冊總結

    該TPIC6C595是單片、壓、低電流 功率 8 位移位寄存器設計用于需要相對中等負載功率的系統 例如 LED。該器件在輸出端包含一個內置電壓鉗位,用于電感瞬態 保護。功率驅動應用
    的頭像 發表于 09-09 09:56 ?882次閱讀
    ?TPIC6<b class='flag-5'>C</b>595 8位移位<b class='flag-5'>寄存器</b>數據手冊總結

    TLC6C598 8位移位寄存器LED驅動技術手冊

    TLC6C598器件是單片、壓、低電流功率 8 位移位 寄存器設計用于需要相對中等負載功率的系統,例如 LED。 該器件包含一個 8 位串行輸入并行輸出移位寄存器,可為 8 位
    的頭像 發表于 08-26 14:31 ?1089次閱讀
    TLC6<b class='flag-5'>C</b>598 8位移位<b class='flag-5'>寄存器</b>LED驅動<b class='flag-5'>器</b>技術手冊

    ?TLC6C5912 12通道移位寄存器LED驅動技術文檔總結

    該TLC6C5912是一款單片、壓、低電流功率 12 位移位寄存器 設計用于需要相對中等負載功率的系統,例如 LED。 該器件包含一個 12 位串行輸入并行輸出移位寄存器,可為
    的頭像 發表于 08-26 14:16 ?995次閱讀
    ?TLC6<b class='flag-5'>C</b>5912 12通道移位<b class='flag-5'>寄存器</b>LED驅動<b class='flag-5'>器</b>技術文檔總結

    ?TLC6C5816-Q1 16位移位寄存器LED驅動技術文檔總結

    TLC6C5816-Q1 器件是一款 16 位移位寄存器 LED 驅動,旨在支持汽車 LED 應用。內置LED開路和LED短路診斷機制,提供增強的安全保護。該器件包含 16 個通道,帶有
    的頭像 發表于 08-25 18:13 ?982次閱讀
    ?TLC6<b class='flag-5'>C</b>5816-Q1 16位移位<b class='flag-5'>寄存器</b>LED驅動<b class='flag-5'>器</b>技術文檔總結

    SN74LV595B-EP低噪聲8位移位寄存器技術解析與應用指南

    Texas Instruments SN74LV595B-EP低噪聲8位移位寄存器包含一個8位串行輸入、并行輸出移位寄存器,可為8位D類存儲寄存器饋送信號。存儲寄存器具有并行 3 狀態
    的頭像 發表于 08-15 09:28 ?1215次閱讀
    SN74LV595B-EP低噪聲8位移位<b class='flag-5'>寄存器</b>技術解析與應用指南

    使用寄存器點亮LED燈

    學習本章時,配合以上芯片手冊的“19. I/O Ports”章節一起閱讀,效果會更佳,特別是涉及到寄存器說明的部分。本章內容涉及到較多寄存器方面的深入內容,對于初學者而言這些內容豐富也較難理解,但非常有必要細讀研究、夯實基礎。
    的頭像 發表于 05-28 17:37 ?1310次閱讀
    使用<b class='flag-5'>寄存器</b>點亮LED燈

    如何用C語言操作寄存器——瑞薩RA系列FSP庫開發實戰指南(10)

    由于寄存器的數量是非常之多的,如果每個寄存器都用像*((uint32_t*)(0x40080000+0x0020*1))這樣的方式去訪問的話,會顯得很繁瑣、很麻煩。為了更方便地訪問寄存器,我們會借助
    的頭像 發表于 04-22 15:30 ?1970次閱讀
    如何用<b class='flag-5'>C</b>語言操作<b class='flag-5'>寄存器</b>——瑞薩RA系列FSP庫開發實戰指南(10)