|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
各位前辈好!小弟在自学DAC,搭建了简单的两比特的电荷重分布DAC。原理图如下:
它的仿真结果是正常的。然后我写了一个verilog-a的行为及模型,行为级模型得到的输出电压,总是约等于正确值的一半。
行为级的代码如下。我是按照电路结构进行行为级描述的。一直找不到错误在哪。
`include "disciplines.h"
module ChargeRedistributionDAC_V0(B0,B1,RST,VDD,VSS,VREF,VOUT);
input B0,B1,RST;
inout VDD,VSS,VREF,VOUT;
electrical B0,B1,RST,VDD,VSS,VREF,VOUT;
electrical n0,n1;
parameter real vdd=1.2;
parameter real roff=1G;
parameter real ron=1;
parameter real ton=10p;
parameter real toff=10p;
parameter real Cu=100f;
real vth=vdd/2;
integer stateRST;
integer stateB0;
integer stateB1;
integer Active;
analog begin
@(initial_step) begin
stateRST=0;
stateB0=0;
stateB1=0;
end
stateRST = V(RST)>vth ? 1:0;
stateB0 = V(B0)>vth ? 1:0;
stateB1 = V(B1)>vth ? 1:0;
Active = V(VDD)>vth ? 1:0;
I(VOUT,VSS) <+ V(VOUT,VSS)*transition(stateRST?1/ron:1/roff,0,ton,toff);
I(VOUT,n0) <+ Cu*ddt(V(VOUT,n0));
I(VOUT,n1) <+ 2*Cu*ddt(V(VOUT,n1));
I(n0,VSS)<+ V(n0,VSS)*transition((stateRST||(~stateB0))?1/ron:1/roff,0,ton,toff);
I(n1,VSS)<+ V(n1,VSS)*transition((stateRST||(~stateB1))?1/ron:1/roff,0,ton,toff);
I(n0,VREF)<+ V(n0,VREF)*transition(stateB0?1/ron:1/roff,0,ton,toff);
I(n1,VREF)<+ V(n1,VREF)*transition(stateB1?1/ron:1/roff,0,ton,toff);
end
endmodule
欢迎各位前辈来指导一下!万分感谢!
|
|