Verilog-A 30 分钟快速入门教程
进入正题,学了几天的 Verilog-A,平台是 Agilent ADS,主要参考
“Verilog-AMS Language Reference Manual”和 ADS 的帮助文档。
现在的状态算是入门了,写了个简单的 PLL。总结这几天的学习,觉得效率太
低,我以前有一定 Verilog 基础,研一时学过一点 VHDL-AMS,学到现在这个
状态应该半天就够了;入门的话,30 分钟足矣;跟着这个教程走,你会很快了
解和熟悉 Verilog-A。(前提是有一定的 Verilog 基础和电路基础)
1、基尔霍夫定律撑起了整个电路学的大厦(当然也可以认为基尔霍夫定律只
是麦克斯韦方程的简化版),作为模拟电路描述语言 Verilog-A,同样将基尔
霍夫定律作为其基本,最重要的两个概念便是流量(Flow)和位(Potential),在
电学里是电流和电压,在力学里可以是力和距离,在热学里可以是功率和温差,
等等。
在 Verilog-A 中,你可以将电阻电容电感等器件用一个方程式来表述,比如
I(out) <+ V(out)/R,这样就产生了一个电阻,最后 Verilog-A 仿真器会用某
种算法(迭代是最常见的)将 I(out)和 V(out)求解出来,然后根据这个解去算下
一个时刻的 I、V 等,当然这仅仅是指时域仿真。
2、下面讲 Verilog-A 的语法:
begin end //相当于 C 语言的一对大括号,与 Verilog 同
if ( expression ) true_statement ;
[ else false_statement ; ] //与 Verilog 同
case ( expression ) case_item { case_item } endcase
for ( procedural_assignment ; expression;
procedural_assignment ) statement
//case 与 for 语句都跟 Verilog、C 语言类似
cross( expr [, dir [, time_tol [, expr_tol ]]] );
//cross 用来产生一个 event,如:
@(cross(V(sample) -2.0, +1.0))
//指 sample 的电压超过 2.0 时触发该事件,将会执行后面的语句,+1.0 表示
正向越过,-1.0 则相反
ddt( expr ) //求导,如:
I(n1,n2) <+ C * ddt(V(n1, n2)); //表示了一个电容
idt( expr ,[ ic [, assert [, abstol ]]] ) //积分,如:
V(out) <+ gain * idt(V(in) ,0) + gain * V(in);
//比例积分,式中的 0 表示积分的初值