FPGA开发流程及编程思想_第1页
FPGA开发流程及编程思想_第2页
FPGA开发流程及编程思想_第3页
FPGA开发流程及编程思想_第4页
FPGA开发流程及编程思想_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、FPGA开发流程及编程思想 FPGA开发流程及编程思想开发流程及编程思想 FPGA开发流程及编程思想 简化的开发流程简化的开发流程 需求定义 设计输入 设计综合 设计实现 配置下载 功能仿真 系统测试 FPGA开发流程及编程思想 设计验证设计验证 实际的开发流程实际的开发流程 需求定义 设计输入 设计综合 设计实现 配置下载 综合结果分析 实际电路验证 静态时序分析 时序仿真 系统整合验证 功能仿真 FPGA开发流程及编程思想 需求定义需求定义 l需求决定设计 “这个设计是做什么用的?” “要实现什么功能?” “有什么要注意的地方?” l需求是容易发生变更的 大师说过,没有哪个设计需求更改少于

2、三次的,唯一一次 只更改过两次需求的情况,是那个可怜的家伙在送第三次 变更需求来的路上,被车给撞了。 l你不能决定需求是否发生变更,但你可以做到 当需求更改时,你所需要做出的调整最小。 FPGA开发流程及编程思想 设计输入设计输入 l原理图输入(对大型设计很少使用) l硬件描述语言VerilogHDL,VHDL lHDL语言是硬件描述语言,不是硬件设计语言 l用硬件电路设计思想来编写HDL FPGA开发流程及编程思想 先有鸡,还是先有蛋?先有鸡,还是先有蛋? always(posedge clk) if(!rst_n) a = 8b0; else a = a + 1b1; ? 是因为,我们这样

3、写了,a就会被综合成同步计数器; 还是因为,这样写a会被综合成同步计数器,我们才如上写。 FPGA开发流程及编程思想 你知道它们会综合成什么?你知道它们会综合成什么? 代码1: always (posedge clk) begin if (ce) b = in, b0:14; end assign out = b15; 代码2: reg 31:0 c511:0 ; always ( posedge clk) begin addr_reg = addr; if (we) caddr = din; end assign out = caddr_reg; FPGA开发流程及编程思想 设计综合设计综合

4、 l软件开发工具 lAltera: QuartusII lXilinx : ISE lLattice:IspLever l第三方 Synplicity: Synplify Pro FPGA开发流程及编程思想 综合结果分析综合结果分析 l看看综合结果,了解你的代码消耗了多少reg、 lut资源,综合估计频率多快,最差路径是哪条。 l尽量消除每一个warning,如果warning无法消 除,请确认该warning于结果无害。 l有没有这种情况:代码A比代码B,速度更快、 消耗资源更少、功能更强、运行更稳定? FPGA开发流程及编程思想 功能仿真功能仿真 l仿真工具 lAltera: Quartu

5、sII lXilinx: ISE lLattice: IspLever l第三方Monter:ModelSim FPGA开发流程及编程思想 仿真测试方法仿真测试方法 l正确性测试 又称功能测试,基本的方法是构造一些合理输 入,检查是否得到期望的输出。 l容错性测试 检查程序在异常条件下的行为。通常构造一些 不合理的输入来引诱程序出错。容错性好的程 序能确保系统不发生无法意料的事故。 FPGA开发流程及编程思想 设计实现设计实现 l实现工具 lAltera: QuartusII lXilinx: ISE lLattice:IspLever FPGA开发流程及编程思想 静态时序分析静态时序分析 l

6、观察Static Timing Analyse结果,原则上不允 许出现时序违规。 l如果出现时序违规 (1)调整实现选项 (2)修改约束条件 (3)修改代码拆分最差路径 其中修改代码改掉最差路径是治本之法。 FPGA开发流程及编程思想 下载调试下载调试 l内嵌式逻辑分析仪 Altera:SignalTap Xilinx: ChipScope Lattice:Reveal l示波器 示波器也是有力的调试工具。 FPGA开发流程及编程思想 调试困境调试困境 l功能仿真,看不出错误 l用示波器点测,看不出错误 l用内嵌式逻辑分析仪捕获数据,看不出错误 l最终结果就是不对 FPGA开发流程及编程思想

7、软件调试软件调试 l主要指通过功能仿真(ModelSim)查找问题 实践证明,很多后期调试发现的问题,其实在 仿真阶段就能发现,只是因为测试激励不完备, 前期仿真没能暴露出来。 FPGA开发流程及编程思想 硬件调试硬件调试 l首先,请确认你的硬件工作正常 l通过示波器、内嵌式逻辑分析仪等工具获取 波形或数据查找问题 l除了你对自己程序的了解,还需要熟悉所用 FPGA的架构、资源等情况,还需要清楚外 接芯片的接口时序,了解外围电路的分布。 FPGA开发流程及编程思想 调试方法调试方法 l逐级跟踪 如果不是最后一步出错,那就是最后一步的前 一步出错;如果不是前一步出错,就是前一步 的前一步出错,总

8、之,有一步出错,找到 那一步。 l使用多种工具 不论是ModelSim、SignalTap、ChipScope、 Reveal、示波器各有各的优缺点。 在合适的地方,选用合适的工具。 FPGA开发流程及编程思想 倒霉定律倒霉定律 l担心有理 你所担心的地方,通常是错误发生的地方。你 很确定的地方,通常很少发生错误,你不能很 确定的地方,就难说了。 l人与机器 与机器相比,人更容易犯错误。芯片没有正常 工作,我们会怀疑芯片坏了,但大多数时候会 发现是芯片没有配置对(程序原因),或者是 有只管脚短路或虚焊了(还是人为)。 FPGA开发流程及编程思想 不要不要C,要软件工程,要软件工程 l虽然Ver

9、ilog HDL语法与C语言有些相似,但是 有些在C语言好的语法习惯,于FPGA设计而 言却是不合适的,甚至是背道而驰的。 l我们需要的是软件工程的思想。 FPGA开发流程及编程思想 抛弃你的抛弃你的C语言习惯语言习惯 assign data = (frame_head_valid) ? frame_head_reg : (rtl8305_mtxen_dly) ? rtl8305_mtxd_dly : (frame_tail_valid) ? frame_tail_reg : 8h00; always(posedge clk or negedge rst_n) if(!rst_n) cnt =

10、 10d639 | (sync = 1b0 else cnt = cnt + 1; 例1: 例2: FPGA开发流程及编程思想 软件工程软件工程 l软件工程经过三十年的发展,已经积累了相当 多的方法,但这些方法不是严密的理论。实践 人员不应该教条地套用方法,更重要的是学会 “选择合适的方法”和“产生新方法”。 l程序员脑子里的软件工程观念会无形地支配其 怎么去做事情。 FPGA开发流程及编程思想 把软件工程思想植入你的设计把软件工程思想植入你的设计 l软件工程的目标是提高软件的质量与生产率, 最终实现软件的工业化生产。 l好的软件工程方法可以同时提高质量与生产率, 质量与生产率之间不存在根本的

11、对立。 l质量第一,生产率第二。如果一开始就追求高 生产率,容易使人急功近利,留下隐患。宁可 进度慢些,也要保证每个环节的质量,以图长 远利益。 FPGA开发流程及编程思想 软件工程模型软件工程模型 线性模型线性模型 渐增式模型渐增式模型 FPGA开发流程及编程思想 软件开发的基本策略软件开发的基本策略 l复用复用 模块标准化模块标准化 复用就是指“利用现成的东西”。复用不仅要使自己 拿来方便,还要让别人拿去方便。 l分而治之分而治之 模块划分模块划分 把复杂的问题拆分成较为简单的一个个子问题,逐个 解决。 l优化与折衷优化与折衷 优化工作不是可有可无的事情,而是必须要做的事情。 折衷是指通过

12、协调各个质量因素,实现整体质量的最 优。 FPGA开发流程及编程思想 一些有争议的观点一些有争议的观点 l争议:编程时是否应该多使用技巧? l观点:就软件开发而言,技巧的优点在于能另 辟蹊径地解决一些问题,缺点是技巧并不为人 熟知。若在程序中用太多的技巧,可能会留下 隐患,别人也难以理解程序。 鉴于一个局部的优点对整个系统而言是微 不足道的,而一个错误则可能是致命的。作者 建议用自然的方式编程,少用技巧。简单的说, 就是少一些个性,多一些共性。 FPGA开发流程及编程思想 一些有争议的观点一些有争议的观点 l软件中的错误是否可按严重程度分等级? l作者观点:在定量分析时,可以将错误分等级, 以

13、便于管理。 l开发人员应该意识到:所有的错误都是严重的, 不存在微不足道的错误。这样才能少犯错误。 FPGA开发流程及编程思想 需求分析为什么困难需求分析为什么困难 l有几种原因使需求分析变得困难 l(1)客户说不清楚需求; l(2)需求自身经常变动; l(3)分析人员或客户理解有误。 FPGA开发流程及编程思想 需求自身经常变动需求自身经常变动 l让我们先接受“需求会变动”这个事实吧,免 得在需求变动时惊慌失措。 l尽可能地分析清楚哪些是稳定的需求,哪些是 易变的需求。以便在进行系统设计时,将软件 的核心建筑在稳定的需求上,否则将会吃尽苦 头。 l一定要清楚“做什么”和“不做什么”。如果 含

14、含糊糊,日后扯皮的事情就多。 FPGA开发流程及编程思想 程序设计程序设计 l参考编程规范 l内功深厚的武林高手出招往往平淡无奇。同理, 编程高手也不会用奇门怪招写程序。良好的编 程风格是产生高质量程序的前提。 l编程技巧博大精深,非简单语言可以描述。掌 握语法基础,博览众家代码,多实践,35年, 或有所成 FPGA开发流程及编程思想 测试与改错测试与改错 l编程大师说:“任何一个程序,无论它多么小,总存在着错误。” l初学者不相信大师的话,他问:“如果一个程序小得只执行一个 简单的功能,那会怎样?” l“这样的一个程序没有意义,”大师说,“但如果这样的程序存 在的话,操作系统最后将失效,产生

15、一个错误。” l但初学者不满足,他问:“如果操作系统不失效,那么会怎样?” l“没有不失效的操作系统,”大师说,“但如果这样的操作系统 存在的话,硬件最后将失效,产生一个错误。” l初学者仍不满足,再问:“如果硬件不失效,那么会怎样?” l大师长叹一声道:“没有不失效的硬件。但如果这样的硬件存在 的话,用户就会想让那个程序做一件不同的事,这件事也是一个 错误。” l没有错误的程序世间难求。 FPGA开发流程及编程思想 测试的阶段测试的阶段 设计验证设计验证 需求定义 设计输入 设计综合 设计实现 配置下载 综合结果分析 实际电路验证 静态时序分析 时序仿真 系统整合验证 功能仿真 FPGA开发

16、流程及编程思想 测试的目的测试的目的 l测试的目的是为了发现尽可能多的缺陷。 l测试总是先假设程序中存在缺陷,再通过仿 真调试来发现并最终改正缺陷。理解这一点 至关重要。 l如果说测试的目的是为了说明程序中没有缺 陷,那么测试人员就会向这个目标靠拢,因 而下意识地选用一些不易暴露错误的测试示 例。这样的测试是虚假的。 FPGA开发流程及编程思想 测试的真理测试的真理 l测试只能证明缺陷存在,而不能证明缺陷不 存在。 l这个真理告诉我们,对于一个复杂的系统而 言,无论采取什么样的测试手段都不能证明 缺陷已经不复存在。 l在实践中,考虑到时间、费用等限制,不允 许无休止地测试。 FPGA开发流程及

17、编程思想 测试分工测试分工 l开发人员应该执行“白盒”测试,即测试源程 序的逻辑结构以及实现细节(“白盒”指看得 见程序的内部结构)。 l独立测试小组应该执行“黑盒”测试,即按照 规格说明来测试程序是否符合要求(“黑盒” 指看不见程序的内部结构)。 l测试有助于提高软件的质量,但是提高软件的 质量不能依赖于测试。软件的高质量是开发设 计出来的,而不是靠测试修补出来的。 FPGA开发流程及编程思想 正确对待测试正确对待测试 l一个错误自身也许很微小,但是程序存在 错误这件事很严重。能否做好测试与改错 工作,思想认识和办事态度是最关键的。 l程序员应该把测试当成份内之事,不要依 赖于外界的“黑盒测试”。 l程序出了错误一定要改错,但是“编写优 质无错”的程序才是根本的解决之道。 FPGA开发流程及编程思想 维护维护 l软件维护是既费神又费钱的工作。 l良好的编程风格意味着良好的可理解性,可以 降低维护的代价。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论