发新帖本帖赏金 30.00元(功能说明)我要提问
返回列表
打印

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

[复制链接]
1042|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
[url=home.php?mod=space&uid=760190]@21小跑堂 #有奖活动#[/url] #申请原创#
一: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
         到此处这个代码就书写验证完了,代码我全部上传到网站供大家参考学习交流,如果有写的不对的地方请大家指正,共同进步,谢谢。
——————2023年2月3日写于北京。

SPI_MasterToSlave和激励代码.zip

1.47 KB

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 30.00 元 2023-02-08
理由:恭喜通过原创审核!期待您更多的原创作品~

评论
21小跑堂 2023-2-8 10:35 回复TA
结合时序图,以FPGA完成AD8403的通信,通过仿真加实机测试,完成此次试验。 

相关帖子

发新帖 本帖赏金 30.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

71

帖子

4

粉丝