找回密码
 注册
关于网站域名变更的通知
查看: 1360|回复: 1
打印 上一主题 下一主题

 转——【FPGA开源教程连载】第十八章 线性序列机与TLV5144驱动设计

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-31 17:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Zedd 于 2019-3-31 17:26 编辑 " p. o  r' [# y8 E/ D: w2 d+ b

8 G7 R2 @- _- @% J3 S
线性序列机与TLV5144驱动设计

5 @% u% n! G) l: @& _
实验目标:1.理解线性序列机的思想
2.以此为基础设计仿真ADC芯片的时序逻辑并通过ISSP验证
实验平台:芯航线FPGA学习套件主板,芯航线串行ADDA模块
[size=0.83em]
' y2 k* {1 @! B! V: k3 `7 ]6 |8 V
[size=0.83em]
, b8 C9 F  E3 Q4 |4 w/ j
实验现象:
将串行多通道AD/DA模块接在芯航线FPGA开发板上,使用Insystem sources and probes editor设置DAC模块输出电压信号,然后使用ADC采样DAC的输出电压,将DAC输出值和ADC采样值进行比较,同时使用万用表测量DAC输出电压以验证ADC控制逻辑的正确性。
实验原理:
1.TLV1544型ADC芯片概述
       本实验使用的芯航线串行AD/DA模块上的ADC芯片为TLV1544,其是一个10位,4通道模拟数字转换器(ADC),使用SPI串行接口与控制器进行连接,该芯片具有以下基本特性:
  • 转换时间小于等于10us
  • 10位精度ADC
  • 可编程的掉电模式
  • 2.7V~5.5V宽电压范围直流供电
  • 模拟输入范围为0到VCC
  • 内建8个模拟输入通道的多路器
  • 转换完成标志信号(EOC)
  • 扩展模式下可以使用异步转换启动信号启动转换
  • 内部自测功能2 V9 {" R( _2 {5 k) s! b
TLV1544和TLV1548均是10位SAR型模数转换器,区别在于TLV1544有4个模拟输入通道,TLV1548有8个模拟输入通道。每个芯片都有一个器件选择(CS#)脚,IO时钟管脚(I/O CLK),数据输入管脚(DATA IN)和串行数据输出管脚(DATA OUT),这四个脚组成同步的串行外设接口(SPI)与微控制器(主机)进行通信。当和ti的TMS320系列的DSP进行连接时,还提供了有帧同步信号FS来表明串行数据帧的起点。 另外,该芯片还提供了一个INVCLK#信号用来给串行接口提供更多灵活的时序配置(配置CLK的有效极性)。
TLV1544除了提供高转换速度和多种控制能力,该器件还内建了一个片上的11通道的多路器用来选择8个模拟输入通道和内部三个自测通道中的任何一个通道。在通常情况下,采样和保持功能是自动进行的,在扩展采样模式下,该功能由异步采样启动信号启动。当转换结束时,转换完成信号(EOC)输出高电平来指示转换完成。
       [size=0.83em]
! q6 l. f0 i9 j6 H2 ~" V/ f9 K
18-1TLV1544/8内部功能框图
2.TLV1544型ADC芯片引脚说明:
       TLV1544芯片引脚及功能描述如表18-1所示。
[size=0.83em][size=0.83em]
& |2 g' Y: N2 H% j0 i9 }) d
1 k6 o$ R+ }% \6 h9 X: p
18-1TLV1544引脚功能描述
3.TLV1544数字接口介绍:
       IO CLK的频率最高可达10MHz,在不同的工作电压和输入阻抗及源输出阻抗的情况下,支持的最大时钟频率有差异,具体见表18-2
[size=0.83em]
$ ]3 x' ^1 k0 q# P+ u2 X; a
18-2电压及输入输出阻抗与频率关系
可以看到,在供电电压为4.5V及以上,输入电阻不超过1K,源端输出电阻不超过100欧的情况下,时钟接口的最大频率为10MHz,而在2.7V供电时,IOCLK最大频率为2.81MHz。
4.TLV1544型ADC接口时序
TLV1544支持微控制器接口模式和DSP接口模式,在微控制器接口模式下,其使用SPI接口,这里主要对微控制器接口模式进行介绍。
       微控制器与TLV1544的接口如图18-2所示,该接口使用标准的SPI接口,因此可以直接连接到微控制器的片上SPI外设上。对于FPGA来说,则可以使用逻辑按照SPI时序搭建控制电路,以实现对TLV1544的控制。
[size=0.83em]
8 }) t6 p# c& h$ A: {0 ^
18-2mcuTLV1544接口示意图
TLV1544通过SPI接口与控制器进行通信的时序图如图18-3所示:由于是使用MCU模式,因此FS信号接高电平,同时,由于时钟极性没有反转,因此INV CLK也接高电平
[size=0.83em]/ Z. }& s+ ?. s  ]7 ~; G
18-3TLV1544 SPI接口时序图
5.芯航线AD/DA模块TLV1544电路介绍
芯航线FPGA学习套件中,提供了一个多通道串行AD/DA模块。其中,AD部分所使用的芯片就是上文介绍的TLV1544,TLV1544部分电路图如图18-4所示:
[size=0.83em]! n% D3 S3 L5 ]& L7 Z) x4 K
18-4TLV1544部分电路图
这里引出除INVCLK和CSTRAT以外的所有控制和数据线,使得此该模块既可以与MCU接口,也可以与DSP接口。而FPGA由于更加灵活的时序控制能力,MCU接口时序和DSP接口时序均可以轻松实现。
6.TLV1544接口时序设计
从表18-2可看出TLV1544的转换速度与芯片供电电压和待采样信号输出阻抗有关,本实验中,直接使用AD/DA模块上的DAC模块的输出直接接到ADC模块的输入上,通过控制DAC输出不同电压值,然后比较DAC的输出与ADC采样到的值的大小,来评估ADC驱动的正确性。由于TLC5620的输出电阻较大,约为10K欧,因此需要根据TLV1544在输入源信号阻抗为10K欧,供电5V时的转换所需时间来确定IO时钟的频率,而TLV1544在1K欧,4.5V供电时的IO CLK频率最高能够达到7.18MHz,在10K欧时,速度应该更低,因此这里暂时按照2.5MHz(周期为400ns)进行设计。结合TLV1544的MCU接口时序图,按照线性序列机的设计思路,可以整理得到每个信号发生变化时对应的时刻以及此时对应的计数器的值。
表18-3为依照线性序列机的设计思想,整理得到的每个信号发生变化时对应的时刻以及此时对应的计数器的值(控制器工作时钟设置为50M)。DATA[9:0]为采样结果数据寄存器。
[size=0.83em]
; w! B* X: |- l/ b3 A
18-3时间点对应信号操作表
线性序列机计数器的控制逻辑判断依据,如表18-4所示。
[size=0.83em]
6 d& r, C/ V+ Z: c0 F/ x
18-4计数器功能判断条件
实验步骤:
       同样得到了表18-3与18-4即可开始进行TLV1544的接口逻辑的编写。TLC1520接口逻辑的模块图如图18-5所示:
[size=0.83em]
* A7 j3 I) U) G( k( y
图18-5TLV1544模块接口示意图
其中,每个端口的功能描述如表18-5所示。
[size=0.83em]8 N+ |1 N! }5 q  n! |+ u$ Q( m) w
表18-5模块端口功能描述
新建一个以名为TLV1544_CTRL的工程保存在prj下,并新建TLV1544_CTRL.v保存至rtl文件夹下。从图18-5以及表18-7就得到了端口列表:
[size=0.83em]7 s. D7 n+ S2 {

* |7 [% y  {. a6 O3 u) d
       由于此处使用为FPGA驱动而不是DSP,因此这里直接将FS置高。

0 [0 T# d; g' V# C
[size=0.83em]
5 c4 q1 o# \' }6 C' y1 O9 b
       Data_Valid相当于一个数据有效快速通知,不用等待转换完成即可。
[size=0.83em][size=0.83em][size=0.83em][size=0.83em][size=0.83em][size=0.83em]( g$ G' W3 K* m- R8 n7 Z2 n9 ]
+ C5 f1 `' |) p" q
将此文件设置为顶层,新建TLV1544_CTRL_tb.v文件。这里除了实现例化需要仿真的文件以及时钟创建,还需模拟分别在通道0与通道1各发送一次数据。主要内容如下,再次进行分析和综合直至没有错误以及警告,保存到testbench文件夹下。
激励文件中也一种层次化调用方式,此种方式只能用在激励文件中,不可综合。
[size=0.83em][size=0.83em]. i% C) q: U. Y$ \
! P: M2 j+ w4 R- i0 f
编译无误后设置好仿真脚本后进行功能仿真,可以看到如图18-6所示的部分波形文件。
[size=0.83em]+ U4 q7 M" T. m' h
18-6第一次数据收发功能仿真
       从波形中可以看出,当TLV1544_SCLK上升沿依次采到TLV1544_SDO上的数据且寄存在r_ADC_DATA中,且在第十个上升沿接收数据后,直接将其与此时r_ADC_DATA数据赋给ADC_DATA,并DATA_Valid产生一个系统时钟周期高电平。第二次传输过程可自行分析。
为了使用ISSP在线调试再次验证TLC5620模块设计的正确性,创建两个ISSPIP核,其中之一是负责监测DAC,主要配置如图18-7所示,探针是10位是为了对应TLV1544_CTRL模块ADC_DATA的输出,源是11位是为了对应TLC5620_CTRL的CtrlWord控制字;另一个是为了给ADC的通道选择赋值,主要配置图如图18-8所示。详细步骤可参考第十讲相关内容。
[size=0.83em]
6 n- w; T: u$ L, V" O& J: |( I% ~
18-7ISSP主要配置
[size=0.83em]
3 I( v  o& i, r1 y% g2 n: i+ D: L
18-8ISSP主要配置
加入工程后新建顶层文件ADDA_TEST.v,并对ISSP以及设计好的TLC5620_CTRL进行例化,这里首先为了简化信息可以一直使能DAC以及ADC的转换使能。分配引脚后全编译无误后下载工程到开发板中,并启动ISSP。可在RTLViewer下看到如图18-9所示的顶层结构图,符合预期的设计。
[size=0.83em]1 t* h! t7 N( [& `  W5 F
18-9  ADDA_TEST顶层结构图
       首先用杜邦线将AD/DA模块上的DAA0相连,在ISSP工具下将DAC控制字改为’h0FF即输出满值,并将ADC的通道确认为0即通道A0,点击循环采样可以看到ADC_DATA值为’d1020左右,在误差允许范围之内。
[size=0.83em]
/ w/ I6 {8 _9 R& q
18-10-1第一次采样数据
可再将DA与A1相连,在ISSP工具下将DAC控制字改为’h080即输出半值,并将ADC的通道确认为2即通道A1,点击循环采样可以看到ADC_DATA值为’d510左右,也在误差允许范围之内。

4 P) }2 I- t; B- e  n+ X
[size=0.83em]
( Z$ h$ }9 G( Y$ A
18-10-2第二次采样数据
       这时如果DACADC硬件连接方式与设置不一致,如下图应当将DAA1相连,实际没有连接,则ADC_DATA值为’d13左右,认为是空值,符合设计规则。
[size=0.83em]: l8 A# p) s6 I
18-10-2第二次采样数据
       为了人为控制ADC的转换进程,可用按键来使能Do_Conv信号,此处不再详述,可自行编写。
这样就完成了一个DAC的设计 本节再次学习了线性序列机LSM的用法,并编写了一个SPI接口的DAC。

( J5 T$ d5 I3 E: p' t  P1 d- I, }: f, P; o/ D5 S7 V

" _! @9 F: |, Y" p6 D
$ `# v; T1 _! E! Y8 D- O
小梅哥
芯航线电子工作室
& I$ i% `' _/ S! T* T. N4 @5 n

' |* E$ m0 B+ f) Z
游客,如果您要查看本帖隐藏内容请回复
# E% `" q- l3 d! L' ~! n7 U( ^0 ]
* w& I+ Z* L1 ~  V
" m2 W* G0 X. D4 |4 N1 A
) R1 s/ ?, G' Y1 W3 h6 s; |3 W
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-30 14:18 , Processed in 0.171875 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表