最近感觉Verilog-A很方便,许多电路要仿真很久,用VA写一个模型,可以很快就仿真出来,用来验证用很方便。
反相器模型
反相器 Verilog-A代码如下:其余的逻辑门在cadence ahdlLib 库里面
//默认调用的宏定义
`include "constants.vams"
`include "disciplines.vams"
module Inv(IN,OUT);//定义一个叫做Inv的module,两端口IN和OUT
input IN ; //IN为输入端
output OUT; //OUT为输出端
electrical IN,OUT; //定义IN和OUT为两个电学节点
//模型的参数
parameter real vlogic_high = 1.8 ;
parameter real vlogic_high = 0 ;
parameter real vtrans = 0.9 ;
parameter real tdelay = 10p from[0:inf);
parameter real trise = 10p from[0:inf);
parameter real tfall = 10p from[0:inf);
real OUT_val; //定义一个变量OUT_val
analog begin //跨越事件
OUT_val = (V(IN) > vtrans)?vlogic_low:vlogic_high; //初始化
@(cross(V(IN)-vtrans,+1)) //当v(in)大于vtrans时
OUT_val = vlogic_low;
@(cross(V(IN)-vtrans,-1)) //当v(in)小于vtrans时
OUT_val = vlogic_high;
V(OUT)<+transition(OUT_val,tdelay,trise,tfall);//将结果输出到Vout
end
endmodule
Verilog-A 语言简单入门教程 – Analog-Lifehttps://www.analog-life.com/2022/04/veriloga-quick-learning/Verilog-A 语言简单入门教程 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/604328904
Verilog 宏定义
在日常的代码编写过程中,我们常常会遇到需要定义很多参数的时候,我们有时候用parameter 或 localparam 来定义,这里同样可以利用宏定义来实现参数的定义。
比如说 在tb文件中要实现时钟,我们就可以用到define来实现不同时钟周期代码的复用。
`define clk_period 20
always #(`clk_period/2)clk=~clk;
需要特别注意的是`define语句后面是
不加分号的!!不加分号的!!不加分号的!!并且使用的时候 宏定义名字前要加【 ` 】
幂指数在Verilog中的表示
一般使用操作符 “ ** ” 表示幂,比如 NBIT = 2**10;表示2的10次方。
verilog里面的算术:
1.加(+):2个操作数相加
2.减(-):2个操作数相减或取1个操作数的负数(二进制补码表示)
3.乘(*):2个操作数相乘
4.除(/):2个操作数相除
5.求幂(**)}}:2个操作数求幂,前一个操作数为底数,后一个操作数为指数
再次安利大佬VA入门文章