写在前面本文是本系列的第六篇,本文主要介绍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 简单地截断,接受高精度相位角并生成如图所示角度的较低精度表示。 该值被提供给执行从相空间到时间的映射的查找表的地址端口。通过从查找表中调用正弦曲线样本形成的信号的保真度受到过程的相位和幅度量化的影响。 查找表的深度和宽度分别影响信号的相位角分辨率和幅度分辨率。
直接数字合成器使用具有适当查找表的寻址方案来形成任意频率正弦曲线的样本。 如果需要模拟输出,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 mhzm = 1000∆θ = 12 (decimal)然后输出频率计算如下:
产生输出频率 fout hz 所需的相位增量值 δθ 为:
如果 dds 内核被时分复用以执行多个通道,则每个通道的有效时钟频率会降低。 对于 c 通道,所需的相位增量为:
频率分辨率本节介绍在标准模式或光栅化模式下使用内核时的频率分辨率。
标准操作模式合成器的频率分辨率是时钟频率和相位累加器中使用的位数的函数。 频率分辨率可以通过以下方式确定:
例如,对于以下 dds 参数:
fclk = 120 mhzbθ(n) = 32,频率分辨率为:在时分多通道的情况下,频率分辨率通过通道数来提高,如下:
光栅化操作模式合成器的频率分辨率 δf 是时钟频率和模数的函数。 频率分辨率可以通过以下方式确定:
例如,对于以下 dds 参数:
fclk = 120 mhzm = 1000频率分辨率为:
在时分多通道的情况下,频率分辨率通过通道数来提高,如下:
相位增量对于标准模式,0 到 2 ^n-1 范围内的相位增量值描述了 [0,360)° 范围(其中 n 是相位累加器中的位数)。 对于光栅化模式,由于内部实现,相位增量值必须被认为是无符号的。相位增量值 [0 到 modulus-1] 描述了范围 [0,360]。
相位增量项定义了合成器的输出频率。 考虑具有以下参数化的标准 dds:
要生成频率为19mhz的正弦曲线,所需的相位增量为:
该值必须截断为整数,给出以下实际频率:
考虑具有以下参数化的光栅化模式的 dds:
fclk = 100 mhzm(模数)= 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 channelconfig 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 位。 << 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 tabaxi 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π 来获得以弧度为单位的角度。 通过向左填充零,将条目扩展到相位宽度位。
OPPO Reno曝光搭载骁龙855移动平台将是一款拥有极高配置的手机
突围之路唯有创新 三一重工塑造传统企业标杆_三一重工
季丰新购球差电镜HITACHI HF5000正式投入运营
到底什么是调度延迟
无线蓝牙耳机品牌_降噪效果最好的耳机排行
FPGA常用运算模块-DDS信号发生器
场效应管作用是什么_场效应管到底好在哪
如何使用单片机的取表方式实现广告灯的设计
2022航展倒计时丨纳特通信邀您逐梦蓝天盛会,携手向未来!
物联网技术可以如何降低城市消耗
媒体传输协议的演进与未来
开源赋能 普惠未来|TencentOS Tiny诚邀您参与2023开放原子全球开源峰会
降低了输入电流纹波系数的滤波器PSpice设计
索尼投入9亿美元建立图像传感器新工厂 力图保持其市场领先地位
6个亿!福建国资“输血”华映科技子公司“华佳彩
语音芯片WT2003H在新能源充电桩的应用
Nokia Glass?诺基亚获得可穿戴显示专利
AirPower恢复开发 产品是否发布不保证
如何通过Windows上的Xinput在PC上使用PS3控制器
龙芯中科助力智慧园区建设