成功使用ZYNQ驱动LTC2325-16
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="tab-stops:39.5pt"><span style="font-family:Calibri,sans-serif"> <span style="font-family:宋体">这些天一直在弄</span>ZYNQ<span style="font-family:宋体">(矿板)驱动</span>LTC2325-16 ADC<span style="font-family:宋体">,感觉</span>FPGA<span style="font-family:宋体">太难了,对于我这样的新手它不像单片机那样可以“轻松”使用试错的方法通过不断修改代码来完成想要的功能,这样做真的是太太太太费时间了。这些天基本上都是在听</span>CPU<span style="font-family:宋体">风扇呼呼的响,电费多了、睡眠少了、头发也掉了不少,不过经过这几天的学习遇到很多编译错误倒是都能轻松解决了。</span></span></span></span></p><p style="text-align:justify"><span style="font-size:10.5pt"><span style="tab-stops:39.5pt"><span style="font-family:Calibri,sans-serif"> LTC2325-16<span style="font-family:宋体">是一个</span>4<span style="font-family:宋体">通道</span>16<span style="font-family:宋体">位</span>5MSPS<span style="font-family:宋体">的</span>ADC<span style="font-family:宋体">,支持串行</span>LVDS<span style="font-family:宋体">输出,时序看起来并不复杂。板子是我自己画的自己焊的,之前因为使用了劣质的</span>1117<span style="font-family:宋体">烧过电源芯片,所以我不确定它是不是好的。矿板的差分对不是成对出现的和</span>LTC2325-16<span style="font-family:宋体">连接需要通过排线转换,一旦有问题,哪哪都可能有问题。</span></span></span></span></p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="tab-stops:39.5pt"><span style="font-family:Calibri,sans-serif"> </span></span></span></p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="tab-stops:39.5pt"><span style="font-family:Calibri,sans-serif"> <span style="font-family:宋体">开始感觉很轻松就能读到</span>ADC<span style="font-family:宋体">数据,但是不稳定,经常有错误的数据,后来经过几天的调试发现原来是一对</span>LVDS<span style="font-family:宋体">时钟线的其中一条没压接好,</span>LTC2325-16<span style="font-family:宋体">能读到时钟,只是经常出错,因为时钟是</span>100MHz<span style="font-family:宋体">的,手里的示波器才</span>100MHz<span style="font-family:宋体">的带宽,看数据也比较困难,刚开始测量发现时钟的</span>n<span style="font-family:宋体">线没有输出还以为是</span>FPGA<span style="font-family:宋体">没配置好,因为对</span>FPGA<span style="font-family:宋体">不熟悉总怀疑代码没写好,各种改代码最后才发现是数据线断了。</span></span></span></span></p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="tab-stops:39.5pt"><span style="font-family:Calibri,sans-serif"> <span style="font-family:宋体">数据线接好以后读到的数据好了那么一点,不过还是不正常,后边这些天基本一起在弄</span>LTC2325-16<span style="font-family:宋体">的时序,时序看起来比较简单(是我想简单了),我没有使用官方提供的</span>verilog<span style="font-family:宋体">,因为那个代码是</span>altera<span style="font-family:宋体">的,有一些和芯片相关的代码所以才自己写。</span></span></span></span></p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="tab-stops:39.5pt"><span style="font-family:Calibri,sans-serif"> <span style="font-family:宋体">因为没法测量</span>FPGA<span style="font-family:宋体">实际输出的时序,不确定自己写的看起来非常完美的波形到底哪里不对,后来没办法了,只好使用官方提供的代码,研究它关于</span>altera<span style="font-family:宋体">相关的部分,主要是一个时钟</span>PLL<span style="font-family:宋体">的代码,一个</span>110MHz<span style="font-family:宋体">输入,</span>2<span style="font-family:宋体">个</span>55MHz<span style="font-family:宋体">,</span>2<span style="font-family:宋体">个</span>110MHz<span style="font-family:宋体">,一个</span>220MHz<span style="font-family:宋体">,一个</span>5MHz<span style="font-family:宋体">输出,</span>5MHz<span style="font-family:宋体">还有</span>55MHz<span style="font-family:宋体">和</span>110MHz<span style="font-family:宋体">都有一路做了相位偏移。昨天开始弄的,理解完了觉得没问题了发现用</span>ZYNQ<span style="font-family:宋体">弄不出来,原因是</span>vivado<span style="font-family:宋体">里的</span>clock wizard<span style="font-family:宋体">没法配置输出</span>5MHz <span style="font-family:宋体">相移</span>1.62<span style="font-family:宋体">度</span>4%<span style="font-family:宋体">占空比的时钟,占空比基本不能小于</span>40%<span style="font-family:宋体">。</span></span></span></span></p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="tab-stops:39.5pt"><span style="font-family:Calibri,sans-serif"> <span style="font-family:宋体">后来经过不断测试,发现如果输入是</span>10MHz<span style="font-family:宋体">输出也是</span>10MHz<span style="font-family:宋体">时配置可以很灵活,只要把相称和占空比乘</span>2<span style="font-family:宋体">,然后再写一个代码,把</span>10MHz<span style="font-family:宋体">输出的时钟的奇数电平设置成</span>0<span style="font-family:宋体">,功能终于可以实现了。最后的时钟树像下边这样。</span></span></span></span></p>
<p style="text-align:justify"> </p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="tab-stops:39.5pt"><span style="font-family:Calibri,sans-serif"> </span></span></span></p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="tab-stops:39.5pt"><span style="font-family:Calibri,sans-serif"> <span style="font-family:宋体">时钟的问题解决了,剩下就是改改代码,把数据通过</span>AXI-FULL<span style="font-family:宋体">发送到</span>PS<span style="font-family:宋体">端,</span>ADC<span style="font-family:宋体">的设置使用</span>AXI-LITE<span style="font-family:宋体">通过</span>PS<span style="font-family:宋体">配置,改好以后测试了一下数据,还是比较满意的。</span></span></span></span></p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="tab-stops:39.5pt"><span style="font-family:Calibri,sans-serif"> <span style="font-family:宋体">因为还没有实现</span>PS<span style="font-family:宋体">端到</span>PC<span style="font-family:宋体">的数据发送,电脑的波形显示是通过</span>JTAG<span style="font-family:宋体">实现的,</span>Xilinx SDK<span style="font-family:宋体">可以</span>XSCT<span style="font-family:宋体">输出内存数据,通过</span>mrd<span style="font-family:宋体">加地址和长度就可以把数据输出到窗口。</span></span></span></span></p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="tab-stops:39.5pt"><span style="font-family:Calibri,sans-serif"> </span></span></span></p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="tab-stops:39.5pt"><span style="font-family:Calibri,sans-serif"><span style="font-family:宋体">复制输出的数据,通过</span>EXCEL<span style="font-family:宋体">整理,然后再把十六进制转成十进制就能看到波形。开始我是这么做的,后来发现比较麻烦,就用上位机接收粘贴的数据通过代码进行整理,这样能方便很多,基本上是输出、复制、粘贴就能看到波形。再后来发现复制也比较麻烦,因为数据很长,要从头复制到结尾。最后使用</span>mrd -bin -file D:/ mem.bin 0x100 1000<span style="font-family:宋体">,把内存数据输出到文件,上位机点一个按钮然后自动在这个文件里读出</span>ADC<span style="font-family:宋体">数据,这样就能方便一些了。</span></span></span></span></p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="tab-stops:39.5pt"><span style="font-family:Calibri,sans-serif"> <span style="font-family:宋体">因为手里一直没有信号发生器,只能简单看一下采集的数据噪声大不大,前两天买了一台还没到,等设备到了再继续弄。</span></span></span></span></p>
<p> </p>
<p> </p>
<p></p>
本帖最后由 d1023 于 2020-12-21 08:45 编辑
<p>好巧, 我正要请人帮忙做 ZYNQ驱动LTC2325-16, 就在Google搜索到这个帖子了</p>
<p> </p>
<p>请问如何联系, 是否可以尝试交流一下, 我在深圳</p>
d1023 发表于 2020-12-20 22:54
好巧, 我正要请人帮忙做 ZYNQ驱动LTC2325-16, 就在Google搜索到这个帖子了
请问如何联系 ...
<p>你好,我是FPGA新手,应该满足不了你的要求</p>
<p>LTC2325-16官方提供了CPLD的verilog代码</p>
<p></p>
<p>你找个开发FPGA的把它移到ZYNQ上就可以</p>
<p>对于成手来说应该很容易</p>
littleshrimp 发表于 2020-12-21 10:57
你好,我是FPGA新手,应该满足不了你的要求
LTC2325-16官方提供了CPLD的verilog代码
你找个开 ...
<p>谢谢</p>
<p>方便发一下完整的block design截图吗</p>
奔向太平洋 发表于 2022-2-22 23:34
方便发一下完整的block design截图吗
<p>我建了2个 BD,一个是LTC2325-16的。</p>
<p></p>
<p> 另一个是ZYNQ,因为是第一次弄FPGA,这个东西写的还有很多不是很合理的地方,AXI和网络部分都参考或使用了黑金的相应工程。 </p>
<div class='shownolgin' data-isdigest='no'><p>问下楼主,这个ADC要自已建库,还是在EDA里调用? 我也正在学FPGA, 所以学习下.</p>
</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <div class='shownolgin' data-isdigest='no'>Fred_1977 发表于 2022-2-24 14:06
问下楼主,这个ADC要自已建库,还是在EDA里调用? 我也正在学FPGA, 所以学习下.
<p> </p>
<p> </p>
<p>https://www.analog.com/cn/design-center/packaging-quality-symbols-footprints/symbols-and-footprints/LTC2325-16.html</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'><p>博主您好 能发一下原理图看一下么 ?打扰您了</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>33566 发表于 2022-3-26 21:28
博主您好 能发一下原理图看一下么 ?打扰您了
<p>原理图我参考的官方评估板,拆掉CPLD和ADC驱动器</p></div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>littleshrimp 发表于 2022-3-26 23:48
原理图我参考的官方评估板,拆掉CPLD和ADC驱动器
<p>博主您好!我有个问题想咨询您一下,就是LTC2325-16 CLKOUT引脚,这个引脚的信号 参考书上说 是SCK信号的一个延迟,那么这个信号是怎么产生的呢? 我可以理解为 产生SCK以后 ADC芯片会自动延迟一段时间 然后在CLKOUT引脚 输出给FPGA么? 打扰您了</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>33566 发表于 2022-3-28 11:14
博主您好!我有个问题想咨询您一下,就是LTC2325-16 CLKOUT引脚,这个引脚的信号 参考书上说 是SCK信号的 ...
<p>我理解的CLKOUT是为了方便在DDR模式下读取数据用的。SDR模式下如果上升沿更新数据可以在下降沿读取,DDR上升和下降沿都更新数据就需要有一个延迟,在数据稳定时读取数据。</p></div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>littleshrimp 发表于 2022-3-28 11:34
我理解的CLKOUT是为了方便在DDR模式下读取数据用的。SDR模式下如果上升沿更新数据可以在下降沿读取,DDR ...
<p>在进行编程时CLKOUT属于input 输入信号,那么这个信号是怎么产生的呢?那我们在编程时该怎么配置这个引脚呢?还是说这个引脚上的信号是LTC2325芯片自动产生的,只需要把他交给FPGA就行了 感谢博主的回答,我的水平比较菜 麻烦博主了</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>33566 发表于 2022-3-28 15:58
在进行编程时CLKOUT属于input 输入信号,那么这个信号是怎么产生的呢?那我们在编程时该怎么配置这个引脚 ...
<p>CLKOUT是ADC输出给FPGA用来读取数据用的时钟,FPGA把它作为输入时钟来读数据就可以。</p>
<p>官方提供的例程里好像没有使用这个时钟,对应的时钟是FPGA自己生成的,所以它可以悬空不管。</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'> 本帖最后由 13077 于 2022-6-27 09:39 编辑
<table cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td id="postmessage_3152931">
<p>请教一下2325 IP的DATA_VALID信号时序怎么产生,data是数据输出吗</p>
</td>
</tr>
</tbody>
</table>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>littleshrimp 发表于 2022-3-28 16:32
CLKOUT是ADC输出给FPGA用来读取数据用的时钟,FPGA把它作为输入时钟来读数据就可以。
官方提供的例程 ...
<p>请教一下AD的可靠性怎么测试</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>13077 发表于 2022-7-6 19:15
请教一下AD的可靠性怎么测试
<p>你说的可靠性是指什么?</p></div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'> 本帖最后由 13077 于 2022-7-7 19:55 编辑
<p>数据准确性,为啥自己连信号发生器给的输入信号没用</p>
<p> </p>
<p> </p>
<p> </p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'><p>输入固定电压 比如0或者正负满量程看看数据是不是和预期的一样 然后再采信号发生器的数据做对比 ILA可以直接显示对应通道的波形</p></div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'><p>手册要求转换时间170ns,例程的时钟是不是太快了<br />
</p>
</div><script>showreplylogin();</script>
页:
[1]
2