原创 51单片机与FPGA接口逻辑设计(原创)

2009-2-6 20:32 12002 12 17 分类: FPGA/CPLD

51单片机与FPGA接口逻辑设计(原创)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 FPGA可以嵌入PicoblazeMicroBlaze软核,进行控制,但这样做的话显然大材小用,完全可以不用嵌入软核,而用我们熟悉的51单片机。


至于51单片机与FPGA接口的协议可以自己设计,下面讨论的是51单片机控制DDS的相位累加器。


51单片机通过串口接受PC机给出的DATA(相位累加值),再通过与FPGA的通信,告诉FPGA相位累加模块(Accumulator)累加值。MCU_FPGA所做的工作是把收到的数据出入模块内的ROM里,使得改变模块里的ROM地址,就能改变输出的累加值。FPGA_MCU通讯的时序为:



 


点击看大图


 


     DIN48位累加值串行输入


     CLK_WR输入写信号时钟,DIN的数据稳定后,CLK_WR上升沿写入FPGA内部的寄存器,寄存器的数据移位。


     DIN_PRO写保护,DIN_PRO=0时,模块内ROM的输出随地址变化而变化;DIN_PRO=1,模块内ROM的输出锁存,输出保持DIN_PRO=0ROM地址所对应的ROM值。


     WR写信号,WR=1时,把FPGA内部寄存器的值写入此时ADDRESS[2:0]地址的ROM空间。


     ADDRESSROM地址位,3根地址线决定ROM深度为8ROM的大小为248x8 bit


 


实际中,如果采用上面这个时序,大部分时间都出错,这是因为FPGA的时钟是100MHz,周期就是10ns,而51单片机晶振为12MHz左右,指令周期为1MHz,也就是1μs,是极其容易产生大于10ns的干扰,这样的话通讯就会出错。


要解决这个问题,可以让写信号时钟和写信号都差分,只有差分时,写时钟和写信号有正负时才有效,这样才不容易经常出错。


相当于下图的设计



 


ab3d0b90-b404-4323-88fe-176f964a6841.JPG


 


通讯时序为:



 


点击看大图


 


DINCLK_WR+CLK_WR-DIN_PROWR+WR-ADDRESS一共用了7条线,可以用51单片机的P1口线。其中ADDRESS只有1条,决定DDS频率寄存器只有两个,存两个相位累加字,ADDRESS决定DDS采用哪个相位累加字,从而决定DDS的输出频率,ADDRESS0变到1或从1变到0DDS频率变化。


写信号时钟CLK_WR+为正,CLK_WR-为负时,写入DIN的值,所以CLK_WR+CLK_WR-的逻辑关系。


写信号WR+为正,WR-为负时,FPGA内部寄存器的值写入此时ADDRESS地址所对应的ROM。所以WR+WR-也是一个的关系。


实验证明采用这种时序通讯时很少出现误码。


 


 


PS:很多时候高电平有效很容易受到干扰,因为干扰通常都是把信号从低拉到高。而低电平有效不容易收到干扰,因为干扰不太可能把信号电平从高拉到低。采用差分的话就更能保证数据的正确,因为干扰通常都是把正管脚从低拉到高,而负管脚保持高电平不变高电平不变,此时信号相0,无效。详细可以看差分信号抗干扰相关资料。


 


 


参考资料:


1MCS-51单片机与CPLD/FPGA接口逻辑设计


http://www.laogu.com/wz_54842.htm


2)基于FPGA8051微控制器接口实现-与非网


http://www.eefocus.com/html/08-11/1171326011159H4vQ.shtml


3dspfpga如何实现通讯最优? -- EDN电子设计技术


http://bbs.ednchina.com/showtopic.aspx?id=92478


4)锁存器与触发器的verilog描述


http://linux.chinaunix.net/bbs/archiver/tid-1019408.html


532位带锁存移位寄存器(verilog


http://q.blog.sina.com.cn/einfo/blogfile/41904063010097u7&dpc=1


6)关于类似373锁存器与162245收发器的Verilog代码问题


http://edacn.net/html/34/t-117934.html

文章评论5条评论)

登录后参与讨论

用户1385927 2010-1-14 09:40

我想问下,是关于单片机传输的数据与数据所对应的地址的。如果单片机的地址与数据是一一对应的,那么就得有很多个地址了,如果地址是随机的,即随便一个空地址都可以存入任何一组数据,那这样地址就可以用很少了,而不会出现很多地址空着却不能存别的数据问题,第二种选择更好,这个如何解决?

coyoo 2009-8-18 13:58

需要解决的问题是如何通过GUI调用Altera的quartus_stp等shell?!!!!!!!!!

tengjingshu_112148725 2009-2-10 21:49

你认真看我文章,里面CLK_WR就是你所谓的“时钟”,是由单片机给的,但你不保证没干扰,如果这个信号管脚有干扰的话,就会有误码了。

用户142112 2009-2-10 19:01

不是移位寄存器器的不需要FPGA的时钟,它锁存数据只需要一个信号的上升沿,而这个信号由单片机提供,你只要在单片机里准备好一位数据,然后在移位寄存器的“时钟”上给一个上升沿就行。

tengjingshu_112148725 2009-2-10 10:24

你这样的话,干扰会很大吧,因为FPGA的时钟脉冲都很快,我spartan-3E用的是50MHz,这样的话,20ns上升沿检测一次,但单片机随随便便一个干扰都会大于20ns,这样的话,FPGA就会误码了,所以我才差分通讯。

用户142112 2009-2-8 11:53

我记得我做这个的时候用了一个移位寄存器,用单片机的两个pin脚就可以给FPGA发送数据了,当然单片机得发送32个脉冲(我的累计值最大32位)
相关推荐阅读
藤井树 2015-10-12 14:43
印制电路板的抗干扰设计 zz
印制电路板的抗干扰设计     作者:中船重工集团第707所 肖麟芬   摘   要:本文以印制电路板的电磁兼容性为核心,分析了电磁干扰的产生机理...
藤井树 2013-10-22 15:32
2010.5.30 黄草梁上包饺子一日登山活动——摘韭菜篇
        上次桃花节的时候也有野韭菜,那时候的我连草和韭菜叶分不清,才回去的韭菜也不敢吃,哈哈,这次可算真正见识了韭菜,黄草梁也叫韭菜梁,因为满山遍野都是野韭菜而闻名,比较圆比较粗的就是野韭...
藤井树 2013-10-22 15:28
2010.5.30 黄草梁上包饺子一日登山活动——包饺子篇
摘韭菜回来,大家已经忙开了 我也装模作样地“工作着” 哈哈,还不让我包,包饺子是技术活,一定要皮薄馅厚才有资格包,像我这样的只能旁观了 摘的韭菜应该足够了,旁边那个袋子是我摘来带回学校的 ...
藤井树 2013-08-09 15:19
datasheet下载网站整理(查IC芯片手册)【原创】
*************************************************************************         作为电子工程师,芯片的dat...
藤井树 2010-06-04 00:21
陈伟宁王辉一家捐助渠道(北京菲亚特—英菲尼迪)
       王辉的最新消息请关注 http://chenweining.org/       目前事故责任认定已经出来了——陈家全责。        发信人: program (程序), 信区: D...
藤井树 2010-06-01 13:43
2010.5.30 黄草梁上包饺子一日登山活动——美景篇
这天不得不说的是天空,蓝蓝的天空,白白的云    绿油油的山脊  我、洪涛哥哥、huangna妹妹还有她同事小艾走在黄草梁上    在蓝天白云下合影       阳光照过来,景色真美 象鼻山,走不...
我要评论
5
12
关闭 站长推荐上一条 /2 下一条