0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Saber中使用C语言进行建模呢?

冬至子 来源:Saber仿真 作者:Greatalent 2023-12-05 11:30 次阅读

Saber不仅支持MAST语言和VHDL‐AMS语言建立模型,也支持C语言建立器件模型,这对熟悉C语言编程的用户带来了很大的方便和实用。采用C语言建立的模型可以像用硬件语言建立的模型一样保存和使用。

使用C编译器,能够将源代码编译为Windows的动态链接库.dll文件或Linux的.so文件。Saber支持最新的C编译器,Windows10平台可支持Microsoft Visual Studio 2019 v16.4.5;Linux平台支持GUN GCC 9.2.0。

一般步骤如下:

1.采用 C语言描述模型的行为特征,包括模型的端口及内部逻辑,该步骤建立了模型的源文件,后缀为.c的文件;
2.采用编译指令对 C 源文件进行编译,生成动态链接库文件,后缀为.dll。该步骤之前需要安装C 编译器,如VC++、gcc 等;
3.利用生成的动态链接库文件在 Saber 环境下生成Saber 模型,后缀为.sin 文件和.ai_sym文件,对模型进行保存使用,也可以将模型添加到模型库中。

上述步骤的关键是动态链接库文件的生成,动态链接库文件是生成Saber 模型的基础,是从C文件到Saber模型的桥梁。

注意:下文中使用“[ ]”来标识文本,括号内需要你填写有关你的设计和环境的具体信息

具体演示

1>编辑 C 代码以包含 Saber 连接到你的函数所需的信息。

C 例程头文件将以下行添加到你的 .c 文件中,将“[my_function]”替换为你的函数名称:

__declspec(dllexport) void [my_function]

(double* inp,long* ninp,long* ifl,long* nifl,double* out,long* nout,long* ofl,long* nofl,double* aundef,long* ier)

C例程示例

以下是包含示例的源代码,其中有一个名为“SQRCUBE”的函数:

图片

2>确保你可以从命令行访问 C 编译器。假设我们正在使用 Microsoft Visual Studio 在 Windows 上执行此任务。在命令提示符处键入编译命令“cl”以确保你可以访问该命令:C:> cl

你应该会收到一条使用消息,说明你没有包含源文件。

3>将源代码编译成动态链接库。从C代码所在的目录执行此操作。在编译源代码时,还需要为构建指定两个Saber库(libai_saber和lib_analogy):

C:[my_proj_dir]> cl /LD [source].c

[saber_install_dir]Saberliblibai_saber.lib

[saber_install_dir]Saberliblibai_analogy.lib

假设附件提供的示例与Saber2022.03的安装目录为都在C:Synopsys下,则具体的命令行将是:

C:SynopsysDLL_example > cl /LD sqrcube.c

C:SynopsysSaber64T-2022.0332liblibai_saber.lib

C:SynopsysSaber64T-2022.0332liblibai_analogy.lib

假设你使用了SaberRD,则具体的命令行将是:

C:SynopsysDLL_example > cl /LD sqrcube.c

C:SynopsysSaberRD64T-2022.0364liblibai_saberhdl.lib

C:SynopsysSaber RD64T-2022.0364liblibai_analogy.lib

其中:"/LD"是 Visual C++ 编译器选项,指定创建动态链接库。不同的编译器参数可能不同。

这将输出一个名为 sqrcube.dll 的文件,位于当前目录中。

4>现在,你可以在Saber模型中使用此功能。将该函数声明为外部例程,然后你将能够在Saber模型中使用它。以下示例说明了sqrcube函数的这一点。以下是sqrcube.sin的源代码:

图片

5>如果你的Saber模型还没有符号,请使用Saber的自动符号生成器创建一个。在Sketch中,选择文件>新建>符号。将显示一个符号页面,右键单击并选择符号>创建>模型中的符号。导航到所需文件夹并选择Saber模型 (.sin)。这将为选定的Saber模型创建一个符号。将符号保存在与Saber模型相同的目录中。

6>将该模型用作任何其他Saber模型。如果你想与其他人共享此模型,请确保包含 .dll文件以及符号和模型文件。另外请注意,这是特定于平台的。如果你在Windows上编译并希望在Linux上使用该模型,则必须将C代码重新编译为 .so 而不是 .dll。

示例使用

使用方法:

(A) 在 Sketch 中打开附加的测试原理图 (test.ai_sch)。

(B) 要运行瞬态分析,请单击分析 > 时域 > 瞬态。默认情况下,分析设置是从默认表单文件设置的。

(C) 在瞬态分析窗口中单击确定。

(D) 检查已经在原理图上的探针中的结果。

疑难解答

有时,你的环境可能与示例中提供的 .dll 文件不兼容。例如,如果你使用Windows以外的平台运行示例,则此示例中的 .dll 文件不兼容。

在这种情况下,将在Saber脚本窗口中收到以下错误:

Searching for licenses ... SABER_SIMULATOR: license.

Template sqrcube Template test Loading dynamic libraries... *** FATAL ERROR "ERR_NOT_FOUND" ***

File "sqrcube.dll" not found using "SABER_DATA_PATH"

要解决此问题,请使用上述说明重新编译C代码以创建动态链接库。可能还需要修改C例程头文件,具体情况取决于你所使用的环境。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux系统
    +关注

    关注

    4

    文章

    593

    浏览量

    27396
  • VHDL语言
    +关注

    关注

    1

    文章

    113

    浏览量

    18002
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136771
收藏 人收藏

    评论

    相关推荐

    何在linux下进行c语言编程

    何在linux下进行c语言编程
    发表于 08-20 22:55

    Saber软件功率MOSFET自建模与仿真验证

    利用功率MOSFET手册,利用Saber软件里的自建模工具对功率MOSFET进行建模,并仿真验证其性能。淘宝上搜索“功率MOSFET建模”,
    发表于 04-12 20:43

    请问如何在COSMIC C文件中使用汇编语言

    如何分配变量到指定的地址如何在COSMIC C文件中使用汇编语言如何观察RAM/FLASH/EEPROM的最终分配情况如何生成hex格式的输出文件什么是MEMORY MODELlkf
    发表于 11-20 07:48

    何在嵌入式系统设计中使用UML技术?

    统一建模语言UML及其特点UML在车载GPS终端设计中的应用如何在嵌入式系统设计中使用UML技术
    发表于 04-23 06:26

    何在C程序中使用汇编

    怎样在C程序中使用汇编,如何在C程序中使用汇编:方法一:在每个汇编语句前加asm即可。如:void reset_data(void) { a
    发表于 09-23 23:43 55次下载

    何在Saber中使用模块

    介绍了如何在Saber中使用这些模型.其实很简单,当你下载完基于Saber软件的模型(*.sin文件)以后,所需要做的事情就是为这个模型建立一个同名的符号(*.ai_sym文件),并设
    发表于 06-18 16:24 55次下载

    Saber建模方法

    接着来聊聊构建宏模型的建模方法,构建宏模型是指利用Saber软件的模板,根据器件的功能和内部构造,搭建器件模型。构建宏模型条件如下:1)没有现存单个模板存在;2)
    发表于 06-21 09:51 102次下载

    何在C++代码中使C头文件

    何在C++代码中使C头文件。从C++调用C头文件之前,C
    发表于 10-19 09:24 3次下载

    何在Vitis HLS中使C语言代码创建AXI4-Lite接口

    您是否想创建自己带有 AXI4-Lite 接口的 IP 却感觉无从着手?本文将为您讲解有关如何在 Vitis HLS 中使C 语言代码创建 AXI4-Lite 接口的基础知识。
    的头像 发表于 07-08 09:40 1825次阅读

    go语言代码中使用HTTP代理IP的方法

    何在go语言代码中使用HTTP代理IP。
    的头像 发表于 08-04 16:13 3177次阅读

    何在易e语言代码中使用HTTP代理IP

    何在易e语言代码中使用HTTP代理IP,示例代码demo直接可用(步骤注释清晰)
    的头像 发表于 08-05 16:29 6938次阅读

    何在c语言代码中使用HTTP代理IP

    何在c语言代码中使用HTTP代理IP,示例代码demo直接可用(步骤注释清晰)
    的头像 发表于 08-05 16:31 2349次阅读

    何在c#语言代码中使用HTTP代理IP

    何在c#语言代码中使用HTTP代理IP,示例代码demo直接可用(步骤注释清晰)
    的头像 发表于 08-05 16:33 2601次阅读

    何在arduino中使用I2c LCD模块

    电子发烧友网站提供《如何在arduino中使用I2c LCD模块.zip》资料免费下载
    发表于 10-26 14:29 1次下载
    如<b class='flag-5'>何在</b>arduino<b class='flag-5'>中使</b>用I2<b class='flag-5'>c</b> LCD模块

    ESL事务级建模语言简介

    是RTL级建模的最佳语言,有足够的精度如比特精确和周期精确,但缺乏高层次抽象的能力,而且对软件部分的描述无能为力。 而C/C++、Java等都是软件的优秀描述
    的头像 发表于 11-02 15:10 719次阅读