模块接口是定时硬件契约
目标: 仅端口列表无法表达什么? 作答时请说明硬件所有者、更新事件、位宽,以及一个应使证据失败的变更。
模块边界命名数值与方向,但可用接口还要说明每个值何时有效、由哪一侧负责改变。 寄存器传输级设计描述命名状态元件在时钟事件之间传递的数值,以及推导下一数值的组合逻辑。SystemVerilog 源码并不像普通顺序程序那样执行:仿真器按语言语义调度事件,综合工具则从受支持子集推断有界硬件结构。因此每课都区分源代码含义、仿真观测、推断硬件意图、时序假设,以及仍需由 lint、仿真、综合、约束与实现提供的证据。
本知识点的规格是:同步递增器在上升沿 in_valid 为高时接受一个 8 位输入,并在恰好一个周期后以 out_valid 发布输入+1;复位抑制输出有效性。 需要推导的不变量是:每个已接受输入在一个周期后恰好产生一个匹配输出,未接受周期不会产生有效输出。 编写过程前,先说明信号所有者、位宽、有符号解释、时钟域、复位状态、更新事件、有效区间、非法输入、延迟、吞吐与反压行为。然后判断每个输出是持续组合结果、寄存状态还是协议证据。保留故障边界“未明确延迟会让测试平台在接受周期采样组合 input+1,而实现却在下一周期寄存输出。”,因为仅有干净编译或漂亮波形可能掩盖错误电路。
每个已接受输入在一个周期后恰好产生一个匹配输出,未接受周期不会产生有效输出。 该结论只适用于已声明的可综合模型与时钟/复位假设;它本身不能证明特定单元网表、时钟频率、面积、功耗、CDC 收敛、FPGA 行为或制造硅片。
在接受边沿,把 8 位输入与一个有效位捕获到模块所有寄存器。 在推导第 1 步,指出该值来自边沿前状态、组合逻辑计算,还是在有效边沿发布。应用运算符前追踪完整位宽与符号属性,并说明哪个赋值或握手转移所有权。
组合加法按声明的 8 位策略推导扩宽或回绕结果。 在推导第 2 步,指出该值来自边沿前状态、组合逻辑计算,还是在有效边沿发布。应用运算符前追踪完整位宽与符号属性,并说明哪个赋值或握手转移所有权。
在下一边沿发布保留结果与有效身份,除非复位覆盖状态。 在推导第 3 步,指出该值来自边沿前状态、组合逻辑计算,还是在有效边沿发布。应用运算符前追踪完整位宽与符号属性,并说明哪个赋值或握手转移所有权。
追踪复位解除后,在连续边沿接受输入 7 与 255,并采用 8 位回绕。 先写出每个相关事件前后的预期数值,再描述能够拥有这些数值的最小可综合结构。
- 接受 7 后,当前输出仍为先前无效状态,同时保留 8 供下一次发布。 在追踪第 1 步,记录原始位与解释数值、活动过程、事件区域或边沿、使能与复位状态,以及结果是暂定还是已在接口可观察。
- 下一边沿发布 8,同时接受 255 并保留回绕后的 0。 在追踪第 2 步,记录原始位与解释数值、活动过程、事件区域或边沿、使能与复位状态,以及结果是暂定还是已在接口可观察。
- 再下一边沿以 valid 高发布 0。 在追踪第 3 步,记录原始位与解释数值、活动过程、事件区域或边沿、使能与复位状态,以及结果是暂定还是已在接口可观察。
结果: 接受序列 7、255 分别在一个周期后产生有效输出 8、0。 只有当追踪、断言与推断结构预期一致时才接受结果。若未运行综合,应明确写“仅仿真契约”;若未约束并分析时序,则不能声称频率。