银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-07-03 | gingko | 初次建立 |
1、在每个SCL的上升沿锁存数据并将数据拼接成完整的字节,其代码如下:
always@(posedge scl or negedge rst_n) if(!rst_n) begin i <= 5'd0; data <= 64'd0; data_in <= 64'd0; rx_ack <= 1'd0; end else if(rx_en) begin case(i) 5'd0,5'd1,5'd2,5'd3,5'd4,5'd5,5'd6,5'd7;//移位完成数据接收 begin i <= i + 1'd1; rx_ack <= 1'd0; data_in <= {data_in[62:0],sda}; end 5'd8: begin if(data_in[7:0] == 8'h0d) begin i <= 5'd9; rx_ack <= 1'd1; data <= data_in; end else begin i <= 5'd0; end end 5'd9:begin rx_ack <= 1'd0; i <= 5'd0; end default:i <= 5'd0; endcase end
2、在每个读命令到来时发送GINGKO,其代码如下:
always@(negedge scl or negedge rst_n) if(!rst_n) begin j <= 4'd0; send_data <= 1'd1; tx_ack <= 1'd0; tx_cnt <= 3'd0; data_out <= GINGKO; end else case(j) 4'd0,4'd1,4'd2,4'd3,4'd4,4'd5,4'd6,4'd7: //移位输出数据 begin if(tx_en) begin j <= j + 1'd1; {send_data,data_out[47:1]} <= data_out; tx_ack <= 1'd0; end end 4'd8:begin if(tx_cnt == 3'd5) //判断最后一个字节,停止发送 begin j <= j + 1'd1; tx_ack <= 1'd1; tx_cnt <= 3'd0; end else begin j <= 4'd0; tx_ack <= 1'd0; tx_cnt <= tx_cnt + 1'd1; end end 4'd9:begin j <= 4'd0; tx_ack <= 1'd0; data_out <= GINGKO; end 4'd10:begin j <= 4'd0; tx_ack <= 1'd0; end endcase
图14-3
六、实验现象
串口命令发送格式 | ARM_LED现象 | FPGA_LED灯现象 |
LEDR\CR\LF | 红灯亮 | 红灯亮 |
LEDG\CR\LF | 绿灯亮 | 绿灯亮 |
LEDB\CR\LF | 蓝灯亮 | 蓝灯亮 |