经过几天的努力,测试终于完成了三分之二,之前遇到的种种问题都得以解决,通过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条评论)
登录后参与讨论