UART雙向通信實現(序列機)

前言????????

????????UART(通用異步收發傳輸器)是一種串行通信協議,用于在電子設備之間進行數據傳輸。RS232是UART協議的一種常見實現標準,廣泛應用于計算機和外圍設備之間的通信。它定義了串行數據的傳輸格式和電氣特性,以確保不同設備之間的兼容性和可靠性。RS232協議采用異步串行通信方式,通過數據線將并行數據轉換為串行數據進行傳輸,接收端再將串行數據恢復為并行數據。RS232的標準包括信號電平、連接器類型和數據格式等規范,確保了設備之間的正確通信。它的常見應用包括計算機串口、調制解調器、打印機等設備的連接。

????????UART通信實現與驗證(RS232)

正文

一、UART雙向通信實現(序列機)的設計驗證

? ? ? ? 1.項目需求

????????完成9600波特率串口的數據收發實驗

? ? ? ? 2.技術介紹

????????采用序列機架構,使用鎖相環產生一個16倍9600波特率的時鐘,當該時鐘計數到16時,表示串口數據發送的1bit數據傳輸完成(即1bit數據在計數0時放置與txd數據線上,在16時完成該數據傳輸,下次計數0時傳輸下1bit數據)。為保證數據接收正常,數據接收需要在9600波特率的時鐘的周期中心接收,對應16倍時鐘,在計數器到7或8的時刻進行數據接收。

? ? ? ? 為完成數據收發實驗,將接收的數據在發送出去,完成數據回環,可以通過上位機去觀察接收的數據是否完整以此驗證實驗成功。

? ? ? ? 涉及到數據傳遞,雖然時鐘相同但是正常情況需要進行數據緩存(建議,如果是異步時鐘,必須進行數據緩存),常用的數據緩存有異步fifo,雙口ram(本實驗實驗異步fifo)

? ? ? ? 3.頂層架構

????????

? ? ? ? 4.端口描述

clk時鐘接口(50Mhz)
rst_n復位按鍵(低電平有效)
rxd數據接收接口
txd數據發送接口

二、代碼驗證

頂層連線

module uart_tx_rx(input			clk	,input			rst_n	,input 		rxd	,output 		txd	
);wire clk_01536;wire rst_en;clk_uart	clk_uart_inst (.areset 	( ~rst_n ),.inclk0 	( clk ),.c0 		( clk_01536 ),.locked 	( rst_en ));wire[7:0]data,q_sig;wire rdempty,rdreq,down;uart_rx rx(.clk	(clk_01536	),.rst_n	(rst_en		),.rxd	(rxd			),//數據接收.data	(data			),//接收數據打包.down	(down			) //輸出有效);fifo	fifo_inst (.data 	(data	),.rdclk 	(clk_01536  ),.rdreq 	(rdreq  ),.wrclk 	(clk_01536  ),.wrreq 	(down  ),.q 		(q_sig  ),.rdempty (rdempty 	),.wrfull 	(  ));uart_txd_v1 tx(.clk		(clk_01536	),.rst_n	(rst_en		),.data		(q_sig		),.done		(rdempty		),.txd		(txd			),.rd_en	(rdreq		));
endmodule

收數據模塊

module uart_rx(input				clk	,input				rst_n	,input				rxd	,//數據接收output reg[7:0]data	,//接收數據打包output reg 		down	 //輸出有效
);reg state;reg [7:0]temp;reg [7:0]cnt;always@(posedge clk,negedge rst_n)//cnt在工作狀態計數beginif(!rst_n)cnt <= 0;else if(state == 1)cnt <= cnt + 1;elsecnt <= 0;endalways@(posedge clk,negedge rst_n)beginif(!rst_n)state <= 0;elsecase(state)0:	if(rxd == 0)//等待起始信號state <= 1;elsestate <= 0;1: if(cnt == 153)//完成一包數據接收state <= 0;elsestate <= 1;default:state <= 0;endcaseendalways@(posedge clk,negedge rst_n)beginif(!rst_n)begintemp <= 0;down <= 0;data <= 0;endelsecase(cnt)0:begintemp <= 0;down <= 0;data <= data;end1*16+7:temp[0] <= rxd;//在每個時序的中間收數據,數據在N*16時放在rxd上,保證數據穩定,在N*16 + 7時讀2*16+7:temp[1] <= rxd;3*16+7:temp[2] <= rxd;4*16+7:temp[3] <= rxd;5*16+7:temp[4] <= rxd;6*16+7:temp[5] <= rxd;7*16+7:temp[6] <= rxd;8*16+7:temp[7] <= rxd;9*16+7:begindown <= 1;data <= temp;end9*16+7+1:down <= 0;endcaseendendmodule

發數據模塊

module uart_txd(//fifo不為空時發input			clk	,//0.1536 = 9600 * 16 = 153600hz = 0.1536Mhz input			rst_n	,input	[7:0]	data	,input			done	,output reg	txd	,output reg 	rd_en	
);reg [7:0]temp;reg [7:0]cnt;reg state;always@(posedge clk,negedge rst_n)//計數器在工作時進行計數beginif(!rst_n)cnt <= 0;else if(state == 1)//fifo不空,開始發送if(cnt < 10*16)cnt <= cnt + 1;elsecnt <= 0;elsecnt <= 0;endalways@(posedge clk,negedge rst_n)beginif(!rst_n)state <= 0;else case(state)0:	if(done == 0)state <= 1;elsestate <= 0;1: if(cnt == 10*16)state <= 0;elsestate <= 1;default:state <= 0;endcaseendalways@(posedge clk,negedge rst_n)beginif(!rst_n)rd_en <= 0;elsecase(cnt)0:rd_en <= 0;1:rd_en <= 1;2:rd_en <= 0;endcaseendalways@(posedge clk,negedge rst_n)beginif(!rst_n)txd <= 1;elsecase(cnt)0:txd <= 1;1:txd <= 0;//起始位3:temp <= data;1*16:txd <= temp[0];//數據在時序開始時放在txd,2*16:txd <= temp[1];3*16:txd <= temp[2];4*16:txd <= temp[3];5*16:txd <= temp[4];6*16:txd <= temp[5];7*16:txd <= temp[6];8*16:txd <= temp[7];9*16:txd <= 1;endcaseendendmodule

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900026.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900026.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900026.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習算法分類全景解析:從理論到工業實踐(2025新版)

一、機器學習核心定義與分類框架 1.1 機器學習核心范式 機器學習本質是通過經驗E在特定任務T上提升性能P的算法系統&#xff08;Mitchell定義&#xff09;。其核心能力體現在&#xff1a; 數據驅動決策&#xff1a;通過數據自動發現模式&#xff0c;而非顯式編程&#xff08…

perf?命令詳解

?perf 命令詳解? perf 是 Linux 系統中最強大的 ?性能分析工具?&#xff0c;基于內核的 perf_events 子系統實現&#xff0c;支持硬件性能計數器&#xff08;PMC&#xff09;、軟件事件跟蹤等功能&#xff0c;用于定位 CPU、內存、I/O 等性能瓶頸。以下是其核心用法與實戰…

【大模型基礎_毛玉仁】6.4 生成增強

目錄 6.4 生成增強6.4.1 何時增強1&#xff09;外部觀測法2&#xff09;內部觀測法 6.4.2 何處增強6.4.3 多次增強6.4.4 降本增效1&#xff09;去除冗余文本2&#xff09;復用計算結果 6.4 生成增強 檢索器得到相關信息后&#xff0c;將其傳遞給大語言模型以期增強模型的生成能…

Leetcode 合集 -- 排列問題 | 遞歸

題目1 子集2 思路 代碼 題目2 全排列2 思路 代碼 題目3 排列總和 思路 代碼 題目4 排列總和2 思路 代碼

vue-office 支持預覽多種文件(docx、excel、pdf、pptx)預覽的vue組件庫

官網地址&#xff1a;https://github.com/501351981/vue-office 支持多種文件(docx、excel、pdf、pptx)預覽的vue組件庫&#xff0c;支持vue2/3。也支持非Vue框架的預覽。 1.在線預覽word文件&#xff08;以及本地上傳預覽&#xff09; 1.1&#xff1a;下載組件庫 npm inst…

【trino】trino配置證書https tls/ssl訪問

trini版本470 一、官方文檔 doc 在Security/TLS and HTTPS、Security/PEM files和Security/JKS files下 openssl文檔 二、配置trino 2.1 創建server.cnf文件 [ req ] distinguished_name req_distinguished_name req_extensions v3_req[ req_distinguished_name ] coun…

ZCC8702,LED驅動芯片的“六邊形戰士”可替代SY8707

在LED照明的璀璨舞臺上&#xff0c;驅動芯片猶如幕后英雄&#xff0c;默默掌控著燈光的閃耀與變幻。ZCC8702作為一款集大成的LED驅動芯片&#xff0c;憑借其卓越的性能、廣泛的應用范圍和出色的穩定性&#xff0c;成為了這個領域中當之無愧的“六邊形戰士”。今天&#xff0c;就…

Vue 數據傳遞流程圖指南

今天&#xff0c;我們探討一下 Vue 中的組件傳值問題。這不僅是我們在日常開發中經常遇到的核心問題&#xff0c;也是面試過程中經常被問到的重要知識點。無論你是初學者還是有一定經驗的開發者&#xff0c;掌握這些傳值方式都將幫助你更高效地構建和維護 Vue 應用 目錄 1. 父…

Git Restore 命令詳解與實用示例

文章目錄 Git Restore 命令詳解與實用示例1. 恢復工作區文件到最后一次提交的狀態基本命令示例恢復所有更改 2. 恢復某個文件到特定提交的狀態基本命令示例 3. 恢復暫存區的文件基本命令示例恢復所有暫存的文件 git restore 的常見選項git restore 與 git checkout 比較總結 Gi…

AI 防口誤指南_LLM 輸出安全實踐

在數字化轉型的浪潮中&#xff0c;大語言模型(以下統稱LLM)已成為企業技術棧中不可或缺的智能組件&#xff0c;這種強大的AI技術同時也帶來了前所未有的安全挑戰。它輸出的內容如同雙面刃&#xff0c;一面閃耀著效率與創新的光芒&#xff0c;另一面卻隱藏著"幻覺"與不…

程序化廣告行業(55/89):DMP與DSP對接及數據統計原理剖析

程序化廣告行業&#xff08;55/89&#xff09;&#xff1a;DMP與DSP對接及數據統計原理剖析 大家好呀&#xff01;在數字化營銷的大趨勢下&#xff0c;程序化廣告已經成為眾多企業實現精準營銷的關鍵手段。上一篇博客我們一起學習了程序化廣告中的人群標簽和Look Alike原理等知…

運維之 Centos7 防火墻(CentOS 7 Firewall for Operations and Maintenance)

運維之 Centos7 防火墻 1.介紹 Linux CentOS 7 防火墻/端口設置&#xff1a; 基礎概念&#xff1a; 防火墻是一種網絡安全設備&#xff0c;用于監控和控制網絡流量&#xff0c;以保護計算機系統免受未經授權的訪問和惡意攻擊。Linux CentOS 7操作系統自帶了一個名為iptables的…

第十五屆藍橋杯大賽軟件賽省賽Python 大學 C 組題目試做(下)【本期題目:砍柴,回文字符串】

okk&#xff0c;大伙&#xff0c;這一期我們就把C組的題目刷完。 本期題目&#xff1a;砍柴&#xff0c;回文字符串 文章目錄 砍柴題目思路分析舉個栗子思路總結 代碼 回文字符串題目思路分析代碼 感謝大伙觀看&#xff0c;別忘了三連支持一下大家也可以關注一下我的其它專欄&a…

Design Compiler:庫特征分析(ALIB)

相關閱讀 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 簡介 在使用Design Compiler時&#xff0c;可以對目標邏輯庫進行特征分析&#xff0c;并創建一個稱為ALIB的偽庫&#xff08;可以被認為是緩存&#xff09;&…

MySQL索引原理:從B+樹手繪到EXPLAIN

最近在學后端&#xff0c;學到了這里做個記錄 一、為什么索引像書的目錄&#xff1f; 類比&#xff1a;500頁的技術書籍 vs 10頁的目錄缺點&#xff1a;全表掃描就像逐頁翻找內容優點&#xff1a;索引將查詢速度從O(n)提升到O(log n) 二、B樹手繪課堂 1. 結構解剖&#xff0…

全連接RNN反向傳播梯度計算

全連接RNN反向傳播梯度計算 RNN數學表達式BPTT(隨時間的反向傳播算法)參數關系網絡圖L對V的梯度L對U的梯度L對W和b的梯度 RNN數學表達式 BPTT(隨時間的反向傳播算法) 參數關系網絡圖 L對V的梯度 L對U的梯度 L對W和b的梯度

C++高效讀取大規模文本格式點云(windows)

需使用VS2017及以上版本&#xff0c;C語言標準選擇C17&#xff0c;支持OpenMP。 執行效率明顯優于ifstream stof。 // 點云數據結構 struct PointXYZ {std::array<float, 3> coord; };float string_to_float_fast(const std::string& str) {float value;auto [p…

【Linux】進程信號的捕捉處理

個人主頁~ 進程信號的捕捉處理 一、信號捕捉處理的概述1、信號捕捉處理全過程2、用戶態和內核態的區別&#xff08;一&#xff09;用戶態&#xff08;二&#xff09;內核態&#xff08;三&#xff09;用戶態與內核態的切換&#xff08;四&#xff09;硬件條件 二、再談進程地址…

Nyquist內置函數-概述

1 Nyquist內置函數-概述 本章提供奈奎斯特&#xff08;Nyquist&#xff09;語言參考。操作按功能和抽象級別分類。奈奎斯特在兩個重要級別上實現&#xff1a;“高級”級別支持行為抽象&#xff0c;這意味著像 stretch 和 at 這樣的操作可以應用。這些函數是典型用戶期望使用的…

數據驅動防災:AI 大模型在地質災害應急決策中的關鍵作用。基于DeepSeek/ChatGPT的AI智能體開發

全球氣候變化加劇了滑坡、泥石流等地質災害的發生頻率與不確定性&#xff0c;傳統基于統計與物理模型的預測方法常受限于?數據稀疏性?與?動態耦合復雜性?。近年來&#xff0c;AI智能體&#xff08;AI Agents&#xff09;與大型語言模型&#xff08;LLMs&#xff09;的突破為…