第十一课
- Verilog simulation event queue
与VCS视频教程第一课的内容相同。
补充:SV的队列有三个模块:oop,rtl,assertion,interface会隔离oop和rtl(?)
lab04
- scheduler.v
模块当中包含了一些testbench,用来描述阻塞语句和非阻塞语句的区别
**在大型电路(如CPUGPU等)用RTL代码跑是非常慢的,这时需要一些软件辅助加速
如果是做验证,clock生成可以用更专业的写法
write和display的效果是完全一样的,只是display会自动换行
display,strobe和monitor的区别参看这篇文章:https://blog.csdn.net/a389085918/article/details/79924564
- 用$display()系统任务来显示当前变量的值。
- 用$strobe()系统任务来显示用非阻塞赋值的变量值。
- 用$monitor()监控和输出参数列表中的表达式或变量值。
阻塞赋值发生在active区,非阻塞赋值在non-blocking区;strobe/monitor在monitor区因此得到的值是不一样的。
图形化界面中,View -> Data Cycle -> Expand Time 可以看到边沿处的时间顺序(需要打开选项)
总的来说display的观察结果比strobe/monitor更接近实际情况。
- system_functions.v
!==为不全等,在验证当中是比较有用的判断条件,如果语句中含有x则判断结果也是x
断言(assertion)是用作仿真的,不可综合
可以异步置位和异步复位的flipflop
always @(*)和always @(所有信号)的选择?两个视频说法不同
**后面另外介绍了flip-flop、latch和MUX的电路,包含同步复位、异步复位、同步置位等不同功能。
- serial_shift
- 电路设计步骤:
0.优化算法
1.构建架构图(框图)
2.针对小功能考虑接口、功能、核心控制逻辑、状态机、数据path
3.写代码
第十二课
一种三输出MUX,用default简化逻辑并避免latch:
行为级移位寄存器的写法:
是否可综合只取决于语法,与用什么级别的描述语言无关。
- JTAG
JTAG属于DFT(design for test)的范畴
触发器要用可扫描的触发器,MUX+FF可以组成边界扫描寄存器,也是经常用于芯片测试的结构。
可以看到在端口中专门提供了四个input用作JTAG测试
**DFT设计之后,拿到芯片时会用专门的设备对其测试,设备会按照时间收费。对于芯片来说不可能遍历所有的信号,因此会要求尽量压缩测试信号向量
以下是在.sct文件中的设置:
DC软件将综合功能和DFT功能集成在一起