FPGA控制时序问题?
时间:10-02
整理:3721RD
点击:
自己开发的一个数据采集卡,用FPGA来控制时序,5M的时钟CLK_5M对模拟信号进行采样,一帧数据是8192个点,触发信号MainTrigger下降沿触发后,每来一个时钟的上升沿,采集一个点,16位计数寄存器Count加一,当计数器计够8192个点后,触发一个帧结束信号FrameEnd(产生一个负脉冲),产生中断。
问题是,开始采集后十几秒或者几十秒(每次时间不等,能正常采集几十帧或几百帧)是正常的,用示波器测帧结束信号的波形是正确的,30Hz的负脉冲,但随后帧结束信号的波形就失去了(没有信号了),用Quartus自带的仿真工具仿真两帧(4ms),波形也是正常的。
第一次使用FPGA设计,找不到问题在哪,卡到这不知如何进行,望高手指点!
附代码如下:
FrameNum为采集点数8191
assign FrameFullFlag = (Count==FrameNum-1)?1'b1:1'b0;
assign LOAD = ~Q;
always@(posedge CLK_5M or negedge Reset)
begin
if(!Reset)
begin
FrameEnd <= 1'b0;
Count<= 16'h0000;
Q <= 1'b0;
CState <= CIdle;
end
else
begin
Q <= FrameFullFlag;
case(CState)
CIdle: begin
if(!MainTrigger)
begin
CState <= CStart;
FrameEnd <= 1'b1;
Count<= Count+16'h0001;
end
else
begin
CState <= CIdle;
end
end
CStart:begin
if(!LOAD)
begin
FrameEnd <= 1'b0;
Count<= 16'h0000;
CState <= CStop;
end
else
Count <= Count+16'h0001;
end
CStop: begin
if(!MainTrigger)
begin
FrameEnd <= 1'b1;
Count<= Count+16'h0001;
CState <= CStart;
end
else
CState <= CIdle;
end
default: CState <= CIdle;
endcase
end
end
问题是,开始采集后十几秒或者几十秒(每次时间不等,能正常采集几十帧或几百帧)是正常的,用示波器测帧结束信号的波形是正确的,30Hz的负脉冲,但随后帧结束信号的波形就失去了(没有信号了),用Quartus自带的仿真工具仿真两帧(4ms),波形也是正常的。
第一次使用FPGA设计,找不到问题在哪,卡到这不知如何进行,望高手指点!
附代码如下:
FrameNum为采集点数8191
assign FrameFullFlag = (Count==FrameNum-1)?1'b1:1'b0;
assign LOAD = ~Q;
always@(posedge CLK_5M or negedge Reset)
begin
if(!Reset)
begin
FrameEnd <= 1'b0;
Count<= 16'h0000;
Q <= 1'b0;
CState <= CIdle;
end
else
begin
Q <= FrameFullFlag;
case(CState)
CIdle: begin
if(!MainTrigger)
begin
CState <= CStart;
FrameEnd <= 1'b1;
Count<= Count+16'h0001;
end
else
begin
CState <= CIdle;
end
end
CStart:begin
if(!LOAD)
begin
FrameEnd <= 1'b0;
Count<= 16'h0000;
CState <= CStop;
end
else
Count <= Count+16'h0001;
end
CStop: begin
if(!MainTrigger)
begin
FrameEnd <= 1'b1;
Count<= Count+16'h0001;
CState <= CStart;
end
else
CState <= CIdle;
end
default: CState <= CIdle;
endcase
end
end
小弟不知如何调试,望大侠们指点迷津,告诉如何调试寻找问题的思路也好~
谢过了!
估计很可能是程序的问题吧!
是的,但是尝试过不用状态机,使用循环计数,计数完毕触发一个FLAG,执行一系列动作,但是也不行,一样是采集一段时间,就消失了FrameEnd信号(30Hz的周期负脉冲变成了持续的高电平),而且效果还不如使用状态机。
请问,应该如何去调试查找错误,试过仿真了,仿真波形正常,大侠们给指个方向吧