波特率指資料訊號對載波的調製速率,它用單位時間內載波調製狀態改變次數來表示[1] 。
波特率發生器不是產生波特率時鐘的,波特率時鐘頻率/波特率因子=波特率。
波特率發生器的作用是從輸入時鐘轉換出需要的波特率clk
乙個完整的由verilog實現的波特率發生器:
module baud_gen(
clk_50mhz, rst_p, bclk
);input clk_50mhz; /*輸入的系統時鐘,50mhz*/
input rst_p; /*復位脈衝,高電平有效*/
/* 倍頻值16乘以9600波特率,即9600*16=153600,得到波特率發生器的實際輸出訊號頻率為153.6kbit/s */
output bclk; // 輸出訊號:uart(串列埠)波特率發生器輸出的時鐘脈衝,頻率:153.60kbps
//即每秒1536000個脈衝,*波特率發生器輸出脈衝bclk,注意:除了主頻分頻之外,
//還決定了這個訊號的占空比,在本例中輸出訊號占空比為 1:325
reg bclk; //暫存器資料型別bclk
reg [8:0] cnt; //暫存器資料型別cnt,9位,uart用它來記錄接收到的主頻脈衝個數,
//注意在修改輸出波特率值時,若占空比小於1:511,需要增加該變數所佔位數
//以下語句利用同步計數器完成時鐘分頻,
always @(posedge clk_50mhz) begin /* 每當訊號clk_50mhz發生電平變化執行以下語句 */
if(rst_p) begin /* 如果復位脈衝訊號為高電平執行以下語句 */
cnt <= 0; //對主頻訊號計數器cnt做非阻塞方式復位賦值,賦值為邏輯0 。此後每當時鐘訊號到來就變。
bclk <= 0; /* 暫存器變數bclk賦值為邏輯0,使該脈衝訊號復位為低電平,以低電平作為開始*/
endelse begin
/* 50mhz除以153600(uart實際頻率)等於325.5 即50_000_000 /153600 = 325.5(波特率除數) */
if(cnt > 324) begin /*如果cnt的數值大於324,即cnt計數脈衝數等於325(0-324個脈衝)*/
cnt <= 0; /* 50mhz主頻訊號計數器cnt值,被非阻塞方式復位*/
bclk <= 1; /*串列埠波特率時鐘脈衝訊號bclk賦值為邏輯1,使該脈衝訊號跳變到高電平週期*/
endelse begin
cnt <= cnt + 1; /* 50mhz主頻訊號計數器cnt值被非阻塞方式增量賦值(加1) */
bclk <= 0; //波特率發生器時鐘脈衝訊號bclk被非阻塞方式賦值為』0』,
//使該脈衝訊號跳變到低電平週期*/
endend
endendmodule
50_000_000 /153600 = 325.5 相當於325分頻, 由於串列埠速率較低,其16 倍頻率值也不高,因此在設計中,可以不要求波特率發生器
輸出訊號的占空比為50%。
波特率 位元率和波特率
最近因為專案在複習通訊原理,對於位元率和波特率概念始終區分不是很明確,網上找了很多教程,找到了我認為最好理解的乙個版本。一,位元 bit 與資訊度量衡 度量衡是乙個名詞,通俗簡單的理解就是某個東西的單位,舉個栗子 1,乙個妹子的重量是100kg,那麼kg就是單位,用來描述物體 妹子 的性質 質量 k...
UART和波特率
什麼是 uart uart是一種通用序列資料匯流排,用於非同步通訊。該匯流排雙向通訊,可以實現全雙工傳輸和接收。在嵌入式設計中,uart用來與pc進行通訊,包括與監控偵錯程式和其它器件,如eeprom通訊。uart通訊 uart首先將接收到的並行資料轉換成序列資料來傳輸。訊息幀從乙個低位起始位開始,...
UART和波特率
什麼是 uart uart是一種通用序列資料匯流排,用於非同步通訊。該匯流排雙向通訊,可以實現全雙工傳輸和接收。在嵌入式設計中,uart用來與pc進行通訊,包括與監控偵錯程式和其它器件,如eeprom通訊。uart通訊 uart首先將接收到的並行資料轉換成序列資料來傳輸。訊息幀從乙個低位起始位開始,...