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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2684|回复: 6

[求助] 8 bit DAC verilogA求助

[复制链接]
发表于 2022-4-1 11:20:17 | 显示全部楼层 |阅读模式
500资产
本帖最后由 jay.zhang 于 2022-4-1 11:24 编辑




  1. `include "discipline.h"
  2. `include "constants.h"

  3. // $Date: 1997/08/28 05:54:34 $
  4. // $Revision: 1.1 $
  5. //
  6. //



  7. //--------------------
  8. // dac_8bit
  9. //
  10. // -  8 bit digital analog converter
  11. //
  12. // vd0..vd7:        data inputs [V,A]
  13. // vout:        [V,A]
  14. //
  15. // INSTANCE parameters
  16. //    vref          = reference voltage for the conversion [V]
  17. //    mismatch_fact = maximum mismatch as a percentage of the average val []
  18. //    vtrans        = logic high to low transition voltage [V]
  19. //    tdel, trise, tfall = {usual} [s]
  20. //
  21. // MODEL parameters
  22. //    {none}
  23. //
  24. // Mismatch effects can be modeled in this DAC by setting 'mismatch' to a
  25. // non-zero value. The maximum mismatch on a bit is then +/-'mismatch'
  26. // percent of that bit's nominal value.
  27. //

  28. module dac_8bit(vd7, vd6, vd5, vd4, vd3, vd2, vd1, vd0, vout);
  29. electrical vd7, vd6, vd5, vd4, vd3, vd2, vd1, vd0, vout;
  30. parameter real vref=1 from [0:inf);
  31. parameter real mismatch_fact=0 from [0:inf);
  32. parameter real trise=1u from (0:inf);
  33. parameter real tfall=1u from (0:inf);
  34. parameter real tdel=0  from [0:inf);
  35. parameter real vtrans=2.5;

  36. `define NUM_DAC_BITS 8
  37. `define MAXINT  2_147_483_647.0

  38. // macro to calculate the fractional mismatches in bits
  39. `define FRAC_MM(I) (1.0 + mismatch_fact*(dist_range*abs($random(I)/`MAXINT) - \
  40.                     half_dist_range))

  41.    real dist_range, half_dist_range;

  42.    real bit_var[0:`NUM_DAC_BITS-1];

  43.    real out_scaled;        // scaled version of the DAC output

  44.    real full_scaled;
  45.    integer iseed;

  46.    analog begin

  47.       [url=home.php?mod=space&uid=1769321]@[/url] ( initial_step ) begin
  48.          dist_range = 0.02;
  49.          half_dist_range = 0.01;
  50.          generate j ( 0, `NUM_DAC_BITS-1 ) begin
  51.             iseed = j;
  52.             bit_var[j] = `FRAC_MM(iseed);
  53.          end
  54.          full_scaled =  bit_var[7]/2 + bit_var[6]/4 + bit_var[5]/8
  55.                        + bit_var[4]/16 + bit_var[3]/32 + bit_var[2]/64
  56.                        + bit_var[1]/128 + bit_var[0]/256;
  57.       end

  58.       out_scaled = 0;
  59.       out_scaled = out_scaled + ((V(vd7) > vtrans) ? (bit_var[7]/2) : 0);
  60.       out_scaled = out_scaled + ((V(vd6) > vtrans) ? (bit_var[6]/4) : 0);
  61.       out_scaled = out_scaled + ((V(vd5) > vtrans) ? (bit_var[5]/8) : 0);
  62.       out_scaled = out_scaled + ((V(vd4) > vtrans) ? (bit_var[4]/16) : 0);
  63.       out_scaled = out_scaled + ((V(vd3) > vtrans) ? (bit_var[3]/32) : 0);
  64.       out_scaled = out_scaled + ((V(vd2) > vtrans) ? (bit_var[2]/64) : 0);
  65.       out_scaled = out_scaled + ((V(vd1) > vtrans) ? (bit_var[1]/128) : 0);
  66.       out_scaled = out_scaled + ((V(vd0) > vtrans) ? (bit_var[0]/256) : 0);
  67.       V(vout) <+ transition(vref*out_scaled/full_scaled, tdel, trise,
  68.                              tfall);
  69.     end
  70. endmodule










复制代码
ahdlLib里的8bitDAC的verilogA  `define MAXINT 2_147_483_647.0这句程序是什么意思呢?宏定义后边的这些数字都是代表什么?

最佳答案

查看完整内容

这是在定义一个整型数的最大数,即 2的32次方,除以2 (最高位是符号位),等于2,147,483,647 . MAXINT是给产生的随机数做归一化处理的。 FRAC_MM(I)是一个in-line的函数定义,给下面调用的时候调入随机种子数 FRAC_MM(iseed)用于模拟随机失配和噪声信号。
发表于 2022-4-1 11:20:18 | 显示全部楼层
本帖最后由 amodaman 于 2022-4-1 13:51 编辑



这是在定义一个整型数的最大数,即 2的32次方,除以2 (最高位是符号位),等于2,147,483,647 . MAXINT是给产生的随机数做归一化处理的。


FRAC_MM(I)是一个in-line的函数定义,给下面调用的时候调入随机种子数 FRAC_MM(iseed)用于模拟随机失配和噪声信号。
发表于 2022-4-1 13:39:50 | 显示全部楼层
image.png
 楼主| 发表于 2022-4-1 14:00:17 | 显示全部楼层
本帖最后由 jay.zhang 于 2022-4-1 14:09 编辑


amodaman 发表于 2022-4-1 11:20
这是在定义一个整型数的最大数,即 2的32次方,除以2 (最高位是符号位),等于2,147,483,647 . MAXINT是给 ...


感谢大佬!我能再请教个问题吗?“这是在定义一个整型数的最大数,即 2的32次方,除以2 (最高位是符号位),等于2,147,483,647 .”  我用18bit DAC定义这个整型数的最大数也可以定义“2的32次方,除以2 (最高位是符号位)”
就是说这行程序的意思是定义一个DAC位数的范围吗?(是定义最大位数的DAC是一个32位的)我这样理解不知道是否可行
发表于 2022-4-1 16:22:12 | 显示全部楼层


jay.zhang 发表于 2022-4-1 14:00
感谢大佬!我能再请教个问题吗?“这是在定义一个整型数的最大数,即 2的32次方,除以2 (最高位是符号位) ...


不是的, 这个纯粹就是为产生随机数服务的,而且是随机数归一化用的分母,也就保证了随机数在【0,1】的区间。在这个区间内的随机数加到DAC的匹配和噪声里面,进行DAC的分析,但是这个分母本身和DAC没关系。

我说 2的32次方,是因为你的操作系统是64位的,所以本应该是 2的64次方作为计算机整型数的最大数,但是最高位拿来做符号位,所以最大数是2的64次方减半,即2的32次方,最小数是负的 2的32次方加1 (微机原理第一课/第一章/第一节)。
发表于 2022-4-1 16:23:11 | 显示全部楼层
谢谢信元,劳动所得啊。
 楼主| 发表于 2022-4-1 17:02:33 | 显示全部楼层


amodaman 发表于 2022-4-1 16:22
不是的, 这个纯粹就是为产生随机数服务的,而且是随机数归一化用的分母,也就保证了随机数在【0,1】的 ...


明白了,感谢大佬!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-22 09:57 , Processed in 0.025678 second(s), 8 queries , Gzip On, Redis On.

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