持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天!
SoC芯片设计流程
- Design
- Specification
- Partition
- RTL coding(Verlog/System Verilog)
- IP integration
- Verification
- plan
- Testbench and Tentcase
- Regression
- Integration verification
- RTL freeze
- Presynthesis sign-off
- Logic Synthesis
- map RTL to gate-level netlist
- FM(Foraml Verification形式验证)
- STA(Static Timing Analysis 静态时序分析)
- DFT(检测芯片在设计过程中可能由于工艺引入的缺陷导致的芯片失效,通过DFT测试可以把坏的芯片筛掉)
- Test generation and fault simulation
- PD ( 即P&R DRC/LVS,之后再去做一次静态时序分析,SDF实验检查时序check )
- placement,scan chain and CTS,cell routing Verify physical and electrical design rules Extract parasitics
- Post_Layout STA
- 生成最终的GDSII
- Tape-Out流片
通过SystemVerilog testbench ,
其结果: coverage0-driven
覆盖率:
- code coverage【客观】 line, experssion, path ,toggle(翻转信号) , fsm(状态机)
- function coverage 【主观】 利用SV里的cover group;自己去建模,去建立cover group,然后针对要覆盖的点去写cover point
- assertion coverage 看具体的代码量,有点类似
- 完备性、正确性、协议符合型、容错处理
- 完备性:要求我们一定要在Specification基础之上将Feature分解全!
- 正确性:要求我们构造的用例需要真pass,整个环境的check要比较全面
- 协议符合型:要求我们要符合协议,在该项目中就是AHB协议
- 容错处理:这个异常处理场景也需要去考虑,如何构造异常场景包(用例)
- 如: 地址addr和size要对齐,假如size是16bit,那么地址可以发0或者2,不能发1或者3。这个容错处理就是说,如果发1或3,不能让总线挂死!这个也要作为Feature的测试点列出来。
AHB_if 接口中的时钟块信号代码
clocking cb_master @(posedge clock); // non-synthesis only for verification
default input #1 output #1;
output haddr;
output hburst;
output hbusreq;
output hlock;
output hprot;
output hsize;
output htrans;
output hwdata;
output hwrite;
input hrdata;
input hready_in;
input hresp;
input hgrant;
endclocking
clocking cb_slave @(posedge clock);
default input #1 output #1;
input hsel;
input haddr;
input hwrite;
input htrans;
input hsize;
input hburst;
input hwdata;
input hmaster;
input hmastlock;
input hready_in;
output hrdata;
output hready_out;
output hresp;
output hsplit;
endclocking
clocking cb_monitor @(posedge clock);
default input #1 output #1;
input hsel;
input haddr;
input hwrite;
input htrans;
input hsize;
input hburst;
input hwdata;
input hmaster;
input hmastlock;
input hready_in;
input hrdata;
input hready_out;
input hresp;
input hsplit;
endclocking
对于Master, 在时钟上升沿前一个时钟单位采样,在时钟上升沿后一个时钟单位驱动。
而对于Master和slave模块,其输入输出信号刚好对应互补。
对于monitor而言,所有的信号的都是让输入信号。
clocking信号是不可综合的。
- 验证语言
- System Verilog
- 验证平台架构
- 验证策略
- 覆盖率驱动的验证策略
- 白盒验证策略
- 激励
- 定向测试(极大,极小,边界跳转空间)
- 带约束的随机化验证策略
- 基于断言的验证策略(测试内部信号跳变)
- 功能点划分(根据Feature来分解测试点testpoints,根据测试点再来构造测试用例testcases)
- Features
- testpoints
- testcases
-
如,NO.1 testcase:把SRAM 的地址空间全部写1,然后再读全部是否为1
-
NO.2 testcase: 把SRAM的地址空间全部写0,然后再读写全部是否为0
-
NO.3 testcase: 向SRAM中写8bit的数
-
NO.4 testcase:向SRAM中写16bit 的数
-
NO.5 testcase: 做一些随机...
-