在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

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

FPGA攻城獅之家 ? 來源:FPGA攻城獅之家 ? 2024-03-12 09:59 ? 次閱讀

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

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

你想在時序違例時能輕松應對嗎?讓代碼輕松越過時序這道門檻。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

好,此時另一個誤區(qū)可能就要出現(xiàn)了。因為flag可能為0也可能為1,那么你得到了三個flag,一共有多少種情況呢?可能有人不假思索地回答8種,因為3bit數(shù)據(jù),2^3= 8 ,所以就是8 種。其實不是,用概率與統(tǒng)計的知識,三個數(shù)據(jù)的排序應該是有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

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

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

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

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

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

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

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

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

如果上述的路徑因為走線(linelatency)延遲,或者是因為邏輯延遲(logiclatency)過大導致了時序違例,那么我們就應該在兩個組合邏輯之間插入reg。從電路上,應該如下圖所示。

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

那么從代碼的角度,應該這樣修改,就可以達到上圖的效果:

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

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

為了讓大家更好的理解時序,我在網(wǎng)上找了兩個用相同的算法思路設計的開源的代碼。看他們的設計方法

三方代碼 1

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

三方代碼 2

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

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

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

三方的兩個模塊我例化成 median_filter_3x3 ,和 medfilter3by3 ,用vivado2022.1進行編譯。得到時序違例報告

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

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

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

可以看到在兩個 reg之間有4個邏輯塊,然后再去代碼中找到相應的位置。然后再追究到代碼內部。

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

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

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





審核編輯:劉清

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

    關注

    1630

    文章

    21801

    瀏覽量

    606354
  • 濾波器
    +關注

    關注

    161

    文章

    7870

    瀏覽量

    179048
  • 比較器
    +關注

    關注

    14

    文章

    1659

    瀏覽量

    107456
  • HDL
    HDL
    +關注

    關注

    8

    文章

    328

    瀏覽量

    47479
  • PLL電路
    +關注

    關注

    0

    文章

    92

    瀏覽量

    6483

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

文章出處:【微信號:gh_99a29eb83412,微信公眾號:FPGA攻城獅之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

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

    進行RTL代碼設計需要考慮時序收斂的問題

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

    何為高質量的代碼?如何寫出高質量代碼?

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

    如何寫出好的代碼?高質量代碼的三要素

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

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

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

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

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

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

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

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

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

    如何寫DA轉化代碼

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

    用C語言如何寫出單片機延時程序,且延時時間如何計算的?

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

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

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

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

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

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

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

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

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

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

    這篇文章分享怎么寫出穩(wěn)定的單片機代碼。? ?? 我對優(yōu)秀代碼的理解,大體分為兩個部分:高效和穩(wěn)定。 ? 兩者都能做到很好的,如果靠自己摸索,沒有刻意去練習,可能需要花10年,甚至更久
    的頭像 發(fā)表于 11-15 16:40 ?488次閱讀
    <b class='flag-5'>如何寫出</b>穩(wěn)定的單片機<b class='flag-5'>代碼</b>
    主站蜘蛛池模板: 亚洲免费人成在线视频观看 | 免费爱做网站在线看 | good韩国理论在线三级 | 亚洲高清在线视频 | 国产盗摄女子私密保健视频 | 午夜性视频 | 热久久久久久 | 四虎精品成人免费观看 | 亚洲www美色 | 免费国产不卡午夜福在线 | 特级aaa片毛片免费观看 | 一区二区在线看 | 1区2区3区4区 | 天天撸视频 | 大又大又粗又爽女人毛片 | 午夜福利国产一级毛片 | 中国女人a毛片免费全部播放 | 在线资源你懂的 | 国产精品亚洲四区在线观看 | 欧美三级网站 | www操| 色88888久久久久久影院 | 亚洲国产精品国产自在在线 | 俺去啦最新官网 | 特级毛片aaaa免费观看 | 加勒比一本大道香蕉在线视频 | 丁香花在线影院观看在线播放 | 五月情婷婷 | 欧美日韩精品乱国产538 | 美女被网站免费看九色视频 | 免费观看一级成人毛片 | 在线免费成人 | 午夜美女影院 | 国产精品福利一区 | 婷婷综合久久中文字幕 | 夜夜骚视频| 日本高清一区二区三区不卡免费 | 1024免费永久福利视频 | 爱爱永久免费视频网站 | 日韩免费无砖专区2020狼 | 天天在线天天看成人免费视频 |