yueshengzing 发表于 2014-8-30 12:41:13

FPGA中的模块编译后经常出问题,项目捉急中,求大神指导!

现在在做网络帧数据的处理,用的是stratixII:EP2S60F672,写了十多个module,涉及到LAN91C111的读写模块,RAM,FIFO,以及用状态机写的网络帧解析模块,时钟都是100Mhz,逻辑资源已用19%。现在问题越来越多,有一个问题很头疼啊!模块我都是一个一个写的,做了Modelsim仿真,用硬件做过测试。现在写新的Verilog代码或修改某个模块,会导致其他已经验证过的模块不能正常工作,有时添加或删除某个无关引脚再编译又能正常工作,感觉都要崩溃了。

以前出现问题时我用逻辑锁定和增量编译将某个模块锁定,项目能勉强继续下去,可现在感觉所有自己写的模块都可能出现这个问题,总不至于将所有模块都逻辑锁定吧?这个问题解决不了,对FPGA编程真是没信心了。

学了几天的TimeQuest的时序约束,看了看RTL视图,感觉还是云里雾里的,不知道如何解决现在的问题,求指导!

cxhy 发表于 2014-8-30 12:44:58

可能正是你的时序约束不够严谨所导致的吧。从timequest方面解决问题思路是正确的。

jm2011 发表于 2014-8-31 18:18:19

跑下后仿有帮助吗?

yueshengzing 发表于 2014-9-1 15:37:26

cxhy 发表于 2014-8-30 12:44
可能正是你的时序约束不够严谨所导致的吧。从timequest方面解决问题思路是正确的。 ...

恩,以前没弄过时序约束,只是浏览过一些帖子和教程,现在准备深入学学。thanks{:smile:}

yueshengzing 发表于 2014-9-1 15:42:01

jm2011 发表于 2014-8-31 18:18
跑下后仿有帮助吗?

这要试试,关键是有些模块是已经硬件跑通了的,在后续开发编写其他模块时,有时再编译后就不能正常工作,用signaltap查看一些状态机的状态值都出现了异常

via 发表于 2014-9-1 16:58:27

做做时序分析 尝试对关键路径加约束 设计里只有一个时钟?

蓝色风暴@FPGA 发表于 2014-9-3 18:44:53

连什么问题都没搞清楚,上来就时序约束,只会越搞越糊涂

蓝色风暴@FPGA 发表于 2014-9-3 18:47:40

1、检查逻辑功能有没有问题
2、检查代码中是否一没处理妥当的异步操作
3、查看时序报告看看时序有没有问题

NJ8888 发表于 2014-9-3 21:45:23

看你这系统模块之间很简单啊,应当容易实现的

yueshengzing 发表于 2014-9-4 19:11:04

via 发表于 2014-9-1 16:58
做做时序分析 尝试对关键路径加约束 设计里只有一个时钟?

恩,通过PLL输出两个时钟,一个10MHz,一个100Mhz,主要模块都是共用100Mhz时钟

yueshengzing 发表于 2014-9-4 19:19:22

蓝色风暴@FPGA 发表于 2014-9-3 18:47
1、检查逻辑功能有没有问题
2、检查代码中是否一没处理妥当的异步操作
3、查看时序报告看看时序有没有问题 ...

逻辑功能仿真测试都没问题,但是模块中的几个主要状态机(50多个状态)的写法不规范,现在准备按照书中提倡的规范写法来改写。
另外TimeQuest时序分析显示有相当多paths的建立余量为负值,准备着手解决。

yueshengzing 发表于 2014-9-4 19:22:32

NJ8888 发表于 2014-9-3 21:45
看你这系统模块之间很简单啊,应当容易实现的

恩,本身模块不多,但是数据发送中1万帧会丢10多帧,接收在高速时也容易丢帧。需要把整个调试完善后再集成到高速数据采集系统中。

putty 发表于 2014-9-4 21:31:10

100M时钟还是有点高的.你要仔细检查每个逻辑,确保1个clk内能完成.或者说,一个clk内不要做太多逻辑运算.实在不好处理的,分拆到两个clk.
确保Fmax不要离100M太远

蓝色风暴@FPGA 发表于 2014-9-4 22:46:23

yueshengzing 发表于 2014-9-4 19:19
逻辑功能仿真测试都没问题,但是模块中的几个主要状态机(50多个状态)的写法不规范,现在准备按照书中提 ...

50多个状态机......楼主之前做软件的吧,顺序思维太浓了吧,fpga除非迫不得已,否则基本是用逻辑就能搞定

qinxg 发表于 2014-9-5 10:10:06

1. 每个时钟都要添加时钟约束, 不满足约束的信号加流水线处理
2. 每个进出芯片脚的信号要用时钟打一下, 消除路径延时.同时把管脚信号放IOB里.
3. 跨时钟域的信号要加两级缓冲或者FIFO,双口RAM.RXC,TXC,100M主clk要处理好.
4. 每个模块先独自仿真, 最后添加顶级的仿真, 确保逻辑正确.
5. 状态机多没事, 只要时钟处理好, 保证逻辑正确.即使不做后仿真一般都没事.
页: [1]
查看完整版本: FPGA中的模块编译后经常出问题,项目捉急中,求大神指导!