前期主要做算法,现在到了编程阶段,发现自己编程的水平还有待提高,程序
里面还有很多bug,下面说几个现象:
1.状态机赋值的问题
现象:
对于状态机赋值的问题一直都有疑问,比如信号a,我在状态s1中赋值1后,在
之后的状态中不处理,得到的结果就是a=1保持了一个周期;如果在接下来的s2
中继续赋值1,a会一直保持1不掉下来。
问题:
理论上一个信号给它赋值之后没有操作应该一直保持,假设它不会一直保持,
那为什么两个状态机连续赋值后,a会一直保持1不掉下来。
2.FPGA实现不一致的问题
现象:
我真不太愿意把我写的代码给大家看,不好意思了!
process(clk,reg_rbw,rst)
begin
if(rst='0')then
cic_dec_rate <= "000000000000";
elsif rising_edge(clk)then
case reg_rbw is
when "0110" =>
cic_dec_rate <= "111110100000";
fir_sel <="01";
when "0111" =>
cic_dec_rate <= "011111010000";
fir_sel <= "00";
when "1000" =>
cic_dec_rate <= "000110010000";
fir_sel <= "01";
when "1001" =>
cic_dec_rate <= "000011001000";
fir_sel <="00";
when "1010" =>
cic_dec_rate <= "000000101000";
fir_sel <= "01";
when "1011"=>
cic_dec_rate <= "000000010100";
fir_sel <= "00";
when others =>
cic_dec_rate <= "000000000000";
end case;
end if;
end process;
基本都是对信号的赋值,综合过后分别使用两个不同的chipscope文件,调试时
cic_dec_rate信号出现了差异,一个各个信号赋值都很正常,一个在
cic_dec_rate信号的某一位出现了周期的跳变,比如cic_dec_rate(5)='1';结
果cic_dec_rate(5)变成了一个周期变化的信号,像时钟那样,结果是所有与
cic_dec_rate相关的信号都出现了这种周期性,导致结果错误。调试时经常会
发现这种问题,发现某个信号本来应该是固定值的,结果使用chipscope看都在
某一位变成了周期信号,导致结果周期的跳变。 |