微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > CPLD控制DAC,问题求教!

CPLD控制DAC,问题求教!

时间:10-02 整理:3721RD 点击:
用CPLD来控制DAC产生占空比一定的脉冲信号,testbench的仿真代码如下:

  1. //-----------------------------------------------------------------------------
  2. //
  3. // Title       : sim
  4. // Design      : square1
  5. // Author      :
  6. // Company     :
  7. //
  8. //-----------------------------------------------------------------------------
  9. //
  10. // File        : sim.v
  11. // Generated   : Tue May 14 10:01:30 2013
  12. // From        : interface description file
  13. // By          : Itf2Vhdl ver. 1.22
  14. //
  15. //-----------------------------------------------------------------------------
  16. //
  17. // Description :
  18. //
  19. //-----------------------------------------------------------------------------
  20. `timescale 1 ns / 1 ns

  21. //{{ Section below this comment is automatically maintained
  22. //   and may be overwritten
  23. //{module {sim}}
  24. module sim ();
  25. //}} End of automatically maintained section

  26. // -- Enter your statements here -- //
  27. reg clk,rst;
  28. wire [7:0] out;
  29. wire [3:0] state;
  30. wire we;          
  31. wire A0;  
  32. wire ldac;         
  33. wire [4:0] counter;

  34. initial
  35.         clk=0;

  36. always
  37.         #500 clk=~clk;
  38.        
  39. initial                                                                 
  40.         begin
  41.         rst=1;
  42.         #50 rst=0;
  43.         #100 rst=1;
  44.         end

  45. square tt(clk,rst,out,state,we,A0,ldac,counter);

  46.        

  47. endmodule

  48. //利用TLV5613来画方波,通过控制写控制口的电平来调节方波的周期以及占空比;
  49. module square(clk,rst_n,out,state,we,A0,ldac,counter);
  50.         input clk,rst_n;
  51.         output wire [7:0] out;
  52.         output [3:0] state;  //从高位到低位,分别控制A1,SPD,片选以及PWD;
  53.         output reg we; //控制TLV5613的写使能;
  54.         output reg  A0;//地址控制线A0
  55.         output reg ldac;//输出控制线ldac
  56.         reg rst;
  57.         output reg [4:0] counter;//从0计数到26,不断循环
  58.        
  59.         assign state=5'b0101;
  60.         assign out=8'b01000000;
  61.        
  62.         always @(posedge clk)
  63.                 rst=rst_n;

  64.         always @(posedge clk or negedge rst)
  65.                 if(!rst)
  66.                         counter=0;
  67.                 else if(counter<26)
  68.                         counter=counter+1;
  69.                         else
  70.                                 counter=0;
  71.        
  72.         always @(*)
  73.                 if(!rst)
  74.                         A0=0;
  75.                 else if(counter==0)
  76.                         A0=~A0;
  77.                  
  78.         always @(*)
  79.                 if(!rst)
  80.                         we=1;
  81.                 else if(counter==0)
  82.                         we=0;
  83.                         else
  84.                                 we=1;
  85.        
  86.         always @(*)
  87.                 if(!rst)
  88.                         ldac=1;
  89.                         else if(counter<2)
  90.                                 ldac=1;
  91.                                 else
  92.                                         ldac=0;
  93.        
  94.        
  95.        
  96. endmodule

复制代码



仿真结果如下:




不知为什么输出A0会出现问题?
同时,我用示波器测量ldac和we这两个输出引脚,结果都只是一个3.6V的直流量。
求指导

always @(*)
                if(!rst)
                        A0=0;
                else if(counter==0)
                        A0=~A0;
Combinational loop


我对这段有问题的程序做了改正,如下:

  1.         always @(posedge clk or negedge rst)
  2.                 if(!rst)
  3.                         A0=0;
  4.                 else if(counter==0)
  5.                         A0=A0+1;
  6.                         else A0=A0;

复制代码



这样不仅可以避免combinational loop,也可以避免锁存器;但是在testbench中仿真出来的结果仍然和之前一样,AO输出口没有确切的输出。

fdsfdsfsfsfsfsdfsdfsdfsd

DAC是怎样的控制时序?
仿真波形中counter没有计数。

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

网站地图

Top