[FPGA] 分享FPGA经验(连载)

[复制链接]
楼主: andous
 楼主 | 2014-3-5 22:18 | 显示全部楼层
谢谢大家的支持,这段时间确实有点忙,等忙完这段或者闲暇时间给大家更新。
大家都想知道什么内容,我好有的放矢,呵呵

使用特权

评论回复
| 2014-3-6 00:13 | 显示全部楼层
继续,加油啊

使用特权

评论回复
| 2014-3-6 12:05 | 显示全部楼层
讲讲程序的调试过程吧,一般的过程

使用特权

评论回复
| 2014-3-10 21:08 | 显示全部楼层
看看别人的经验 能少走很多弯路啊!

使用特权

评论回复
| 2014-3-11 09:50 | 显示全部楼层
新手 看看这些经验 能有不少启发~!

使用特权

评论回复
| 2014-3-11 23:55 | 显示全部楼层
菜叶 发表于 2014-3-11 09:50
新手 看看这些经验 能有不少启发~!

继续啊

使用特权

评论回复
| 2014-3-13 11:09 | 显示全部楼层
楼主继续,

使用特权

评论回复
| 2014-3-13 16:38 | 显示全部楼层
楼主,貌似好久没更新了,咱们fpga这个版有点冷清啊,

使用特权

评论回复
| 2014-3-13 21:57 | 显示全部楼层
从头学FPGA的话是选哪个厂商的更容易入门呢?或者具体什么型号的对新手来说比较友好啊?不胜感激!

使用特权

评论回复
| 2014-3-17 09:46 | 显示全部楼层
没下文了

使用特权

评论回复
| 2014-3-20 17:16 | 显示全部楼层
刚开始学习,楼主辛苦啊

使用特权

评论回复
 楼主 | 2014-3-21 17:28 | 显示全部楼层
     谢谢大家的支持和肯定,这是我继续写下去的动力和源泉。
   大家觉得FPGA的难点在哪?
   

使用特权

评论回复
| 2014-3-23 18:16 | 显示全部楼层
学习下

使用特权

评论回复
| 2014-3-25 23:22 | 显示全部楼层
初学者非常感谢楼主这样慷慨勤劳的资深工程师

使用特权

评论回复
 楼主 | 2014-4-9 16:56 | 显示全部楼层
重新归来,等会上传延时的问题

使用特权

评论回复
 楼主 | 2014-4-9 17:57 | 显示全部楼层
做FPGA代码,其中一个最重要的步骤,那就是仿真。
仿真简单的说,就是验证代码是否正确。里面就包含了很多仿真的东西,测试平台的搭建,库的建立等等。

最让我们忽略的恐怕就是线延时了。

有的时候我们仿真正确,但是加载到FPGA里面就不正确了,这是为什么呢?

你忽略了一个问题,那就是线延时。

你的接口从FPGA到接口芯片肯定铺铜线过去了,中间这段走线是有延时。

所以在我们仿真的时候,测试平台要在库和顶层之间加上一定的延时。

这样来保证我们代码的正确。

使用特权

评论回复
 楼主 | 2014-4-9 18:15 | 显示全部楼层
关于FPGA的延时以及时序等要求,基本上是skew,width,period,hold&set time。
检查时钟和控制信号在指定事件之间的时间间隔,包括:skew、width、period和nochange。 skew:$skew (reference_event, data_event, limit, notifier); 限制最大偏斜 $skew (posedge clk1, posedge clk2, 1, notifier); 当data_event time - reference_event > limit,则会报告skew time violations。 $skew是基于事件(event-based)的,如果监测到一个reference_event,那么就开始评估脉宽,只要监测到一个data_event,就会生成相应的报告,直到监测到下一个reference_event,才重新开始新的监测。如果在监测到一个data_event之前,又监测到一个reference_event,那么就放弃本次评估,重新开始新的评估。 width:$width (controlled_reference_event, limit, threshold, notifier); 限制最小脉宽 $width (posedge in, 2, notifier); 这里data_event是隐含的,它等于reference_event的相反边缘,当width < limit时,就会报告width time violations。 period:$period (controlled_reference_event, limit, notifier); 限制最小周期 $period (negedge clk, 10, notifier); 这里data_event是隐含的,它等于reference_event的相同边缘,当period < limit时,就会报告period time violations。 nochange:$nochange (reference_event, data_event, start_edge_offset, end_edge_offset, notifier); 当leading reference event time - start_edge_offset < data_event < trailing reference event time + end_edge_offset时,就会报告nochange time violations。例如: $nochange (posedge clk, data, 0 , 0); 当在clk高电平期间,data发生任何变化,就会报告nochange time violations。 有时候,路径上的时序检查是在一定条件成立的前提下进行的,这就需要引入条件操作符:&&&。需要注意的是,当存在两个及以上的条件时,要求这些条件首先在specify块外部经过适当的组合逻辑产生一个新的控制信号,然后再引入到specify块内部使用。 例如: and u1 (clr_and_set, clr, set); specify $setup (negedge data, posedge clk &&& clr_and_set, 3, notifier); endspecify
在xilinx里面,我们看post %route里面有个tinming的报告,我们在这里面可以清楚的看到这些东西

使用特权

评论回复
| 2014-4-9 21:30 | 显示全部楼层
andous 发表于 2014-4-9 17:57
做FPGA代码,其中一个最重要的步骤,那就是仿真。
仿真简单的说,就是验证代码是否正确。里面就包含了很多 ...

如果要考虑延迟,altera的话用signaltap是不是可以实现硬件层面上的仿真?xilinx有类似的工具么?

使用特权

评论回复
| 2014-4-9 22:53 | 显示全部楼层
希望能重点讲解一些时序方面的,最好能有实例,非常感谢!

使用特权

评论回复
| 2014-4-11 14:00 | 显示全部楼层
怎么不写了,继续。。。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
*滑动验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /3 下一条

在线客服 快速回复 返回顶部 返回列表