写在前面
本文是本系列的第六篇,本文主要介绍FPGA常用运算模块-DDS信号发生器,xilinx提供了相关的IP以便于用户进行开发使用。
简介
数字合成器 (DDS) 编译器内核通过 AXI4-Stream 兼容接口实现了高性能、优化的相位生成和相位到正弦曲线电路。IP源可用于许多应用的正弦波形。 DDS 由相位发生器和 SIN/COS 查找表(相位到正弦波转换)组成。 这些部件可单独使用或使用此内核组合使用。
概述
直接数字合成器(DDS)或数控振荡器(NCO)是许多数字通信系统中的重要部件。正交合成器用于构造数字下变频器和上变频器、解调器以及实现各种类型的调制方案,包括PSK(相移键控)、FSK(频移键控)和MSK(最小移位键控)。数字生成复数或实数正弦波的常用方法采用查找表方案。查找表存储正弦曲线的样本。数字积分器用于生成合适的相位参数,该相位参数由查找表映射到所需的输出波形。简单的用户界面接受系统级参数,如所需的输出频率和生成波形的杂散抑制。
特性
相位发生器和 SIN/COS 查找表可以单独生成或与可选抖动一起生成,以提供完整的 DDS 解决方案。
- 光栅化功能消除了相位截断造成的相位噪声。
- 正弦、余弦或正交输出。
- 可选的每通道累积相位重新同步。
- 查找表可以存储在分布式 RAM 或块 RAM 中。
- 可选的相位抖动扩展了谱线能量,以获得更大的无杂散动态范围 (SFDR)。
- 相位抖动或泰勒级数校正选项使用最少的 FPGA 资源提供高动态范围信号。 支持从 18 dB 到 150 dB 的 SFDR。
- 多达 16 个独立的时分复用通道。
- 使用高达 48 位相位累加器和 DSP Slice 或 FPAGA 逻辑选项的精细频率分辨率。
- 3 位到 26 位有符号输出采样精度。
IP框图
下图提供了DDS编译器IP的框图。核心由两个主要部分组成,一个相位发生器和一个正弦/余弦LUT,可以单独使用,也可以与可选抖动发生器一起使用,以创建DDS功能。支持时分(TDM)多信道能力,具有独立可配置的相位增量和偏移参数。
相位发生器
相位发生器由一个累加器和一个可选的加法器组成,以提供相位偏移的加法。当核心定制时,相位增量(PINC)和相位偏移(POFF)可以独立配置为固定、可编程(使用配置通道)或流式(使用输入相位通道)。
当设置为固定时,DDS输出频率在核心定制时设置完成后无法调整。
当设置为可编程时,CONFIG channel TDATA(配置信道TDATA)字段有一个子字段用于相关输入(PINC或POFF),或者如果两者都被选择为可编程,则两者都有。如果PINC和POFF均未设置为可编程,则没有配置通道。
设置为流式传输时,输入相位通道TDATA字段有一个子字段用于相关输入(PINC或POFF),如果两者都被选择为流式传输,则两者都有。如果PINC和POFF均未设置为流式,且磁芯配置为具有相位发生器,则不存在输入相位通道。
当PINC设置为stream模式时,可以配置可选的重新同步流输入。断言时,该信号重置相关信道的累积相位。
选择光栅化模式时,输入或配置的PINC和POFF的硬件值必须为0到模数-1。这相当于一个完整的圆。因此,对于负PINC或POFF值,将模量添加到所需的负值,以映射到所需的范围。例如,模数=100时,所需范围为0到99。对于该模量,-90°的角度为-25。加100等于75(270°)。
使用系统参数时,PINC和POFF不是直接输入的,而是根据输入输出频率和相位角计算得出的。注意,对于较小的模数值,可用值相距相对较远,因此实际输出频率或相位角可能与“附加摘要”选项卡中显示的所需值存在显著差异。
SIN/COS LUT
当仅配置为SIN/COS LUT时,不实现相位发生器,相位输入信号使用输入相位通道输入,并使用查找表转换为正弦和余弦输出。利用正弦波的对称性可以实现高效的内存使用。核心可以配置为仅正弦输出、仅余弦输出或两者(正交)输出。每个输出都可以独立配置为否定。使用可选的泰勒级数校正可以提高精度。它利用FPGA系列上的DSP片,支持它们以高速操作实现高SFDR。
Phase Generator and SIN/COS LUT (DDS)
相位发生器与正弦/余弦LUT结合使用,以提供相位截断DDS或泰勒级数校正DDS。可在两个模块之间添加可选抖动发生器,以提供相位抖动DDS。
端口描述
DDS IP的引脚如下图所示。
端口名 | 输入输出 | 是否可配置 | 描述 |
---|---|---|---|
aclk | Input | No | 上升沿时钟 |
aclken | Input | Yes | 高时钟使能 |
aresetn | Input | Yes | 低同步清除。总是优先于aclken。aresetn必须拉低至少两个周期 |
s_axis_config_tvalid | Input | Yes | 配置通道的TVALID |
s_axis_config_tready | Output | Yes | 配置通道的TREADY |
s_axis_config_tdata | Input | Yes | 配置通道的TDATA |
s_axis_config_tlast | Input | Yes | 配置通道的TLAST |
s_axis_phase_tvalid | Input | Yes | 输入相位通道的TVALID |
s_axis_phase_tready | Output | Yes | 输入相位通道的TREADY |
s_axis_phase_tdata | Input | Yes | 输入相位通道的TDATA |
s_axis_phase_tuser | Input | Yes | 输入相位通道的TUSER |
s_axis_phase_tlast | Input | Yes | 输入相位通道的TLAST |
m_axis_phase_tvalid | Output | Yes | 输出相位通道的TVALID |
m_axis_phase_tready | Input | Yes | 输出相位通道的TREADY |
m_axis_phase_tdata | Output | Yes | 输出相位通道的TDATA |
m_axis_phase_tuser | Output | Yes | 输出相位通道的TUSER |
m_axis_phase_tlast | Output | Yes | 输出相位通道的TLAST |
m_axis_data_tvalid | Output | Yes | 输出相位通道的TVALID |
m_axis_data_tready | Input | Yes | 输出相位通道的TREADY |
m_axis_data_tdata | Output | Yes | 输出相位通道的TDATA |
m_axis_data_tuser | Output | Yes | 输出相位通道的TUSER |
m_axis_data_tlast | Output | Yes | 输出相位通道的TLAST |
event_s_phase_ tlast_missing | Output | No (But leave unconnected to remove associated circuitry) | 当最后一个通道(在多通道配置中)的s_axis_phase channel传输未断言tlast时断言。 |
event_s_phase_ tlast_unexpected | Output | No | 当TLAST被断言用于传输到s_axis_phase channel(不是最后一个信道)(在多信道配置中)时被断言。 |
event_s_phase_ chanid_incorrect | Output | No | 当通道字段s_axis_phase channel(中TUSER的子字段)与通道号的内部预期不一致时断言。 |
event_pinc_invalid | Output | No | 当要累积的PINC值超出范围时断言。仅适用于光栅化配置。 |
event_poff_invalid | Output | No | 当要累积的POFF值超出范围时断言。仅适用于光栅化配置。 |
event_phase_ in_ invalid | Output | No | 当相位_In的值超出范围时断言。仅适用于光栅化和SIN_COS_LUT配置。 |
event_s_config_ tlast_missing | Output | No | 当最后一次传输(针对最后一个通道)到s_axis_config_channel通道时未伴随TLAST断言时断言。 |
event_s_config_ tlast_unexpected | Output | No | 当传输到s_axis_config_channel的传输不是与最后一个通道关联的传输时,已断言TLAST。 |
DDS理论
DDS Compiler 内核的标准模式使用相位截断,如下图所示:
积分器(组件 D1 和 A1)计算通过查找表 T1 映射到正弦曲线(可能是复数)的相位斜率。 量化器 Q1 简单地截断,接受高精度相位角并生成如图所示角度的较低精度表示。 该值被提供给执行从相空间到时间的映射的查找表的地址端口。通过从查找表中调用正弦曲线样本形成的信号的保真度受到过程的相位和幅度量化的影响。 查找表的深度和宽度分别影响信号的相位角分辨率和幅度分辨率。
直接数字合成器使用具有适当查找表的寻址方案来形成任意频率正弦曲线的样本。 如果需要interwetten与威廉的赔率体系 输出,DDS 会将这些样本提供给数模转换器 (DAC) 和低通滤波器,以获得具有特定频率结构的模拟波形。 当然,样本也常直接用于数字领域。 查找表传统上存储余弦和正弦波的均匀间隔样本。 这些样本代表长度为原型复数正弦曲线的单个周期,并对应于正弦曲线参数的特定值,如下所示:
可以利用基础波形中的四分之一波对称性来构建使用缩短表的 DDS。 在这种情况下,量化相位角的两个最高有效位用于执行象限映射。 由于内存需求被最小化,这种实现导致资源效率更高的实现,提供更少的 FPGA 块 RAM 或减少的分布式内存。 根据内核定制参数,DDS 内核会在适当的时候自动采用四分之一波或半波对称。
DDS 的光栅化操作模式不会截断累积相位。光栅化操作适用于所需频率是系统时钟的有理部分的配置(输出频率 = 系统频率 * N/M,其中 0 < N < M)。 支持从 9 到 16384 的 M 值。 SIN/COS LUT 被相应地配置为从 0 到 M-1 的值,它描述了一个完整的圆。 因为在光栅化操作模式中没有相位截断,所以不需要抖动或泰勒校正,因为它们减轻了相位截断的影响。 在光栅化操作中,相位噪声显着降低。 因此,输出相角分辨率和幅度分辨率仅由LUT表输出宽度决定。 在光栅化模式下,在适用的情况下利用象限对称来减少内存使用。
输出频率
介绍在标准模式或光栅化模式下使用内核时的输出频率。
标准操作模式
DDS 波形的输出频率fout是系统时钟频率 、相位宽度(即相位累加器中的位数 () 和相位增量值 :
的函数。 以HZ为单位的输出频率定义为:
计算fout的示例:
生成输出频率所需的相位增量值为:
如果 DDS 内核被时分复用以执行多个通道,则每个通道的有效时钟频率会降低。 对于 C 通道,所需的相位增量为:
光栅化操作模式
单通道配置的 DDS 波形的输出频率 fout 是系统时钟频率 fclk、模数 M 和相位增量值 ΔΘ 的函数。 以赫兹为单位的输出频率定义为:
示例,DDS参数如下:
- fclk = 120 MHz
- M = 1000
- ∆Θ = 12 (decimal)
然后输出频率计算如下:
产生输出频率 fout Hz 所需的相位增量值 ΔΘ 为:
如果 DDS 内核被时分复用以执行多个通道,则每个通道的有效时钟频率会降低。 对于 C 通道,所需的相位增量为:
频率分辨率
本节介绍在标准模式或光栅化模式下使用内核时的频率分辨率。
标准操作模式
合成器的频率分辨率是时钟频率和相位累加器中使用的位数的函数。 频率分辨率可以通过以下方式确定:
例如,对于以下 DDS 参数:
- fclk = 120 MHz
- BΘ(n) = 32,频率分辨率为:
在时分多通道的情况下,频率分辨率通过通道数来提高,如下:
光栅化操作模式
合成器的频率分辨率 Δf 是时钟频率和模数的函数。 频率分辨率可以通过以下方式确定:
例如,对于以下 DDS 参数:
- fclk = 120 MHz
- M = 1000
频率分辨率为:
在时分多通道的情况下,频率分辨率通过通道数来提高,如下:
相位增量
对于标准模式,0 到 2 ^N-1 范围内的相位增量值描述了 [0,360)° 范围(其中 N 是相位累加器中的位数)。 对于光栅化模式,由于内部实现,相位增量值必须被认为是无符号的。相位增量值 [0 到 Modulus-1] 描述了范围 [0,360]。
相位增量项定义了合成器的输出频率。 考虑具有以下参数化的标准 DDS:
要生成频率为19MHz的正弦曲线,所需的相位增量为:
该值必须截断为整数,给出以下实际频率:
考虑具有以下参数化的光栅化模式的 DDS:
- Fclk = 100 MHz
- M(模数)= 1536
要生成频率为19MHz的正弦曲线,所需的相位增量为:
最接近的整数值为 292,给出以下实际频率:
示例
示例 1
在标准模式下,系统时钟为 1 MHz 的单通道 DDS,频率分辨率为 1 Hz,相位宽度为 20 位。 要合成 23.4 kHz 的输出,必须在用户界面中输入 0.0234 MHz 的输出频率值,然后返回十六进制值 5FD8,即十进制 24536。这给出了 24536/220 *1 MHz = 23399.35 Hz 的合成频率。 如果应用需要通过 8 个相位偏移之一对其进行调制,则相位偏移总线只需 3 位精度,但这些必须是相位偏移输入的前 3 位。 因此,1/8 个周期的相位偏移将在用户界面中输入为 0.125。 这将返回值 20000(十六进制)。 这可以在 3 位总线上输入为 001(二进制)。
示例 2(需要负频率的 DDS)
在标准模式下,具有 100 MHz 系统时钟的单通道 DDS,频率分辨率为 1 Hz,相位宽度为 25 位。 需要 -3 MHz、-1 MHz、1 MHz 和 3 MHz 的频率。 Fs 是每个通道的频率,即系统时钟/通道数,即 25 MHz。 负频率混叠到每个 Fs Hz。 在用户界面中输入的合法范围是 0 到 F s,因此本示例中输入的频率必须分别为 22 MHz (Fs-3 MHz)、24 MHz (Fs-1 MHz)、1 MHz 和 3 MHz。
协议说明
除了事件信号,所有进出 DDS 的接口都是 AXI4-Stream 接口。事件信号在检测到它们描述的事件时被注册和断言。握手机制遵守AXI-Stream协议。不再详细介绍。
CONFIG channel
CONFIG channel(s_axis_config_t*) 取代了 DDS Compiler v4.0 的编程接口。 对于 CONFIG channel,有向量的概念。 所讨论的向量是所有通道的一组完整值(PINC 和/或 POFF)。 CONFIG 通道是非阻塞的,这意味着 DDS 编译器的其他通道不会等待来自 CONFIG 通道的数据。 要对 CONFIG 通道进行编程,必须进行 N 次传输,其中 N 是通道数。 每次传输都包含每个通道的 PINC 和/或 POFF 值,从通道 0 开始按顺序排列。只有最后一次传输,通道(索引 N-1)必须使 TLAST 有效。 不这样做会导致 ·或 event_s_config_tlast_unexpected 输出在一个周期内被断言。 数据包仅在完成时才被视为已接收。 只有当它被完全接收时,它才有资格在等待同步事件时使用。 同步事件发生在 TDM 通道计数器翻转(矢量成帧)或输入 PHASE 通道被配置为接收包 TLAST 并且接收到一个这样的 TLAST 时(包成帧)。
当内核配置为单通道操作时,不需要 TLAST 并且引脚CONFIG 通道上不存在。
CONFIG 通道 TDATA 结构
当 CONFIG 通道配置为为每个 TDM 通道提供 PINC 和 POFF 值时,每个字段都进行符号扩展以适应字节边界,然后这些面向字节的字段与 PINC 在最低有效位置连接。 例如,对于 11 位的相位宽度,PINC 将占用 10:0 位,而 POFF 将占用 26:16。 因此 s_axis_config_tdata 总体上将是 31:0。 下图显示了前面示例中宽度的结构,用于以下配置:
- PINC 和 POFF 都设置为可编程。
- PINC only 设置为可编程。
- POFF only 设置为可编程。
输入 PHASE 通道
输入 PHASE 通道 (s_axis_phase_t*) 取代了 DDS 编译器 v4.0 的流接口(PINC_IN 和 POFF_IN)或 PHASE_IN 端口。 输入 PHASE 通道适用于 DDS 编译器执行动态功能(例如相位或频率调制)的应用,其中每个输入样本都有一个输出样本。 输入和输出之间存在一对一关系的事实意味着施加到输出的背压(TREADY 置低)导致输入 PHASE 通道上的 TREADY 置低(根据内部缓冲容量延迟)。 同样,PHASE 通道上的输入数据不足(TVALID 无效)传播为输出通道上的 TVALID 无效。
在光栅化模式下,PINC、POFF 和 PHASE_IN 的值必须限制在 0 和 Modulus-1(含)之间。 这对应于一个完整的圆圈。 所以如果负值是必需的,添加模数以将它们映射到所需的范围。 例如,对于模数 360,如果需要 -90,则添加 360 以获得所需范围内的 270。 存在事件信号以在运行时检测 PINC、POFF 和 PHASE_IN 输入的无效值。
当 DDS 编译器配置为具有相位累加器并且相位增量或相位偏移选择为“流式传输”时,输入 PHASE 通道接口存在。 当 DDS 编译器仅配置为 SIN/COS LUT 时,PHASE_IN 字段在输入 PHASE 通道的 TDATA 总线上输入。 这两种配置是互斥的。
输入 PHASE 通道 TDATA 结构
如前所述,DDS 编译器可以具有输入 PHASE 通道的两种配置是互斥的,因此虽然 TDATA 中可以出现四个字段,但所有四个字段不能同时出现。
当 DDS 编译器配置为仅 SIN/COS LUT 时,PHASE_IN 字段映射到 s_axis_phase_tdata。 PHASE_IN 字段在总线的最低有效部分中占据一个面向字节的字段。 所以 s_axis_phase_tdata 的宽度是容纳 PHASE_IN 宽度所需的 8 位的最小倍数。 因为这是一个输入,所以实现此字节方向所需的任何额外位都会被内核忽略,并在综合或映射期间被优化掉。
- PINC 和 POFF 都设置为 Streaming。
- PINC only 设置为流式传输。
- POFF only 设置为 Streaming。
- DDS 仅配置为 SIN/COS LUT。
下图显示 s_axis_phase_tdata 的结构,其中 Phase_Width = 11 用于以下配置:
输入 PHASE 通道 TUSER 结构
输入 PHASE 通道可以配置为没有 TUSER 端口,有用户字段或携带 TDM 通道索引,或同时有用户字段和 TDM 通道索引。 这些字段没有字节方向。 TDM 通道索引(如果已配置)具有描述 TDM 通道数量所需的最小宽度。 用户字段的宽度由用户选择,从 1 到 256 位。 这两个字段在最不重要的位置与 TDM 信道 ID 字段连接。 如果只存在一个字段,则占用 s_axis_phase_tuser 的最低有效位。
下图显示了三种可能的组合; 用户字段和 chan_id 字段,仅 chan_id 字段和仅用户字段。
输入PHASE通道 TLAST选项
输入 PHASE 通道可以配置为没有 TLAST、有一个矢量成帧 TLAST 或有一个分组成帧 TLAST。 选择矢量Vector Framing 框架时,预计TLAST将指示频道的TDM周期中的最后一个通道。 如果 TLAST 与 TLAST 应该何时到达的内部预期不匹配,则在一个时钟周期内断言两个事件信号之一。 当选择分组帧Packet Framing 时,核心对 TLAST 的时间没有任何期望,因此事件信号不存在,但 TLAST 以与 TDATA 输入相同的延迟被传输到输出通道。
输出数据通道
只要 DDS 编译器配置为具有 SIN/COS LUT。 该通道替代了 DDS Compiler v4.0 的 SINE 和 COSINE 输出。 这些以前的输出现在作为 m_axis_data_tdata 的字段存在。
输出数据通道 TDATA 结构
正弦和余弦输出字段被符号扩展到下一个字节边界,然后连接,余弦在最不重要的部分,以创建 m_axis_data_tdata。如果只选择正弦或余弦之一,则将其符号扩展并放入最小m_axis_data_tdata 的重要部分。 图 3-22 显示了三种配置的 TDATA 的内部结构; 正交输出,仅余弦和仅正弦。 图中显示了一个 11 位输出例如,符号扩展到 16 位。 <<< 表示符号扩展。
输出 DATA 通道 TUSER 结构
输出 DATA 通道可以配置为没有 TUSER 字段,或让 TUSER 保存用户字段,或 TDM 通道索引,或同时包含用户字段和 TDM 通道 ID。 当同时选择用户字段和 TDM 通道 ID 时,这些字段与 TDM 通道 ID 连接在最不重要的位置。 TDM 通道 ID 将 TDATA 总线中用于该传输的字段限定为属于所描述的 TDM 通道。 有关结构,请见图 3-21,因为这与输出数据通道 TUSER 端口的结构相同。
IP不使用也不解释用户字段。 它作为一项服务提供,允许系统设计人员以与主数据路径(输入 PHASE 通道到输出通道)相同的延迟通过内核传递信息。 例如,用户字段可能包含与 DDS 无关但与 DDS 下游的某些核心相关的标志和其他辅助信息。
输出数据通道 TLAST 选项
输出数据通道可以配置为没有 TLAST、有矢量成帧、有数据包成帧或有一个“配置触发”的 TLAST。
当设置为矢量帧时,TLAST 被断言用于传输,其中包含 TDM 通道周期的最后一个 TDM 通道的 TDATA(例如,12 通道中的第 12 通道)。
当设置为数据包成帧时,输入 PHASE 通道的 TLAST 以与主数据路径的延迟相等的延迟不变地传递。 这旨在为系统设计人员提供服务,其中 TLAST 可能具有与 DDS 无关但与某些核心下游相关的含义。
当设置为“配置触发”时,TLAST 由 DDS 在内部生成,而不是从输入 PHASE 通道传送。 在配置更改生效之前,它在 TDM 周期的最后一个通道上被断言。
换句话说,如果一个配置更改是使用 CONFIG 通道引发的,TLAST 在旧配置的最后一个样本上被断言。
输出 PHASE 通道
输出 PHASE 通道取代了 DDS Compiler v4.0 的 PHASE_OUT 端口。 PHASE_OUT 端口现在作为 m_axis_phase_tdata 的一个字段存在。
输出 PHASE 通道 TDATA 结构 - 常规 DDS
PHASE_OUT 字段符号扩展为 8 位的下一个倍数,并成为 m_axis_phase_tdata。 例如,如果 PHASE_OUT 为 20 位,则 m_axis_phase_tdata 为 24 位宽 [23:0],由符号扩展 PHASE_OUT 占用。
图 3-23 显示了将 11 位符号扩展为 16 位的示例宽度。
输出 PHASE 通道 TDATA 结构 - 光栅化 DDS
光栅化模式下的相位值是 0 到 Modulus-1 范围内的正整数。因此,PHASE_OUT 字段用零填充,直到下一个 8 位的倍数,并变为 m_axis_phase_tdata。
输出 PHASE 通道 TUSER 结构
TUSER 字段具有与输出 DATA 通道相同的配置选项,但选项对于两个输出通道是独立的,因此,例如,一个可能配置为具有用户字段,而另一个具有 TDM 频道 ID 字段。 图 3-21 与输出 PHASE Channel TUSER 端口的结构选项相同。
输出相位通道 TLAST 选项
输出相位通道使用与输出数据通道相同的 TLAST 设置。
事件接口
为了允许用户正确同步到内部通道计数器,并在将多通道数据写入 CONFIG 和/或 PHASE 通道时标记错误,DDS 编译器内核提供了多个事件输出以指示何时发生意外情况。事件输出遵循 aclken 和 aresetn 条件,立即发生并在每个存在差异的周期中断言。如果不需要事件输出,它们可以保持悬空状态,并且相关的逻辑会被赛灵思工具优化掉。
CONFIG 通道事件输出
对于多通道配置,CONFIG 通道需要 s_axis_config_tlast 上的单个脉冲来指示通道序列中的最后一个样本(“向量”)。 如果 s_axis_config_tlast 在内核不期望的情况下被断言,则 event_s_config_tlast_unexpected 被断言。 如果 s_axis_config_tlast 脉冲没有与最后一个通道的配置数据一起被断言,则 event_s_config_tlast_missing 被断言。
PHASE 通道事件输出
当 PHASE 通道存在多个通道时,PHASE 通道需要 s_axis_phase_tlast 上的单个脉冲来指示通道序列中的最后一个样本(“vector2”)。如果 s_axis_phase_tlast 在内核不期望的情况下被断言,则 event_s_phase_tlast_unexpected 被断言。 如果 s_axis_phase_tlast 脉冲没有与最终通道的数据一起断言,则 event_s_phase_tlast_missing 被断言。
当 DDS 配置为光栅化模式时,PINC 和 POFF 值(固定、可编程或流式传输)都应在 0 到 Modulus-1 的范围内。 超出此范围的值不受支持,可能导致错误输出。 当检测到超出支持范围的值时,信号 event_pinc_invalid 和 event_poff_invalid 被置位。
s_axis_phase_tuser 配置选项允许您输入通道 ID 值以促进与内部通道计数器的同步。 如果选择此选项,则event_s_phase_chanid_incorrect 输出出现在内核上,并且在 s_axis_phase_tuser 上的输入通道 ID 与内核的当前通道不匹配的每个周期都被断言。
配置
配置选项卡
Configuration Options : :可以生成完整的 DDS 或可选的相位发生器部分或 SIN/COS LUT 部分。
- Phase Generator and SIN/COS LUT :DDS 是通过将相位发生器和 SIN/COS LUT 与可选的抖动电路相结合来提供的。
- Phase Generator only :仅提供相位发生器。
- SIN/COS LUT only :仅提供带有可选泰勒级数校正电路的 SIN/COS LUT。
System Requirements :DDS 的一般上下文由这组参数设置:
- System Clock :DDS 内核的时钟频率。 提供的值影响架构选择,并用于计算输出频率的相位增量值(输出频率与系统时钟的相对值指定相位增量,因此在保持输出频率的同时加倍系统时钟会导致加倍 相位增量)。
- Number of Channels : DDS 和相位发生器最多可支持 16 个通道。 通道是时分复用的,这降低了每个通道的有效时钟频率。
- Mode of Operation : DDS 支持标准模式,其中累积的相位可以在用于访问 SIN/COS LUT 之前被截断,或者当所需频率和系统时钟以有理分数相关时可以使用的光栅化模式。
- Modulus (rasterized mode only) : 描述系统时钟频率和所需频率之间的关系。
- Frequency per Channel (Fs) : 由于时分复用,每个通道的有效系统时钟是实际系统时钟除以通道数。
系统参数
- Spurious Free Dynamic Range (SFDR) : DDS 产生的目标音调纯度。 这设置了输出宽度以及内部总线宽度和各种实现决策。
- Frequency Resolution : 较大的值会减少硬件资源。 根据噪声整形的选择,可以增加相位宽度,并且频率分辨率高于指定的频率分辨率。 对于光栅化模式,频率分辨率由系统时钟、通道数和所选模数固定。
Noise Shaping : 这控制是否使用相位截断、抖动或泰勒级数校正。
- None : 产生相位截断 DDS。
- Dithering : 相位抖动用于提高 SFDR,但会增加本底噪声。
- **Taylor Series Corrected ** : 正弦/余弦值使用相位截断中否则丢弃的位进行插值。
- Auto :根据 SFDR 等系统参数自动确定噪声整形。 选定的噪声整形选项显示在核心摘要页面中。 自动仅在参数选择为系统参数时可用。
特定噪声整形选项的可用性取决于选择的配置选项和参数选择方法。 系统参数输入自动限制特定的噪声整形选项是否可行。 选择硬件参数条目时,表 4-1 中汇总的选项可用,然后噪声整形选项的选择将硬件参数限制在所选选项支持的范围内。
根据输入的系统参数和选择的噪声整形,最小相位宽度和输出宽度由 Vivado IDE 通过以下方式得出。可以增加相位宽度以启用特定的噪声整形选项。 例如,泰勒级数校正需要 12 位的最小相位宽度。
图 4-1 显示了每个噪声整形选项运行的 SFDR 和相位宽度区域。
None、Phase Dithering 和 Taylor Series Correction 有三个重叠区域,并且使用更深层次的阴影来显示区域重叠的位置。 最暗的区域是所有三个区域重叠的地方,并且所有三个噪声整形选项都是可能的。 下面的虚线表示泰勒级数校正仅适用于 SDFR > 66.0 dB(而不是 66.0 dB)。 可以增加相位宽度以最大化特定 SFDR 目标的噪声整形选项的数量。
硬件参数
- Phase Width : 设置 m_axis_phase_tdata 中 PHASE_OUT 字段的宽度,当 DDS 仅配置为 SIN/COS LUT 时,设置 s_axis_phase_tdata 中的相位字段,相位累加器,相关的相位增量和偏移寄存器以及相位字段 s_axis_config_tdata。 对于光栅化模式,相位宽度固定为描述有效输入范围 [0, Modulus-1] 所需的位数,即 log2 (Modulus-1) 向上取整。
- Output Width : 仅在选择 DDS 或 SIN/COS LUT 部分时启用,因为相位发生器部分不需要它。 设置 m_axis_data_tdata 中 SINE 和 COSINE 字段的宽度。 这提供的 SFDR 取决于先前选择的噪声整形选项。 表 4-3 中的等式可用于估算可实现的 SFDR:
Implementation 选项卡
Phase Increment Programmability :选择设置 PINC 值的方式。
- Fixed :PINC 在生成时是固定的,不能在运行时更改。 固定需要最少的资源。
- Programmable :可以在运行时使用 CONFIG 通道更改 PINC 值。 当 DDS 频率要在操作模式之间改变时,建议这样做。
- Streaming :PINC 值直接取自输入 PHASE 通道。 当 PINC 值必须经常更改时,或者例如需要频率调制时,建议使用此方法。
Resync :选择时,s_axis_phase 通道有一个 RESYNC 字段。 该位在置位时会静音相关通道的累积相位。 该周期的累加相位值是伴随 RESYNC 断言的 PINC 值加上 POFF 值。
Phase Offset Programmability :选择设置 POFF 值的方式。
- None :没有相位偏移功能,并且未生成所需的硬件。 这节省了 FPGA 资源。
- Fixed :POFF 在生成时是固定的,不能在运行时更改。
- Programmable : 可以使用 CONFIG 通道更改 POFF 值。 当 DDS 阶段要在操作模式之间切换时,建议这样做。
- Streaming : 可以使用输入 PHASE 通道更改 POFF 值。 当 POFF 值必须经常改变时,或者例如需要相位调制时,建议使用此方法。
Output
- Output_Selection : DDS 可能在 m_axis_data_tdata 总线中具有正交 SINE 和 COSINE 字段,或只有这两个字段之一。 m_axis_data_tdata 内部结构见前所述。
- Polarity : m_axis_data_tdata 的 SINE 和 COSINE 字段可以反转。这允许使用共轭输出将用作发射器混频器的 DDS 转换为接收器混频器; 因此,除了这里的两个选择的值之外,两个实例都是相同的。
- Negative Sine : 选中此选择会导致 SINE 字段在运行时被反转。
- Negative Cosine : 选中此选择会导致余弦字段在运行时被反转。
- Amplitude Mode : 此选择允许来自 DDS 的两个幅度之一。
- Full Range : 针对需要二进制补码表示内的最大幅度的通信应用,但由于期望自动增益控制,幅度值不太重要。对于非泰勒模式,全范围模式的目标幅度为 1–2–(输出宽度–2),而对于泰勒模式,幅度在该值和 1 之间变化。请注意,此处的幅度被归一化为输出宽度,首先是二进制点。 8 位输出的二进制幅度为 100000000 – 10,给出介于 01111110 和 11111110 之间的值,分别对应于略小于 1 和略大于 –1。、
- Unit Circle : 对于 DDS 输出幅度的值很重要的应用,例如 FFT 旋转因子生成。 单位圆时,DDS 输出幅度为半全范围(即,值范围从 01000.. (+0.5). 到 110000.. (-0.5))。 由于幅度在全范围内降低了 2 倍,SDFR 降低了 6 dB。 增加 SFDR 或输出宽度以适应此要求。
实现选项
- Memory Type :这控制 SIN/COS LUT 的实现。 对于表可以包含在单层内存中的小型情况,Auto 设置选择 Distributed ROM ,而对于较大的情况,则选择 Block ROM 。 (即Phase Width ≤ 5-bits 时选择 Distributed ROM )。 可以通过明确选择 Distributed ROM 或 Block ROM 来覆盖此选择。
- Optimization Goal : 在某些情况下,可以以增加流水线寄存器为代价来提高电路时钟速度。 此选择控制实施决策是针对最高速度还是最低资源。
- DSP48 Use : 这控制相位累加器和后续加法阶段(用于相位偏移和/或抖动噪声加法)的实现。 当设置为 Minimal 时,相位累加器和后续阶段在 FPGA 逻辑中实现。 当 Maximal 时,全部使用 DSP Slice 实现。 在单通道的情况下,DSP slice 还可以提供寄存器来存储可编程相位增量和/或相位偏移,从而进一步节省结构资源。 如果 Phase Increment 或 Phase Offset 是 Streaming 并且仅当优化目标是 Area 时,则不会这样做。 执行此优化时,PINC 和/或 POFF 寄存器的初始值必须为零。 Vivado IDE 通过将 PINC 和/或 POFF 的初始值设置为零并禁用条目来强制执行此操作。
Detailed Implementation Tab
AXI Channel Options : 可以配置某些 AXI 接口信号的动作。
- DATA Has TLAST : 当有多个 DDS 通道(与 AXI 通道相反)时启用。 当仅存在 PHASE 通道时,也可以使用有限的选项。 选项有:
- Not Required : 在此模式下,输入 PHASE 通道或输出通道上不存在 TLAST 信号。 在多通道配置中,CONFIG 通道上的 TLAST 用于表示要重新配置的最后一个通道,并且始终存在,无论此设置如何。
- Vector Framing : 输入 PHASE 通道和输出通道上的 TLAST 脉冲表示通道周期中的最后一个通道(例如,12 个通道中的第 12 个)。 如果没有在正确的时间应用 TLAST 脉冲以匹配内核的通道状态,则会在 event_s_phase_tlast_missing 或 event_s_phase_tlast_unexpected 事件输出上标记一个事件。
- Packet Framing : TLAST 脉冲以与 TDATA 相同的延迟从输入 PHASE 通道传送到输出通道。 此配置中的 TLAST 可用于触发重新配置。此模式旨在作为一种服务,以简化系统设计,以应对信号必须伴随数据流但在 DDS 中没有应用的情况。
- Config Triggered : 此选项使内核在将新配置应用于内核之前在最后一个 TDM 通道上生成输出 TLAST。使用新的核心配置生成后续输出样本。此模式仅在存在 CONFIG 通道时可用。
- Output TREADY :选择时,输出通道具有 TREADY,因此支持具有固有背压的完整 AXI 握手协议。 如果有输入 PHASE 通道,它的 TREADY 的存在也是由这个控制决定的,因此从输入 PHASE 通道到输出通道的数据通路作为一个整体是否支持背压。 ° TUSER options :内核支持 TUSER 字段的两种不同用途; 表示时分复用通道索引或作为将用户字段(与 TDATA 关联的辅助数据)从输入 PHASE 通道传递到输出通道的管道。 这些选择独立于输入 PHASE 通道。 然而,由于用户字段的选择意味着希望将 TUSER 字段从输入传送到输出,因此在输入 PHASE 通道上选择用户字段会迫使用户字段出现在每个输出通道 TUSER 端口中。 输入 PHASE 通道的选项如下所示。 每个输出通道的选项受输入 PHASE 通道选择的限制,但在其他方面是独立的。
- Not required :以上两种用途都不需要; 有问题的频道没有 TUSER 字段。
- Chan ID field :在此模式下,TUSER 字段标识用于传输的时分复用通道。 对于输入 PHASE 通道,这为用户提供了一种与内部 DDS 通道状态同步的机制。 如果应用的通道 ID 与内核的内部状态不匹配,则会在 event_s_phase_chanid_incorrect 输出上标记一个事件。
- User Field :在此模式下,核心忽略 TUSER 字段的内容,但将其从输入 PHASE 通道原样传递到输出通道。
- User and Chan ID field :在此模式下,TUSER 字段同时具有用户字段和频道 ID 字段,频道 ID 字段位于最低有效位。 描述通道所需的最小位数决定了通道 ID 字段的宽度; 例如,七个通道需要三个位。
- User field width :该字段确定从输入传送到输出的位字段的宽度,DDS 不会改变它。 它不包括 Channel ID 字段的宽度(如果存在)。
- Output Form :一般来说,正弦和余弦的输出都是二进制补码形式。 但是,当使用象限对称时,输出形式可以更改为符号和幅度。 选择符号和幅度会删除 SIN/COS LUT 之后的反相器。 这减少了相对于二进制补码的资源使用。 它旨在与混频器级一起使用,其中可以通过在复数乘法中更改分量的符号来将符号信息与幅度分开处理。 混频器(具有输入 a+jb 和 c+jd 的复数乘法器)可以表示为:
实数 = ac - bd 虚数 = ad + bc
在这种情况下,来自 DDS 的 a 和 b 是有符号的,二进制补码。 但是,如果 a 和 b 表示为符号和幅度,则 a 和 b 中的每一个的符号可用于修改混频器方程中每个项的符号。 例如,如果 a 单独为负,则混频器方程变为:
real = -ac -bd imaginary = -ad + bc
如果混频器级使用 DSP slice 实现,则可以通过更改 DSP48 Slice opmode 信号来实现此符号操作。
- Synchronization Mode :当 CONFIG 和 PHASE 通道都存在时,此选择处理重新配置的时序。 配置通道与通道计数器的相位异步获取配置数据,并将重配置数据存储在缓冲区中。 此选择确定新配置数据何时对数据路径生效:
- On Vector :在此模式下,当通道计数器翻转以启动新的时分复用通道周期时,将应用重配置数据。
- On Packet :在此模式下,当 TLAST 设置为数据包帧时可用,输入 PHASE 通道上的 TLAST 会触发重新配置。 此模式针对每组配置数据将与输入 TLAST 指示符所暗示的数据包相关联的情况。
- 延迟选项:选择应由 Vivado IDE 自动配置还是手动配置延迟:
- 流阶段增量。
- SIN/COS LUT 内的块 ROM(可以通过选择分布式 ROM 来避免)。
- 在二阶泰勒级数校正中阻止 ROM(用于 120 dB 以上的 SFDR)。
- Auto :使 DDS 流水线化以获得最佳性能(考虑到优化目标)。
- Configurable :当最佳性能超出要求时,可以将延迟设置为可配置并选择较小的延迟值。 这减少了流水线阶段的数量,通常可以节省资源。 施加了一个最小延迟值,其中延迟周期来自以下每个来源:
- Optional Pins : 可以禁用某些输入和输出以节省资源。
- Has Phase Out : 选中时,内核具有输出 PHASE 通道。
- ACLKEN : 选中后,内核有一个 aclken(高电平有效时钟使能)端口。
- ARESETn : 选中时,内核有一个 aresetn(低电平有效同步复位)端口。
Parameter Entry Pages : 当相位增量或相位偏移为固定或可编程时,将出现以下页面用于输入参数。 如果可编程,则寄存器的初始值通过参数输入页指定。 如果使用 DSP slice 寄存器,如实现选项中所述,相位增量和/或偏移的初始值假定为零。
System Parameters :
- Output Frequencies : 当参数选择设置为系统参数且相位增量可编程性为固定或可编程时,会出现此页面。 对于每个通道,可以在表格中输入一个独立的频率 (MHz)。 允许的范围显示为 0 到 Fs(其中 Fs 是每个通道的频率)。 从 Fs/2 到 Fs 的值分别别名为 -Fs/2 到 0,因此可用于输入负频率。
- Phase Offset Angles :当参数选择设置为系统参数并且相位偏移设置为固定或可编程时出现此页面。 该表允许将每个通道的相位偏移指定为周期的一部分。 对于标准模式,有效范围是 -1.0 到 1.0。 对于光栅化模式,有效范围是 0 到 1.0。 例如,为 180° 输入 0.5(即 π 弧度)。 标准模式的范围大于单个周期,但允许,因为负值映射到等效的正值。
Hardware Parameters :
- Phase Angle Increment Values :当参数选择设置为硬件参数且相位增量可编程性为固定或可编程时出现此页面。 值必须以二进制形式输入。 范围是 0 到模值减 1。对于标准模式,模值是 2^PhaseWidth。 对于光栅化模式,模数是之前在 Vivado IDE 中选择的值。 以弧度为单位的角度是输入数字除以模数并乘以 2π。 通过向左填充零,将条目扩展到相位宽度位。
- Phase Offset Values : 当参数选择设置为硬件参数且相位偏移设置为固定或可编程时出现此页面。 值必须以二进制形式输入。 标准模式的范围是0到累加器的重量,即2^Phase Width-1,对应一个周期。 对于光栅化模式,有效范围是 0 到 1.0 – 1/模数。 可以通过将无符号小数转换为十进制并乘以 2π 来获得以弧度为单位的角度。 通过向左填充零,将条目扩展到相位宽度位。
-
FPGA
+关注
关注
1629文章
21736浏览量
603336 -
内核
+关注
关注
3文章
1372浏览量
40289 -
Xilinx
+关注
关注
71文章
2167浏览量
121404 -
DDS
+关注
关注
21文章
634浏览量
152658 -
信号发生器
+关注
关注
28文章
1474浏览量
108760
发布评论请先 登录
相关推荐
评论