RS485接口收发测试FPGA读写实验Verilog逻辑源码Quartus工程文件+文档说明资料,FPGA为CYCLONE4系列中的EP4CE6E22C8. 完整的工程文件,可以做为你的学习设计参考。
实验任务和现象
任务:使用两块开发板,一块用作发送,一块用作接收。通过4个按键改变数据,并用LED将发送和接收的数据显示出来。
现象:两块开发板LED显示的效果一样,并且按下不同的按键,可以改变LED的显示,同时接收的板子接到数据后改变LED显示。
•5、设计思路
我们依旧采用串口的设计思路,设计程序,但因为
MAX485是半双工器件,所以需要接收和发送状态切换,有两个时能端,我们的开发板,将两个接到一起用一个引脚控制。
我们以串口发送为例:
以波特率9600为例子说明,波特率9600接收一个bit的时间为1s/9600=104us,即每隔104us发送一个数据。
module RS485_Revc (
input sys_clk ,
input sys_rst_n ,
input RO ,
output wire RE_DE ,
output reg [7:0] LED
);
/***************reg define****************/
reg [7:0] buff ;
reg [7:0] data_out ;
reg [15:0] counter ;
reg rxd_din1 ; //uart rxd input ;
reg rxd_din2 ; //uart rxd input ;
reg rxd_negedge_sig_flag ;
/***************wire define***************/
wire rxd_negedge_sig ;
/*******************************************************************************************************
** Main Program
**
********************************************************************************************************/
assign RE_DE = 1'b0;
always @ (posedge sys_clk or negedge sys_rst_n) begin
if ( sys_rst_n ==1'b0 ) begin
rxd_din1 <= 1'b0;
rxd_din2 <= 1'b0;
end
else begin
rxd_din1 <= RO ;
rxd_din2 <= rxd_din1;
end
end
assign rxd_negedge_sig = (~rxd_din2) &(rxd_din1);
always @ (posedge sys_clk or negedge sys_rst_n) begin
if ( sys_rst_n ==1'b0)
rxd_negedge_sig_flag <= 1'b0;
else
rxd_negedge_sig_flag <= rxd_negedge_sig;
end
always @ (posedge s