首页 > 编程知识 正文

FPGA UART串口通信协议及其代码,51单片机串口通信协议

时间:2023-05-04 15:02:25 阅读:208176 作者:1070

前几天刚开始学习FPGA,正好学到UART通信,记录一下,学习的板子目前是黑金的ep4ce15f17的核心板,新买的板子还没到先凑合这。
接下来是正题UART通信协议,主要是通过状态机编写

发送部分之一

//状态机always@(*)begincase(state)S_IDLE:if(tx_data_valid == 1'b1)next_state <= S_START;elsenext_state <= S_IDLE;S_START:if(cycle_cnt == CYCLE - 1)next_state <= S_SEND_BYTE;elsenext_state <= S_START;S_SEND_BYTE:if(cycle_cnt == CYCLE - 1 && bit_cnt == 3'd7)next_state <= S_STOP;elsenext_state <= S_SEND_BYTE;S_STOP:if(cycle_cnt == CYCLE - 1)next_state <= S_IDLE;elsenext_state <= S_STOP;default:next_state <= S_IDLE;endcaseend


接收部分之一

always@(*)begincase(state)S_IDLE:if(rx_negedge)next_state <= S_START;elsenext_state <= S_IDLE;S_START:if(cycle_cnt == CYCLE - 1)//one data cycle next_state <= S_REC_BYTE;elsenext_state <= S_START;S_REC_BYTE:if(cycle_cnt == CYCLE - 1 && bit_cnt == 3'd7) //receive 8bit datanext_state <= S_STOP;elsenext_state <= S_REC_BYTE;S_STOP:if(cycle_cnt == CYCLE/2 - 1)//half bit cycle,to avoid missing the next byte receivernext_state <= S_DATA;elsenext_state <= S_STOP;S_DATA:if(rx_data_ready) //data receive completenext_state <= S_IDLE;elsenext_state <= S_DATA;default:next_state <= S_IDLE;endcaseend


顶层连接

最终的效果为每1秒钟发送一次HELLO ALINXrn
期间可以发送任意其他字符给PC

最后提供一个直接修改FPGA型号的方法(13.0版本)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。