📄 text.txt
字号:
module: dsynth_dac
inputs: double input double_interp clk
outputs: double dac_out
parameters: int r_elem_num int c_elem_num double res double mmstddev_r double cap double mmstddev_c double fs double cap_filt
static_variables: double r_dn Vector r Vector c double r_tot int in_r int in_c IntVector c_value double c_tot int in int i double vl double vh double charge int c_temp double c_tst double charge1
classes: EdgeDetect edge1()
init:
r_dn=0;
r_tot=0;
c_tot=0;
c_value.set_length(c_elem_num+1);
gauss_ran_vector(mmstddev_r,r_elem_num+1,r);
add(r,1.0,r); //r=1.0+r
mul_elem(r,res,r); //r=res*r
gauss_ran_vector(mmstddev_c,c_elem_num+1,c);
add(c,1.0,c); //c=1.0+c
mul_elem(c,cap,c); //c=cap*c
for(i=1;i<=r_elem_num;i++)
{
r_tot=r_tot+r.get_elem(i);
}
for(i=1;i<=c_elem_num;i++)
{
c_tot=c_tot+c.get_elem(i);
}
dac_out=0;
code:
if(edge1.inp(clk))
{
in=(int)input;
in_c=in%c_elem_num;
in_r=(in-in_c)/c_elem_num;
for(i=1;i<=c_elem_num;i++)
{
c_temp=(i<=in_c) ? 1:0;
c_value.set_elem(i,c_temp);
}
r_dn=0;
for(i=1;i<=in_r;i++)
{
r_dn=r_dn+r.get_elem(i);
}
vl=fs*r_dn/r_tot;
if(in_r<r_elem_num)
{
r_dn=r_dn+r.get_elem(in_r+1);
}
vh=fs*r_dn/r_tot;
charge=0;
c_tst=0;
for(i=1;i<=c_elem_num;i++)
{
c_tst=c_tst+c.get_elem(i);
}
for(i=1;i<=in_c;i++)
{
charge=charge+c.get_elem(i)*vh;
}
charge1=charge;
for(i=in_c+1;i<=c_elem_num;i++)
{
charge=charge+c.get_elem(i)*vl;
}
dac_out=(dac_out*cap_filt+charge)/(c_tot+cap_filt);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -