原创 测试总结【二】—— 小心寄存器被综合掉

2011-1-31 23:11 2884 9 9 分类: FPGA/CPLD

    经过几天的努力,测试终于完成了三分之二,之前遇到的种种问题都得以解决,通过SPI接口可以对flash进行读写操作,接下来就是从flash里面读取数据,完成FPGA configuration的功能,通过仿真,功能ok,但是测试的时候发现一个很蹊跷的问题,输出的nconfig信号始终没有变化。

   设计代码:

process(clk,rst_n)
begin
    if(rst_n=’0’)
       config_flag <= ‘0’;
    elsif(clk’event and clk = ‘1’) then
       if(nstaus_redg = ‘1’) then
          config_flag <= ‘1’;
       end if;
    end if;
end process;

现象:输出无变化。

分析:设计是检测config_flag的上升沿来产生输出,但测试发现config_flag信号根本没有变化,也就检测不到上升沿,由于CPLD的复位信号是由FPGA提供,而此时FPGA部分无法测试,也就是说测试时没有用全局复位,直接把CPLD的复位信号拉高,因为CPLD上电有一个自动复位的过程,把其内部寄存器清零。但是这里就有问题了,因为复位一直为高,所以config_flag是不变的,显然这里CPLD内部复位跟外部复位时两码事,上电后一直为高,而这在功能仿真阶段看不出来,如果进行后仿真,加上器件库,仿真的时候就会发现这个问题。

再看综合报告(registers removed during synthesis):register name:config_flag;reason for removed:Stuck at VCC due to stuck port data_in;说明config_flag被综合掉了,quatus II 不像ISE,被综合掉的寄存器会以警告信息给出来,Quartus II需要到综合报告里面查看。这里design中的寄存器不一定是寄存器了。测试时一定要看综合报告,看看被综合掉的寄存器对设计的输出是否有影响。

解决:测试FPGA给过来的复位信号,发现为高,这时在顶层取反,再当着复位信号来用,经测试,ok了。

ok,可以下班回家了,虽然饿着肚子在干,但收获还不小,也挺高兴的。

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条