名称:FPGA到ARM的通信接口设计Verilog代码VIVADO仿真
软件:VIVADO
语言:Verilog
代码功能:
设计一个通信接口,完成从FPGA到ARM的数据传输。
任务要求:
一、 数据位宽16位,传输速率为100Mb/s。
二、采用主从式通信传输(建议ARM为主机FPGA为从机)。
(1)从机向主机发送“有数据需要发送”的指令之后,从机开始传输数据。
(2)数据发送完毕之后,从机向主机发送“无数据发送”的指令。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 协议设计
从机向主机发送data_sof信号作为有数据需要发送的指令,然后从机向主机发送16位的data信号。
发送完成后,从机向主机发送data_eof信号作为无有数据需要发送的指令。
主机收到data_sof信号后发送一个sof_ack作为应答信号。
主机收到data_eof信号后发送一个eof_ack作为应答信号。
2. 工程文件
3. 程序文件
4. 程序编译
5. Testbench
6. 仿真图
部分代码展示:
//FPGA->ARM数据传输 m (2) odule data_rtx( input clk,//100MHz input rst_p,//复位 input [15:0] data_in,//待发送数据 input start,//开始信号,高电平后启动接口进行数据传输 input sof_ack,//ARM返回的应答信号,表示成功接收到启动发送指令 input eof_ack,//ARM返回的应答信号,表示成功接收到结束发送指令 output reg [15:0] data,//16位数据--连ARM output reg data_sof,//有数据需要传输指令,高电平有效--连ARM output reg data_eof//无数据发送指令,高电平有效--连ARM ); //ARM为主机 //FPGA为从机 //1、FPGA->ARM 发送传输指令 //2、FPGA->ARM 发送数据 //3、FPGA->ARM 发送无数据指令 reg [2:0] state=3'd0; parameter s_idle=3'd0; parameter s_start=3'd1; parameter s_data=3'd2; parameter s_end=3'd3; reg [7:0] data_cnt=8'd0; always@(posedge clk or posedge rst_p) if(rst_p) state<=s_idle; else case(state) s_idle://空闲状态 if(start)//接收到开始信号,高电平后启动接口进行数据传输 state<=s_start; s_start://开始状态,传输启动发送指令(有数据需要传输指令) if(sof_ack)//ARM返回的应答信号,表示成功接收到启动发送指令 state<=s_data;//发送数据 s_data://发送数据状态 if(data_cnt>=8'd10)//设每次发送10个数据 state<=s_end;//结束 s_end://无数据发送状态 if(eof_ack)//ARM返回的应答信号,表示成功接收到结束发送指令 state<=s_idle; default:; endcase
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=857
797