在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 25169|回复: 25

[求助] cadence里如何编写理想DAC的veriloga代码

[复制链接]
发表于 2012-11-26 11:38:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近在设计ADC,为实时观察输出数字和输入模拟电平,参考ahdl库里的模型自己动手写了个12bit的理想dac,发现输出电平随时间不是离散变化的,下降沿时能跟随数字输入信号迅速下降,但是上升时是缓慢上升,如下图所示:
无标题.png

我写的veriloga代码如下,请高手分析哪里出了问题,谢谢!!

`include "constants.vams"

`include "disciplines.vams"

module dac_12bit_diff_ideal (vd11, vd10, vd9, vd8, vd7, vd6, vd5, vd4, vd3, vd2, vd1, vd0, vout1, vout2);

electrical vd11, vd10, vd9, vd8, vd7, vd6, vd5, vd4, vd3, vd2, vd1, vd0, vout1, vout2;

parameter real vref  = 1 from [0:inf);

parameter real trise = 0.0;

parameter real tfall = 10.0e-12;

parameter real tdel  = 10.0e-12;

parameter real vtrans  = 2.5;

    Analog begin

                out_scaled = 0;

                out_scaled = out_scaled + ((V(vd11) > vtrans) ? 2048 : 0);


             省略……

                V(vout1) <+ transition( vref*(2.5+(out_scaled-2048)/2048), tdel, trise, tfall );

                V(vout2) <+ transition( vref*(2.5-(out_scaled-2048)/2048), tdel, trise, tfall );

    end

endmodule

发表于 2012-11-26 11:57:44 | 显示全部楼层
EXAMPLES FIND DA


module ideal_dac(in,out);
input [0:dac_size-1] in;
output out;
voltage in,out;
parameter real dac_size = 2 from (1:inf);
parameter vth = 2.5;
parameter real trise = 0 from [0:inf);
parameter real tfall = 0 from [0:inf);

real code;
integer pow2 [0:dac_size];

analog
begin
   @(initial_step)
     for (i=0;i<=dac_size;i=i+1) pow2[i] = pow(2,i);

   code = 0;
   for (i=0;i<dac_size;i=i+1)
     code = code + (V(in[i]) > vth) ? pow2[i] : 0;
   V(out) <+ transition(code/pow2[dac_size],0,trise,tfall);
end
endmodule
发表于 2012-11-26 11:59:23 | 显示全部楼层
parameter real vref  = 1 from [0:inf);
=> 這是要訂?

VREF 可調 full scale range ?
 楼主| 发表于 2012-11-26 13:17:41 | 显示全部楼层
回复 2# andy2000a


    谢谢
 楼主| 发表于 2012-11-26 13:19:14 | 显示全部楼层
回复 3# andy2000a


    这个语法我也不懂,另有一个sample是这么写的
发表于 2013-6-10 14:44:08 | 显示全部楼层
二楼的代码    for (i=0;i<=dac_size;i=i+1) pow2[i] = pow(2,i);这个最后pow(2,i)是什么?我看不懂
还有那个dac的话那个输入in不应该是二进制1和0的组合吗?为什么要设置成电路节点的形式呢?code = code + (V(in[i]) > vth) ? pow2[i] : 0;  这个in【i】应该不是1就是0,不会比vref大啊,我刚接触veriloga  求指导
发表于 2013-6-10 23:39:01 | 显示全部楼层
回复 6# zhang494903066


pow(x,y)表示x的y次方
发表于 2013-8-29 20:41:19 | 显示全部楼层
EXAMPLE是报错的程序为什么呀?
发表于 2013-8-29 20:53:35 | 显示全部楼层
二楼的程序有人验证过吗?为什么总是报错那?
发表于 2013-8-30 09:48:51 | 显示全部楼层
Verilog A is garbage, please use pure Verilog with real variable
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-29 09:51 , Processed in 0.033496 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表