加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 一、設計概述
    • 二、設計框架
    • 三、數(shù)據(jù)流框圖描述
    • 四、DDIO模塊簡單描述
    • 五、ram64模塊時序描述
    • 六、image模塊時序描述
    • 七、TWO_buffer模塊時序描述
    • 八、SDRAM控制模塊描述
    • 總結
  • 推薦器件
  • 相關推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

基于FPGA的千兆以太網(wǎng)設計

05/04 09:25
4699
閱讀需 12 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大俠好,歡迎來到FPGA技術江湖,江湖偌大,相見即是緣分。大俠可以關注FPGA技術江湖,在“闖蕩江湖”、"行俠仗義"欄里獲取其他感興趣的資源,或者一起煮酒言歡。

今天給大俠帶來基于FPGA的千兆以太網(wǎng)設計,話不多說,上貨。

一、設計概述

由于設計比較復雜,本篇帶來設計流程以及設計思路,僅供各位大俠參考。

本篇通過管理數(shù)據(jù)輸入輸出MDIO配置PHY寄存器,使其工作在千兆通信模式下。FPGA通過ddio_out的IP核將數(shù)據(jù)單沿轉雙沿通過TX發(fā)送到PHY-A,PHY—B把收到的數(shù)據(jù)RX通過ddio_in的IP核雙沿轉單沿給FPGA采集,實現(xiàn)FPGA與PHY的交互通信。通過FPGA的SDRAM控制模塊對SDRAM進行讀寫和刷新的操作,從而進行數(shù)據(jù)的存儲與讀取的操作。

根據(jù)UDP/IP協(xié)議將數(shù)據(jù)打包,并且通過IP源地址以及目的地址等來計算IP頭部checksum和UDP頭部checksum,在PC機上通過上位機軟件Wireshark獲取FPGA發(fā)送的1024byte的數(shù)據(jù)包,并且上位機顯示通過UDP協(xié)議接收數(shù)據(jù),數(shù)據(jù)位打包時加上CRC32冗余校驗碼,在FPGA的接收端可以加上CRC32解碼操作,用來驗證數(shù)據(jù)在傳輸過程中是否出錯。

二、設計框架

整體模塊比較復雜,自頂向下設計流程,分模塊較多,需要注意各個端口信號,最好可以做成端口信號表,以免自己搞混淆。

注:復位省略,_t后綴表示數(shù)據(jù)或標志信號經(jīng)過一級寄存器打拍操作。輸入時鐘25M,PLL倍頻輸出sclk125M,tx_data是偏移90度125M時鐘。

三、數(shù)據(jù)流框圖描述

四、DDIO模塊簡單描述

DDIO模塊描述:

1、DDIO為調(diào)用的FPGA內(nèi)部IP核;

2、ddioin是將雙沿數(shù)轉為單沿數(shù)據(jù),ddioout是將單沿數(shù)據(jù)轉化雙沿數(shù)據(jù)。

ddioin時序圖

五、ram64模塊時序描述

ram64模塊描述:

ram64是深度為64位寬為8的LCs分布式RAM。

作用:

同頻異相的同步化操作。

write時序圖:

RAM64的Read控制模塊描述:

rx_clk時鐘域下的start_en和CRC_en轉化到sclk時鐘域下,都要先進行打三拍操作之后在被引用。(數(shù)據(jù)跨時鐘域處理可以用雙口RAM或FIFO,一般的標志信號有打拍法就可以)

1、?在start_ttt為高時,產(chǎn)生一個rd_flag信號,rd_flag信號在rd_cnt == batch_data – 1 時拉低,rd_flag信號為高時,rd_cnt開始計數(shù)自加1,在rd_cnt == batch_data – 1并且rd_flag=1時清零。

2、 Rd_en在CRC_en_ttt==1時拉高,否則為低。Rd_addr在rd_en=1時自加,在rd_cnt == batch_data – 1并且rd_flag=1時清零。

六、image模塊時序描述

image模塊描述:

por_img_pixel_cnt:像素點計數(shù)器

por_img_pixel_max:像素點最大值;

por_img_udp_cnt:udp包計數(shù)器;

por_img_udp_max:UDP包最大值;

por_img_row_max:圖片行最大值;

por_img_row_cnt:圖片行計數(shù)器。

頭包時序:??

在mac_cnt=50時,取出image_w_h;

等于51時,取出image_w_l;

等于52、53、54時,分別取出image_h_h、image_h_l、image_type。

數(shù)據(jù)包時序:

Image_row_end_flag信號在por_img_pixel_cnt == por_img_pixel_mux&& por_img_udp_cnt == por_img_udp_mux&&colour_cnt == 2時拉高一個時鐘周期。

Image_end_flag信號在por_img_row_cnt == por_img_row_mux&&por_img_pixel_cnt == por_img_pixel_mux&& por_img_udp_cnt == por_img_udp_mux&&colour_cnt == 2時,拉高一個時鐘周期。

七、TWO_buffer模塊時序描述

TWO_buffer模塊描述:two_buffer:乒乓操作。

作用:使得SDRAM每次都能讀到一行完整的圖片數(shù)據(jù)。

1、?解決包間隔時間問題;

2、?分時、交替存儲和讀取,起到緩沖作用;

3、sel_w在image_row_end==1時進行反轉;sel_r在sdram_read_ack ==1時進行反轉。

八、SDRAM控制模塊描述

SDRAM控制模塊描述:

1、512Kbit*32bit*4bank(64Mbit);

2、模式寄存器設置:0032,潛伏期3,突發(fā)長度4;

3、自刷新時間間隔:15us。

Sdram狀態(tài)EBD描述:

Arbit_state:

Write_state:

讀寫模塊狀態(tài)機基本相似,自刷新模塊狀態(tài)機直接用線性序列機就可實現(xiàn)。這里不做重復概述。

九、RAM_2k模塊描述

RAM_2k模塊描述:

1、位寬24位,深度2K;

2、作用:緩存從SDRAM讀出的圖片的一行數(shù)據(jù);

3、等待數(shù)據(jù)頭包的發(fā)送和包間隔,并且進行圖像一橫數(shù)據(jù)的分包成幀發(fā)送。

十、frame(成幀)模塊的描述

frame(成幀)模塊的描述:

根據(jù)千兆以太網(wǎng)協(xié)議(附錄)進行幀包的配置,以太網(wǎng)(IEEE 802.3)幀格式:

1、前導碼:7字節(jié)0x55,一串1、0間隔,用于信號同步?有的說是AA;

2、幀起始定界符:1字節(jié)0xD5(10101011),表示一幀開始?有的說是AB;

3、DA(目的MAC):6字節(jié)?如果設置為全1 為廣播包;

4、SA(源MAC):6字節(jié);

5、類型/長度:2字節(jié),0~1500保留為長度域值,1536~65535保留為類型域值(0x0600~0xFFFF);

6、數(shù)據(jù):46~1500字節(jié);

7、幀校驗序列(FCS):4字節(jié),使用CRC計算從目的MAC到數(shù)據(jù)域這部分內(nèi)容而得到的校驗和。

注釋:

1、head_flag在image_end=1時拉高,在head_cnt=cnt_len時拉低。

2、cnt_flag在head_flag=1||data_flag=1時拉高,在cnt=cnt_len+pkt_gap時拉低

3、sd_req在head_flag=1&&head_cnt=cnt_len||por_img_udp_cnt=por_img_udp_max&& data_flag=1&&data_cnt=cnt_len時拉高,在sd_ack=1時拉低。

4、ram_wr_en在sd_req=1時拉高,在image_row_end=1時拉低。

5、data_flag在cnt_end_flag=1 時拉高,在data_cnt=cnt_len時拉低。

6、colour_flag在data_cnt=60時拉高,在data_cnt=cnt_len時拉低。

7、ram_rd_addr在por_img_udp_cnt=por_img_udp_max && data_cnt=cnt_len清零。

十一、check_sum模塊描述

check_sum模塊描述:

check_sum是將成幀數(shù)據(jù)進行指定算法計算后的結果,用于數(shù)據(jù)校驗。上位機會對接收到的數(shù)據(jù)做check_sum計算并且與成幀模塊的check_sum計算結果進行比較,做出正確或錯誤提示。(wireshark數(shù)據(jù)包監(jiān)控軟件)

Chueck_sum部分波形圖:

注釋:

1、實現(xiàn)方法:將從frame模塊輸入到check_sum的數(shù)據(jù)進行check_sum計算,同時將輸入data_in先存入一個深度為2k的RAM中,在所有chenck_sum算完之后,在建數(shù)據(jù)一個一個讀出,在協(xié)議的相應位置加入check_sum值。

十二、crc模塊描述

crc模塊描述:

1、crc:循環(huán)冗余校驗碼,8位輸入,32位輸出。

算子方程式:

2、將輸入數(shù)據(jù)進行crc運算,在crc校驗運算完的同時,將32位校驗碼補在數(shù)據(jù)流的后四位。

總結

上位機軟件:

1、receive_image上位機與從機通信軟件;

2、wireshark數(shù)據(jù)包監(jiān)控軟件。

總結:

1、先進行DDIO的回環(huán)測試;

2、模塊化設計編程實現(xiàn),測試通過之后在進行top裝配測試;

3、時序未出現(xiàn)違規(guī)時,查看slack是否大于0.3ns,注意時序約束;

4、注意assign語句的使用,盡量用時序進行操作,避免不必要的時序違例;

5、注意標志信號的使用,盡量避免運算式在判斷條件里出現(xiàn)且進行多重判斷邏輯嵌套;

6、?了解上位機與從機之間通信的基本原理;

7、?熟悉wireshark數(shù)據(jù)包監(jiān)控軟件的使用。

本篇大概分享了設計框架及思路,給各位大俠做設計學習參考,若想要詳細學習,可閱讀以下推文,系統(tǒng)性學習。

FPGA就業(yè)班,05.04開班,新增課程內(nèi)容不加價,高薪就業(yè),線上線下同步!

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
EP2C5F256C7N 1 Altera Corporation Field Programmable Gate Array, 288 CLBs, 450MHz, 4608-Cell, CMOS, PBGA256, LEAD FREE, FBGA-256
$25.72 查看
10M08SCU169C8G 1 Intel Corporation Field Programmable Gate Array, PBGA169, 11 X 11 MM, 0.80 MM PITCH, ROHS COMPLIANT, UBGA-169

ECAD模型

下載ECAD模型
$11.16 查看
XC6SLX25-2FGG484I 1 AMD Xilinx Field Programmable Gate Array, 1879 CLBs, 667MHz, 24051-Cell, CMOS, PBGA484, 23 X 23 MM, 1 MM PITCH, LEAD FREE, FBGA-484

ECAD模型

下載ECAD模型
$90.44 查看

相關推薦

電子產(chǎn)業(yè)圖譜

任何技術的學習就好比一個江湖,對于每一位俠客都需要不斷的歷練,從初入江湖的小白到歸隱山林的隱世高人,需要不斷的自我感悟自己修煉,讓我們一起仗劍闖FPGA乃至更大的江湖。