SaberRD调用外部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。

01

建模步骤

建模步骤

  1. ‍用MAST语言编写一个template,其实就是一个saber和外部程序的接口。可以用记事本编写,保存成*.sin文件。
  2. 采用C语言描述模型的行为特征,包括模型的端口及内部逻辑,该步骤建立了模型的源文件,后缀为.c的文件;
  3. 采用编译指令对C源文件进行编译,生成动态链接库文件,后缀为.dll。该步骤之前需要安装C编译器,如VS2019等;
  4. 在saber中新建一个symbol,跟上面的template建立连接,仿真的时候用的就是这个symbol,保存成*.ai_sym文件,对模型进行保存使用,也可以将模型添加到模型库中。

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

02

具体操作:加法器ADD案例

1.MAST语言编写template

  • 声明该template 类型:element,电气型,并定义管脚名称
  • 声明管脚类型:electrical,并用逗号分隔
  • 花括号进入程序内容
  • foreign为外部程序引入
  • val定义全局变量
  • var定义局部变量
  • values定义vi1,vi2的值
  • vosum定义add和
  • equation为固定的方程格式
  • 电流i 从sum流向gnd ,每个模型对节点电流的作用应该是使其增加相应值,+=是赋值符号
  • 固定格式,表示i1的值由随后的关系式确定。

*.sin 文本:

template ADDER_1 in1 in2 out1 out2 = k

input nu in1,in2

output nu out1,out2

number k=1

{

foreign PWM

val nu a,b

a=PWM(k*in1,in2)

b=PWM(in1,k*in2)

out1=a

out2=b

}

注:文件名称和程序名称一致,否则无法识别;

并将记事本的*.txt格式改为*.sin。

C语言

2.外部程序.c文件

  • 灰色字体为头文件固定格式
  • 花括号进入c语言程序,依照c语言逻辑编写程序

*.c 文本:

_declspec(dllexport) void PWM

(in,nin,ifl,nifl,out,nout,ofl,nofl,undef,ier)

double in; / pointer to input parameter */

int nin; / number of input parameter */

int ifl; / not used here */

int nifl; / not used here */

double out; / pointer to output parameter */

int nout; / number of output parameter */

int ofl; / not used here */

int nofl; / not used here */

double undef; / not used here */

int ier; / not used here */

/* End of Saber header information */

{

double in1,in2,out1,out2;

in1=in[0];

in2=in[1];

out1=in1+in2;

out2=in1+in2;

out[0]=out1;

out[1]=out2;

}

注:文件名称和程序名称一致,否则无法识别;

并将记事本的*.txt格式改为*.c。

C语言

3.生成.dll文件***

  • 确保你可以从命令行访问C编译器。编译器的版本位数需要和使用的Saber版本位数一致,使用的SaberRD64-T-2022.03版本,所以对应使用64位的编译器。

C语言

  • 在命令提示符处键入编译命令“cd”,紧接输入*.c文件所在的文件夹路径
  • 进入文件夹之后键入>cl /LD 文件名称.c
  • 程序会自动进行编译生成*.dll文件

C语言

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

C语言

4.生成模型

  • 将ADDER文件夹的所有文件复制到电路模型design的根目录下
  • 在saber中新建一个symbol,跟步骤一的template建立连接,仿真的时候用的就是这个symbol,保存成*.ai_sym文件,对模型进行保存、使用,也可以将模型添加到模型库中

C语言

C语言

5.仿真及结果

  • 将模型加载到design进行电路仿真测试

C语言

  • 设置k为2.0

C语言

  • 仿真可得与预想一致结果

C语言

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

全部0条评论

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

×
20
完善资料,
赚取积分