使用 Synopsys VCS 生成 SystemVerilog DPI 组件的 HDL 验证器,将 SystemVerilog DPI 组件从 MATLAB 生成用于 Synopsys VCS 模拟

  💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

 ⛳️赠与读者

💥1 概述

1. 在MATLAB中设计和实现DPI组件

2. 生成C代码并准备DPI接口

3. 编写SystemVerilog测试平台和DPI声明

4. 使用VCS进行编译和仿真

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

使用 Synopsys VCS 生成 SystemVerilog DPI 组件的 HDL 验证器,将 SystemVerilog DPI 组件从 MATLAB 生成用于 Synopsys VCS 模拟。

要使用Synopsys VCS生成一个SystemVerilog DPI(Direct Programming Interface)组件的HDL验证器,并将该组件从MATLAB环境集成到Synopsys VCS进行模拟,您需要完成以下步骤:

1. 在MATLAB中设计和实现DPI组件

首先,您需要在MATLAB中定义那些您希望通过DPI接口与SystemVerilog交互的功能或任务。这通常涉及到使用MATLAB/Simulink编写算法或模型,并通过MATLAB Coder或Embedded Coder将其转换为C代码。

  • 设计MATLAB函数:确保您的MATLAB函数能够以C语言兼容的方式封装您的算法。
  • 使用MATLAB Coder:将MATLAB函数转换为C代码。这一步可能需要配置代码生成设置,以便生成的C代码兼容于DPI。

2. 生成C代码并准备DPI接口

MATLAB Coder生成的C代码需要进一步改编,以符合SystemVerilog DPI的要求。这通常涉及编写一个"wrapper",该包装器遵循DPI的规范,并调用您的原始C函数。

  • 创建DPI C Wrapper:根据SystemVerilog DPI规范,编写一个C函数作为接口,该函数能够被SystemVerilog调用。这个函数负责初始化、参数传递和调用MATLAB生成的C函数。
  • 编译C代码为库:使用适当的编译器(如gcc),将DPI wrapper以及MATLAB生成的C代码编译为动态链接库(例如.so文件)。

3. 编写SystemVerilog测试平台和DPI声明

在SystemVerilog环境中,您需要声明DPI函数,并编写一个测试平台来调用这些函数。

  • DPI声明:在SystemVerilog模块中,使用import "DPI-C"声明语句来导入C函数。
  • 测试平台:创建一个测试平台,其中包含对DPI函数的调用,以及必要的信号驱动和监视逻辑。

4. 使用VCS进行编译和仿真

最后,使用Synopsys VCS编译您的SystemVerilog测试平台和之前生成的C库,然后进行仿真。

  • 编译SystemVerilog代码:使用VCS命令行工具编译SystemVerilog源文件。您需要指定DPI库的位置,以便VCS可以找到并链接C库。
    1vcs +libext+.so -sverilog -debug_access+all your_testbench.sv -LDFLAGS "-L/path/to/your/library -ldpi_wrapper"
  • 运行仿真:编译完成后,运行仿真并观察结果。
    1./simv

📚2 运行结果

主函数代码:
%% Reset workspace, clear command prompt, close all figures
clear;
clc;
close all force
clear Stimulus;

%% set video frame size parameters
nRows=240;
nCols=320;
nFrames = 20;

%% Create video players
inVideoPlayer = vision.VideoPlayer('Name', 'Input', 'Position', [200 600 nCols nRows]);
outVideoPlayer = vision.VideoPlayer('Name', 'Output', 'Position', [1200 600 nCols nRows]);

%% loop through each frame, calling the edge detection algorithm
for i = 1:nFrames
    inputFrm = Stimulus; % read the next video frame
    inVideoPlayer(inputFrm);
    outputFrm = EnhancedEdgeDetection_alg(inputFrm);
    outVideoPlayer(outputFrm);
    
    % sanity checking test for the scoreboard....error rate should be 0
    errRate = EED_scbd(inputFrm, outputFrm);
    disp(['Error rate: ', num2str(errRate)]);
end

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]Synopsys Inc.Synopsys将提前在其VCS仿真器内支持SystemVerilog 3.1[J].[2024-07-09].

[2] Sutherland S .Modeling with SystemVerilog in a Synopsys Synthesis Design Flow Using Leda, VCS, Design Compiler and Formality[J].  2003.DOI:doi:http://dx.doi.org/.

[3] Goering R .Synopsys 'pioneers' SystemVerilog testbench tool[J].Electronic Engineering Times, 2005(1390):p.48.

🌈4 Matlab代码实现

资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值