这次复习覆盖第 17~21 章。完成后,你应能把一段功能需求拆成数据通路、控制器和存储器,写成边沿含义明确的可综合 RTL,用自检测试平台检查周期行为,再从综合结果与静态时序报告判断结构和速度是否满足目标。
建议闭卷完成第 4 节,再展开答案。满分 100 分,建议用时 120 分钟。第 8 题不要求运行工具,但要把结构、逐拍行为、RTL 计划、验证计划和时序计划连成一个闭环。
图 R4-1 第 17~21 章从结构设计到门级时序检查的知识链
这五章不是五项互相独立的工具操作。存储器读延迟会改变控制器拍数,控制器拍数会决定 RTL,RTL 的位宽和优先级会改变综合网表,网表和约束共同决定 STA 结果。设计时要反复沿这条链前后核对。
| 章节 | 核心问题 | 你应能完成的动作 |
|---|---|---|
| 第 17 章 | 谁保存数据,谁决定何时操作? | 分离数据通路与控制器,定义控制字、状态和握手 |
| 第 18 章 | 数据怎样按地址保存和读写? | 计算容量与地址位宽,说明端口、读延迟和冲突语义 |
| 第 19 章 | 代码会生成什么硬件? | 区分组合块与时序块,控制位宽、赋值、优先级和复位 |
| 第 20 章 | 怎样证明周期行为符合规格? | 建立时钟与复位,编写自检、断言、记分板和边界用例 |
| 第 21 章 | 网表结构与速度是否合格? | 审查推断和警告,检查约束覆盖、建立/保持裕量与例外 |
一个模块收到单周期 start 后,需要依次完成“装载 A、计算
A+B、把结果送到输出、产生一拍 done”。
start,模块忙时怎样规定接口才不会产生歧义?(2 分)一个存储器保存 768 个 20 bit 字,采用单端口同步读。
阅读下列片段:
always_comb begin
if (en)
y = a + b;
end
always_ff @(posedge clk) begin
q = d;
r = q;
endr 保存旧
q,应怎样写?(4 分)a、b 都是 8 bit
无符号数,而设计需要完整保留进位,y
应多宽?表达式要注意什么?(2 分)valid/ready
握手的加法模块,列出至少四类测试场景。(4 分)综合报告显示:一个应为 256×32 bit 的数组被实现为大量触发器;出现 12 个未连接输出;FSM 的一个状态不可达;某组合块推断锁存器。
某寄存器到寄存器路径参数如下,单位均为 ps:\(L=40\)、\(C=70\)、\(T=900\)、\(t_{cq,max}=65\)、\(t_{data,max}=690\)、\(t_{setup}=75\)、\(U_{setup}=35\);最小延迟参数为 \(t_{cq,min}=25\)、\(t_{data,min}=20\)、\(t_{hold}=30\)、\(U_{hold}=10\)。
-25、-80、-10 ps,另有正裕量端点,求
WNS、负裕量简单求和和负裕量端点数。(3 分)设计一个单时钟模块。内部有 8×8 bit
单端口同步读存储器;收到空闲状态下的一拍 start
后,模块从地址 0 到 7 依次读取 8 个无符号数并求和。规格如下:
rst 优先级最高;busy 在处理期间为 1;done=1,结果 sum 保持;start 被忽略;完成以下任务:
图 R4-2 只在完成自己的结构和逐拍表后用于核对。
图 R4-2 同步读存储器、控制 FSM、加法器和累加寄存器组成的 8 字累加器
ready,以
start && ready 定义一次接收。没有
ready 时,也必须规定忙时脉冲被忽略并由上游保证重试。(2
分)总容量为
\[768\times20=15360\ \text{bit}.\]
因为 \(2^9=512<768\le 1024=2^{10}\),地址至少 10 bit;未使用编码为 \(1024-768=256\) 个。(4 分)
同步读表示地址在有效边沿被存储器采样,读数据在边沿后经过存储器延迟出现。控制器应把“发出地址”和“消费数据”分成满足该接口契约的周期。(2 分)
读写同址时必须规定读优先、写优先、保持旧输出或结果未定义中的哪一种,并与目标存储宏、RTL 模板和仿真模型保持一致。(2 分)
en=0 时 y
没有赋值,需要保存旧值,因此组合块会推断锁存器。可在块开头给
y 默认值,或写完整
if/else;具体默认值应按功能规格确定。(4 分)
时序块用阻塞赋值会让后一句在过程执行顺序上看到“新 q”,容易把并行触发器误写成程序式更新。应写:
always_ff @(posedge clk) begin
q <= d;
r <= q;
end这样两者在同一边沿采样,r 得到边沿前的旧
q。(4 分)
最大和为 510,需要 9 bit。应先把操作数显式零扩展到 9 bit,再相加,避免表达式在 8 bit 宽度中先截断。(2 分)
ready=0
造成背压并检查输入保持;单笔传输;边界操作数;复位时有未完成事务;随机
valid/ready;连续最大值;空闲间隔。任选四类且检查点明确得 4
分。(4 分)建立到达时间为
\[A_{setup}=L+t_{cq,max}+t_{data,max}=40+65+690=795\ \text{ps}.\]
建立要求时间为
\[R_{setup}=C+T-t_{setup}-U_{setup}=70+900-75-35=860\ \text{ps}.\]
所以
\[S_{setup}=R-A=860-795=+65\ \text{ps},\]
建立通过。(5 分)
保持到达时间为
\[A_{hold}=L+t_{cq,min}+t_{data,min}=40+25+20=85\ \text{ps}.\]
保持要求时间为
\[R_{hold}=C+t_{hold}+U_{hold}=70+30+10=110\ \text{ps}.\]
所以
\[S_{hold}=A-R=85-110=-25\ \text{ps},\]
保持违例。(4 分)
负裕量集合中,WNS 为 \(-80\) ps,负裕量简单求和为 \(-25-80-10=-115\) ps,负裕量端点数为 3。(3 分)
周期增加 100 ps 后,建立要求时间增加 100 ps,建立裕量变为 +165 ps;基本单周期保持检查仍围绕同一捕获边沿,保持裕量仍为 -25 ps。(2 分)
busy
和 done。结构关系见图 R4-2。(5 分)IDLE、READ、ADD、DONE。IDLE 接收
start,清零地址和 sum;READ 给出/保持当前地址并让存储器在边沿采样;ADD
使用边沿后已稳定的读数据更新 sum。若地址不是 7,则地址加一并回
READ;若地址为 7,则转 DONE。DONE 保持结果并持续一拍,然后回
IDLE。同步读的地址采样和数据产生存在周期边界,不能把软件式“给地址后立即取数据”套进同一边沿。(7
分)addr==3'd7 判断。(5 分)done
时比较 sum,同时检查 busy/done
周期。用例包括全零结果 0、全 255 结果 2040、递增数据、随机数组、忙时重复
start 不重启、处理中复位立即回空闲并清结果。还应设置超时,避免 DUT
卡死时测试永不结束。(5 分)图 R4-3 功能、结构和时序证据互相补充,修复后需要回归受影响层
可以把一次小设计的验收压缩成三句话:
三句话缺一条,都不能称为完整验收。
| 得分 | 当前状态 | 建议动作 |
|---|---|---|
| 90~100 | 已建立完整闭环 | 进入第 22 章,开始把门级网表放进物理空间 |
| 75~89 | 主线清楚,局部接口或计算不稳 | 重做失分题,并把题 8 画成逐拍表 |
| 60~74 | 能写局部 RTL,但设计与验证脱节 | 重读第 17、20、21 章,先做结构图再写代码 |
| <60 | 周期、存储器或时序概念尚未连起来 | 按第 17→18→19→20→21 章顺序复习,每章只抓自检清单 |
按错题类型定位:
完成这些项目后,第 22 章会把门级网表继续推进到布局、时钟树、布线和签核前检查。