Lattice Blog

Share:

连接SPI器件(第二篇)

Intefacing_with_SPI_Devices_Part_2
Posted 09/23/2021 by Eugen Krassin

Posted in

LEC2 Workbench系列技术博文主要关注莱迪思产品的应用开发问题。这些文章由莱迪思教育能力中心(LEC2)的FPGA设计专家撰写。LEC2是专门针对莱迪思屡获殊荣的低功耗FPGA和解决方案集合的全球官方培训服务供应商。

莱迪思CrossLink™-NX FPGA拥有丰富的特性,可加速实现高速和低速接口。本文(系列博文的第二篇)描述了使用CrossLink-NX FPGA连接基于SPI的外部组件。第一篇博文介绍了使用两个时钟域实现SPI接口。本文将介绍使用单个时钟域实现连接ADC(亚德诺半导体公司的 ADC AD7476)的SPI接口。两个案例中呈现了两种截然不同的实现接口的方法。

一个时钟域的实现方案(dac_1c)
单个时钟SPI接口方案的实现如图1所示。
figure_1

图1:单个时钟域SPI接口的实现

单个时钟域SPI实现的思路与两个时钟域非常相似。这里为了便于演示没有使用PLL。同时,也不需要sync_stage模块。由于是单个时钟,需要clock_generator来生成dac_sck所需的时钟下降沿条件,dac_sck则用作状态机dac_fsm的触发条件。

clock_generator模块

图2所示的clock_generator模块产生时钟信号dac_clk以及显示dac_sck的下降沿。图 3 显示了 dac_sclk 和 edge_low 的关系。

figure_2

图2:clock_generator模块框图
fdigure_3

图3:单个时钟域dac_fsm状态机的控制结构
在转换信号被识别后,bit_count计数器加载值15。每当edge_low生效时,串行数据在时钟信号CLK_120的上升沿输出到dac_sdata上。传输16个数据位后,dac_fsm de再次发出就绪信号并等待下一个转换信号。

约束单个时钟域解决方案的设计

1. 约束时钟CLK_120
code_1

2. 约束dac_clk
连接到dac_sck端口的时钟信号由clock_generator生成。CLK_120和dac_sck之间的关系为4分频。
code_2

3. 约束DAC输入/FPGA输出
时间值t4、t5和t6描述了外部模块的setup/hold要求。这些要求使用set_output_delay约束进行描述。由于是单时钟域,因此需要多周期约束。
code_3

运行单个时钟域解决方案的时序分析
正如预期那样,时序分析报告在dac_sdata输出信号上显示出了相同的性能数据。

code_4

总结

单个时钟域的方法使用了单个时钟分配网络,由于不需要同步阶段与高级功能通信,因而具有设计上的优势。

该项目(dac_1c)以及两个时钟域的项目均可通过邮箱info@lec2-fpga.com索取。

Eugen Krassin是莱迪思教育能力中心(LEC2)的总裁兼创始人。

Share:

Like most websites, we use cookies and similar technologies to enhance your user experience. We also allow third parties to place cookies on our website. By continuing to use this website you consent to the use of cookies as described in our Cookie Policy.