35.UART(通用異步收發傳輸器)-RS232(2)

(1)RS232接收模塊visio框圖:

(2)接收模塊Verilog代碼編寫:

/*
常見波特率: 4800、9600、14400、115200
在系統時鐘為50MHz時,對應計數為:   
(1/4800)    * 10^9 /20 -1 = 10416     
(1/9600)    * 10^9 /20 -1 = 5207
(1/14400)   * 10^9 /20 -1 = 3471
(1/115200)  * 10^9 /20 -1 = 433 
*/module rs232_rx
(input [16:0]    baud_set    ,input           clk         ,input           reset_n     ,input           rx          ,input           rx_start    ,output reg[7:0] rx_data     ,output reg      rx_done     );reg [15:0]      BAUD_MCNT   ;reg             rx_reg0     ;reg             rx_reg1     ;reg             rx_reg2     ;reg             en_baud_cnt ;reg [15:0]      baud_cnt    ;reg [3:0]       bit_cnt     ;reg [7:0]       r_rx_data   ;wire            nedge       ;wire            w_rx_done   ;//波特最大計數設計always@(posedge clk)begincase(baud_set)17'd4800    :BAUD_MCNT <= 16'd10416;17'd9600    :BAUD_MCNT <= 16'd5207;17'd14400   :BAUD_MCNT <= 16'd3471;17'd115200  :BAUD_MCNT <= 16'd433;default     :BAUD_MCNT <= 16'd5207;      //當輸入baud_set為其他值時,一律當成9600處理。endcaseend//輸入信號打拍處理always@(posedge clk)beginrx_reg0 <= rx;rx_reg1 <= rx_reg0;end//下降沿設計always@(posedge clk)rx_reg2 <= rx_reg1;assign nedge = (rx_reg2) && (!rx_reg1);//波特率計數使能信號設計 always@(posedge clk or negedge reset_n)if(!reset_n)en_baud_cnt <= 1'd0;else if(!rx_start)en_baud_cnt <= 1'd0;else if(nedge)en_baud_cnt <= 1'd1;else if((bit_cnt == 4'd0) && (baud_cnt == BAUD_MCNT/2)&&(rx_reg2))      //防止起始位只是一個抖動en_baud_cnt <= 1'd0;else if((bit_cnt == 4'd9) && (baud_cnt == BAUD_MCNT/2))en_baud_cnt <= 1'd1;else    en_baud_cnt <= en_baud_cnt;//波特計數器模塊設計always@(posedge clk or negedge reset_n)if(!reset_n)baud_cnt <= 16'd0;else if(!en_baud_cnt)baud_cnt <= 16'd0;else if(baud_cnt == BAUD_MCNT)baud_cnt <= 16'd0;else baud_cnt <= baud_cnt + 16'd1;//位計數器模塊設計always@(posedge clk or negedge reset_n)if(!reset_n)bit_cnt <= 4'd0;else if((baud_cnt == BAUD_MCNT) &&(bit_cnt == 4'd9))bit_cnt <= 4'd0;else if(baud_cnt == BAUD_MCNT)bit_cnt <= bit_cnt + 4'd1;else bit_cnt <= bit_cnt;//rx_data設計always@(posedge clk or negedge reset_n)if(!reset_n)r_rx_data <= 8'd0;else if(baud_cnt == BAUD_MCNT/2)begincase(bit_cnt)4'd1: r_rx_data[0] <= rx_reg2;4'd2: r_rx_data[1] <= rx_reg2;4'd3: r_rx_data[2] <= rx_reg2;4'd4: r_rx_data[3] <= rx_reg2;4'd5: r_rx_data[4] <= rx_reg2;4'd6: r_rx_data[5] <= rx_reg2;4'd7: r_rx_data[6] <= rx_reg2;4'd8: r_rx_data[7] <= rx_reg2;default:r_rx_data <= r_rx_data;endcaseendelse r_rx_data <= r_rx_data;always@(posedge clk or negedge reset_n)if(!reset_n)rx_data <= 8'd0;else if(w_rx_done)rx_data <= r_rx_data;else    rx_data <= rx_data;//w_rx_done和rx_done信號設計assign w_rx_done = (bit_cnt == 4'd9) && (baud_cnt == BAUD_MCNT/2) ;always@(posedge clk or negedge reset_n)if(!reset_n)rx_done <= 1'd0;else rx_done <= w_rx_done;endmodule

(3)仿真文件代碼:

`timescale 1ns / 1psmodule rs232_tx_tb;reg   [16:0]        baud_set    ;
reg                 clk         ;
reg                 reset_n     ;
reg                 rx          ;
reg                 rx_start    ;wire [7:0]          rx_data     ;
wire                rx_done     ;initial clk = 1'd1;always #10 clk = ~clk;initial begin baud_set <= 17'd9600;rx_start <= 1'd0;#200;rx_start <= 1'd1;reset_n <= 1'd0;rx      <= 1'd1;#15;reset_n <= 1'd1;@(posedge clk)set_bit(8'd1 );set_bit(8'd3 );set_bit(8'd7 );set_bit(8'd15);$stop;endrs232_rx    rs232_rx_inst
(.baud_set    ( baud_set )     ,.clk         ( clk      )     ,.reset_n     ( reset_n  )     ,.rx          ( rx       )     ,.rx_start    ( rx_start )     ,.rx_data     ( rx_data  )     ,.rx_done     ( rx_done  )     );task   set_bit(input [7:0]data
);integer i;for(i=0;i<10;i=i+1)begincase(i)0: rx <= 1'd0;1: rx <= data[0];2: rx <= data[1];3: rx <= data[2];4: rx <= data[3];5: rx <= data[4];6: rx <= data[5];7: rx <= data[6];8: rx <= data[7];9: rx <= 1'd1;endcase#(5208 * 20);        end
endtaskendmodule

(4)仿真波形:

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

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

相關文章

【作業】 貪心算法1

Tips:三題尚未完成。 #include <iostream> #include <algorithm> using namespace std; int a[110]; int main(){int n,r,sum0;cin>>n>>r;for(int i0;i<n;i){cin>>a[i];}sort(a0,an);for(int i0;i<n;i){if(i>r){a[i]a[i-r]a[i];}suma[…

[USACO18JAN] Cow at Large P

題解都說了&#xff0c;當統計 u u u為根節點的時候&#xff0c;答案就是滿足以下條件的 i i i的數量&#xff1a; d i ≥ g i d_i≥g_i di?≥gi?且 d f a i < g f a i d_{fa_i}<g_{fa_i} dfai??<gfai??&#xff0c;設這個數量為 a n s ans ans。以下嚴格證明 …

Solana開發資源都有哪些

Solana是一個高性能的區塊鏈平臺&#xff0c;吸引了大量開發者構建去中心化應用&#xff08;dApps&#xff09;。以下是一些有用的Solana開發教程和資源&#xff1a; 官方資源 Solana 官方文檔&#xff1a; Solana Documentation: 這是最全面的資源&#xff0c;包括快速入門、…

[實踐篇]13.29 QNX下的系統性能監控工具 - sysMonAppQNX(二)

2.7 getinfo: 獲取 DSP 的詳細信息 getinfo 可用選項 (如果沒有參數,則使用默認值) --q6 (默認選擇處理器: ADSP): adsp - 選擇的處理器為 ADSPsdsp - 選擇的處理器為傳感器 DSPcdsp - 選擇的處理器為計算 DSP示例: ./sysMonApp getinfo --q6 cdsp - 獲取計算 DSP 的詳細信…

大氣熱力學(8)——熱力學圖的應用之一(氣象要素求解)

本篇文章源自我在 2021 年暑假自學大氣物理相關知識時手寫的筆記&#xff0c;現轉化為電子版本以作存檔。相較于手寫筆記&#xff0c;電子版的部分內容有補充和修改。筆記內容大部分為公式的推導過程。 文章目錄 8.1 復習斜 T-lnP 圖上的幾種線8.1.1 等溫線和等壓線8.1.2 干絕熱…

連鎖零售門店分析思路-人貨場 數據分析

連鎖零售門店分析思路 以下是一個連鎖零售門店的分析思路&#xff1a; 一、市場與競爭分析 二、門店運營分析&#xff08;銷售分析&#xff09; 三、銷售與財務分析 四、客戶分析 五、數字化與營銷分析 最近幫一個大學生培訓&#xff0c;就門店銷售分析 &#xff0c;說到門店…

使用windows批量解壓和布局ImageNet ISLVRC2012數據集

使用的系統是windows&#xff0c;找到的解壓命令很多都linux系統中的&#xff0c;為了能在windows系統下使用&#xff0c;因此下載Git這個軟件&#xff0c;在其中的Git Bash中使用以下命令&#xff0c;因為Git Bash集成了很多linux的命令&#xff0c;方便我們的使用。 ImageNe…

[iOS]類和對象的底層原探索

[iOS]類和對象的底層探索 文章目錄 [iOS]類和對象的底層探索繼承鏈&#xff08;類&#xff0c;父類&#xff0c;元類&#xff09;instance 實例對象class 類對象meta-class 元類對象 對對象、類、元類和分類的探索instance 實例對象class 類對象meta-class 元類對象分類(catego…

react項目使用EventBus實現登錄攔截

關于EventBus EventBus是一個事件發布/訂閱模式的實現&#xff0c;它允許不同的組件或模塊之間進行通信&#xff0c;而不需要直接引用對方。這種模式特別適用于那些需要跨組件傳遞信息&#xff0c;但又不想引入復雜依賴關系的場景。 實現思路 利用axios中間件&#xff0c;在…

防火墻之帶寬管理篇

核心思想 1.帶寬限制&#xff1a;限制非關鍵業務流量占用帶寬的比例 2.帶寬保證&#xff1a;保證關鍵的業務流量傳輸不受影響。業務繁忙時&#xff0c;確保業務不受影響。 3.限制連接數&#xff1a;可以針對某些業務進行連接數的限制&#xff0c;首先可以降低該業務占用帶寬…

基于UltraFace的人臉檢測在地平線旭日X3派上的部署和測試(Python版本和C++版本)

電腦端的測試環境搭建 如果不想再搭建環境和測試代碼bug上浪費更多的時間可以直接獲取本人的測試虛擬機&#xff0c;所有的測試代碼、虛擬環境和板端測試工程以全部打包到了虛擬機&#xff0c;需要的可以通過網盤獲取&#xff1a; 代碼和虛擬機百度網盤鏈接&#xff1a; 鏈接…

【AI繪畫教程】Stable Diffusion 1.5 vs 2

在本文中,我們將總結穩定擴散 1 與穩定擴散 2 辯論中的所有要點。我們將在第一部分中查看這些差異存在的實際原因,但如果您想直接了解實際差異,您可以跳下否定提示部分。讓我們開始吧! Stable Diffusion 2.1 發布與1.5相比,2.1旨在解決2.0的許多相對缺點。本文的內容與理解…

網絡和安全操作

一、編輯文件 文本編輯器有很多&#xff0c;比如圖形模式的gedit、OpenOffice 等&#xff0c;文本模式下的編輯器有vi、vim&#xff08;vi的增強版本&#xff09;等。vi和vim是我們在Linux中最常用的編輯器。 gedit&#xff1a;類似于windows下的記事本&#xff0c;很方便的去…

IO多路復用技術、select、poll、epoll聯系與區別

目錄 IO多路復用技術select&#xff1a;poll&#xff1a;epoll&#xff08;Linux特有&#xff09;&#xff1a; epoll select poll的區別epoll是同步還是異步epoll詳解 IO多路復用技術 通信雙方都有一個socket&#xff0c;以一個文件描述符的形式存在&#xff0c;那這個fd也對…

AI 大事件:超級明星 Andrej Karpathy 創立AI教育公司 Eureka Labs

&#x1f9e0; AI 大事件&#xff1a;超級明星 Andrej Karpathy 創立AI教育公司 Eureka Labs 摘要 Andrej Karpathy 作為前 OpenAI 聯合創始人、Tesla AI 團隊負責人&#xff0c;他的專業性和實力備受矚目。Karpathy 對 AI 的普及和教育充滿熱情&#xff0c;從 YouTube 教程到…

CBSD bhyve Ubuntu 配置vnc登錄管理

CBSD介紹 CBSD是為FreeBSD jail子系統、bhyve、QEMU/NVMM和Xen編寫的管理層。該項目定位為一個綜合解決方案的單一集成工具&#xff0c;用于使用預定義的軟件集以最少的配置快速構建和部署計算機虛擬環境。 雖然CBSD沒有提供額外的操作系統級功能&#xff0c;但它極大地簡化了…

兩年經驗前端帶你重學前端框架必會的ajax+node.js+webpack+git等技術 Day1

黑馬程序員前端AJAX入門到實戰全套教程&#xff0c;包含學前端框架必會的&#xff08;ajaxnode.jswebpackgit&#xff09;&#xff0c;一套全覆蓋 Day1 你好,我是Qiuner. 為幫助別人少走彎路和記錄自己編程學習過程而寫博客 這是我的 github https://github.com/Qiuner ?? ?…

【算法/天梯賽訓練】天梯賽模擬題集

L1-009 N個數求和 #include <iostream> #include <algorithm>using namespace std;typedef long long ll; const int N 105;typedef struct node {ll x, y; }node; node a[N];ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a; }int main() {int n;cin >>…

《昇思25天學習打卡營第25天|第9天》

今天是打卡的第九天&#xff0c;今天學習的是使用靜態圖加速這門課程&#xff0c;從他的背景學起&#xff1a;AI編譯框架分為兩種運行模式&#xff0c;分別是動態圖模式和靜態圖模式&#xff0c;動態圖模式特點&#xff1a;計算圖的構建和計算同時發生&#xff0c;缺點&#xf…

Qt Style Sheets-樣式表語法

樣式表語法 Qt 樣式表術語和語法規則幾乎與 HTML CSS 的相同。如果您已經了解 CSS&#xff0c;您可能可以快速瀏覽此部分。 樣式規則 樣式表由一系列樣式規則組成。樣式規則由選擇器和聲明組成。選擇器指定哪些小部件受該規則影響&#xff1b;聲明指定應在小部件上設置哪些屬性…