VerilogA 语法简介 2010 年06 月25 日 星期五 10:10 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 表示积分的初值 transition( expr [, time_delay [, rise_time [, fall_time [, time_tol ]]]] ) //将expr 的值delay 一下并指定上升下降沿时间,相当于一个传输门 laplace_zp( expr ,ζ,ρ) 将expr 进行拉普拉斯变换,具体表达式参看相关文献,还有 laplace_zd()等 数据类型: integer、real,另外就是 discipline,不知道怎么翻译比较好,比如说它将电压电流这两个nature 类型作为一个discipline,这些都在disciplines.vams 这个头文件里建好了,编程时要`include "disciplines.vams"。 如果要定义一个电路节点,electrical node_name 就好了 parameter {real ...