【VerilogA】4位DAC的编写与测试
修改默认文本编辑器
virtuoso默认的编辑器用不惯,改成gedit
editor="gedit"
创建cell

Type选择VerilogA,随后OK

随后会弹出已填写默认模板的文本窗口。
将代码修改如下。VerilogA的语法和Verilog大差不差,但还是多少有点不同。细节可参考OVI_VerilogA或者verilogams。在这里笔者不讲VerilogA的语法细节。
// VerilogA for INVlib, DAC_4bits_nc_va, veriloga
`include "constants.vams"
`include "disciplines.vams"
module DAC_4bits_nc_va(D3,D2,D1,D0,out);
input D3,D2,D1,D0;
output out;
parameter real vdd=1.8;
parameter real tdelay=0;
parameter real trise=0;
parameter real tfall=0;
parameter real vref=1.8;
voltage D3,D2,D1,D0,out;
real code,out_temp;
analog begin
code=0;
code=code+((V(D0)>vdd/2) ? pow(2,0):0);
code=code+((V(D1)>vdd/2) ? pow(2,1):0);
code=code+((V(D2)>vdd/2) ? pow(2,2):0);
code=code+((V(D3)>vdd/2) ? pow(2,3):0);
out_temp=code/16*vref;
V(out)<+ transition(out_temp,tdelay,trise,tfall);
end
endmodule
修改完后记得保存。

如果出现错误,会出现以下报错(这份代码应该是不会出现问题的,作为参考,我使用的是IC615)

保存完后会弹出一个窗口问你要不要建立symbol,一路无脑OK就完事了,记得save&check。
cell配置说明
对器件按q,在CDF Parameter of view中选择veriloga,可以看到以下参数可供修改。
vdd就是高电平,默认低电平是0了,如果输入大于vdd/2则为高电平,小于则为低电平。
vref为参考电压。
其他的参数详情请参阅transition函数。

验证
创建测试用的原理图

D0到D3为方波信号输入。out端接了给电容负载。vdd为1V。
ADE的设置如下。这里笔者把D0-D3转化为数字的总线形式表达。

仿真出来的结果如下。

IN<3:0>为输入的二进制对应的十进制表达。从0到15依次递加
net7就是out。
可见满足理想DAC的一般特性。
可能眼睛尖的看客会注意到DAC跳变有尖峰。这是因为方波输入我没有调的很准确,出现了不应该出现的数字输入。且仿真步长较大,导致看起来像尖峰。
