一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

【經(jīng)驗分享】玩轉(zhuǎn)FPGA串口通信:從“幻覺調(diào)試”到代碼解析

電子發(fā)燒友論壇 ? 2025-06-05 08:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

原文地址:?https://bbs.elecfans.com/jishu_2489801_1_1.html?

作者:@王釗

引言:FPGA開發(fā),思路先行!

玩FPGA板子,讀代碼是基本功!尤其對從C語言轉(zhuǎn)戰(zhàn)FPGA的“寶貝們”來說,適應流水線(pipeline)編程可能需要點時間。

上篇點燈代碼解讀了基礎(chǔ),而如果能親手寫出串口通訊代碼,恭喜你,F(xiàn)PGA的大門算是真正踏入了!

本文旨在幫初學者梳理FPGA開發(fā)的核心思維流程——思路對了,后面的路才順暢,這可是重中之重!

一:感性認知 - 燒錄 & 看效果

廢話不多說,先燒程序,眼見為實!

cf60add0-41a0-11f0-986f-92fbcf53809c.png

在Ubuntu下,等程序燒錄完成后,打開gtkterm,通過USB轉(zhuǎn)串口設(shè)備節(jié)點與板子通訊。

本次燒錄的實例實現(xiàn)的是“回顯”(Echo):你鍵盤輸入什么,板子就原樣發(fā)回什么。

cf7a3764-41a0-11f0-986f-92fbcf53809c.png

這種時候我們可能會以為出現(xiàn)了幻覺(這效果對嗎?)

好辦!在回顯代碼里“加個1”,把接收到的數(shù)據(jù)+1再發(fā)送

cf8f5c16-41a0-11f0-986f-92fbcf53809c.png

再次燒錄以后,測試發(fā)現(xiàn),按鍵輸入123變成了234。果然不是幻覺,我們可以繼續(xù)看代碼了。

經(jīng)驗上講以上步驟還是必要的,這證明代碼是對的,以免被坑。


二:硬件連接 - 原理圖 & 管腳對一對

回到代碼,Top頂層模塊走起!

d04dc444-41a0-11f0-986f-92fbcf53809c.png

輸入腳有個25m的時鐘,輸出有個燈,這跟點燈程序一樣。然后串口有收發(fā)兩個腳。然后我去對一下原理圖。

d068e788-41a0-11f0-986f-92fbcf53809c.png

找到原理圖第三頁,底板的原理圖,供電的Type-C口其實連到了CH340 USB轉(zhuǎn)串口芯片(單片機玩家老朋友了?。?/p>

這個原理圖其實看著有點暈,反正大致意思就是串口發(fā)送接收接到了H10和H11這兩個腳上。

d08d11ee-41a0-11f0-986f-92fbcf53809c.png

管腳配置瞧一瞧:外部時鐘腳和led的腳跟之前點燈的程序一樣,下面就是多了H10和H11兩個腳,分別對于串口的RX和TX。

然后它們的電平是3.3V的。如果這里看著難受的話可以把它改到其他腳上,然后接一個自己的USB轉(zhuǎn)串口的板子上,自己的串口板只需要多接個GND地線,無需接3.3V電源,加上RX和TX一共3根線,注意RX和TX可能需要反一下。


三:協(xié)議基礎(chǔ) - 磨刀不誤砍柴工

到這里又要啰嗦一下,F(xiàn)PGA調(diào)一個接口,首先就是我們需要清楚的知道接口有個的數(shù)據(jù)定義,協(xié)議等知識。不能上來就研究代碼,否則可能會迷糊。

d0a2f9aa-41a0-11f0-986f-92fbcf53809c.png

(圖片來源:https://zhuanlan.zhihu.com/p/689643287)

這里是我搜索出來知乎的帖子,講串口協(xié)議的,有需要的話可以補充一下底層知識。

當然相信沒幾個人不知道串口的,但FPGA開發(fā)它還是蠻多套路的,比如接收一幀數(shù)據(jù)該如何接收。

大致的思路是這樣的,我們需要用一個比串口波特率更高的采樣信號去采集,串口的RX上什么時候出現(xiàn)起始位,然后接收每個數(shù)據(jù)位,最后延時一個停止位,再循環(huán)檢測起始位,接收下一幀數(shù)據(jù)。


四:代碼解析 - 接收模塊的奧秘

然后代碼我就不再講倍頻和reset邏輯了,點燈程序已經(jīng)講過了。

d0c1c9c0-41a0-11f0-986f-92fbcf53809c.png

直接看接收的代碼:這里看到模塊的調(diào)用,可以想象成我們在板子上焊了一塊芯片,它有一個clk腳rst_n腳;然后連到了top頂層的UART的RX上;收到數(shù)據(jù)后會返回一個接收完成的標志,8位的接收到的數(shù)據(jù);最后還需要一個比波特率大的,這里是大16倍的采樣時鐘。

d0d6a4e4-41a0-11f0-986f-92fbcf53809c.png

進入接收模塊的代碼里,我們看看芯片內(nèi)部是怎樣實現(xiàn)的。這里作者用ASCCII碼畫了一個時序圖,這個太有用了,看代碼的時候需要反復的看這個圖。

簡單說一下這個時序圖,IDLE的時候是檢測起始位的狀態(tài),起始位start是bit0,這里看著它是低電平的;然后到接收數(shù)據(jù)的狀態(tài),也就是bit1到bit8這8位;最后是end停止位,回到IDLE。

所以程序的思路就有了,我們需要在16倍波特率的采樣周期上,不停的檢測RX腳上的電平,完成串口通訊一幀數(shù)據(jù)的接收。

d0f47ac8-41a0-11f0-986f-92fbcf53809c.png

接著看代碼,作者大神首先把RX腳做了個同步,這個套路不看代碼是學不到的,久了看見這種代碼腦袋里面會浮現(xiàn)出一個時序圖,大概就能看到clk和rx信號的時序,然后理解到為什么要同步。

注意這個模塊有兩個時鐘,一個是系統(tǒng)時鐘,一個是16倍的波特率的時鐘,它這同步的是系統(tǒng)時鐘。咱們先別暈在這里,繼續(xù)往下看。

d10b7890-41a0-11f0-986f-92fbcf53809c.png

后面的代碼是個狀態(tài)機,這代碼還有點多,我抓屏一爪還抓不完。大家可以打開代碼自己對著看,反正行號可以看出是講到哪里了。狀態(tài)機跟作者的時序圖是一致的,就是那些IDLE,start,end之類的狀態(tài)。

這里還有個特別玄乎的套路,本人也不是大神,所以也沒看明白。就是這個狀態(tài)機是用系統(tǒng)時鐘來檢測的,那個16倍波特率的采樣時鐘是在下面用個if來判斷的,就是采樣信號為高的時候去檢測數(shù)據(jù)信號的高低。本寶認為,為什么不直接把采樣信號放在always語句上面用呢。手賤的同學可以改一下試試,看看串口會不會丟數(shù)據(jù),試完記得告訴我結(jié)論。

d126e0a8-41a0-11f0-986f-92fbcf53809c.png

IDLE狀態(tài)沒什么看頭,我們看看start狀態(tài)。它這里有個采樣的計數(shù),一個bit采樣16次。這里首先是從IDLE進入START狀態(tài)需要rx管腳為低電平,并且在16次采樣的中間那會不變成低電平,才認為起始信號有效。(為什么不判斷全部為高?或者前半段為高?)

反正最重要的是數(shù)到16個采樣就切到下一個狀態(tài),不能快也不能慢,保證時序要求。

這里還有一個套路是我們會看到那些a=a,b=b的語句,其實我感覺是可以刪掉的,不知道是不是作者年級比較大,或許以前古時候的綜合器不寫else后面的東西,它會亂綜合一些東西出來。好奇寶寶們可以寫個測試程序,看看RTL電路有什么區(qū)別,同樣,測試出結(jié)論以后記得告訴我……

d13b559c-41a0-11f0-986f-92fbcf53809c.png

采樣狀態(tài)的邏輯看了半天,也沒真正做采樣的事情,只是輸出了一個變量rxd_cnt,這個變量表示采樣的是第幾個bit,還要注意的是這個變量在什么時候被鎖存改變的,我們注意到是在采樣計數(shù)為最后一個的時候鎖存的。

d151f46e-41a0-11f0-986f-92fbcf53809c.png

停止狀態(tài)啥也沒干,只是保證延時一個波特率的時間而已。

d1688fd0-41a0-11f0-986f-92fbcf53809c.png

接著看代碼,上面采樣狀態(tài)輸出了一個變量rxd_cnt,然后這里才進行真正的采樣操作,它同時判斷了采樣計數(shù)器cmp_cnt,保證是在波形中部進行采樣??赡苓@么做是增加魯棒性。相信看到這里有些人會表示不服,我們可以把串口線接長一點,中間再加點電磁干擾,這樣比較一下如果不在中間采樣會不會導致丟數(shù)據(jù)的比率變高。同樣,如果有人測試了,記得把結(jié)論告訴我?。?!

d1833704-41a0-11f0-986f-92fbcf53809c.png

最后一段代碼是輸出一幀率數(shù)據(jù)接收完成的標志,可以看到它的鎖存邏輯是在停止位發(fā)送完畢的時候持續(xù)了一個采樣時鐘的高電平。同時鎖存輸出數(shù)據(jù)。

d1967c38-41a0-11f0-986f-92fbcf53809c.png

五:發(fā)送模塊 - 相對簡單

再往下就是看發(fā)送邏輯了,這塊邏輯跟接收邏輯幾乎一樣。其實發(fā)送邏輯大可不必這么精細,因為接收才需要高頻率的采樣,發(fā)送只要保證時序就可以了。如果實在看不懂接收邏輯,我建議大家還是直接寫一下發(fā)送邏輯,比如就按作者畫的時序圖,先用pll生成一個波特率的時鐘,再按照時鐘調(diào)整TX管腳的高低電平即可。最后用上面講的接長串口線的方法測試一下數(shù)據(jù)傳輸?shù)男省?/span>

d1ab59f0-41a0-11f0-986f-92fbcf53809c.png

大半夜的不知道誰拍了我一下,我就突然看到這塊代碼有點不對……這個case里面的語句的等于符號前面居然沒有小于符號了。這種情況奶奶沒教過啊,而且它always語句里面是個*號。其實verilog我也是只學了三天,所以不太確定這是不是就是個組合邏輯電路。哎,這個迷哪位好心人回帖告訴我一聲好不好。

d1bf31be-41a0-11f0-986f-92fbcf53809c.png

萬一有人整篇文章都看不懂,這里有個好玩的東西,test_io這個腳是接到燈上的,它這里的邏輯是TX和RX上只要有數(shù)據(jù)變化,燈就會閃爍,實測我一直往串口輸入字符a,這個燈是可以看到閃爍的,閃的比較暗,大家可以關(guān)燈看看。

終極總結(jié):FPGA接口開發(fā)心法

總結(jié)一下,關(guān)于接口的實現(xiàn),無論接口多復雜,其實也是邏輯電平的控制,但前提是需要對協(xié)議非常的熟悉,再就是一下FPGA代碼的套路了,這些套路都是一點一點看眾大神的代碼悟出來的。

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

    關(guān)注

    1645

    文章

    22049

    瀏覽量

    618389
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1640

    瀏覽量

    56811
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5680

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    fpga時序分析案例 調(diào)試FPGA經(jīng)驗總結(jié)

    今天跟大家分享的內(nèi)容很重要,也是調(diào)試FPGA經(jīng)驗的總結(jié)。隨著FPGA對時序和性能的要求越來越高,高頻率、大位寬的設(shè)計越來越多。在調(diào)試這些
    的頭像 發(fā)表于 08-01 09:18 ?2484次閱讀
    <b class='flag-5'>fpga</b>時序分析案例 <b class='flag-5'>調(diào)試</b><b class='flag-5'>FPGA</b><b class='flag-5'>經(jīng)驗</b>總結(jié)

    基于FPGA的USB串口通信設(shè)計

    用altera de2進行FPGA的USB串口通信,實現(xiàn)電腦和USB連接,電腦可傳輸信息(數(shù)字和字母)FPGA上并用lcd顯示。求
    發(fā)表于 05-19 16:59

    【技術(shù)經(jīng)典下載】《深入淺出玩轉(zhuǎn)FPGA》-珍貴的學習經(jīng)驗和筆記

    `簡介:《深入淺出玩轉(zhuǎn)FPGA》收集整理了作者在FPGA學習和實踐中的經(jīng)驗點滴。書中既有日常的學習筆記,對一些常用設(shè)計技巧和方法進行深入探討;也有很多生動的實例分析,這些實例大都是以特
    發(fā)表于 06-15 17:46

    特權(quán)同學新書《勇敢的芯伴你玩轉(zhuǎn)Altera FPGA》電子版 下載 (FPGA初學者首選)

    串口芯片驅(qū)動安裝4.6.1驅(qū)動安裝4.6.2設(shè)備識別第5章Verilog語法概述5.1語法學習的經(jīng)驗之談5.2可綜合的語法子集5.3代碼風格與書寫規(guī)范勇敢的芯伴你玩轉(zhuǎn)Altera
    發(fā)表于 10-11 20:59

    賽靈思FPGA初學者 必備圖書 特權(quán)同學新書《勇敢的芯伴你玩轉(zhuǎn)賽靈思 FPGA

    調(diào)試7.8SRAM讀寫測試7.8.1SRAM讀寫時序解讀7.8.2功能簡介7.8.3代碼解析7.8.4Xilinx庫設(shè)置7.8.5功能仿真7.8.6FPGA在線配置7.8.7觸發(fā)采樣波
    發(fā)表于 11-27 12:23

    串口通信調(diào)試(PC與PC串口通信

    【LabVIEW入門精通】4.1.6 串口通信調(diào)試(PC與PC串口
    發(fā)表于 01-08 15:43 ?0次下載

    串口通信調(diào)試(PC與智能儀器串口通信

    【LabVIEW入門精通】4.1.6 串口通信調(diào)試(PC與智能儀器串口
    發(fā)表于 01-08 15:42 ?0次下載

    最詳盡的——解析串口通信數(shù)據(jù)

    最詳盡的——解析串口通信數(shù)據(jù)
    發(fā)表于 12-05 14:56 ?3次下載

    串口通信調(diào)試軟件的功能與使用方法

    本文主要介紹了串口通信原理、串口通信結(jié)構(gòu)、串口通信調(diào)試
    發(fā)表于 12-27 15:02 ?1.8w次閱讀
    <b class='flag-5'>串口</b><b class='flag-5'>通信</b><b class='flag-5'>調(diào)試</b>軟件的功能與使用方法

    MATLAB串口調(diào)試助手應用程序和基于MATLAB開發(fā)USB的串口通信源代碼

    本文檔的主要內(nèi)容詳細介紹的是MATLAB串口調(diào)試助手應用程序和基于MATLAB開發(fā)USB的串口通信源代碼
    發(fā)表于 11-05 08:00 ?98次下載
    MATLAB<b class='flag-5'>串口</b><b class='flag-5'>調(diào)試</b>助手應用程序和基于MATLAB開發(fā)USB的<b class='flag-5'>串口</b><b class='flag-5'>通信源代碼</b>

    PID算法原理_調(diào)試經(jīng)驗以及代碼總結(jié)

    PID算法原理_調(diào)試經(jīng)驗以及代碼總結(jié)分享。
    發(fā)表于 05-25 15:59 ?16次下載

    單片機——串口通信串口接收多位數(shù)據(jù)保存到數(shù)組,發(fā)送多位數(shù)據(jù)串口

    單片機串口通信中,接收多位數(shù)據(jù)數(shù)組,發(fā)送多位數(shù)據(jù)的代碼// 下面的代碼用于:單片機的串口何上位
    發(fā)表于 11-17 11:06 ?45次下載
    單片機——<b class='flag-5'>串口</b><b class='flag-5'>通信</b>(<b class='flag-5'>從</b><b class='flag-5'>串口</b>接收多位數(shù)據(jù)保存到數(shù)組,發(fā)送多位數(shù)據(jù)<b class='flag-5'>到</b><b class='flag-5'>串口</b>)

    PID算法原理、調(diào)試經(jīng)驗以及代碼資料

    PID算法原理、調(diào)試經(jīng)驗以及代碼資料
    發(fā)表于 11-21 10:25 ?15次下載

    單片機UART串口通信(代碼親自調(diào)試成功)

    單片機UART串口通信單片機的串口通信,一般指的就是UART串口通信(TXD,RXD)。本文實現(xiàn)
    發(fā)表于 11-23 17:36 ?18次下載
    單片機UART<b class='flag-5'>串口</b><b class='flag-5'>通信</b>(<b class='flag-5'>代碼</b>親自<b class='flag-5'>調(diào)試</b>成功)

    玩轉(zhuǎn)ZMP110x創(chuàng)新串口屏的虛擬串口屏開發(fā)模式

    ZMP110x創(chuàng)新串口屏應用開發(fā)如何脫離硬件,僅在PC上就完成全部的UI開發(fā)和通信調(diào)試工作?下面就跟隨小編步伐,一起玩轉(zhuǎn)虛擬串口屏開發(fā)模式吧
    的頭像 發(fā)表于 02-02 14:18 ?2203次閱讀
    <b class='flag-5'>玩轉(zhuǎn)</b>ZMP110x創(chuàng)新<b class='flag-5'>串口</b>屏的虛擬<b class='flag-5'>串口</b>屏開發(fā)模式