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

电子说

1.3w人已加入

描述

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”的函数:

Linux系统

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的源代码:

Linux系统

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例程头文件,具体情况取决于你所使用的环境。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分