【正文】
① 在 信 號線上共有兩種狀態(tài),可分別用邏輯1和邏輯。③發(fā)送 數(shù) 據(jù) 位:在起始位之后就是數(shù)據(jù)位,一般為8位一個字節(jié)的數(shù)據(jù),低位在前,高位在后。將3過程當(dāng)中奇偶校驗的結(jié)果輸入到數(shù)據(jù)線,并占一個數(shù)據(jù)位時鐘。//接收數(shù)據(jù)moduleinput read_enable。//cs為通知cpu讀取數(shù)據(jù)位output[7:0] dat_out。//移位寄存器 reg parity_check_result,parity_result,clear3,clear1。 end end //////////////////////////////////////////////////////////////////////////////always(negedge counters[0]) ///接收操作if(read_enable amp。 end else if (counters==839。b00111000) //3 begin data_out[5]=read。 parity_check_result=parity_check_result + read。 end else if (counters==839。b01111000) //7 begin data_out[1]=read。 parity_check_result=parity_check_result + read。 end else if (counters==839。amp。 //clk_enable3=0。 endelse clear1=1。① 起始位判讀:當(dāng)UART接收器復(fù)位以后,接收器將處 于這一狀態(tài)。即對 clk一 rev 上跳沿計數(shù),當(dāng)為16時,就對數(shù)據(jù)采樣,這樣 保證了數(shù)據(jù)位是在中點處被采樣的,同時串/并轉(zhuǎn)換,當(dāng)檢測到已收到8個數(shù)據(jù)后以后,便進(jìn)入了state2狀態(tài)。④ 數(shù)據(jù)幀判讀 :該狀態(tài)是用來幀校驗的,即在校驗位 以后,檢測停止位是否為邏輯高電平圖37UART數(shù)據(jù)接收操作起始位檢測 空閑檢測 Cpu接收位檢測 檢測 毛刺檢測 數(shù)據(jù)幀檢測接收等待 數(shù)據(jù)位讀取和奇偶校驗 奇偶結(jié)果比較圖37UART數(shù)據(jù)接收操作解釋:數(shù)據(jù)接收速度9600波特率,以16倍頻接收cpu接收位檢測:當(dāng)奇偶結(jié)果比較和數(shù)據(jù)幀檢測都正確時,cpu檢測接收位cs置位///發(fā)送數(shù)據(jù)模塊module txd( dat_in,send,reset,clk_enable4,clk, send_enable,clear4,counters,ks)。output ks。reg clk_enable,clear1,clear4,clk_enable4。 clear4=clear1。b00000001)//0 begin send=0。b00010000)//1 begin send=date_s[0]。 parity_result=parity_result + date_s[0]。 end else if(counters==839。b01010000)//5 begin send=date_s[4]。 parity_result=parity_result + date_s[0]。 end else if(counters==839。b10010000)//9發(fā)送奇偶校驗結(jié)果 begin send=parity_result。b10101111)//0 begin clear1=1。 end else if(counters==839。 endmodule /////////////////////////////////////////////////////////////////圖38當(dāng)counters指定時間時功能仿真 圖38當(dāng)counters指定時間時 解釋:由圖可明顯看出data[0]和data[1]變化,模塊功能仿真通過圖39當(dāng)counters未指定時間時功能仿真圖39當(dāng)counters未指定時間時功能仿真 UART控制器實質(zhì)上是一組計數(shù)器,由state決定計數(shù)器數(shù)據(jù)發(fā)送對象,在這里指定當(dāng)state為1時,發(fā)送到UART接收模塊,反之,發(fā)送到UART發(fā)送模塊。//state為uart狀態(tài)輸入,//clear為程序計數(shù)寄存器清零控制位output[7:0] counters。//8位程序計數(shù)寄存器always(posedge clk)//當(dāng)程序計數(shù)寄存器為零時,程序計數(shù)寄存器為零狀態(tài)寄存位置位 begin control=(!counters)? 1 : 0。 end end else begin send_enable=1。 !clear)//reset為1時,clear為1時程序計數(shù)寄存器清零 begin if(counters839。 end else begin counters=839。///波特率產(chǎn)生模塊module clk_bau(clk,t1,clk_enable)。reg t1。b00000000。 end end else begin counter1