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
建模步骤
建模步骤
- 用MAST语言编写一个template,其实就是一个saber和外部程序的接口。可以用记事本编写,保存成*.sin文件。
- 采用C语言描述模型的行为特征,包括模型的端口及内部逻辑,该步骤建立了模型的源文件,后缀为.c的文件;
- 采用编译指令对C源文件进行编译,生成动态链接库文件,后缀为.dll。该步骤之前需要安装C编译器,如VS2019等;
- 在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。
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。
3.生成.dll文件***
- 确保你可以从命令行访问C编译器。编译器的版本位数需要和使用的Saber版本位数一致,使用的SaberRD64-T-2022.03版本,所以对应使用64位的编译器。
- 在命令提示符处键入编译命令“cd”,紧接输入*.c文件所在的文件夹路径
- 进入文件夹之后键入>cl /LD 文件名称.c
- 程序会自动进行编译生成*.dll文件
- 将输出一个名为ADD.dll 的文件,位于当前目录中
4.生成模型
- 将ADDER文件夹的所有文件复制到电路模型design的根目录下
- 在saber中新建一个symbol,跟步骤一的template建立连接,仿真的时候用的就是这个symbol,保存成*.ai_sym文件,对模型进行保存、使用,也可以将模型添加到模型库中
5.仿真及结果
- 将模型加载到design进行电路仿真测试
- 设置k为2.0
- 仿真可得与预想一致结果
-
仿真器
+关注
关注
14文章
1019浏览量
83983 -
VHDL语言
+关注
关注
1文章
113浏览量
18129 -
C语言
+关注
关注
180文章
7616浏览量
138001 -
加法器
+关注
关注
6文章
183浏览量
30253
发布评论请先 登录
相关推荐
SaberRD示例设计:三相230V交流转28V直流变换器
![<b class='flag-5'>SaberRD</b>示例设计:三相230V交流转28V直流变换器](https://file1.elecfans.com/web2/M00/B4/94/wKgZomVv6AmAWjskAAD6QwPLeKc521.jpg)
怎么用LabVIEW调用C语言程序
labview应用程序调用外部vi的问题
如何在Quartus13.0中调用Modelsim详细的步骤说明
![如何在Quartus13.0中<b class='flag-5'>调用</b>Modelsim详细的<b class='flag-5'>步骤</b>说明](https://file.elecfans.com/web1/M00/99/63/o4YBAF0Zs9eAPo5pAAOsYa0uxWw552.png)
Oracle外部例程-plsql调用com对象讲解
![Oracle<b class='flag-5'>外部</b>例程-plsql<b class='flag-5'>调用</b>com对象讲解](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Oracle如何实现外部调用功能讲解
![Oracle如何实现<b class='flag-5'>外部</b><b class='flag-5'>调用</b>功能讲解](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Oracle调用外部动态库的设置方法
![Oracle<b class='flag-5'>调用</b><b class='flag-5'>外部</b>动态库的设置方法](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
评论