关于SAR ADC的一个VerilogA的验证程序
大家能否帮我解读一下,程序里边的 vrefvtrans以及最后一行计算公式里面-2.5 的意义,我是认为vref是电源电压(或者分辨范围),vtrans是高低电平的分界点,但是最后一行计算式中的-2.5的意义始终不懂啊,在下先谢过!
自己顶一个,谢谢大神!
用于消除信号的直流量,产生标准的输出正余弦波?假如加的信号是正余弦的话。个人猜测,也不懂
人工上浮 一下下,谢谢,跪求大神解读啊!
3楼应该正解,没什么意义的,你不用考虑它,结果对了就行了
这个DAC行为级Verilog-A程序.Vtrans是对输入信号高低的判断阈值,2.5伏,大概电源就是2.5伏,或者5伏也有可能。
Vref是满幅数字输入所对应的模拟输出电压。
最后减掉2.5是平移Offset,效果是输出对应的范围是-2.5 ~ 2.5伏。因为这是一段很古老的代码,那时候还用正负2.5伏的电源。
verilog 和verilog A有很大的区别吗?
学习了
who know it ?!
// VerilogA for Vxa_tb, SARADC_va, veriloga
`include "constants.vams"
`include "disciplines.vams"
`define N 10
module SARADC_va(Vip,Vin,CLK,D);
input Vip,Vin,CLK;
electrical Vip,Vin,CLK;
output [`N-1:0] D;
electrical [`N-1:0] D;
parameter real vmax=1;
parameter real vmin=0;
parameter real one=1.0;
parameter real zero=0.0;
parameter real vth=0.5;
parameter real slack=10.0p from (0:inf);
parameter real trise=4.0n from (0:inf);
parameter real tfall=4.0n from (0:inf);
parameter real tconv=1.0u from (0:inf);
parameter integer traceflag=0;
real sample,vref,lsb,voffset,vdac;
real vd[0:`N-1];
integer ii;
analog begin
@(initial_step or initial_step("dc","ac","tran","xf")) begin
vref=(vmax-vmin)/2.0;
vdac=vref;
lsb=(vmax-vmin);
voffset=vmin;
end
//SAR ADC的行为描述
@(cross (V(CLK)-vth,1,slack,CLK.potential.abstol)) begin
vref=(vmax-vmin)/2.0;
vdac=0;
sample=V(Vip,Vin);
for(ii=`N-1; ii>=0; ii=ii-1) begin
vd[ii]=0;
vdac=vdac+vref;
if(sample>vdac) begin
vd[ii]=one;
end
else begin
vd[ii]=zero;
vdac=vdac-vref;
end
vref=vref/2.0;
end
end
generate i (`N-1,0) begin
V(D[i])<+transition(vd[i],tconv,trise,tfall);
end
end
endmodule
`undef N
马克,回头看
mark一记
原来如此,知识好丰富那在代码中去掉-2.5就ok 了吧
我想问一下16位SAR ADC采用什么结构和校准算法?我找到的文献感觉很少
学习了,系欸小e
下来看看 学习一下
基于运算放大器和模拟集成电路的电路设计
// VerilogA for Vxa_tb, SARADC_va, veriloga
`include "constants.vams"
`include "disciplines.vams"
`define N 10
module SARADC_va(Vip,Vin,CLK,D);
input Vip,Vin,CLK;
electrical Vip,Vin,CLK;
output [`N-1:0] D;
electrical [`N-1:0] D;
parameter real vmax=1;
parameter real vmin=0;
parameter real one=1.0;
parameter real zero=0.0;
parameter real vth=0.5;
parameter real slack=10.0p from (0:inf);
parameter real trise=4.0n from (0:inf);
parameter real tfall=4.0n from (0:inf);
parameter real tconv=1.0u from (0:inf);
parameter integer traceflag=0;
real sample,vref,lsb,voffset,vdac;
real vd[0:`N-1];
integer ii;
analog begin
@(initial_step or initial_step("dc","ac","tran","xf")) begin
vref=(vmax-vmin)/2.0;
vdac=vref;
lsb=(vmax-vmin);
voffset=vmin;
end
//SAR ADC的行为描述
@(cross (V(CLK)-vth,1,slack,CLK.potential.abstol)) begin
vref=(vmax-vmin)/2.0;
vdac=0;
sample=V(Vip,Vin);
for(ii=`N-1; ii>=0; ii=ii-1) begin
vd[ii]=0;
vdac=vdac+vref;
if(sample>vdac) begin
vd[ii]=one;
end
else begin
vd[ii]=zero;
vdac=vdac-vref;
end
vref=vref/2.0;
end
end
generate i (`N-1,0) begin
V(D[i])<+transition(vd[i],tconv,trise,tfall);
end
end
endmodule
`undef N