1.SystemVerilog $unit ç¼è¯åå
ä»ç»
2.Verilator简介与使用
3.Systemverilog实现参数化的Round-Robin Arbiter Tree
4.xcelium笔记 | SimVision调试SystemVerilog简介
5.iStyle(version1.23)的编译及在VScode中的使用
SystemVerilog $unit ç¼è¯åå ä»ç»
SVä¸å¢å äºç¼è¯åå çæ¦å¿µï¼å°±æ¯ SVæºæ件ç¼è¯çæ¶åï¼ä¸èµ·ç¼è¯çæææºæ件ç¼è¯åå åå¨æ索顺åºä¸æ第ä¸ä½
举个æ å
è¿éæ们å建äºä¸¤ä¸ªå ï¼a_dpkåb_dpkï¼ï¼ä¸¤ä¸ªå ä¸çé½åªæä¸ä¸ªæå°å½æ°ï¼åæ¶moduleä¸ä¹æä¸ä¸ªæå°å½æ°ï¼ï¼æå°å½æ°ç¨äºæ示æå¨ä½ç½®ï¼
æå°ç»æå¦ä¸ï¼
image-
è¿è¡ç»æå¦ä¸ï¼
å¯ä»¥çå°æ¤æ¶æå°çæ¯å¨moduleä¸å¯¼å ¥çå
é£ä¹æ¥ä¸æ¥æ们æå¨moduleä¸å¯¼å ¥çå 注éæï¼å³æ import a_dpk::*; 注éæ
ä¸é¢è¿è¡ç»æï¼
æ¤æ¶ç»äºæå¯¼å ¥$unitç¼è¯åå åçå 容æå°åºæ¥äº
è¿ä¹å°±æ¯ä¸ºä»ä¹ ç¼è¯åå åå¨æç´¢è§åä¸æ第ä¸
é£ä¹ä¸ºä»ä¹ç¼è¯åå åå« $unit å¢ï¼æ们å¯ä»¥åæ代ç æ´æ¹ä¸ä¸
æ们æ b_dpk 注éæï¼ä½ä¾æ§å°å ¶å¯¼å ¥ï¼ççè¿è¡ç»æ
è¿éç´æ¥æ¾ç¤ºéè¯¯å¨ $unit ï¼æ许$unitåªæ¯ä¸ä¸ªå称ï¼å°±å¥½åä¸ä¾ä¸moduleå½å为 test_tb ä¸æ ·
æ ¼å¼ä¸ºï¼
è¿æ¯Cè¯è¨ä¸å¸¸ç¨çæå·§ï¼å¦æ第ä¸æ¬¡éå°å¯¼å ¥è¯å¥å°å ¶ç¼è¯å°$unitä¸ï¼å次åºç°åä¸ä¼ç¼è¯
ä¸é¢æ们å°ä¸ç¯ç¬è®°ä¸çå ç¨è¿ç§æ¹å¼ä»¿çä¸ä¸ï¼å ç»åºä¸ç¯ç¬è®°ä¸å çå 容
æ们å°æ件åå½å为 definitions.dpk ï¼å ¶ä¸åç¼ .dpk æ¯é便起ç
ä¸é¢æ¯æºç åæµè¯æ件
è¿è¡ç»æå¦ä¸
æ¬æ主è¦åè
Verilator简介与使用
Verilator是一个开源的Verilog和System Verilog翻译器,专为快速模拟而设计,能执行lint代码质量检查,并编译为多线程C++或SystemC。
在使用Verilator时,通常需要配合Makefile,优库源码通过一个简单的Hello World示例来理解。首先,创建一个名为our.v的Verilog程序,然后编写sim_main.cpp,它负责调用Verilator处理后的模型。在Ubuntu环境下,通过Verilator将our.v翻译并生成一系列cpp和h文件,这些文件存储在--Mdir指定的目录或默认的"obj_dir"中。
编译生成的过线买指标源码C++源代码,执行后,你会看到控制台输出"Hello World",这表明Verilator翻译后的程序行为与原始Verilog一致。Verilator的作用是将Verilog或System Verilog代码转换成可编译的形式,便于仿真和结果分析。
Verilator的执行过程涉及静态代码检查,将代码编译成多线程模型,提供C++/SystemC接口,并支持用户编写驱动程序。它能提供与商业模拟器类似甚至更好的性能,特别是在单线程和多线程环境下。例如,它能在单线程下比解释式模拟器快倍,多线程情况下速度提升更显著。用grep分析源码
翻译后的代码结构包括Vour.h头文件,定义了用户应实例化的模型接口,以及Vour.cpp和内部.h/cpp文件。通过Vour.mk文件,配合Make构建静态库。C++模式下,用户编写C++ wrapper,而在SystemC模式下,模型会直接融入System C网表。
以FIFO为例,通过C++或SystemC实例化,可以看到Sim_main.cpp在不同输出模式下的驱动程序效果。最终,仿真结果可通过GTKwave等工具查看。年龄计算html源码
对于Verilator的使用和功能,如有任何疑问,可以参考官方手册:Veripool。
Systemverilog实现参数化的Round-Robin Arbiter Tree
深入解析系统Verilog实现的参数化Round-Robin Arbiter Tree,该代码源于PLUP的common cell仓库,旨在提供一种灵活高效的仲裁解决方案。阅读此类高质量源码是提升编程技能的捷径。
核心功能在于自动调整轮询顺序,Round-Robin Arbiter Tree自动循环分配资源请求,确保公平性。通过参数化设计,允许用户根据具体需求灵活配置,实现适应不同场景的高性能资源管理。
代码分析揭示了其内部工作原理。iapp源码剪辑照片采用递归结构构建树形仲裁器,自顶向底执行资源分配。节点间通过系统Verilog的并发特性,实现高效同步与数据交换,确保在多请求竞争下,系统仍能维持稳定高效运行。
对于开发者而言,理解此类代码不仅能提升编程技巧,还能深入掌握硬件描述语言在实际应用中的魅力。代码简洁且结构清晰,易于理解。通过阅读并分析此类源码,可以学习到如何在系统设计中实现复杂逻辑,优化资源分配,以及如何在硬件描述语言中实现高效并发处理。
相关资源推荐:
- 访问知乎flappylyc的分享,了解更多关于系统Verilog和硬件设计的深入见解。
- 博客园love小酒窝的系列文章,提供实践指导和案例分析。
- CSDNlove小酒窝的CSDN博客,专注于IC领域的技术分享。
- 关注公众号,获取更多关于系统Verilog和Round-Robin Arbiter Tree的实用信息。
通过系统Verilog实现的参数化Round-Robin Arbiter Tree,展示了硬件描述语言在解决实际问题中的强大能力。阅读和学习此类源码,不仅能够提升个人编程技能,还能深刻理解硬件设计的精髓。
xcelium笔记 | SimVision调试SystemVerilog简介
Xcelium工具的SimVision功能提供图形化界面,支持SystemVerilog代码调试,内置svdebug工具辅助验证环境调试。
SystemVerilog调试布局由三部分组成:左上角的Design Browser,显示仿真对象;右上角的Source Browser,展示源代码;下侧的Waveform window,用于查看波形。
要启动调试布局,请执行“Window – Layout – SystemVerilog Debugging”操作。
通过Design Browser,可查看对象实例及其层级关系,数据成员,以及包含的task和function。右击目标后选择“Send to Source Browser”以查看源码。
使用Waveform Window,可对静态变量、类变量、队列、打包结构、打包数组、关联数组、动态数组进行查看。
Schematic Tracer功能展示接口、modports与RTL之间的连接关系,帮助深入了解设计。
SimVision还包含其他调试窗口,进一步支持SystemVerilog代码调试,提供全面、直观的调试体验。
iStyle(version1.)的编译及在VScode中的使用
iStyle用于处理Verilog代码的格式,使之统一。
在VScode中使用iStyle,可选择扩展如"verilog-formatter"或"Verilog-HDL/SystemVerilog/Bluespec SystemVerilog"。
安装扩展"verilog-formatter"并确保同时安装"Verilog-HDL/SystemVerilog/Bluespec SystemVerilog"。在"Verilog-HDL/SystemVerilog/Bluespec SystemVerilog"中配置iStyle,但未成功。
iStyle的源代码可在线获取,版本1.和1.在TAG里。
可从他人下载编译好的1.版本的windows可执行exe文件,或从Google搜索原版iSytle(1.版本)。
自行编译iStyle时,将1.版本编译成windows可执行exe文件。在Linux环境下,使用Makefile编译同样可行,但可能需要调整以适应C++项目。
在VScode的setting.json文件中添加必要的配置。
对格式混乱的Verilog代码,右键选择"format document with"或"format document",然后选择verilog-formatter进行格式化。
操作后,文件将被统一成iStyle规定的风格。