微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 新人求助!傻傻的ad转换控制程序

新人求助!傻傻的ad转换控制程序

时间:10-02 整理:3721RD 点击:
人生的第一个实验:数字电压表,下面是我写的控制ad0809的程序,仿真是正确的,可是下载到版子上后ad0809输出一直是11111111,是程序的问题吗?
其中cs∩wr=START=ALE,cs∩rd=ENABLE
跪谢前辈们!
module ad0809(clk,reset,eoc,data,cs,wr,rd,dout_h,dout_l);
   input        clk,reset,eoc;
   input[7:0]   data;
   output       cs,wr,rd;
   output[3:0]  dout_h,dout_l;
   reg        cs,wr,rd;
   reg[3:0]   state;
   reg[3:0]   dout_h,dout_l;
   
   parameter  IDLE     =  4'b0001,
              CLEAR    =  4'b0010,
              CONVERT  =  4'b0100,
              READ     =  4'b1000;
  
//----------------change states---------------------
              
   always @ (posedge clk or negedge reset)
      begin
      if(!reset)
         state <= IDLE;
      else
           case (state)
      IDLE:
               state <= CLEAR;
      CLEAR:
               state <= CONVERT;
      CONVERT:
      if(eoc)
               state <= READ;
      else
               state <= CONVERT;
      READ:
               state <= IDLE;
      default: state <= IDLE;      
      endcase
      end            
      
                             
      
//---------------output----------------------------
   always @ (state)
      begin
      case (state)
      IDLE:
             begin
             cs    <=   0;
             wr    <=   0;
             rd    <=   0;
             end
      CLEAR:      
             begin
             cs    <=   1;
             wr    <=   1;
             rd    <=   0;
             end
    CONVERT:      
             begin
             cs    <=   0;
             wr    <=   0;
             rd    <=   0;
             end
    READ:
             begin
             cs       <=   1;
             wr       <=   0;
             rd       <=   1;
             {dout_h,dout_l}   <=   data;
            end
      endcase
      end

endmodule

你有检测到EOC信号吗?否则一直都没有read,当然没有输出data了。
另外,看到你rd和read data的采样在同一个cycle,AD的时序是这样的吗?是不是先rd,然后下一个周期再采样输入data的?

READ:
             begin
             cs       <=   1;
             wr       <=   0;
             rd       <=   1;
             {dout_h,dout_l}   <=   data;
            end
我觉得是你的  {dout_h,dout_l}   <=   data;有问题,你只在最后一个状态赋值了,但是其他的状态却没有,这就相当于一个锁存器,将输如锁存起来,输入是什么输出就是什么,不变。
解决办法:在其他状态中加入{dout_h,dout_l} <=‘zzzzzz’;

是{dout_h,dout_l} <=6'bzzzzzz;好久不用都忘了。



    谢谢谢谢,现在输出已经有了~唉,高手就是高手,虽然我现在还没太搞明白为什么…可是现在输出不稳定,一直在闪,闪得都看不大清楚~

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

网站地图

Top