VHDL AMS 学习笔记
文章目录
- VHDL AMS 学习笔记
-
- 0. 简介
-
- 什么是VHDL-AMS?
- 为什么需要VHDL-AMS?
- 应用领域
- 离散与连续系统的区别
- 仿真周期
- 信号流与网络的区别
- 守恒系统与非守恒系统
- 1. 新的数据类型
-
- 数据类型
-
- 数量 (`quantity`)
- 分支数量-自然体
- 分支数量-声名
- 接口数量
- 终端
- 终端-属性
- 模拟数字接口
- 容错度
- 频率和噪音
- 方程
-
- 微分和代数方程
- 操作符
- 顺序语句
-
- 同步进程语句
0. 简介
什么是VHDL-AMS?
VHDL-AMS = Very High Speed Integrated Circuit Hardware Description Language for Analog and Mixed Signals (AMS即数模混合信号)
VHDL-AMS = IEEE VHDL 1076-1993 + IEEE VHDL 1076.1-1998
为什么需要VHDL-AMS?
-
电路集成度迅速提高 ?\longrightarrow? 缺少可测试界面
-
可同时对数字 + 模拟混合信号仿真
NOTES:
VHDL-AMS (Very High Speed Integrated Circuit Hardware Description Language for Analog and Mixed Signals) 是一只硬件描述语言用以对数字和模拟系统进行并行仿真,是对IEEE VHDL 1076-1993的扩展,即是其超集。VHDL-AMS便是IEEE 1076.1标准的俗称,其数字部分与VHDL’93兼容,继承了VHDL的语法与语义,保留了VHDL的设计风格,而其拓展的模拟部分则相对独立。
应用领域
VHDL:离散(数字)系统
- ASIC
- FPGA
- PLD
- 行为级设计+建模(综合)
VHDL-AMS:连续(模拟)+ 离散系统
- ASIC(手持设备,视频)
- 完整系统
- 非综合
NOTES:
其最重要的应用领域之一便是对ASIC (Application Specific Integrated Circuits专门应用集成电路) 和完整(物理)系统的仿真,尤其是移动通信(手持)和视频处理的操作区域,其中数/模信号被紧密连接。
离散与连续系统的区别
离散状态改变:
- 多变的
- 仅发生在可计数的时刻
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iOAI7RUE-1586961114013)(http://www.vhdl-online.de/_media/vhdl-ams/introduction/ams_discretestatechange.svg?w=400&tok=5dc213)]
连续状态改变
- 稳定
- 每时每刻都在改变
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u1fmLAtb-1586961114019)(http://www.vhdl-online.de/_media/vhdl-ams/introduction/ams_continuousstatechange.svg?w=400&tok=2719f1)]
NOTES:
离散(数字)系统会在许多确切时刻改变其状态,与之相对的是连续(模拟)系统的状态变化,其运行稳定且状态改变会发生在任意连续的时刻。因其连续性,对模拟系统任意两个时刻之间的仿真需要进行近乎无限次的运算。此时,结果的精度和计算工作量之间的平衡便是模拟信号仿真中的核心问题。混合信号仿真要求对两种信号类型(数模)同步以重建系统的真实行为。
仿真周期
NOTES:
实际的仿真周期是非常复杂的,因此仅介绍其简图。
仿真周期从初始化模拟信号开始,并确定下一个模拟计算的时间 Tc(当前时间)和下一个数字仿真的时间Tn(下一个时间)。只要没有发生数字,就可以计算模拟系统的方程,并确定下一次模拟计算的时间。在数字事件中,通过已终止的数字时间(Tn=0)或一个模拟到数字的事件,所有信号都会更新。然后执行敏感进程。在确定下一个数字事件的时间之后。 如果这次为0.0,则模拟完成。 如果此时间短于Tc,则数字周期将再次开始,否则模拟计算将继续。
信号流与网络的区别
信号流模型:
dydt=4×y+x\frac{dy}{dt}=4\times y+x dtdy?=4×y+x
? [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2TYvEeSE-1586961114025)(http://www.vhdl-online.de/_media/vhdl-ams/introduction/ams_signalflowcircuit.svg?w=300&tok=1a12d6)]
- 信号流有方向
- 对之前的系统元件无对冲
网络模型:
u=R×i+1C×∫i×dtu = R\times i+\frac{1}{C}\times \int i\times dt u=R×i+C1?×∫i×dt
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rGy4APAD-1586961114031)(http://www.vhdl-online.de/_media/vhdl-ams/introduction/ams_networkcircuit.svg?w=300&tok=1b7aa4)]
- 信号流无方向
- 有可能有对冲
NOTES:
网络及系统的信号流模型都能进行仿真。在信号流模型仿真中信号流是有方向的,任何路径的信号都不会对先前的系统组件产生反冲。而在网络仿真中则是没有信号流向的,因为网络内部可能存在反冲。源上的反冲会影响到源的信号,因此网络的仿真比信号流的仿真更为复杂。
守恒系统与非守恒系统
一般定义:遵守能量守恒定律 ?\Rightarrow? 守恒系统
- 网络模型 ?\Rightarrow? 遵循基尔霍夫定律 ?\Rightarrow? 系统的能量守恒
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PR2arPdu-1586961114035)(http://www.vhdl-online.de/_media/vhdl-ams/introduction/ams_conservativesystem.svg?w=300&tok=be2152)]
一般定义:能量可以等比例变化 ?\Rightarrow? 非守恒系统
- 信号流模型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9RahPAPI-1586961114040)(http://www.vhdl-online.de/_media/vhdl-ams/introduction/ams_nonconservativesystem.svg?w=150&tok=9b9bce)]
NOTES:
在系统建模中经常需要体现系统的能量守恒性质,例如电学系统需要遵守基尔霍夫定律,因此网络建模属于守恒系统的建模。而如信号流模型这种非守恒系统则不必遵守守恒定律。
1. 新的数据类型
数据类型
数量 (quantity
)
NOTES:
一个数量可以表示一个模拟物理规则(自然体
nature
)。它通常被用作:
- 信号流仿真时模块的接口
- 分支数量
- 自由数量
一个自由数量表示一个内部模拟量,其物理性质可以构造体中被赋初值(像信号和变量一样)。在构造体中声明该数量的句法为:
{free_quantity_name} : {data type, i.e. real} [:= {initial_value}];
分支数量-自然体
nature | across | through |
---|---|---|
electrical | voltage | current |
thermal | temperature | heat flow |
mechanical | velocity | power |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NbcM2cPD-1586961114044)(C:\Users\romar\Pictures\ams_acrossthrough.svg)]
- 跨过
across
:两节点之间的信号差 - 穿过
through
:通过两节点链接的信号流
NOTES:
分支数量被细分为两节点之间的势差(跨)和通过两节点的链接的流(穿)。在其最重要的应用领域,电气系统仿真中,跨过数量即为两节点之间的电压,穿过数量则代表穿过两节点的链接的电流。分支数量是一个内部对象。
分支数量-声名
PACKAGE electrical_system ISSUBTYPE voltage IS real;SUBTYPE current IS real;NATURE electrical ISvoltage acrosscurrent through;...
END PACKAGE electrical_system;
nature electrical →\rightarrow→ package electrical_system →\rightarrow→ library IEEE, Disciplines
ARCHITECTURE arc OF ENTITY ISquantity v1 across ia, ib through k1 TO k2;quantity v2 across k3 TO k4;...
BEGIN...
END ARCHITECTURE arc;
- 在构造体声名部分中声名
- 任何位置的信号都可以
NOTES:
分支数量在构造体的声名部分声名,示例中的数量已在库
LIBRARAY IEEE, Disciplines
中相应的包(package
)中被定义,其句法是:quantity {all across quantities, separated by commas} across quantity {all through quantities, separated by commas} through {plus terminal} to {minus terminal}
必须声名至少一个跨过数量或一个穿过数量。两相同节点之间的多个跨过数量其值相等。两节点之间的多个穿过数量则表示了其之间的多个平行链接。
接口数量
ENTITY test ISPORT(quantity A, B, C: IN real;quantity X, Y, Z: OUT real_vector);
END ENTITY test;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pnNSCnrT-1586961114047)(C:\Users\romar\Pictures\ams_interfacequantity.svg)]
- 用于标定信号流的方向:input/output
- 在端口列表或构造体中声名
- 要为节点分配模式(input/output)和数据类型
- 新数据类型:
real
- 新向量类型:
real_vector
TYPE real_vector IS ARRAY(natural RANGE <>) OF real;
NOTES:
一个数量也可以是一个模块的接口,所以我们可以用其来描述一个定向的信号流。端口数量以其模式(即输入/输出)被声名在相应实体的端口列表中。句法为:
PORT (quantity {all quantities of the same mode}: {mode i.e IN, OUT} {data type});
接口数量是一个导入/导出的对象。
终端
ENTITY example ISPORT(terminal inp, outp: electrical;terminal T: thermal;...);
END ENTITY example;ARCHITECTURE bhv OF example ISterminal k1, k2, k3: electrical;...
BEGIN...
END ARCHITECTURE bhv;
- 终端(单个点)
- 有物理特征
- 要为其分配性质
- 作为输入/输出功能的节点要在端口列表声名,其余的则在构造体中
- 产生一个网表
NOTES:
终端表示一个必须分配其性质的单个点。当其作为端口节点时,它在实体的端口列表处声名,否则在构造体处声名。终端生成系统的网表。因此,终端是双向的且没有模式(即输入,输出…),比如电阻模型的两个端口。
终端-属性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bz5jzOEg-1586961114051)(C:\Users\romar\Pictures\ams_terminalattributes.svg)]
T’Reference
- 表示一个跨过数量
- 终端与参考节点(即接地)之间的电压
- 从高位到低位,如高电位到低电位
T’Contribution
- 表示一个穿过数量
- 其值等于入射到终端的所有穿过数量的总和
NOTES:
为了给终端分配属性,可以使用符号如
T'Reference
和T'Contribution
。句法为:{terminal_name}'Reference {terminal_name}'Contribution
T'Reference
是一个在终端T与参考节点之间的跨过数量,这个参考节点本质上即是电气系统中的接地,但也可以自己定义。T'Contribution
的值等于入射到终端T的所有穿过数量的总和。
模拟数字接口
- 模拟信号的值超过了一个门限值 E
- 触发数字部分的事件
- 新信号:
Q'Above( E )
- Q 的值超过了 E →\rightarrow→
Q'Above( E ) = 'TRUE'
- E 不必是个静态值
NOTES:
为了描述模拟与数字信号之间的接口,可以使用信号:
Q'Above( E )
,其类型为布尔型。语法:{quantity_name}'Above({threshold})
当一个数量 Q 的值超过一个阈值 E ,它可能触发一个数字部分的事件,即一个进程可能对信号
Q'Above( E )
敏感(敏感信号)。Q 大于 E 即为 “TRUE”(1),否则为 “FALSE”(0)。阈值 E 必须具有与数量 Q 相同的数据类型,但其不必在时间上为静态。
容错度
- 通常微分方程没有解析解
- 容错度
tolerance
- 它的值决定方程解的质量 - 任何数量和方程都属于一个容错度集合
- 容错度集合可以被使用者定义
- 容错度
tolerance
为一字符串表达式
quantity cur: real tolerance "current";
X == Y'Dot tolerance "low_voltage"
NOTES:
通常情况下,微分方程是没有解析解的。对于 VHDL-AMS 的仿真,其内置几种不同的数值方法求解微分方程。实际上,数值求解出来的仅是近似结果,而该解的精确性则是由
tolerance
的规格决定的。容错度的值越低,结果的精确度越高。但是更精确的结果需要更多的时间。每个数量和方程都属于一个容错度集合,容错度集合的所有成员都具有相同的容错度特征。容错度后面所跟的字符串不是 VHDL-AMS 的一部分,而是用于传递参数到模拟仿真器(例如,仿真器可能有这样一个控制命令:.OPTION LOW_VOLTAGE = 1.0e-3
)。语法为:{quantity or equation} tolerance "{string_expression}";
频率和噪音
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UNzDdsm6-1586961114054)(C:\Users\romar\Pictures\ams_frequencyandnoise.svg)]
频率仿真
- 频谱源:幅值+相位
- 关键字:
spectrum
噪声仿真
- 支持频域仿真
- 噪声源:振幅谱
- 关键字:
noise
ARCHITECTURE freq OF I_source ISquantity spec: current spectrum mag, phase;quantity thns: current noise sqrt( 4.0 * cnst / temp );quantity i through p to m;...
BEGINi == ampl * sin( 2.0 * math_pi * frequ * NOW ) + spec + thns;
END ARCHITECTURE freq;
NOTES:
频域仿真基于小信号模型,该模型通过线性化关于静态点的方程获得。频域仿真可以对一个频谱源数量仿真。频谱源数量的参数为其幅度和相位。该源数量可能是与信号的频率有关,因此只能在源数量的声名中调用预定义的函数
frequency
。语法为:quantity {source_name} : {kind_of_source, i.e. current} spectrum {magnitude}, {phase}
同样也可以对噪声进行频域建模。一个噪声源数量可以被指定为一个噪声谱,其参数为信号的振幅。语法为:
quantity {source_name} : {kind_of_noise_source, i.e. current} noise {magnitude};
方程
微分和代数方程
对系统的扩展描述:
微分方程(Differential Equations)+ 代数方程(Algebraic Equations) ?\Rightarrow? DAE’s
可表示为: F(dXdt,X,t)=0F(\frac{dX}{dt}, X, t) = 0F(dtdX?,X,t)=0
- F := 表达式向量
- X := 未知数向量
- t := 时间
- [方程数量] = [未知数数量] →\rightarrow→ 可解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bp0q6XT7-1586961114071)(C:\Users\romar\Pictures\ams_daequantities.svg)]
NOTES:
现在可以通过在VHDL基础上加入代数和微分方程(DAE)来对系统进行描述,这些 DAE 具有如下形式: F(dXdt,X,t)=0F(\frac{dX}{dt}, X, t) = 0F(dtdX?,X,t)=0 。F 是表达式,X 是方程中的未知数向量,dXdt\frac{dX}{dt}dtdX? 是 X 对时间 t 的一阶导数。仅当独立方程的数量与未知数数量相等时,描述系统的方程组才可解。这些未知数只可能时穿过数量,自由数量,或节点 ‘out’ 处的端口数量,因此跨过数量不能作为系统的未知数。
操作符
Q'Dot |
对时间微分 |
---|---|
Q'Integ |
对时间积分 |
Q'Delayed( delay_time ) |
时间延迟数量 |
Q'Ltf( numerator_coefficients, denominator_coefficients ) |
拉普拉斯变换函数 |
Q'ZOH( sampling_period [, initial_delay] ) |
零阶保持 |
Q'Ztf( numerator_coefficients, denominator_coefficients, sampling_period [, initial_delay] ) |
z变换函数 |
Q'Slew( [max_rising_slope [, max_falling_slope]] ) |
slew 数量 |
S'Ramp( [rising_time [, falling_time]] ) |
斜坡信号 |
S'Slew( [max_rising_slope [, max_falling_slope]] ) |
slew 信号 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N8NuXxuq-1586961114890)(C:\Users\romar\Pictures\ams_inductance.svg)] | i == 1 / L * u'Integ; |
---|---|
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9yyDRn8U-1586961114891)(C:\Users\romar\Pictures\ams_capacity.svg)] | i == C * u'Dot; |
NOTES:
对于方程的表示,可以使用以上列表中的语句
- Q 对应一个数量,S 对应一个信号
Q'ZOH
,Q'Ztf
:参数initial_delay
以秒为单位,当其缺省时默认为0.0Q'Slew
:一个伴随 Q 的数量,但是它的导数信号转换速度受指定斜率的限制
- 当
max_rising_slop
缺省时,默认值为Real'HIGH
,即斜率接近正无穷- 当
max_falling_slop
缺省时,默认值为0.0,即斜率接近负无穷S'Ramp
:一个伴随信号 S 的数量,但是被指定了上升和下降时间
- 当
rising_time
缺省时,其默认值为0.0- 当
falling_time
缺省时,其默认与rising_time
的值相等S'Slew
:一个伴随信号 S 的数量,但是它的导数信号转换速度受指定斜率的限制
- 当
max_rising_slop
缺省时,默认值为Real'HIGH
,即斜率接近正无穷- 当
max_falling_slop
缺省时,默认值为0.0,即斜率接近负无穷例:对一个数量 Q 求其对时间的二阶微分:
Q'Dot'Dot
顺序语句
同步进程语句
procedural [is]procedural_declarative_part;
beginprocedural_statement_part;
end procedural;
- 位于构造体中
- DAE 按顺序解出
procedural_declarative_part
:如常数,变量,性质等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CQZ9X25Z-1586961114076)(C:\Users\romar\Pictures\ams_daconverter.svg)]
ARCHITECTURE simple OF dac IS
BEGINproceduralVARIABLE conv: real = 0.0;BEGINFOR i IN digital_vek'right TO digital_vek'left LOOPIF digital_vek( i ) = '1' THENconv := real( 2 ** i ) + conv;END IF;END LOOP;analog := conv;END procedural;
END ARCHITECTURE simple;
egin
procedural_statement_part;
end procedural;
* 位于构造体中
* DAE 按顺序解出
* `procedural_declarative_part`:如常数,变量,性质等[外链图片转存中...(img-CQZ9X25Z-1586961114076)]```vhdl
ARCHITECTURE simple OF dac IS
BEGINproceduralVARIABLE conv: real = 0.0;BEGINFOR i IN digital_vek'right TO digital_vek'left LOOPIF digital_vek( i ) = '1' THENconv := real( 2 ** i ) + conv;END IF;END LOOP;analog := conv;END procedural;
END ARCHITECTURE simple;