#1楼主:帮忙看看这个错误
文章发表于:2008-05-29 10:24
http://blog.ednchina.com/hnnanaii/119486/message.aspx
是什么原因?
#2
文章发表于:2008-05-30 10:19
FPGA代码如下,设计是想让FPGA接收来自MCU的方波信号,每一个方波计数器加1,也就是地址加1,实际上却很难实现,老是出现计数器回走或停顿现象,大侠帮忙看看原因吧,错误图形看看下边
always@(posedge clk_32 or negedge reset_in)
begin
if(!reset_in) begin
Sending <= 1'b0;
ramvc_oe_rd <= 1'b1;
ramv_ce_rd <= 1'b1;
ramc_ce_rd <= 1'b1;
ramvc_addr_up <= 15'h0;
UP_State <= UP_Stop;
end
else begin
case(UP_State)
UP_Stop: begin
if(AD_Finish && (MCU[3:1] == 3'b010))
UP_State <= UP_Init;
else
UP_State <= UP_Stop;
ramvc_oe_rd <= 1'b1;
ramv_ce_rd <= 1'b1;
ramc_ce_rd <= 1'b1;
ramvc_addr_up <= ramvc_addr_up;
Sending <= 1'b0;
end
UP_Init: begin
Sending <= 1'b1;
ramvc_oe_rd <= 1'b0;
ramv_ce_rd <= MC5;
ramc_ce_rd <= !MC5;
ramvc_addr_up <= 15'h8;
UP_State <= UP_Wait;
end
UP_Wait: begin
Sending <= 1'b1;
ramvc_oe_rd <= 1'b0;
ramv_ce_rd <= MC5;
ramc_ce_rd <= !MC5;
ramvc_addr_up <= ramvc_addr_up;
if(MCU_CLK)
UP_State <= UP_Hold;
else
UP_State <= UP_Wait;
if(MCU[3:1] != 3'b010)
UP_State <= UP_Stop;
end
UP_Hold: begin
if(MCU_CLK)
UP_State <= UP_Next;
else
UP_State <= UP_Wait;
ramvc_oe_rd <= 1'b0;
ramv_ce_rd <= MC5;
ramc_ce_rd <= !MC5;
ramvc_addr_up <= ramvc_addr_up;
Sending <= 1'b1;
end
UP_Next: begin
if(MCU_CLK) begin
UP_State <= UP_Next;
ramvc_addr_up <= ramvc_addr_up;
end
else begin
UP_State <= UP_Wait;
ramvc_addr_up <= ramvc_addr_up + 15'h1;
end
ramvc_oe_rd <= 1'b0;
ramv_ce_rd <= 1'b0;
ramc_ce_rd <= 1'b0;
Sending <= 1'b1;
end
default: UP_State <= UP_Wait;
endcase
end
end


#3
文章发表于:2008-05-30 11:37
if(MCU_CLK)
UP_State <= UP_Hold;
else
UP_State <= UP_Wait;
if(MCU[3:1] != 3'b010)
UP_State <= UP_Stop;
有没有可能MCU_CLK信号为高电平时,MCU[3:1]也同时满足 MCU[3:1] != 3'b010 这个条件??我个人认为,这种情况下可能会出现 UP_State状态不定,因为非阻塞赋值在赋值开始时刻计算RHS表达式,在赋值结束时刻更新LHS的值,在always块结束时,有可能出现竞争冒险。
如果这两个条件判断有先后顺序,建议 用 if ...else
begin
end
此外,如果MCU_CLK信号的脉宽如果远远小于 clk_32 ,也有可能会造成 if(MCU_CLK) 语句无法稳定采样,个人愚见,希望对你有所帮助
#4
文章发表于:2008-06-02 09:16
此外,如果MCU_CLK信号的脉宽如果远远小于 clk_32 ,也有可能会造成 if(MCU_CLK) 语句无法稳定采样,个人愚见,希望对你有所帮助
有没有可能脉宽太大也无法保持稳定?
#5
文章发表于:2008-06-03 09:45
如果脉宽太大,大于两个clk_32周期,就有可能出现下面这种情况:
在clk_32的第一个采样周期 采样 MCU_CLK信号为高;在第二个采样周期MCU_CLK也为高。如果你希
望第二个采样周期MCU_CLK为低,则MCU_CLK的脉宽至少应该满足 大于1 x clk_32小于2 x clk_32。
如果两时钟的相位关系不固定也可能采样不稳定