FPGA用MMCM锁相环配置差分时钟通过SPI驱动4通道数字电位计AD8403详解(二)

一:AD8403讲解
在上一篇中介绍完SPI逻辑代码以后,在进行一下AD8403的讲解(目前AD8403市面上还没有详细的讲解代码),AD8403是四通道26位,数字控制可变电阻器件,内部有4个可变电阻和移位寄存器。SPI传过来的10位数据串行发送到寄存器。其中SPI时序图如图1。

 

图1 spi时序图

图中的一些符合的介绍:
输入时钟脉冲宽度Tch,Tcl(时钟高低电平)最小建立时间为10ns.
数据建立时间 Tds最小建立时间为5ns.
数据保持时间Tdh最小建立时间为5ns.
CS建立时间Tcss最小建立时间为10ns.
CS高电平脉冲库宽度Tcsw最小建立时间为10ns.
复位脉冲宽度 Trs最小建立时间为50ns.
      上面这些数据放在这里主要是为了提醒SPI的速率是有限制的,例如这个AD8403在用SPI传输数据的时候SCK最高只能为50MHz.从上面的时序图里面可以看出一共10位数据,高位数据在前,低位数据在后,并且传输数据时候,CS端会拉低,在系统时钟上升沿的时候去采集SDI的数据,A1 和A0位位地址位,D7~D0为数据位。决定通道数的公式其实是

通道数=A1*2+A0+1     

也就是说单通道要求A1为0,A0为0即可,双通道要求A1为0,四通道要求A1为1,A0为1,所以在代码里面我发送的测试数据中A1 A0分别设置为11.后八位ff表示调解到最大,我在代码中设所要发送的数据的后八位D7 D6 D5 D4 D3 D2 D1 (2进制) 为1010_0101。
二:激励测试代码的讲解
     代码书写完成以后,需要进行仿真,进行完仿真之后才能上板验证,这样就在仿真验证的时候就有可能发现很多问题,减少了后续的麻烦。Vivado中仿真代码写在Simulation Sources下,在激励代码中主要就是为主代码提供虚拟的时钟和观测主代码里面的一些变量,所以一般激励代码都是先例化主程序的变量,我的主程序为SPI_MasterToSlave例化为下图2,我采用了通过名称关联的方式去例化了主代码(我建议大家一般在例化端口映射中采用名字关联的方式,在实际工程中我们就发现这种方式不易出错,并且如果一些关键并没有用到直接空白就行,就像我代码中的CS端口,我如果不想在激励代码中提醒,但是我又采用的是名字关联,完全可以改成.CS( )的形式)。

图 2 激励代码

       其中initial语句块,表示在代码中仅仅执行一次,里面的#20 表示延时20个最小时钟单位以后再去执行。写完例化代码以后就可以进行仿真了,仿真时候可以看到下图3的仿真图,

图 3 仿真结果

        图3和官方给的时序图一致,这样基本上就可以说明代码书写正确。之后就可以设置管脚约束,然后生产Bit文件或者MCS文件烧录进板卡上,我生成Bit文件以后烧录进板卡上,通过示波器测试发现实际效果和代码一致。示波器观测的SCK图如下图4.

图 4 示波器观测SCK

         到此处这个代码就书写验证完了,代码我全部上传到网站供大家参考学习交流,如果有写的不对的地方请大家指正,共同进步,谢谢。
---------------------
作者:lllxxx111
链接:https://bbs.21ic.com/icview-3281792-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值