51Testing软件测试论坛

标题: 关于modelsim仿真出现NO DATA的问题,如何解决? [打印本页]

作者: 测试积点老人    时间: 2022-7-7 11:54
标题: 关于modelsim仿真出现NO DATA的问题,如何解决?
FPGA对ADC0809控制程序 ,用quaturs联合modelsim仿真时,总是NO DATA!
源程序:
  1. `timescale  1 ns / 1 ps
  2. ////////////////////////////////////////////////////////////////////////////////////
  3. // Company: SMG
  4. // Engineer:   John Liu
  5. //
  6. // Create Date:    21:02:51 07/05/2022
  7. // Design Name:
  8. // Module Name:    ADC0809
  9. // Project Name:     ADC0809
  10. // Target Devices:   EP3C25E144CBN & ADC0809
  11. // Tool versions:      13.0
  12. // Description:    Interface Control for ADC0809
  13. //
  14. // Dependencies:   
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. ////////////////////////////////////////////////////////////////////////////////////
  21. module ADC0809(
  22. //input
  23.     input                 clk,
  24.     input                 rst_n,
  25.     input [2:0]        add_in,                  //外部控制的通道选择信号
  26.     input [7:0]        data_fromAD,
  27.     input                 EOC,
  28. //output
  29.     output  [2:0]     add_out,              //FPGA给ADC0809的通道选择信号
  30.     output  [7:0]   show_out,          //传给上位机进行显示
  31.     output   reg        ALE,                    //d地址锁存允许信号
  32.     output   reg        START,
  33.     output   reg        OE,                      //输出允许信号
  34.     output   reg        clk_adc                //ADC芯片的输入时钟
  35.     );

  36. //参数
  37. //状态机的8个状态常量
  38. parameter    IDLE1                    = 3'b000,
  39.                      ALE2                      = 3'b001,
  40.                      START_P3              = 3'b010,
  41.                      START_N4             = 3'b011,
  42.                      CHECK_EOC_P5   = 3'b100,
  43.                      CHECK_EOC_N6  = 3'b101,
  44.                      OE7                        = 3'b110,
  45.                      SEND_DATA8        = 3'd111;
  46. parameter  NUM = 50;

  47. //定义中间变量
  48. //reg     [2:0]       p_state  ;
  49. //reg     [2:0]       n_state ;
  50. reg      [2:0]      state;     
  51. //reg                    ALE ;
  52. //reg                    OE   ;
  53. //reg                    START;     
  54. reg      [7:0]      data_temp;
  55. reg      [7:0]      count  ;     //分频器
  56. //reg                    clk_adc;    //adc时钟500kHZ

  57. //时钟分频50MHz,20ns一个周期,现在要500KHz///////////////////////////////////
  58. always@ (posedge clk or negedge rst_n) begin
  59.     if(!rst_n) begin
  60.         //p_state <= st0;
  61.         count <= 8'b0;
  62.         clk_adc <= 1'b0;
  63.         end
  64.     else if ((count==NUM-1)&& ( clk == 1'b1 )) begin
  65.         count <= 8'b0;
  66.         clk_adc <= ~clk_adc;  
  67.         end
  68.     else
  69.         count = count +1'b1;
  70. end  
  71.   
  72. //三位地址信号传递//////////////////////////////////////////////////////////////
  73. assign add_out = add_in;

  74. //状态机////////////////////////////////////////////////////////////////////////
  75. always@ (posedge clk_adc or negedge rst_n) begin
  76.     if(!rst_n) begin
  77.         state            <= IDLE1;     //进入初始状态
  78.         ALE             <= 1'b0;      //输出给ADC的地址锁存允许信号  初始化一下
  79.         START         <= 1'b0;     //输出给ADC的转化启动信号          初始化一下
  80.         OE               <= 1'b0;    //输出给ADC的数据输出允许信号   初始化一下
  81.         data_temp  <= 8'd0;
  82.         end
  83.     else begin
  84.         case(state)
  85.             IDLE1: begin                 //1
  86.                 ALE      <= 1'b0;
  87.                 START  <= 1'b0;
  88.                 OE        <= 1'b0;
  89.                 state     <= ALE2;
  90.                 end

  91.             ALE2: begin                  //2
  92.                 ALE      <= 1'b1;
  93.                 START  <= 1'b0;
  94.                 OE        <= 1'b0;
  95.                 state     <= START_P3;
  96.                 end

  97.             START_P3: begin             //3
  98.                 ALE      <= 1'b0;
  99.                 START  <= 1'b1;
  100.                 OE        <= 1'b0;
  101.                 state     <= START_N4;
  102.                 end
  103.                      
  104.             START_N4: begin            //4
  105.                 ALE      <= 1'b0;
  106.                 START  <= 1'b0;
  107.                 OE        <= 1'b0;
  108.                 state     <= CHECK_EOC_P5;
  109.                 end
  110.                      
  111.             CHECK_EOC_P5: begin        //5
  112.                 if(EOC == 1'b1)
  113.                     state     = CHECK_EOC_P5;
  114.                 else
  115.                     state     = CHECK_EOC_N6; //检测到了低电平,说明开始转换
  116.                 end
  117.                
  118.             CHECK_EOC_N6: begin       //6
  119.                 if(EOC == 1'b0)
  120.                     state <= CHECK_EOC_N6;//等待转换的结束
  121.                 else
  122.                     state <= OE7;
  123.                      end
  124.                      
  125.             OE7: begin               //7
  126.                 OE <= 1'b1;
  127.                 state <= SEND_DATA8;
  128.                 end
  129.             
  130.             SEND_DATA8: begin        //8
  131.                 data_temp <= data_fromAD;
  132.                 state <= IDLE1;
  133.                 end
  134.                      
  135.             default: begin
  136.                 ALE     <= 1'b0;
  137.                 START <= 1'b0;
  138.                 OE      <= 1'b0;
  139.                 state   <= IDLE1;
  140.                 end
  141.         endcase
  142.     end
  143. end

  144. //assign add_out = 3'b000;//选通IN0   
  145. assign show_out = data_temp;

  146. endmodule

复制代码
tb程序:

  1. `timescale 1 ns/ 1 ps

  2. module ADC0809_vlg_tst();
  3. // constants                                          
  4. // general purpose registers
  5. reg eachvec;
  6. // test vector input registers
  7. reg EOC;
  8. reg [2:0] add_in;
  9. reg clk;
  10. reg [7:0] data_fromAD;
  11. reg rst_n;
  12. // wires                                               
  13. wire ALE;
  14. wire OE;
  15. wire START;
  16. wire [2:0]  add_out;
  17. wire clk_adc;
  18. wire [7:0]  show_out;
  19. parameter T = 20; //时钟周期为20ns
  20. // assign statements (if any)                          
  21. ADC0809 i1 (
  22. // port map - connection between master ports and signals/registers   
  23.     .ALE(ALE),
  24.     .EOC(EOC),
  25.     .OE(OE),
  26.     .START(START),
  27.     .add_in(add_in),
  28.     .add_out(add_out),
  29.     .clk(clk),
  30.     .clk_adc(clk_adc),
  31.     .data_fromAD(data_fromAD),
  32.     .rst_n(rst_n),
  33.     .show_out(show_out)
  34. );
  35. initial                                                
  36. begin                                                  
  37. // code that executes only once                        
  38. // insert code here --> begin                          
  39.     clk       =  0;
  40.     rst_n   <=  0;
  41.     #(T+1)
  42.     rst_n    <=1;
  43.     data_fromAD <= 8'h0;         //暂且模拟输入初始化
  44.     EOC = 1'b1;                              //转换结束状态初始化      
  45. end

  46. always  #(T/2)  clk = ~clk;
  47. always  add_in =  3'b010;

  48. always @(negedge START) begin
  49.     #3000                           //t_EOC
  50.     EOC <= 1'b0;
  51.     data_fromAD <= data_fromAD + 1'b1; //
  52.     #99000                          //t_C
  53.     EOC <= 1'b1;
  54.     end                                                   
  55.                                                
  56. endmodule
复制代码
设置:
[attach]138850[/attach]

[color=rgba(0, 0, 0, 0.75)]结果:
[attach]138851[/attach]
请问各位的有经验的攻城狮们这是怎么回事啊?

作者: qqq911    时间: 2022-7-8 11:15
检查下环境配置
作者: jingzizx    时间: 2022-7-8 13:37
没搞过,感觉是小板子的
作者: jingzizx    时间: 2022-7-8 13:38
看看之前是不是有问题




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2