基于FPGA的UART接口模塊設計
發送模塊由發送控制進程、寫數據進程、并/串轉換進程、狀態操作進程等進程構成。其中,最主要的是發送控制進程,在發送控制進程中聲明了一個6比特的變量scit_v,由它的取值(狀態機)狀態來控制整個發送過程。scit_v被分為高四位的sh_t和低兩位的sl_,tscit_v在系統復位后被賦初值28(011100B),每來一個時鐘scit_v增量,每來四個時鐘sh_t增量,當sh_t為0111B時發送起始位,sh_t為1000~1111B時發送8比特的數據。下面給出的是發送控制進程和發送接收數據進程的原代碼:
-----數據發送控制進程-----
PROCESS(clk,reset)
variablescit_v:integerrange0to63;
variablescit_s:std_logic_vector(tdownto0);
BEGIN
IF(reset=0')'THEN
scit_v:=0;--000000
ELSIF(clkE'VENTANDclk=1')'THEN
IF(scit_v=27)THEN
IF(tdEMPTY_s=0''ANDwr=1')'THEN
scit_v:=28;--sci_v=011100
ELSE
scit_v:=0;
ENDIF;
ELSE
scit_v:=scit_v+1;
ENDIF;
ENDIF;
scit_s:=conv_std_logic_vector(scit_v,6);
scit=TO_STDULOGICVECTOR(scit_s);
ENDPROCESS;
------數據的串行發送-----
PROCESS(sh_t)
BEGIN
CASEsh_tIS
WHEN0111=>txd=0';'
WHEN1000=>txd=din_latch(0);
WHEN1001=>txd=din_latch(1);
WHEN1010=>txd=din_latch(2);
WHEN1011=>txd=din_latch(3);
WHEN1100=>txd=din_latch(4);
WHEN1101=>txd=din_latch(5);
WHEN1110=>txd=din_latch(6);
WHEN1111=>txd=din_latch(7);
WHENOTHERS=>txd=1';'
ENDCASE;
ENDPROCESS;
圖3給出的是發送數據的仿真圖。當CS和WR有效時寫入數據55H,同時EMPTY被置成無效狀態,開始數據的發送,從圖中可以看到TXD上電平的變化過程,當發送結束后EMPTY變為有效。

圖3 發送數據的仿真波形












評論