基于FPGA的UART、USB接口協(xié)議設計
代碼中Bingo設置了多個(gè)選項的bps,根據您的需要,可以直接修改代碼,來(lái)達到自己的要求。本模塊的功能主要功能是生成兩個(gè)時(shí)鐘:
a) clk_bps : UART TXD信號線(xiàn)數據發(fā)送的波特率
b) clk_smp: UART RXD信號線(xiàn)數據接受的采樣速率,以對已波特率的16倍速度采樣,捕獲數據的中點(diǎn),在數據最穩態(tài)讀取數據,達到最大限制的穩定。
(2)TXD發(fā)送模塊
這部分代碼比較簡(jiǎn)單,因為FPGA是主控,只要根據固定的時(shí)序給數據即可。Bingo設計了一個(gè)狀態(tài)機來(lái)完成時(shí)序,狀態(tài)機代碼如下:
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
txd_state = T_IDLE;
txd_flag_r = 0;
txd = 1'b1;
end
else
begin
case(txd_state)
T_IDLE:
begin
txd = 1;
txd_flag_r = 0;
if(txd_en == 1)
txd_state = T_SEND;
else
txd_state = T_IDLE;
end
T_SEND:
begin
if(clk_bps == 1)
begin
if(txd_cnt 4'd9)
txd_cnt = txd_cnt + 1'b1;
else
begin
txd_cnt = 0;
txd_state = T_IDLE;
txd_flag_r = 1;
end
case(txd_cnt)
4'd0: txd = 0;
4'd1: txd = txd_data[0];
4'd2: txd = txd_data[1];
4'd3: txd = txd_data[2];
4'd4: txd = txd_data[3];
4'd5: txd = txd_data[4];
4'd6: txd = txd_data[5];
4'd7: txd = txd_data[6];
4'd8: txd = txd_data[7];
4'd9: txd = 1;
endcase
end
end
endcase
end
End
數據發(fā)送的狀態(tài)機設計如下:
同時(shí),為了軟件調試,數據識別等的方便,Bingo在此模塊設置了數據發(fā)送標志位。此部分主要參考了Bingo“第七章 你想干嘛——邊沿檢測技術(shù)”的方法,此處不再做累贅闡述,若有不懂請看上文。此部分代碼如下:
c++相關(guān)文章:c++教程
評論