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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: mcafee

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

[复制链接]
发表于 2014-10-7 11:19:47 | 显示全部楼层
马克,回头看
发表于 2015-1-16 17:26:10 | 显示全部楼层
mark一记
发表于 2015-4-14 16:37:55 | 显示全部楼层
回复 6# amodaman


    原来如此,知识好丰富那在代码中去掉-2.5就ok 了吧
发表于 2015-5-9 16:52:52 | 显示全部楼层
回复 1# mcafee

我想问一下16位SAR ADC采用什么结构和校准算法?我找到的文献感觉很少
发表于 2015-7-6 17:03:26 | 显示全部楼层
学习了,系欸小e
发表于 2017-9-21 19:12:20 | 显示全部楼层
下来看看 学习一下
发表于 2017-9-21 19:14:37 | 显示全部楼层
基于运算放大器和模拟集成电路的电路设计
发表于 2017-12-4 09:51:08 | 显示全部楼层
// 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
发表于 2018-3-13 14:04:32 | 显示全部楼层
学习了
发表于 2018-3-13 16:24:54 | 显示全部楼层
输出直接做DA,就可以看波形了,然后再输出到csv文件,丢给matlab看fft/inl/dnl. 输出到csv的verilog-a code如下.
`include "constants.vams"
`include "disciplines.vams"

module DATA_SAVE( clk, data_in );
  (* cds_inherited_parameter *) parameter real fin           = 0;
  % read-in fin variable from Cadence
  (* cds_inherited_parameter *) parameter real T_Period      = 0;
  (* cds_inherited_parameter *) parameter real NUM_OF_CODES  = 0;
  parameter VREF_P = 1;
  parameter VREF_N = 0;
  parameter VTH    = 0.5;


  input clk, data_in;
  electrical clk, data_in;
  integer fid, i;
  real fs;  

  analog begin
    @( initial_step ) begin
      i = 1;        
      fs = 1.0 / T_Period;
      fid = $fopen( "/home/... /YourFileNameHere.csv", "a" );
      $fstrobe ( fid, " Input frequency    = %g Hz ", fin          );
      $fstrobe ( fid, " Sampling frequency = %g Hz ", fs           );
    end
   
    @( cross( V( clk ) - VTH, -1 ) ) begin
      if ( i > NUM_OF_CODES   ) begin
        $fclose( fid );
      end
      else begin
        $fstrobe( fid, " %g ", V( data_in ) );  
        i = i + 1;  
      end
    end
      
    @( final_step ) begin
      $fclose( fid );
    end  
  end
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-6-16 15:33 , Processed in 0.033889 second(s), 7 queries , Gzip On, Redis On.

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