# DF08：RTL、sample-valid、验证与综合

## 目标

用单 core 时钟实现固定抽取链，保持数学样本序列正确，并解释实现成本和时序路径。

## 单时钟架构

clk_core=49.152 MHz，周期约 20.345052 ns。输入 6.144 MHz 相当于每 8 周期一次 in_valid；CIC 输出每 128 周期一次，后续三个输出间隔为 256、512、1024 周期。全部状态/数据寄存器由 clk_core 驱动，不给每级输出 valid 建一个新内部时钟。

真实 ADC 若在另一时钟域输出，先用符合吞吐和可靠性要求的接口/异步 FIFO 跨域。同步后的 bit 不能因重复采样而当作多份新样本。首版输入契约先假定已在 core 域，CDC 适配器独立设计与验证。

历史移位、CIC 更新、抽取计数只在样本接受时推进。reset 清空全部积分/差分/历史/计数与输出 valid；复位中止未完成的 MAC 任务，不发布旧结果。

## FIR 与调度

直接并行 FIR 清楚但面积大；折叠 MAC 在多个 core 周期完成一个输出，必须保证 deadline 和历史一致。首版每级独立 MAC，任务在下一个该级输入样本到来前完成，分别检查 128、256、512 周期的输入间隔，给历史读取留确定窗口。

读写环形缓冲时锁定逻辑起点，并证明计算期间所需历史不被覆盖；“系数固定”不意味着历史样本不会变化。输出 valid 只在舍入/饱和结果就绪后发一周期。

当前样本与 h0 相乘，其余系数使用旧历史。`history <= shift` 后同一 always_ff 直接读 history 仍读到旧值；用清楚的 next/输入组合或分阶段寄存，避免整体错一份样本。

若乘法/预加/累加无法在当前 core 周期满足 setup，可加流水级，但要同步推进 valid、样本索引与 warm 标志。允许新增 core 延迟，不能修改抽取样本相位或结果序列。

数据相关标签也有滤波支持范围。上游饱和标签随数据存入历史，本级输出对所有实际参与卷积的输入标签作OR，再合并自身饱和，不能只延迟当前输入的一个标志位。

## 输出与集成

out_valid 是 push 接口，消费端必须接受全部输出或由外部缓冲提供可观测 overflow。自由运行 ADC 通常不能为了下游慢而暂停采样，不能让 out_ready 将 CIC 历史冻结。

48 ksample/s×24 bit=1.152 Mbit/s，仅 payload 就超过原 1 MHz SPI 的理论线速；连续数据不能默认通过该接口传出。SPI 首版用于寄存器、状态和偶发冻结快照，持续流使用重新设计的数据接口/速率。

读取多字样本时一次锁存 data/sequence/valid 再拆字读，不能低字取旧样本、高字取新样本。冻结快照不停止滤波，snapshot 与原始 stream 的有效性分开。

## 验证层次

数值 reference 用 DF04 等效 FIR/直接卷积与明确相位，RTL scoreboard 用 bit-accurate 输出；先对齐规定流水延迟/索引，之后每份输出逐位比对。输入激励和检查调度避免与 DUT 边沿竞态。

测试包含 reset/恢复、正负 DC、交替码、两合法码流差响应、边界舍入、随机 seed、完整长流、计数、cadence 违规、任务 deadline 与 saturation。仅集成 Master/Slave 一起通过不能作为唯一验证。

同样检查退出码、明确完成标记、输出样本数、未映射/未解析实例、时钟连接和 timing intent。STA 默认按真实 core 周期分析；sample-valid 间隔大不自动允许所有组合路径多周期，例外要逐路径证明并审查 hold。

当前 tutorial.lib 不代表真实工艺面积/功耗/频率。新项目综合可能暴露 MAC 时序、门数或高扇出问题，这些需要实际报告，不在课程里预写“通过”。

## 验收

bit-accurate、count、phase、warm 和 reset 均通过；延迟/吞吐和实际时序可解释；明确 ADC 输入 CDC 和输出传输接口边界。结课契约见 [项目规格](09_project.md)，答案见 [DF08 参考](10_answers.md)。
