新闻中心

EEPW首页 > EDA/PCB > 设计应用 > 基于FPGA的UART、USB接口协议设计

基于FPGA的UART、USB接口协议设计

作者: 时间:2012-03-13 来源:网络 收藏

代码中Bingo设置了多个选项的bps,根据您的需要,可以直接修改代码,来达到自己的要求。本模块的功能主要功能是生成两个时钟:

a) clk_bps : TXD信号线数据发送的波特率

b) clk_smp: RXD信号线数据接受的采样速率,以对已波特率的16倍速度采样,捕获数据的中点,在数据最稳态读取数据,达到最大限制的稳定。

(2)TXD发送模块

这部分代码比较简单,因为是主控,只要根据固定的时序给数据即可。Bingo设计了一个状态机来完成时序,状态机代码如下:

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

数据发送的状态机设计如下:

12.jpg

同时,为了软件调试,数据识别等的方便,Bingo在此模块设置了数据发送标志位。此部分主要参考了Bingo“第七章 你想干嘛——边沿检测技术”的方法,此处不再做累赘阐述,若有不懂请看上文。此部分代码如下:

c++相关文章:c++教程




关键词: FPGA UART USB 接口

评论


相关推荐

技术专区

关闭