关于FPGA时序约束一个问题。
本帖最后由 路人甲被注册了 于 2015-4-13 15:19 编辑CPU每隔相应时间置寄存器,清除数据/累加数据。
仿真过,仔细找过,没找到逻辑问题。严重怀疑是时序约束问题,数据周期是250M,怀疑门电路延迟超过4ns,以至于 每几次数据就会出错一次。
出错的现象是:
求解怎么破。 本帖最后由 路人甲被注册了 于 2015-4-13 14:41 编辑
always @(posedge clk_250m or negedge rst_250_n) begin
if(!rst_250_n) begin
ID_IDD_reg <= 32'd0;
QD_QDD_reg <= 32'd0;
cnt <= 8'd0;
data_ready <= 1'b0;
end
else if(clr) begin
ID_IDD_reg <= 32'd0;
QD_QDD_reg <= 32'd0;
cnt <= 8'd0;
data_ready <= 1'b0;
end
else if(start) begin
//ID_IDD_reg <= (cnt == 9'h100) ? ID_IDD_reg : (ID_IDD_reg +IDD);
//QD_QDD_reg <= (cnt == 9'h100) ? QD_QDD_reg : (QD_QDD_reg +QDD);
//ID_IDD_reg<= (cnt == 9'h100) ? ID_IDD_reg :(ID_IDD_reg +ID);
//QD_QDD_reg<= (cnt == 9'h100) ? QD_QDD_reg :(QD_QDD_reg +QD);
ID_IDD_reg <= (complet) ? ID_IDD_reg : (ID_IDD_reg + num);
QD_QDD_reg <= (complet) ? QD_QDD_reg : (QD_QDD_reg + num);
ID_IDD_reg<= (complet) ? ID_IDD_reg :(ID_IDD_reg +num);
QD_QDD_reg<= (complet) ? QD_QDD_reg :(QD_QDD_reg +num);
cnt <= (complet) ? cnt : (cnt + 9'd1);
data_ready <= (complet) ? 1'b1 : 1'b0;
end
elsebegin
ID_IDD_reg <= ID_IDD_reg;
QD_QDD_reg <= QD_QDD_reg;
cnt <= cnt;
data_ready <= data_ready;
end
end 关注,不知道你的fpga是啥型号。 自结贴,精简逻辑门,问题似乎解决。
之前综合的逻辑。
修改之后:
推断,应该还是门延迟过久,超过一个周期。 STA的时候没有报告timing requirement not meet? 加上250MHz的约束的话,综合工具应该保证满足4ns. 很好奇,,楼主是怎么将逻辑门精简下来的。 同问啊,楼主是怎么优化代码的,给我们这些小白讲讲呗 jm2011 发表于 2016-4-29 16:26
同问啊,楼主是怎么优化代码的,给我们这些小白讲讲呗
这都一年前的老贴了,我都好久没写FPGA了。{:lol:} 守望者2012 发表于 2016-4-26 14:46
很好奇,,楼主是怎么将逻辑门精简下来的。
挖到一手好坟{:lol:} 路人甲被注册了 发表于 2016-4-29 16:28
这都一年前的老贴了,我都好久没写FPGA了。
{:smile:} 才发现是2015年的帖子了;
页:
[1]