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

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

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

為保證數(shù)字電路時序裕量所做的努力

冬至子 ? 來源:Bug記錄 ? 作者:woodfan ? 2023-06-19 11:27 ? 次閱讀

由于以太網(wǎng)測試使用的開發(fā)板是淘寶購買的某款開發(fā)板,開發(fā)人員在電路設(shè)計時沒有考慮到將以太網(wǎng)芯片的接收時鐘、發(fā)送時鐘通過FPGA的專用時鐘管腳接入到到全局時鐘網(wǎng)絡(luò);其實這對時序裕量有影響,按照官方的說法,經(jīng)過全局時鐘網(wǎng)絡(luò)的信號其延時最小,驅(qū)動能力大;而且只有專用時鐘管腳引入的信號才能接入到PLL;

這個千兆網(wǎng)芯片使用的是RGMII接口,收發(fā)時鐘達到了125MHz,但是卻沒有經(jīng)過專用時鐘管腳進入全局時鐘網(wǎng)絡(luò),為了保證能在125MHz時序下,電路能夠穩(wěn)定的跑通,我在時序裕量上做出了一些的努力。

參考該塊開發(fā)板給出的例程

圖片

開發(fā)板所帶例程的部分

這一部分是在生成IP數(shù)據(jù)包的首部,并且計算首部的校驗和;

但是綜合之后,可以從時序報告看到下圖

圖片

可以看到"ip_header"與"check_buffer"之間的有很多標紅警告,這造成時序分析報告里面e_rxc(接收時鐘)的max_frequency遠遠小于我們想要的125MHz;

為此,我修改了make狀態(tài),在計算check_buffer的過程中加入了多個寄存器,起到緩沖作用;如下圖

圖片

原來10個16進制的1周期加法計算可能會造成大的延時,現(xiàn)在將10個16進制的加法計算拆分成3周期的加法計算,從時序報告看緩解了這部分的slack不足。

其實這里使用的是使用面積換取時間的方法,參考的例程里面由于需要在1個周期內(nèi)計算過多的數(shù)據(jù)量造成太大的延時,所以這部分的時序不會太高,而我們在這個過程插入寄存器,分級計算,每個階段的時序提高了,整體部分的時序也達到了設(shè)計要求;

這種做法是很多人推崇的FPGA設(shè)計中的流水線設(shè)計一個實例,其原理就相當于將一堆復(fù)雜的操作分割成幾個簡單的操作,增加了電路面積但是由于每個部分的操作相對簡單,所以運行頻率可以得到相對的提升。

其實我這里發(fā)現(xiàn)有進一步的改進方案,可以在以太網(wǎng)芯片發(fā)送8個前導碼的同時,組成IP數(shù)據(jù)包頭并計算checksum,這樣的話checksum的計算是1周期還是3周期都不會影響發(fā)送流程的整體過程,修改的結(jié)果如下圖:

圖片

第二個改進的地方如下圖,例程中發(fā)送以太幀首部信息采用了下圖這種方法;

圖片

這種寫法看著很有C語言循環(huán)寫法的風格,感覺并不好,而且這個部分的時序報告也不太好;我起初想到的修改方法是類似如下的方法:

圖片

這個修改的方法的意圖是這樣的,在SEND_HEADER狀態(tài)下,txd每次都發(fā)送ip_header的高八位,同時ip_header向左移動8位,在發(fā)送完ip_header后,狀態(tài)機會跳出SEND_HEADER狀態(tài)。

但是,可能ip_header寬度過大,每次做移位操作造成較大延時,這么修改仍有部分時序標紅,于是我又做出了如下修改:

圖片

通過狀態(tài)機和計數(shù)器的配合,解決了發(fā)送端口應(yīng)該在什么時候發(fā)送什么信息,避免做判斷和移位操作。

通過以上兩個措施,解決了一部分的時序裕量不足的問題,但一波未平一波又起;在這個過程中在很多地方用了cnt寄存器作為計數(shù)器,于是時序報告中又產(chǎn)生了cnt寄存器與txd等信號的時序裕量不足的報告。

分析這個現(xiàn)象產(chǎn)生的原因,我們不難發(fā)現(xiàn),在狀態(tài)跳轉(zhuǎn),比如從發(fā)送MAC地址的狀態(tài)跳轉(zhuǎn)到發(fā)送IP首部信息的狀態(tài),就是使用計數(shù)器技術(shù)到某一數(shù)值作為跳轉(zhuǎn)條件;而每次在狀態(tài)機使用計數(shù)器和閾值作比較,由于cnt寄存器的寬度較大,在比較的過程中也有延時,在高速時鐘下這點延時也會造成一定的影響。

又又又為了解決這個問題,采用了如下圖的解決方案:

圖片

圖片

用wire類型的flagxx信號代替原來的"cnt >= xxx",看似沒什么變化,但是原來的比較方案中,當電路運行到判斷條件時,會進行多bit的比較,在時鐘頻率較高時,也會對時序電路有所影響;而使用flag單bit信號做判斷之后,對時序電路的影響較小,時序電路的max_frequency可以有所提高。

由于接收時鐘沒有經(jīng)專用時鐘管腳引進;全局時鐘信號驅(qū)動下,其他的物理輸入輸出信號延遲較小;而此處接收時鐘被當做一個普通IO信號引入,可能會造成其他的物理輸入輸出信號相對時鐘信號有較大延遲;又因為時鐘信號在時序電路中是驅(qū)動其他信號工作,所以這個時鐘信號(從普通IO口引入)的扇出一定很大,這也會造成一定的意料之外的延時。而這部分問題,我還沒有找到一個很好的解決方法,可能時鐘信號沒有從專用時鐘管腳引入就是一個錯誤,而我沒找到解決它的好辦法。

總結(jié):

  1. 將計算量較大,較多,較復(fù)雜的地方分級處理,中間插入寄存器,這樣可以提高時序裕量。
  2. 使用狀態(tài)機代替循環(huán)和移位等操作。
  3. 避免多比特信號的判斷比較,用單比特信號代替多比特信號的比較。
  4. FPGA的隨路時鐘要通過專用時鐘管腳引入。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA設(shè)計
    +關(guān)注

    關(guān)注

    9

    文章

    428

    瀏覽量

    26452
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    40

    文章

    5323

    瀏覽量

    170529
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5274

    瀏覽量

    119677
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7581

    瀏覽量

    135626
  • RGMII
    +關(guān)注

    關(guān)注

    0

    文章

    27

    瀏覽量

    12135
收藏 人收藏

    評論

    相關(guān)推薦

    數(shù)字電路時序電路

    在《數(shù)字電路之如雷貫耳的“邏輯電路”》、《數(shù)字電路數(shù)字集成電路IC》之后,本文是數(shù)字電路入門3,將帶來「
    發(fā)表于 08-01 10:58 ?1.9w次閱讀
    <b class='flag-5'>數(shù)字電路</b>之<b class='flag-5'>時序電路</b>

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

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

    數(shù)字電路設(shè)計之同步時序邏輯電路

    作者: 小魚,Xilinx學術(shù)合作 一. 概述 時序邏輯示意圖,如下圖所示。數(shù)據(jù)從一個寄存器出來,經(jīng)過組合邏輯到達下一個寄存器。 在學習數(shù)字電路的過程中,我們都知道時序邏輯,但是大家對時序
    的頭像 發(fā)表于 12-25 14:39 ?4963次閱讀
    <b class='flag-5'>數(shù)字電路</b>設(shè)計之同步<b class='flag-5'>時序</b>邏輯<b class='flag-5'>電路</b>

    新編數(shù)字電路數(shù)字邏輯

    內(nèi)容簡介  適應(yīng)電子信息時代的新形勢和應(yīng)用型本科院校培養(yǎng)應(yīng)用型人才的迫切需要,經(jīng)過教學改革與實踐,我們編寫了這本《新編數(shù)字電路數(shù)字邏輯》教材。全書共分8章,分別為:數(shù)字電路基礎(chǔ)知識
    發(fā)表于 10-28 21:36

    時序數(shù)字電路中的作用

    時鐘簡介時序數(shù)字電路中的作用,就像通信中用到的載波,載波并不起眼,但是很重要。時鐘也一樣,現(xiàn)象上只是某種頻率波峰波谷跳動,一成不變。但是有了它,就像人類的歷史有了時間軸一樣,什么時候該干什么事才有
    發(fā)表于 08-02 06:38

    數(shù)字電路與邏輯設(shè)計電路的分析和方法

    數(shù)字電路與邏輯設(shè)計數(shù)字邏輯電路的分析和方法,常用集成數(shù)字邏輯電路的功能和應(yīng)用;主要內(nèi)容包括:邏輯代數(shù)基礎(chǔ)、組合邏輯
    發(fā)表于 08-06 07:33

    時序數(shù)字電路中的作用

    時鐘簡介時序數(shù)字電路中的作用,就像通信中用到的載波,載波并不起眼,但是很重要。時鐘也一樣,現(xiàn)象上只是某種頻率波峰波谷跳動,一成不變。但是有了它,就像人類的歷史有了時間軸一樣,什么時候該干什么事才有
    發(fā)表于 08-12 07:16

    時序數(shù)字電路中的作用

    時鐘簡介時序數(shù)字電路中的作用,就像通信中用到的載波,載波并不起眼,但是很重要。時鐘也一樣,現(xiàn)象上只是某種頻率波峰波谷跳動,一成不變。但是有了它,就像人類的歷史有了時間軸一樣,什么時候該干什么事才有了可能。程序中發(fā)生的事件,能夠按照自己的意愿發(fā)生。...
    發(fā)表于 08-12 07:17

    同步時序數(shù)字電路的分析

    同步時序數(shù)字電路的分析二進制同步計數(shù)器 分析步驟: 1.確定電路是否是同步時序數(shù)字電路 2.確定觸發(fā)器的驅(qū)動方程 3.做出狀態(tài)轉(zhuǎn)換表 4.做出分析結(jié)論  BC
    發(fā)表于 10-20 10:10 ?30次下載
    同步<b class='flag-5'>時序數(shù)字電路</b>的分析

    數(shù)字電路該怎么學_數(shù)字電路的學習方法(要點、注意事項)

    數(shù)字邏輯電路的基本單元。存儲器是用來存儲二進制數(shù)據(jù)的數(shù)字電路。從整體上看,數(shù)字電路可以分為組合邏輯電路
    發(fā)表于 03-23 17:27 ?3.5w次閱讀

    數(shù)字電路基礎(chǔ)教程之時序邏輯電路的詳細資料概述

    本文檔的主要內(nèi)容詳細介紹的是數(shù)字電路基礎(chǔ)教程之時序邏輯電路的詳細資料概述。內(nèi)容包括了:1.時序邏輯電路分析2.若干常用時序邏輯
    發(fā)表于 10-17 08:00 ?0次下載
    <b class='flag-5'>數(shù)字電路基礎(chǔ)教程之時序</b>邏輯<b class='flag-5'>電路</b>的詳細資料概述

    數(shù)字電路教程之時序邏輯電路課件的詳細資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是數(shù)字電路教程之時序邏輯電路課件的詳細資料免費下載主要內(nèi)容包括了:一 概述,二 時序邏輯電路的分析方法,三 若干常
    發(fā)表于 12-28 08:00 ?12次下載
    <b class='flag-5'>數(shù)字電路</b>教程之<b class='flag-5'>時序</b>邏輯<b class='flag-5'>電路</b>課件的詳細資料免費下載

    數(shù)字電路設(shè)計的基本流程

    數(shù)字電路設(shè)計是數(shù)字電路最為關(guān)鍵及重要的一步,今天我們將從各個流程大家介紹完整的數(shù)字電路設(shè)計!
    的頭像 發(fā)表于 07-10 17:14 ?7496次閱讀

    數(shù)字電路主要應(yīng)掌握哪些概念

    的。邏輯門電路數(shù)字邏輯電路的基本單元。存儲器是用來存儲二進制數(shù)據(jù)的數(shù)字電路。從整體上看,數(shù)字電路可以分為組合邏輯
    的頭像 發(fā)表于 03-24 10:36 ?1653次閱讀
    <b class='flag-5'>數(shù)字電路</b>主要應(yīng)掌握哪些概念

    什么是振蕩?振蕩的計算方法介紹

    振蕩是指振蕩停止的,這是振蕩電路中最重要的術(shù)語。
    的頭像 發(fā)表于 10-12 09:50 ?868次閱讀
    什么是振蕩<b class='flag-5'>裕</b><b class='flag-5'>量</b>?振蕩<b class='flag-5'>裕</b><b class='flag-5'>量</b>的計算方法介紹