IC基本知识学习
1. verilog语法
1.1 generate语句
generate语句有generate_for、generate_if、generate_case三种语句。
1.1.1 generate_for语句
- 必须使用genvar申明一个正整数变量,用作for循环的判断。
- 需要复制的语句必须写到begin_end语句里面。就算只有一句!!!
- begin_end需要有一个类似于模块名的名字。
1.1.2 generate_if语句
generate_for用于复制模块,而generate_if则是根据模块的参数(必须是常量)作为条件判断,来产生满足条件的电路。相当于判断语句。
1.1.3 generate_else语句
generate_case其实跟generate_if一样,都是根据参数(都必须为常量)作为判断条件,来产生满足条件的电路,不同于使用了case语法而已。
参考:https://blog.youkuaiyun.com/qq_38428056/article/details/84821982
2. 关于约束
set_false_path和set_disable_timing的区别
参考:https://zhuanlan.zhihu.com/p/89816997
以下关与False-path正确的是(A)
A. 一般异步电路可以设置为False-path
B. 两个不同频率的接口一定可以设置为False-path
C. 一般异步复位可以设置为False-path
D. 一般模拟IP和系统的互联接口都可以设置为False-path
分析:false pth就是我们进行综合分析时,不希望综合工具分析的那些路径。一般在以下两种情况下使用
- 从逻辑上考虑,与电路正常工作不相关的那些路径,比如测试逻辑,静态逻辑等
- 从时序上考虑,我们在综合时不需要分析的那些路径,比如跨越异步时钟域的路径
3. 关于时序分析
3.1setup time violation 和 hold time violation
3.1.1 解决场合
setupviolation在综合时候解决。constrain有一些技巧。实在不行,就要改RTL.
holdtimeviolation在layout中解决,Astro会自动加上buffer的。但是最后几条软件也解决不了的path,就要靠最聪明的人脑了。
3.1.2 解决方法
1.holdviolation好修,一般通过在datapath上加buffer。
2.setupviolation一般通过减少datapath延时,或者通过延迟参考时钟(降频),但延迟参考时钟有可能会使下一级register产生setupviolation。
参考:https://blog.youkuaiyun.com/weixin_33681778/article/details/92325859
4. 关于验证
4.1 集成验证、单元验证、系统验证
参考:
https://blog.youkuaiyun.com/wanwenweifly4/article/details/6436781
https://blog.youkuaiyun.com/weixin_34368949/article/details/93315111?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
4.2 SystemVerilog
4.2.1 并发进程与内部通信
sv提供了下列处理并发进程的能力:
fork…join并发结构,
通过mailbox实现进程间的通信,
通过semaphore实现进程互斥与仲裁,
通过event实现进程之间的同步
参考:https://www.cnblogs.com/xh13dream/p/9051089.html