由于以太網(wǎng)測(cè)試使用的開發(fā)板是淘寶購(gòu)買的某款開發(fā)板,開發(fā)人員在電路設(shè)計(jì)時(shí)沒有考慮到將以太網(wǎng)芯片的接收時(shí)鐘、發(fā)送時(shí)鐘通過FPGA的專用時(shí)鐘管腳接入到到全局時(shí)鐘網(wǎng)絡(luò);其實(shí)這對(duì)時(shí)序裕量有影響,按照官方的說法,經(jīng)過全局時(shí)鐘網(wǎng)絡(luò)的信號(hào)其延時(shí)最小,驅(qū)動(dòng)能力大;而且只有專用時(shí)鐘管腳引入的信號(hào)才能接入到PLL;
這個(gè)千兆網(wǎng)芯片使用的是RGMII接口,收發(fā)時(shí)鐘達(dá)到了125MHz,但是卻沒有經(jīng)過專用時(shí)鐘管腳進(jìn)入全局時(shí)鐘網(wǎng)絡(luò),為了保證能在125MHz時(shí)序下,電路能夠穩(wěn)定的跑通,我在時(shí)序裕量上做出了一些的努力。
參考該塊開發(fā)板給出的例程
開發(fā)板所帶例程的部分
這一部分是在生成IP數(shù)據(jù)包的首部,并且計(jì)算首部的校驗(yàn)和;
但是綜合之后,可以從時(shí)序報(bào)告看到下圖
可以看到"ip_header"與"check_buffer"之間的有很多標(biāo)紅警告,這造成時(shí)序分析報(bào)告里面e_rxc(接收時(shí)鐘)的max_frequency遠(yuǎn)遠(yuǎn)小于我們想要的125MHz;
為此,我修改了make狀態(tài),在計(jì)算check_buffer的過程中加入了多個(gè)寄存器,起到緩沖作用;如下圖
原來10個(gè)16進(jìn)制的1周期加法計(jì)算可能會(huì)造成大的延時(shí),現(xiàn)在將10個(gè)16進(jìn)制的加法計(jì)算拆分成3周期的加法計(jì)算,從時(shí)序報(bào)告看緩解了這部分的slack不足。
其實(shí)這里使用的是使用面積換取時(shí)間的方法,參考的例程里面由于需要在1個(gè)周期內(nèi)計(jì)算過多的數(shù)據(jù)量造成太大的延時(shí),所以這部分的時(shí)序不會(huì)太高,而我們?cè)谶@個(gè)過程插入寄存器,分級(jí)計(jì)算,每個(gè)階段的時(shí)序提高了,整體部分的時(shí)序也達(dá)到了設(shè)計(jì)要求;
這種做法是很多人推崇的FPGA設(shè)計(jì)中的流水線設(shè)計(jì)一個(gè)實(shí)例,其原理就相當(dāng)于將一堆復(fù)雜的操作分割成幾個(gè)簡(jiǎn)單的操作,增加了電路面積但是由于每個(gè)部分的操作相對(duì)簡(jiǎn)單,所以運(yùn)行頻率可以得到相對(duì)的提升。
其實(shí)我這里發(fā)現(xiàn)有進(jìn)一步的改進(jìn)方案,可以在以太網(wǎng)芯片發(fā)送8個(gè)前導(dǎo)碼的同時(shí),組成IP數(shù)據(jù)包頭并計(jì)算checksum,這樣的話checksum的計(jì)算是1周期還是3周期都不會(huì)影響發(fā)送流程的整體過程,修改的結(jié)果如下圖:
第二個(gè)改進(jìn)的地方如下圖,例程中發(fā)送以太幀首部信息采用了下圖這種方法;
這種寫法看著很有C語(yǔ)言循環(huán)寫法的風(fēng)格,感覺并不好,而且這個(gè)部分的時(shí)序報(bào)告也不太好;我起初想到的修改方法是類似如下的方法:
這個(gè)修改的方法的意圖是這樣的,在SEND_HEADER狀態(tài)下,txd每次都發(fā)送ip_header的高八位,同時(shí)ip_header向左移動(dòng)8位,在發(fā)送完ip_header后,狀態(tài)機(jī)會(huì)跳出SEND_HEADER狀態(tài)。
但是,可能ip_header寬度過大,每次做移位操作造成較大延時(shí),這么修改仍有部分時(shí)序標(biāo)紅,于是我又做出了如下修改:
通過狀態(tài)機(jī)和計(jì)數(shù)器的配合,解決了發(fā)送端口應(yīng)該在什么時(shí)候發(fā)送什么信息,避免做判斷和移位操作。
通過以上兩個(gè)措施,解決了一部分的時(shí)序裕量不足的問題,但一波未平一波又起;在這個(gè)過程中在很多地方用了cnt寄存器作為計(jì)數(shù)器,于是時(shí)序報(bào)告中又產(chǎn)生了cnt寄存器與txd等信號(hào)的時(shí)序裕量不足的報(bào)告。
分析這個(gè)現(xiàn)象產(chǎn)生的原因,我們不難發(fā)現(xiàn),在狀態(tài)跳轉(zhuǎn),比如從發(fā)送MAC地址的狀態(tài)跳轉(zhuǎn)到發(fā)送IP首部信息的狀態(tài),就是使用計(jì)數(shù)器技術(shù)到某一數(shù)值作為跳轉(zhuǎn)條件;而每次在狀態(tài)機(jī)使用計(jì)數(shù)器和閾值作比較,由于cnt寄存器的寬度較大,在比較的過程中也有延時(shí),在高速時(shí)鐘下這點(diǎn)延時(shí)也會(huì)造成一定的影響。
又又又為了解決這個(gè)問題,采用了如下圖的解決方案:
用wire類型的flagxx信號(hào)代替原來的"cnt >= xxx",看似沒什么變化,但是原來的比較方案中,當(dāng)電路運(yùn)行到判斷條件時(shí),會(huì)進(jìn)行多bit的比較,在時(shí)鐘頻率較高時(shí),也會(huì)對(duì)時(shí)序電路有所影響;而使用flag單bit信號(hào)做判斷之后,對(duì)時(shí)序電路的影響較小,時(shí)序電路的max_frequency可以有所提高。
由于接收時(shí)鐘沒有經(jīng)專用時(shí)鐘管腳引進(jìn);全局時(shí)鐘信號(hào)驅(qū)動(dòng)下,其他的物理輸入輸出信號(hào)延遲較小;而此處接收時(shí)鐘被當(dāng)做一個(gè)普通IO信號(hào)引入,可能會(huì)造成其他的物理輸入輸出信號(hào)相對(duì)時(shí)鐘信號(hào)有較大延遲;又因?yàn)闀r(shí)鐘信號(hào)在時(shí)序電路中是驅(qū)動(dòng)其他信號(hào)工作,所以這個(gè)時(shí)鐘信號(hào)(從普通IO口引入)的扇出一定很大,這也會(huì)造成一定的意料之外的延時(shí)。而這部分問題,我還沒有找到一個(gè)很好的解決方法,可能時(shí)鐘信號(hào)沒有從專用時(shí)鐘管腳引入就是一個(gè)錯(cuò)誤,而我沒找到解決它的好辦法。
總結(jié):
- 將計(jì)算量較大,較多,較復(fù)雜的地方分級(jí)處理,中間插入寄存器,這樣可以提高時(shí)序裕量。
- 使用狀態(tài)機(jī)代替循環(huán)和移位等操作。
- 避免多比特信號(hào)的判斷比較,用單比特信號(hào)代替多比特信號(hào)的比較。
- FPGA的隨路時(shí)鐘要通過專用時(shí)鐘管腳引入。
-
FPGA設(shè)計(jì)
+關(guān)注
關(guān)注
9文章
428瀏覽量
26658 -
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5466瀏覽量
172861 -
寄存器
+關(guān)注
關(guān)注
31文章
5373瀏覽量
121346 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7616瀏覽量
137929 -
RGMII
+關(guān)注
關(guān)注
0文章
28瀏覽量
12225
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
數(shù)字電路之時(shí)序電路
![<b class='flag-5'>數(shù)字電路</b>之<b class='flag-5'>時(shí)序電路</b>](https://file1.elecfans.com//web2/M00/A6/8F/wKgZomUMPqiAPXP6AAAgeXVygkI849.png)
優(yōu)化高速接口的時(shí)序裕量
![優(yōu)化高速接口的<b class='flag-5'>時(shí)序</b><b class='flag-5'>裕</b><b class='flag-5'>量</b>](https://file1.elecfans.com//web2/M00/A6/28/wKgZomUMPAOAW-dKAAAVKUt0-_M317.jpg)
數(shù)字電路設(shè)計(jì)之同步時(shí)序邏輯電路
![<b class='flag-5'>數(shù)字電路</b>設(shè)計(jì)之同步<b class='flag-5'>時(shí)序</b>邏輯<b class='flag-5'>電路</b>](https://file.elecfans.com/web1/M00/C8/68/pIYBAF9uHvWAXi4vAABWkUjGWfg061.png)
新編數(shù)字電路與數(shù)字邏輯
時(shí)序在數(shù)字電路中的作用
數(shù)字電路與邏輯設(shè)計(jì)電路的分析和方法
時(shí)序在數(shù)字電路中的作用
時(shí)序在數(shù)字電路中的作用
同步時(shí)序數(shù)字電路的分析
![同步<b class='flag-5'>時(shí)序數(shù)字電路</b>的分析](https://file.elecfans.com/web2/M00/48/84/pYYBAGKhtAuAd_ilAAAoaZwq2qo448.jpg)
數(shù)字電路該怎么學(xué)_數(shù)字電路的學(xué)習(xí)方法(要點(diǎn)、注意事項(xiàng))
數(shù)字電路基礎(chǔ)教程之時(shí)序邏輯電路的詳細(xì)資料概述
![<b class='flag-5'>數(shù)字電路基礎(chǔ)教程之時(shí)序</b>邏輯<b class='flag-5'>電路</b>的詳細(xì)資料概述](https://file.elecfans.com/web1/M00/68/8C/o4YBAFvG10uAf1-EAAF9y1C73_o118.png)
數(shù)字電路教程之時(shí)序邏輯電路課件的詳細(xì)資料免費(fèi)下載
![<b class='flag-5'>數(shù)字電路</b>教程之<b class='flag-5'>時(shí)序</b>邏輯<b class='flag-5'>電路</b>課件的詳細(xì)資料免費(fèi)下載](https://file.elecfans.com/web1/M00/7F/48/o4YBAFwlx8iAQPE2AANoPFYXbr8586.png)
數(shù)字電路設(shè)計(jì)的基本流程
數(shù)字電路主要應(yīng)掌握哪些概念
![<b class='flag-5'>數(shù)字電路</b>主要應(yīng)掌握哪些概念](https://file1.elecfans.com/web2/M00/81/E6/wKgZomQdDD6AW3e4AABDQHWzyVs922.jpg)
評(píng)論