11013|9

21

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

FPGA与单片机之间的通信 [复制链接]

想通过9根线实现单片机与fpga之间的通信,一根是时钟线,8根数据线,来一个时钟,单片机把p0口的八位数据传给fpga,结果发现fpga接到的数据不稳定
此帖出自FPGA/CPLD论坛

最新回复

学习了。。  详情 回复 发表于 2017-4-19 08:18
点赞 关注
 

回复
举报

732

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
fpga与单片机之间这么通信  一点技术含量都没有  极度不推荐 。。。

fpga内部例化一个小ram, 把fpga当做单片机的一个外设 通过地址 数据总线访问fpga  从而达到两者通讯的目的 。。。

当然楼主现在的问题,我个人感觉应该是同步异步没有处理好的原因 。

把同步的问题考虑好 应该没问题 。。。
此帖出自FPGA/CPLD论坛

赞赏

1

查看全部赞赏

个人签名学习的乐趣在于分享。
 
 

回复

255

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
嗯,异步时钟域的同步问题应该考虑……
此帖出自FPGA/CPLD论坛

赞赏

1

查看全部赞赏

 
 
 

回复

6892

帖子

0

TA的资源

五彩晶圆(高级)

4
 

正确实现这个通信,有几点需要注意;

  1. 正确操作双向数据总线;

  2. FPGA对单片机的输入信号都要做同步处理;

  3. 要设计正确的通信机制(协议);

此帖出自FPGA/CPLD论坛

赞赏

1

查看全部赞赏

个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 沙发 tx_xy 的帖子

我也遇到FPGA接收单片机数据不稳定的情况,数据中总有2-3位接收错误(Chipscope观测),用万用表测量该管脚上的电压确实是高电平,但Chipscope采样却不正确,求解!

请教大虾,FPGA对单片机的输入信号如何做同步处理?
此帖出自FPGA/CPLD论坛

赞赏

1

查看全部赞赏

 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(中级)

6
 

...

你这样做的话,应该以脉冲的形式作为握手信号,例如mcu先把第一个数据送到P0端口,然后发一个脉冲给FPGA,如果FPGA检测到这个脉冲的上升沿就接收端口上的数据,然后发信号给MCU表示接收了数据,可以发下一个数据了,但你也可以做一个握手协议,这样更方便,数据不稳定,可能是电平的问题:

/*该实例的Verilog代码模拟了握手通信的接受域,在发送域请求信号(req)有效地若干个时钟周期后,先是数据(datain)被有效锁存在输出(dataout)上,然后接收域的应答信号(ack)也处于有效状态,此后发送域撤销请求信号接收域也跟着撤销了应答信号,由此完成了一次通信

*/
module handshack(
                   clk,rst_n,
                   reg,datain,ack,dataout
                );
input clk;
input rst_n;

input reg;           //请求信号,高电平有效
input [7:0] datain;  //输入数据
output ack;          //应答信号,高电平有效
output[7:0] dataout; //输出数据,主要用于观察是否和输入一致

//-------------------------------------------------------------

//req 上升沿检测
reg reqr1,reqr2,reqr3;
always@(posedge clk or negedge rst_n)
if(!rst_n) begin
        reqr1 <= 1'b1 ;
        reqr2 <= 1'b1 ;
        reqr3 <= 1'b1 ;
end
else begin
        reqr1 <= req ;
        reqr2 <= reqr1 ;
        reqr3 <= reqr2 ;
end

//pos_req2比pos_req1延时一个时钟周期,确保数据被稳定锁存
wire pos_req1 = reqr1 & ~reqr2;    //req 上升沿标志位,高有效一个时钟周期
wire pos_req2 = reqr2 &  ~reqr3;    //req 上升沿标志位,高有效一个时钟周期

//-------------------------------------------------------------------------
//数据锁存

reg[7:0] dataoutr;

alway@(posedge clk or negedge rst_n)
  if(!rst_n) dataoutr <= 8'h00;
      else if (pos_req1)  dataoutr <= datain;   //检测到req 有效后锁存输入数据

         assign  dataout = dataoutr;
//-----------------------------------------
//产生应答信号SCK


reg ackr;
always@( posedge clk or negedge rst_n)
  if(!rst_n) ackr <= 1'b0;
  else if(pos_req2) ackr <= 1'b1;
  else if(!reg) ackr <= 1'b0;

assign ack =ackr;

endmodule

这个是特权同学深入浅出FPGA里面弄的一个握手协议例子,供参考
此帖出自FPGA/CPLD论坛

赞赏

1

查看全部赞赏

 
 
 

回复

275

帖子

0

TA的资源

纯净的硅(初级)

7
 
我是觉得楼主的通信更像:在FPGA中是一个状态机,单片机的P0口给FPGA发送不不同的状态,fpga去在做各个状态下做的事情,不算是真正意义上的通信、
此帖出自FPGA/CPLD论坛

赞赏

1

查看全部赞赏

 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(中级)

8
 
来学习下,正好用到
此帖出自FPGA/CPLD论坛
 
 
 

回复

6892

帖子

0

TA的资源

五彩晶圆(高级)

9
 

这个问题是在设计经常应用到。需要特别注意FPGA系统时钟频率,一定要高于单片机总线信号最高时钟频率。确保FPGA能正确采样到单片机总线的控制信号!

此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

10
 
学习了。。
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表