FPGA到ARM的通信接口设计Verilog代码VIVADO仿真

名称:FPGA到ARM的通信接口设计Verilog代码VIVADO仿真(文末获取)

软件:VIVADO

语言:Verilog

代码功能:

设计一个通信接口,完成从FPGA到ARM的数据传输。

任务要求  

一、 数据位宽16位,传输速率为100Mb/s;

二、采用主从式通信传输(建议ARM为主机FPGA为从机)

(1)从机向主机发送“有数据需要发送”的指令之后,从机开始传输数据

(2)数据发送完毕之后,从机向主机发送“无数据发送”的指令

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

源代码

 扫描文章末尾的公众号二维码

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值