91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何寫出時(shí)序最優(yōu)的HDL代碼?如何寫出時(shí)序裕量足夠的代碼?

FPGA攻城獅之家 ? 來源:FPGA攻城獅之家 ? 2024-03-12 09:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

你想寫出可以跑出700M以上的代碼嗎,直逼FPGA內(nèi)部PLL的極限。

你想寫出時(shí)序裕量足夠的代碼嗎,讓你的代碼不會(huì)出現(xiàn)時(shí)序違例。

你想在時(shí)序違例時(shí)能輕松應(yīng)對嗎?讓代碼輕松越過時(shí)序這道門檻。

這篇文章就是一步步向你解釋,如何理解代碼中的時(shí)序,以及如何解決代碼中的時(shí)序違例問題。

之前的文章中提到過,工程中ISP算法模塊輕松跑到了762.5M的頻率,整個(gè)ISP鏈路沒有優(yōu)化的情況下跑到400M的時(shí)鐘頻率(xilinx的us+系列)。

573357de-dfa1-11ee-a297-92fbcf53809c.png

這篇文章將逐步解開HDL代碼中的時(shí)序之謎,并且讓你輕松應(yīng)對FPGA中的時(shí)序問題。我將從實(shí)際工程的ISP算法模塊出發(fā),從設(shè)計(jì)到時(shí)序違例的查找,一步步提高代碼的時(shí)序性能。

在第一個(gè)ISP模塊DPC中,我使用了一個(gè)在3x3的矩陣中查找中值的模塊,也就是大家常用的中值濾波器。是不是很多人都設(shè)計(jì)過,先不著急覺得是否簡單,而是看如何把算法移植和時(shí)序的思想灌入到這個(gè)模塊之中。

首先假設(shè)你已經(jīng)得到了一個(gè)3x3的矩陣,簡單看看設(shè)計(jì)思想:

在3x3 窗口中獲取9 個(gè)數(shù)據(jù),對9 這個(gè)數(shù)據(jù)值進(jìn)行排序,排序步驟如下

A)窗內(nèi)的每行數(shù)據(jù)找到最大值、中間值和最小值;

B)把三列的最小值相比較,取其中的最大值;

C)把三列的最大值相比較,取其中的最小值;

D)把三列的中間值相比較,再取一次中間值;

E) 再把B,C,D 中得到的三個(gè)值再排序,獲取中值。

5752fd00-dfa1-11ee-a297-92fbcf53809c.png

有了設(shè)計(jì)思想就有了靈魂,剩下的是如何構(gòu)建一個(gè)有血有肉的軀體了。經(jīng)過思考不難發(fā)現(xiàn),9個(gè)數(shù)的中值濾波變成了3次在3個(gè)數(shù)中找最大值,最小值,中值。

第一次:執(zhí)行步驟A。

第二次:執(zhí)行步驟B,C,D .

第三次:執(zhí)行E 。

第一次三行D1,D2,D3并行,第二次三列Dxmax,Dxmed,Dxmin并行,第三次在剩下的三個(gè)數(shù)里面找到中值,運(yùn)算完畢。所以9個(gè)數(shù)據(jù)的中值查找的設(shè)計(jì),變成了一個(gè)只需要解決三個(gè)數(shù)據(jù)里面找到max,med,min的設(shè)計(jì)。

是不是覺得這太簡單了。別急,聽我繼續(xù)分析:

既然是在三個(gè)數(shù)據(jù)里面排序,那就需要兩兩比較,于是就是需要比較3次。A 與B ,B與C,A與C。現(xiàn)在假設(shè)A

好,此時(shí)另一個(gè)誤區(qū)可能就要出現(xiàn)了。因?yàn)閒lag可能為0也可能為1,那么你得到了三個(gè)flag,一共有多少種情況呢?可能有人不假思索地回答8種,因?yàn)?bit數(shù)據(jù),2^3= 8 ,所以就是8 種。其實(shí)不是,用概率與統(tǒng)計(jì)的知識(shí),三個(gè)數(shù)據(jù)的排序應(yīng)該是有C31* C21 * C11 = 6 種。真值表如下

A B A
0 0 0 max=A,min = C
0 0 1 不存在
0 1 0 max=A,min = B
0 1 1 max=C,min = B
1 0 0 max=B,min = C
1 0 1 max=B,min = A
1 1 0 不存在
1 1 1 max=C,min = A

算法分析完畢,剩下的就是代碼設(shè)計(jì)了。首先你需要進(jìn)行三次比較。

575de5ee-dfa1-11ee-a297-92fbcf53809c.png

5778e9f2-dfa1-11ee-a297-92fbcf53809c.png

針對上述代碼,畫出對應(yīng)的數(shù)字電路示意圖,(mux的三個(gè)輸入端省略了datx_reg)

577fdba4-dfa1-11ee-a297-92fbcf53809c.png

我假設(shè)FPGA內(nèi)部按照上圖所示的方式進(jìn)行布局布線,那么最長數(shù)據(jù)路徑應(yīng)該是dat2_reg→comp_12 → mux3. (或者說是dat2_reg→ comp_23 → mux1)這條路徑也就被稱之為最長路徑或者關(guān)鍵路徑。時(shí)序分析工具干的事情就是,分析這條最長路徑(當(dāng)然其他路徑也分析)上的時(shí)序是否滿足條件。

單獨(dú)把這條路徑摳出來,它就是這樣子的。于是,STA靜態(tài)時(shí)序分析的模型就出來了,計(jì)算reg到reg之間的延遲,兩個(gè)reg之間,經(jīng)歷了一個(gè)比較器和一個(gè)多路選擇器這兩個(gè)組合邏輯。

578396e0-dfa1-11ee-a297-92fbcf53809c.png

如果上述的路徑因?yàn)樽呔€(linelatency)延遲,或者是因?yàn)檫壿嬔舆t(logiclatency)過大導(dǎo)致了時(shí)序違例,那么我們就應(yīng)該在兩個(gè)組合邏輯之間插入reg。從電路上,應(yīng)該如下圖所示。

57900e84-dfa1-11ee-a297-92fbcf53809c.png

那么從代碼的角度,應(yīng)該這樣修改,就可以達(dá)到上圖的效果:

579b305c-dfa1-11ee-a297-92fbcf53809c.png

好了,有了這個(gè)參考模板,再去看其他的中值濾波代碼,你就知道要從哪里去優(yōu)化了。

為了讓大家更好的理解時(shí)序,我在網(wǎng)上找了兩個(gè)用相同的算法思路設(shè)計(jì)的開源的代碼??此麄兊脑O(shè)計(jì)方法

三方代碼 1

57abe53c-dfa1-11ee-a297-92fbcf53809c.png

三方代碼 2

57b1092c-dfa1-11ee-a297-92fbcf53809c.png

可以看到數(shù)據(jù)比較的時(shí)候,邏輯明顯有冗余,EDA工具不一定能自動(dòng)優(yōu)化。

然后我將兩個(gè)三方的代碼,以及我自己的代碼放入同一工程中進(jìn)行編譯,故意加大時(shí)鐘頻率,讓它們出現(xiàn)時(shí)序違例,從而找出關(guān)鍵路徑。

三方的兩個(gè)模塊我例化成 median_filter_3x3 ,和 medfilter3by3 ,用vivado2022.1進(jìn)行編譯。得到時(shí)序違例報(bào)告

57be6acc-dfa1-11ee-a297-92fbcf53809c.png

再進(jìn)一步分析關(guān)聯(lián)路徑1,得到了如下圖所示的路徑示意圖

57c8d76e-dfa1-11ee-a297-92fbcf53809c.png

可以看到在兩個(gè) reg之間有4個(gè)邏輯塊,然后再去代碼中找到相應(yīng)的位置。然后再追究到代碼內(nèi)部。

57dbd22e-dfa1-11ee-a297-92fbcf53809c.png

57e00344-dfa1-11ee-a297-92fbcf53809c.png

可以看到,代碼中多次出現(xiàn)重復(fù)性的數(shù)據(jù)比較,這都是數(shù)據(jù)優(yōu)化的方向。具體的位置就是 33-37行,最后vivado推測出第37行,需要經(jīng)過4級(jí)組合邏輯才能將dat3 賦值給 mid_dat 。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1645

    文章

    22050

    瀏覽量

    618717
  • 濾波器
    +關(guān)注

    關(guān)注

    162

    文章

    8138

    瀏覽量

    182127
  • 比較器
    +關(guān)注

    關(guān)注

    14

    文章

    1848

    瀏覽量

    109197
  • HDL
    HDL
    +關(guān)注

    關(guān)注

    8

    文章

    330

    瀏覽量

    48067
  • PLL電路
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    6817

原文標(biāo)題:基于FPGA的 ISP代碼精講1 —— 如何寫出時(shí)序最優(yōu)的HDL代碼

文章出處:【微信號(hào):gh_99a29eb83412,微信公眾號(hào):FPGA攻城獅之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    優(yōu)化高速接口的時(shí)序

    本文將對源同步定時(shí)如何優(yōu)化高速接口時(shí)序進(jìn)行討論。時(shí)序預(yù)算是對系統(tǒng)正常工作所需時(shí)序參數(shù)或時(shí)序
    發(fā)表于 03-20 10:46 ?2921次閱讀
    優(yōu)化高速接口的<b class='flag-5'>時(shí)序</b><b class='flag-5'>裕</b><b class='flag-5'>量</b>

    進(jìn)行RTL代碼設(shè)計(jì)需要考慮時(shí)序收斂的問題

    更快,而一個(gè)壞的代碼風(fēng)格則給后續(xù)時(shí)序收斂造成很大負(fù)擔(dān)。你可能要花費(fèi)很長時(shí)間去優(yōu)化時(shí)序,保證時(shí)序收斂。拆解你的代碼,添加寄存器,修改走線,最后
    的頭像 發(fā)表于 11-20 15:51 ?4423次閱讀
    進(jìn)行RTL<b class='flag-5'>代碼</b>設(shè)計(jì)需要考慮<b class='flag-5'>時(shí)序</b>收斂的問題

    何為高質(zhì)量的代碼?如何寫出高質(zhì)量代碼?

    懂得“數(shù)據(jù)結(jié)構(gòu)與算法” 寫出高效的代碼,懂得“設(shè)計(jì)模式”寫出高質(zhì)量的代碼。
    發(fā)表于 08-02 09:44 ?1078次閱讀
    何為高質(zhì)量的<b class='flag-5'>代碼</b>?<b class='flag-5'>如何寫出</b>高質(zhì)量<b class='flag-5'>代碼</b>?

    如何寫出好的代碼?高質(zhì)量代碼的三要素

    膾炙人口的詩"春有百花秋有月,夏有涼風(fēng)冬有雪",意境唯美,簡明易懂。好的代碼也是讓人陶醉的,那么如何寫出好的代碼?
    的頭像 發(fā)表于 01-05 11:29 ?1737次閱讀
    <b class='flag-5'>如何寫出</b>好的<b class='flag-5'>代碼</b>?高質(zhì)量<b class='flag-5'>代碼</b>的三要素

    如何寫出可以讓人理解的代碼(以verilog語言為例)?

    如何寫出可以讓人理解的代碼(以verilog語言為例)?1. 代碼要比較好理解,最容易做到的就是把代碼寫短,因此在每個(gè)always語句塊盡可能只處理一個(gè)信號(hào),或者只處理一組相關(guān)度很高的
    發(fā)表于 02-01 11:39

    如何利用時(shí)鐘芯片DS1302來分析時(shí)序圖并寫出代碼

    以時(shí)鐘芯片DS1302為例子來分析時(shí)序圖并寫出代碼
    發(fā)表于 04-02 06:00

    如何寫出高效并且簡潔易于閱讀的單片機(jī)C語言代碼呢?

    單片機(jī)的運(yùn)行除去需要硬件的支持之外,高效簡潔的C語言也是非常重要的因素之一。那么如何寫出高效并且簡潔易于閱讀的單片機(jī)C語言代碼呢?本文將為大家介紹如何寫出優(yōu)美簡潔 的單片機(jī)循環(huán)語句,感興趣的朋友快來
    發(fā)表于 07-15 06:34

    如何寫出多串口共用printf函數(shù)語句呢

    如何寫出多串口共用printf函數(shù)語句呢?求大神解答
    發(fā)表于 11-17 06:37

    如何寫DA轉(zhuǎn)化代碼

    如何寫DA轉(zhuǎn)化代碼:s: 即startADDRESS: 即器件地址(0表示為寫)A:表示等待回應(yīng)CONTROL BYTE: 表示控制字(第二個(gè)發(fā)送的字節(jié))A:表示等待回應(yīng)DATE BYTE: 表示寫入的電壓值(注意如果寫入255,其實(shí)結(jié)果是5v,以此來換算)A:表示等待
    發(fā)表于 02-16 07:48

    用C語言如何寫出單片機(jī)延時(shí)程序,且延時(shí)時(shí)間如何計(jì)算的?

    用C語言,如何寫出單片機(jī)延時(shí)程序,且延時(shí)時(shí)間如何計(jì)算的?
    發(fā)表于 10-18 08:19

    介紹了五個(gè)簡單的總體概念 可輕松寫出寫出代碼

    我認(rèn)為應(yīng)該建立起良好的心態(tài),這樣,不管你用什么語言或者庫,都會(huì)自然而然的寫出高質(zhì)量的代碼。這里我主要談到 5 個(gè)相關(guān)的概念。記住它們,輕松寫出寫出
    的頭像 發(fā)表于 01-10 14:00 ?5899次閱讀
    介紹了五個(gè)簡單的總體概念 可輕松<b class='flag-5'>寫出</b><b class='flag-5'>寫出</b>好<b class='flag-5'>代碼</b>

    教你如何寫出性能更高的SystemVerilog代碼

    本文旨在幫助大家降低在編碼過程中寫出低性能和耗內(nèi)存的概率,只要大家在寫代碼時(shí)稍注意下,積少成多。
    的頭像 發(fā)表于 07-26 17:31 ?1379次閱讀
    教你<b class='flag-5'>如何寫出</b>性能更高的SystemVerilog<b class='flag-5'>代碼</b>

    C語言如何寫出高效代碼呢?

    當(dāng)涉及復(fù)雜的高效C代碼案例時(shí),這些代碼示例展示了C語言中一些復(fù)雜且高效的應(yīng)用案例,涵蓋了排序算法、圖算法、位操作、文件操作、多線程編程等領(lǐng)域。
    發(fā)表于 09-06 14:57 ?887次閱讀
    C語言<b class='flag-5'>如何寫出</b>高效<b class='flag-5'>代碼</b>呢?

    如何寫出高效優(yōu)美的C語言代碼

    電子發(fā)燒友網(wǎng)站提供《如何寫出高效優(yōu)美的C語言代碼.pdf》資料免費(fèi)下載
    發(fā)表于 11-18 10:55 ?0次下載
    <b class='flag-5'>如何寫出</b>高效優(yōu)美的C語言<b class='flag-5'>代碼</b>

    如何寫出穩(wěn)定的單片機(jī)代碼

    這篇文章分享怎么寫出穩(wěn)定的單片機(jī)代碼。? ?? 我對優(yōu)秀代碼的理解,大體分為兩個(gè)部分:高效和穩(wěn)定。 ? 兩者都能做到很好的,如果靠自己摸索,沒有刻意去練習(xí),可能需要花10年,甚至更久
    的頭像 發(fā)表于 11-15 16:40 ?828次閱讀
    <b class='flag-5'>如何寫出</b>穩(wěn)定的單片機(jī)<b class='flag-5'>代碼</b>
    主站蜘蛛池模板: 久久久精品久久久久久久久久久 | 高清国产美女在线观看 | 欧美视频一区在线观看 | 午夜爽爽 | 色色色色色色色色色色色色色色 | 婷婷在线网 | 国产精品三级视频 | 永久看免费bbbbb视频 | 成人国产三级精品 | 中文字幕成人乱码在线电影 | 色拍拍综合网 | 四虎影视在线播放 | 欧美一区二区三区四区视频 | 天天狠天天操 | 国产免费久久精品99 | 免费网站黄 | 欧美一级特黄aaaaaaa在线观看 | 欧美日韩国产成人高清视频 | 狼干综合 | 特黄毛片 | 美女黄色毛片 | 亚洲国产婷婷综合在线精品 | 欧美一级特黄aaaaaa在线看首页 | 四虎在线最新永久免费播放 | 午夜 福利 视频 | 给我免费播放片黄色 | 在线视频亚洲一区 | 亚洲欧美色图 | 人成网站在线观看 | www色午夜 | 狠狠操人人 | 嗯好舒服好爽好快好大 | 3344成年在线视频免费播放男男 | 午夜嘿嘿| 久久99精品久久久久久牛牛影视 | 人人人人凹人人爽人人澡 | 日本欧美一区二区三区免费不卡 | 国产女主播在线播放一区二区 | 日本三级视频在线 | 丝袜紧身裙国产在线播放 | 中国性猛交xxxx乱大交 |