微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微波和射频技术 > RFIC设计学习交流 > 有人验证过池保勇那篇论文里△Σ调制器结构正确性吗

有人验证过池保勇那篇论文里△Σ调制器结构正确性吗

时间:10-02 整理:3721RD 点击:
我是用Verilog根据论文的结构写的代码,但是结果差强人意,希望有做过△Σ调制器的大神指点指点


  1. //池保勇论文24bit_modulator
  2. module modulator_24bit (clk, Reset,dither_en,Frac, Frac_k);
  3. input clk, Reset,dither_en;
  4. input[23:0] Frac;
  5. output[2:0] Frac_k;
  6. wire [2:0] Frac_k;

  7. //reg[21:0] A2, B3, A3, B2, A4;

  8. reg [2:0] sum5_k;
  9. wire[23:0] sum1,sum2,sum3,sum4,sum5,sum2dm,sum3dm,sum4dm,sum3dm_A,sum3dm_B,sum5_k_b,Frac_back;
  10. reg [23:0] sum2d,sum3d,sum4d;
  11. assign sum1 =Frac+ Frac_back;
  12. assign sum2 = sum1 + sum2d;
  13. assign sum3 = sum2d + sum3d;
  14. assign sum4 = sum3d + sum4d;
  15. assign sum5 = sum2dm + sum4dm + sum3dm;
  16. assign sum2dm = {sum2d[23],sum2d[21:0],1'b0};//两倍
  17. //assign sum3dm = sum3dm_A + sum3dm_B;//1.5倍
  18. assign sum3dm = sum3d + sum3dm_B;//1.5倍
  19. assign sum4dm = {sum4d[23],1'b0,sum4d[22:1]};//0.5倍
  20. //assign sum3dm_A = {sum3d[23],sum3d[21:0],1'b0};//左移操作,代表乘2
  21. assign sum3dm_B = {sum3d[23],1'b0,sum3d[22:1]};//右移操作,代表除2

  22. //assign sum5_k = sum5[23:21];
  23. assign sum5_k_b = {sum5_k,21'b1_0000_0000_0000_0000_0000};
  24. assign Frac_back = ~sum5_k_b + 1'b1;
  25. assign Frac_k = sum5_k + 3'b001;

  26. always @(posedge clk or posedge Reset)
  27. begin
  28. if(Reset)
  29. sum2d <= 24'h0;
  30. else
  31. sum2d <= sum2;
  32. end

  33. always @(posedge clk or posedge Reset)
  34. begin
  35. if(Reset)
  36. sum3d <= 24'h0;
  37. else
  38. sum3d <= sum3;
  39. end

  40. always @(posedge clk or posedge Reset)
  41. begin
  42. if(Reset)
  43. sum4d <= 24'h0;
  44. else
  45. sum4d <= sum4;
  46. end

  47. always @(posedge clk or posedge Reset)
  48. begin
  49. if(Reset)
  50. begin
  51. sum5_k <= 3'b000;
  52. end
  53. else
  54. begin
  55. sum5_k <= sum5[23:21] +3'b001;
  56. //bout <= bout_pre +5'b01011- 4'b 1000;
  57. end
  58. end
  59. endmodule

复制代码

用Verilog编写在modelsim中仿真,但是应该怎么看平均值呢?我是定义一个64位reg,把量化值不断累加来看,但是结果好像不太对


前面一张标注不太清楚

1. 结果不好是怎么个不好法? 输出enob不够? 最好贴个输出的fft
2. 输入是24bit位宽, 那么输出的enob肯定到不了24bit的. 内部的加法器什么的都会有溢出.
3. 其实可以先跑simulink模型的
4. 输入一个定值看均值其实不是好的仿真方法, 最好的方法是看频谱.
欢迎讨论

还要一个是信号输入编码, 图里的信号明显用的是2的补码
这个帖子里有详细的讨论http://bbs.eetop.cn/viewthread.php?tid=131503

在modelsim中,跑出来的均值就不对,变化很大。

看了好久大概理了一下思路

1、由于调制器是对量化误差进行调制,所以输入信号与量化值要做差,由于需要减法操作,所以所有的值都是补码形式(输入值也是带符号的补码)。

1.1、补码形式的乘除不同于原码形式;


补码形式的除2操作:符号位不变,且连同符号位到次低位右移1位,如1101右移后为1110。

补码形式的乘2操作:符号位不变,次次高位到最低位左移1位,次高位甩掉,(很容易就把大数舍去)如1101左移为1010.最低位补0;

但是补码形式的乘2操作会将大数湮没,±4通过右移的方法最后变成了0,这个问题应该怎么解决?还是我移位操作的方式不对?


第二个问题是在他的框图中sum3d是变为1.5倍还是2.5倍(我都试过,结果都不对),


第三个问题为什么最后的输出要加上001,如果加上001的话,每次加上一个正值,肯定是影响平均值的吧?


第四个问题,我理解反馈的量化值进行取反加一是把一个值变为它的相反数,这是为了与输入做差,所以取反加一并不是为了转为补码(因为是将符号位也同时取反了),这样理解对不对

你可以先推导一下他的传输函数,放在matlab 里先防一下。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top