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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2498|回复: 4

[求助] CPLD控制DAC,问题求教!

[复制链接]
发表于 2013-5-15 11:10:06 | 显示全部楼层 |阅读模式

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

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

x
用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的直流量。

求指导
发表于 2013-5-15 13:06:07 | 显示全部楼层
always @(*)
                if(!rst)
                        A0=0;
                else if(counter==0)
                        A0=~A0;

Combinational loop
 楼主| 发表于 2013-5-16 22:08:12 | 显示全部楼层
回复 2# vongy

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




  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输出口没有确切的输出。
发表于 2013-7-15 02:17:57 | 显示全部楼层
fdsfdsfsfsfsfsdfsdfsdfsd
发表于 2013-7-15 09:27:59 | 显示全部楼层
DAC是怎样的控制时序?
仿真波形中counter没有计数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-23 13:10 , Processed in 0.024688 second(s), 11 queries , Gzip On, Redis On.

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