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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

[原创] 关于SAR ADC的一个VerilogA的验证程序

[复制链接]
发表于 2012-3-8 23:01:17 | 显示全部楼层 |阅读模式

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

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

x
版上大神,深夜发帖,诚心求教: 我做的是一个16位的sarADC ,然后现在需要做个小验证,但验证模块是使用verilogA写的,verilog还勉强能写能读,但verilogA就真心不行了,模块在cadence里边跑,这验证模块功能就是将16位数字输出给转化成模拟阶梯曲线

大家能否帮我解读一下,程序里边的 vref   vtrans   以及最后一行计算公式里面  -2.5 的意义,我是认为vref是电源电压(或者分辨范围),  vtrans是高低电平的分界点,但是最后一行计算式中的-2.5的意义始终不懂啊,在下先谢过!
verilogA.jpg
 楼主| 发表于 2012-3-8 23:02:37 | 显示全部楼层
自己顶一个,谢谢大神!
发表于 2012-3-8 23:41:37 | 显示全部楼层
用于消除信号的直流量,产生标准的输出正余弦波?假如加的信号是正余弦的话。个人猜测,也不懂
 楼主| 发表于 2012-3-9 11:55:35 | 显示全部楼层
人工上浮 一下下,谢谢,跪求大神解读啊!
发表于 2012-3-10 10:24:13 | 显示全部楼层
3楼应该正解,没什么意义的,你不用考虑它,结果对了就行了
发表于 2012-3-10 11:05:24 | 显示全部楼层
本帖最后由 amodaman 于 2012-3-10 13:37 编辑

这个DAC行为级Verilog-A程序.  Vtrans是对输入信号高低的判断阈值,2.5伏,大概电源就是2.5伏,或者5伏也有可能。

Vref是满幅数字输入所对应的模拟输出电压。

最后减掉2.5是平移Offset,效果是输出对应的范围是-2.5 ~ 2.5伏。因为这是一段很古老的代码,那时候还用正负2.5伏的电源。
发表于 2013-8-24 20:04:27 | 显示全部楼层
verilog 和verilog A有很大的区别吗?
发表于 2014-8-20 19:51:28 | 显示全部楼层
学习了
发表于 2014-9-24 16:20:40 | 显示全部楼层
who know it ?!
发表于 2014-9-24 21:38:51 | 显示全部楼层
// 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-6 08:12 , Processed in 0.023126 second(s), 8 queries , Gzip On, Redis On.

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