freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)論文-基于fpga的uart設計說明書-文庫吧

2024-10-27 18:45 本頁面


【正文】 //寄存器 P,存放接收到的串行數(shù)據(jù)值 reg [ 3: 0 ] i。 //計數(shù) 器 i,用來記錄接收到的數(shù)據(jù)位的數(shù)目 5 reg a。 //寄存器 a,用來判斷是否開始接收數(shù)據(jù) reg k。 //寄存器 k,用來判斷模塊是否完成數(shù)據(jù)接收 CNT CNT (CLK_10MHz, CLK_9600Hz, reset)。//分頻器進行分頻 always @(posedge CLK_9600Hz or posedge reset) Begin if ( reset) //如果復位信號到來 ,則進行模塊初始化 i = 0。 a = 1。 end if ( N = = 0 amp。amp。 a = = 1) //如果數(shù)據(jù)起始位到來 ,則準備接收數(shù)據(jù) a = 0。 圖 8接收模塊的流程圖 if ( a = = 0) //如果接收控制寄存器 a表明可以接收數(shù)據(jù) ,則開始接收數(shù)據(jù) begin if ( i 8 amp。amp。 k = = 1) //如果接收到的數(shù)據(jù)位小于 8位 ,則繼續(xù)進行接收 begin P [ i ] = N。 i = i + 1。 //接收一位數(shù)據(jù) ,則計數(shù)器加 1 end else //如果接收到的數(shù)據(jù)位大于 8位 ,則停止接收數(shù)據(jù) k = 0。 end end assign Q = P。 endmodule 。 9所示 。 圖 9 接收時的輸入信號為 N , 其輸入的位序列為 00110110001,此序列中已包含了起始位 0、校驗位 0和停止位 1。接收到的數(shù)據(jù)位存放到寄存器 [7: 0]Q中 ,可以看到圖中 Q 為接收到的數(shù)據(jù)位 ,此數(shù)據(jù)由高位到低位依次為00110110,正是 UART幀中的數(shù)據(jù)位部分。 3. 3 發(fā)送模塊的實 現(xiàn) 。 發(fā)送模塊實現(xiàn)的功能是將要發(fā)送的 8位并行數(shù)據(jù)變?yōu)榇袛?shù)據(jù) ,同時在數(shù)據(jù)頭部加起始位 ,在數(shù)據(jù)位尾部加奇偶校驗位和停止位。即當 UART發(fā)送模塊被復位信號復位以后 ,發(fā)送模塊將立刻進入準備發(fā)送狀態(tài) ,在該狀態(tài)下讀 8位并行數(shù)據(jù)到寄存器 [7:0] NSend中 ,之后輸出邏輯 0作為起始位 ,從起始位的下一位開始對 UART串行通訊所要求的波特率時鐘 DIV_CLK的上升沿計數(shù) ,每計一次數(shù)從寄存器 [7:0] NSend中按照由低位到高位的順序取出一位數(shù)據(jù)送到 TxD 端 ,當計數(shù)為 8時 ,也就是確保 發(fā)送了所有的數(shù)據(jù)位 ,同時也將 8位并行數(shù)據(jù)轉換為 8位串行數(shù)據(jù)。根據(jù) 8位數(shù)據(jù)位中邏輯 1的個數(shù)確定校驗位 ,然后輸出校驗位 ,最后輸出邏輯 1作為停止位。 2. 發(fā)送模塊實現(xiàn)的流程 。 6 發(fā)送模塊實現(xiàn)的流程如圖 10所示 。 3. 發(fā)送模塊實現(xiàn)的源代碼 。 module UART (CLK_10MHz, NSend, QSend, resetSend) 。 input [ 7: 0 ] NSend。 //輸入的并行信號 input resetSend。 //復位信號 output QSend。 //輸出的串行信號 reg ack。 //寄存器 ack,用來判斷發(fā)送模塊是否已經(jīng)復位 reg startB it。 //寄存器 startB it,用來判斷數(shù)據(jù)起始位是否已經(jīng)發(fā)送 reg [ 3: 0 ] iSend。 //計數(shù)器 iSend,用來記錄已經(jīng)發(fā)送的數(shù)據(jù)位的數(shù)目 reg tt。//寄存器 tt,用來存放待發(fā)送的數(shù)據(jù)位 reg check。//寄存器 check,用來存放將要發(fā)送的數(shù)據(jù)校驗位 CNT CNT (CLK_10MHz, CLK_9600Hz, resetSend)。//分頻器進行分頻 always @ (posedge CLK_9600Hz or posedge resetSend) begin if ( resetSend) / /如果復位信號到來 ,則進行模塊初始化 begin ack = 1。 startB it = 0。 end else begin if (ack = = 1) //如果模塊初始化完畢 ,則準備發(fā)送數(shù)據(jù) begin if (startB it = = 0) //如果沒有發(fā)送起始位 ,則發(fā)送起始位 begin tt = 0。 startB it = 1。 iSend = 0。 check = 0。 end else begin if ( startB it = = 1 amp。amp。 iSend 8) //如果起始位已經(jīng)發(fā)送 , 則開始發(fā)送數(shù)據(jù)位 begin if ( NSend [iSend] = = 1) //校驗位的計算 check = check^IN Send [ iSend ]。 tt = N Send [ iSend ]。 iSend = iSend + 1。 //發(fā)送一位數(shù)據(jù) ,則計數(shù)器加 1 end Else 圖 10 發(fā)送模塊實現(xiàn)的流程圖 if ( iSend = = 8) //如果數(shù)據(jù)位發(fā)送完畢 ,則發(fā)送校驗位 begin tt = check。 iSend = iSend + 1。 end else 7 tt = 1。 //發(fā)送停止位 end end end end assign Q Send = tt。 endmodule 。 發(fā)送模塊實現(xiàn)的仿真結果如圖 11所示 。 圖 11 準備發(fā)送的數(shù)據(jù)由高位到低位依次為 00110110,QSend為數(shù)據(jù)發(fā)送端 ,可以看到發(fā)送的串行位序列為00110110001,符合 UART幀格式的要求 。 3. 4 UART各子模塊的整合 1. 各子模塊的整合原理 。 在各模塊功能實現(xiàn)的基礎上 ,把它們有機地整合在一起,使波特率發(fā)生器能夠按照 UART通訊的要求正常工作,接收模塊和發(fā)送模塊能夠根據(jù)各自的復位信號使整合模塊具有發(fā)送或接收功能 。 。 各子模塊的整合流程如圖 12所示 。 各子模塊的整合仿真結果如圖 13所示 。 圖 12 各子模塊的整合流程 圖 圖 13 各子模塊的整合仿真圖 仿真是以接收和發(fā)送“ 6”為例的。圖 10中 N信號為接收時的輸入信號 ,接收完 成后數(shù)據(jù)存放到寄存器 [7: 0] Q中 ,可以看到 Q中存放的 8 位數(shù)據(jù)是 00110110,正是“ 6”的 ASCII碼。 NSend寄存器中存放的是發(fā)送時待發(fā)送的數(shù)據(jù) ,數(shù)據(jù)的值為 00110110,即“ 6”的 ASCII碼 ,QSend為發(fā)送輸出信號 ,可以看發(fā)送出去的串行數(shù)據(jù)依次為 00110110001,其中已經(jīng)包含了起始位 0,校驗位 0和停止位 1。 實驗結果: 引腳鎖定: 8 用 quartusп 仿真波形如下: 圖 11 接收模塊的時序仿真圖 圖 12 接收模塊各狀態(tài)時序仿真圖 當發(fā)送 aabbcc時接收到 aabbcc,對應的開發(fā)板上的 8個 LED燈只有 4個亮( 101010)。 9 問題 1:在仿真過程中經(jīng)常遇到一些寄存器沒有被初始化 ,導致仿真結果不正確 ,這是因為 if語句嵌 套太復雜或循環(huán)語句使用不恰當使得寄存器初始化語句未能執(zhí)行 。 措施 :盡量減少 if語句的嵌套層數(shù) ,這樣可以減少閱讀程序的復雜度和程序調試的復雜度 ,能夠更容 易發(fā)現(xiàn)錯誤以便及時尋找到解決方案。 問題 2:在程序中使用 initial過程塊進行寄存器的初始化 ,會使源程序在下載到目標板的整合過程時 不能通過 。 措施 :可以外接一個輸入信號進行各寄存器的初 始化 ,這樣做既可以使源程序順利下載到目標板中 , 又可以從通訊模塊的外部對通訊模塊進行控制 。 問題 3:在程序中如果在兩個 always過程塊中對同一個變量進行賦值 ,程序將不能下載到目標板中 , 因為當兩個 always過程塊中的敏感事件列表中的事件同時滿足時 ,就會引發(fā)在兩個 always語句中對相同 變量同時賦值而導致沖突 。 措施 :合并 always語句塊 ,即把引 發(fā)同一變量改變的過程敏感事件用 o r連接起來放在一個 always語 句塊中 。 問題: 10 總程序: 波特率發(fā)生器模塊實現(xiàn)的源代碼 。 Module CNT (CLK, DIV_CLK, reset)。 input CLK, reset。 //輸入信號 :時鐘信號 CLK與復位信號 reset reg [10: 0 ]H。 //計數(shù)器 H,用來記錄輸入時鐘信號的跳變數(shù) reg num。 //寄存器 num ,用來存放將要輸出的電平信號 output DIV_CLK。 //輸 出信號 always @ (posedge CLK or posedge reset) begin if ( reset) //復位信號到來 ,進行模塊初始化 begin H = 0。 Num=0。 end else if (H = = 1041) / /當計數(shù)器 計數(shù)值為 1041 時 ,計數(shù)器清 0,準備進行新一次的計數(shù) H = 0。 else begin if (H 521) //當計數(shù)器的值小于 521時 ,輸出為低電平 num = 0。 else //當計數(shù)器的值大于 521時 ,輸出為高電平 num = 1。 H = H + 1。 end end assign DIV_CLK = num。 Endmodule .接收模塊實現(xiàn)的源代碼。 module UART ( N , CL K_10MHz, Q,reset)。 input CLK_10MHz, N , reset。 //輸入信號 :時鐘信號 CLK_10MHz,輸入的串行信號 N ,復位信號 reset output [ 7: 0 ] Q。 //輸出的并行信號 reg [ 7: 0 ] P。 //寄存器 P,存放接收到的串行數(shù)據(jù)值 reg [ 3: 0 ] i。 //計數(shù)器 i,用來記錄接收到的數(shù)據(jù)位的數(shù)目 reg a。 //寄存器 a,用來判斷是否開始接收數(shù)據(jù) reg k。 //寄存器 k,用來判斷模塊是否完成數(shù)據(jù)接收 CNT CNT (CLK_10MHz, CLK_9600Hz, reset)。//分頻器進行分頻 always @(posedge CLK_9600Hz or posedge reset) Begin if ( reset) //如果復位信號到來 ,則進行模塊初始化 i
點擊復制文檔內(nèi)容
畢業(yè)設計相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1