[發明專利]基于FPGA的異步串行數據交換系統及方法有效
| 申請號: | 201910581916.3 | 申請日: | 2019-06-30 |
| 公開(公告)號: | CN110377549B | 公開(公告)日: | 2023-04-07 |
| 發明(設計)人: | 劉超 | 申請(專利權)人: | 中國船舶集團有限公司第七一六研究所;江蘇杰瑞科技集團有限責任公司 |
| 主分類號: | G06F13/40 | 分類號: | G06F13/40;G06F13/42 |
| 代理公司: | 南京理工大學專利中心 32203 | 代理人: | 朱寶慶 |
| 地址: | 222061 *** | 國省代碼: | 江蘇;32 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 基于 fpga 異步 串行 數據 交換 系統 方法 | ||
1.一種基于FPGA的異步串行數據交換系統,其特征在于,包括FPGA、施密特反相器、差分總線收發器和串行外設接口;其中
施密特反相器的輸出端Y1接FPGA的輸入端Sin,
施密特反相器的輸出端Y0和輸入端A1連接,
FPGA的輸出端En通過第一電阻(R1)接地且還分別接差分總線收發器的輸入端DE和輸入端DE_N,
?FPGA的輸出端Sout接差分總線收發器輸入端D,
差分總線收發器輸出端G通過第二電阻(R2)接工作電壓5V且還接施密特反相器輸入端A0,
差分總線收發器的VCC端通過第一保險絲接串行外設接口第一輸入引腳,
差分總線收發器的輸出端A接串行外設接口的第二輸入引腳,
差分總線收起器的輸入端B接串行外設接口的第三輸出引腳,
差分總線收發器的GND端接串行外設接口的第四引腳,
差分總線收發器的VCC端和輸出端A之間串聯第三電阻(R3),
差分總線收發器的輸出端A和輸出端B之間串聯第五電阻(R5),
差分總線收發器的輸出端B和GND段串聯第四電阻(R4);
定義信號Bus_Direction指示串行總線的方向,將信號Bus_Direction置1時,表示串行總線的方向為FPGA發送;反之,將信號Bus_Direction置0時,表示串行總線的方向為FPGA接收,信號Bus_Direction映射到FPGA的En端口;
通過兩個有限狀態機FSM的方式實現數據幀的發送和接收;其中
(1)數據發送過程包括:
FPGA將指令數據寫入Buffer1,啟動有限狀態機FSM,同時調整半雙工總線的方向為FPGA發送,有限狀態機FSM由Idle1狀態切換到Start1狀態,通過端口Sout在串行總線上發送數據幀開始信號Start;
然后再切換到Shift1狀態,通過端口Sout將Buffer1中的數據發送到串行總線;
數據發送結束后,切換到Stop1狀態,通過端口Sout在串行總線上發送數據幀結束信號Stop;
切換到Idle1狀態,同時調整半雙工總線的方向為FPGA接收,即Bus_Direction?=?0;
(2)數據接收過程包括:
在半雙工總線的方向為FPGA接收狀態下,當檢測到有效的數據幀接收開始信號Start后,啟動有限狀態機FSM并切換到Start2狀態;
數據幀開始信號Start結束后,切換到Shift2狀態,通過端口Sin接收串行總線上的數據并寫入Buffer2;
數據接收結束后,切換到Stop2狀態,接收并校驗串行總線上是否為數據幀結束信號Stop;
切換到Idle2狀態,同時調整半雙工總線的方向為FPGA發送,即Bus_Direction?=?1;
在數據幀檢驗正確且結束信號Stop正確的情況下,將Buffer2數據賦予Data;
采用bit數據多次采樣方法,在一個bit位保持期間,7次采樣數據總線上bit值并分別計數,在一個bit結束時刻,取采樣值個數較多者作為該bit的真實值。
2.根據權利要求1所述的基于FPGA的異步串行數據交換系統,其特征在于,所述,7次采樣數據總線上bit值并分別計數,具體為:
即在bit接收期間,依次采樣第1個Clk_Fpga時刻、第3個Clk_Fpga時刻、第5個Clk_Fpga時刻、第7個Clk_Fpga時刻、第9個Clk_Fpga時刻、第11個Clk_Fpga時刻及第13個Clk_Fpga時刻等7個時刻的bit值,并取其中個數較多者作為該bit位的真實值。
3.?根據權利要求1所述的基于FPGA的異步串行數據交換系統,其特征在于:定義變量count_clk用于計數Clk_Fpga時鐘個數,在Buffer1_Empty上升沿到來時同步開始加1計數,即count_clk?:=?count_clk?+?1;
在Buffer1_Empty上升沿到來時,即rising_edge,表示數據幀的發送流程結束,此時將信號Bus_Direction置0,即Bus_Direction=?‘0’,串行總線的方向調整為FPGA接收;
如果檢測到Rx_finish?=?1,即正常完成了全部數據幀的接收且校驗正確,則將信號Bus_Direction置1,即Bus_Direction=?‘1’,串行總線的方向調整為FPGA發送;
定義常量類型變量const_clk,設定其值m大于發生Buffer1_Empty下降沿事件到發生Rx_finish?=?1事件之間的Clk_Fpga時鐘個數,同時m值小于一個完整的數據幀發送與接收周期,即小于相鄰兩次Buffer1_Empty下降沿事件之間的Clk_Fpga時鐘個數;
定義信號rx_timeout,用于指示接收數據幀超時;
變量count_clk計數達到const_clk時,即m值,如果檢測到狀態標志Rx_finish等于0,即Rx_finish?=?0,表示此刻仍未能完成接收全部數據幀或校驗錯誤,則將信號rx_timeout置1,即rx_timeout=?‘1’,表示接收數據幀超時;反之,如果檢測到狀態標志Rx_finish等于1,表示此前已正常完成了全部數據幀的接收且校驗正確,則將變量Rx_finish置0,即Rx_finish?:=?0;
在rx_timeout上升沿到來時,即rising_edge(rx_timeout),將信號Bus_Direction置1,即Bus_Direction=?‘1’,串行總線的方向調整為FPGA發送;
在下一個Clk_Fpga上升沿到來時,如果檢測到rx_timeout等于1,則將rx_timeout置0,即rx_timeout=?‘0’;
當檢測到rx_timeout發生跳變時,表示未能完成接收全部數據幀或校驗錯誤,認定發生數據幀接收超時事件,強制調整串行總線的方向為FPGA發送,并觸發數據幀接收超時處理機制。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于中國船舶集團有限公司第七一六研究所;江蘇杰瑞科技集團有限責任公司,未經中國船舶集團有限公司第七一六研究所;江蘇杰瑞科技集團有限責任公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201910581916.3/1.html,轉載請聲明來源鉆瓜專利網。





