分享

51单片机与FPGA接口逻辑设计

 cana_xzy 2010-03-23

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

 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的干扰,这样的话通讯就会出错。

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

相当于下图的设计

 

 

通讯时序为:

 

点击看大图

 

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./wz_54842.htm

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

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

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

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

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

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

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

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

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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多