嵌入式开发FPGA设计要点解析

本文探讨了FPGA设计中的关键技术点,包括时钟树设计原则、有限状态机(FSM)的应用、Latch的危害及避免方法,以及逻辑仿真的重要性和不同阶段。适合于FPGA设计初学者和有一定经验的设计者参考。

FPGA的用处比我们平时想象的用处更广泛,早期的嵌入式开发FPGA相对比较简单,所有的功能单元仅仅由管脚、内部buffer、LE、RAM构建而成,而LE由LUT(查找表)和D触发器构成,RAM也往往容量非常小。现在的FPGA不仅包含以前的LE,RAM也更大更快更灵活,管教IOB也更加的复杂,支持的IO类型也更多,而且内部还集成了一些特殊功能单元。包括DSP、SERDES、CPU core。

嵌入式开发FPGA.jpg

时钟树

对于FPGA来说,要尽可能避免异步设计,尽可能采用同步设计。同步设计的第一个关键,也是关键中的关键,就是时钟树。一个糟糕的时钟树,对FPGA设计来说,是一场无法弥补的灾难,是一个没有打好地基的大楼,崩溃是必然的。

具体一些的设计细则:

  1)尽可能采用单一时钟;

  2)如果有多个时钟域,一定要仔细划分,千万小心;

  3)跨时钟域的信号一定要做同步处理。对于控制信号,可以采用双采样;对于数据信号,可以采用异步fifo。需要注意的是,异步fifo不是万能的,一个异步fifo也只能解决一定范围内的频差问题。

  4)尽可能将FPGA内部的PLL、DLL利用起来,这会给你的设计带来大量的好处。

  5)对于特殊的IO接口,需要仔细计算Tsu、Tco、Th,并利用PLL、DLL、DDIO、管脚可设置的delay等多种工具来实现。简单对管脚进行Tsu、Tco、Th的约束往往是不行的。

可能说的不是很确切。这里的时钟树实际上泛指时钟方案,主要是时钟域和PLL等的规划,一般情况下不牵扯到走线时延的详细计算(一般都走全局时钟网络和局部时钟网络,时延固定),和ASIC中的时钟树不一样。对于ASIC,就必须对时钟网络的设计、布线、时延计算进行仔细的分析计算才行。

FSM

FSM:有限状态机。这个可以说时逻辑设计的基础。几乎稍微大一点的逻辑设计,几乎都能看得到FSM。FSM分为moore型和merly型,moore型的状态迁移和变量无关,merly型则有关。实际使用中大部分都采用merly型。

FSM通常有2种写法:单进程、双进程。

初学者往往喜欢单进程写法,格式如下:、

always @( posedge clk or posedge rst )

  begin

  if ( rst == 1‘b1 )

  FSM_status 《= 。。。。。。;

  else

  case ( FSM_status )

  。。。。。。;

  endcase

  end

简单的说,单进程FSM就是把所有的同步、异步处理都放入一个always中。

latch

首先

  1)stateCAD没有用过,不过我感觉用这个东东在构建大的系统的时候似乎不是很方便。也许用system C或者system Verilog更好一些。

  2)同步、异步的叫法是我所在公司的习惯叫法,不太对,不过已经习惯了,呵呵。

  这次讲一下latch。latch的危害已经说过了,这里不再多说,关键讲一下如何避免。

  1)在组合逻辑进程中,if语句一定要有else!并且所有的信号都要在if的所有分支中被赋值。

always @( * ) begin

  if ( sig_a == 1‘b1 ) sig_b = sig_c;

  end

  这个是绝对会产生latch的。

  正确的应该是:

  always @( * ) begin

  if ( sig_a == 1’b1 ) sig_b = sig_c;

  else sig_b = sig_d;

  end

另外需要注意,下面也会产生latch。也就是说在组合逻辑进程中不能出现自己赋值给自己或者间接出现自己赋值给自己的情况。

always @( * ) begin

  if ( rst == 1‘b1 ) counter = 32’h00000000;

  else counter = counter + 1;

  end

但如果是时序逻辑进程,则不存在该问题。

  2)case语句的default一定不能少!

  原因和if语句相同,这里不再多说了。

  需要提醒的是,在时序逻辑进程中,default语句也一定要加上,这是一个很好的习惯。

  3)组合逻辑进程敏感变量不能少也不能多。

  这个问题倒不是太大,verilog2001语法中可以直接用 * 搞定了。顺便提一句,latch有弊就一定有利。在FPGA的LE中,总存在一个latch和一个D触发器,在支持DDR的IOE(IOB)中也存在着一个latch来实现DDIO。不过在我们平时的设计中,对latch还是要尽可能的敬而远之。

逻辑仿真

仿真是FPGA设计中必不可少的一步。没有仿真,就没有一切。仿真是一个单调而繁琐的工作,很容易让人产生放弃或者偷工减料的念头。这时一定要挺住!仿真分为单元仿真、集成仿真、系统仿真。

单元仿真:针对每一个最小基本模块的仿真。单元仿真要求代码行覆盖率、条件分支覆盖率、表达式覆盖率必须达到100%!这三种覆盖率都可以通过MODELSIM来查看,不过需要在编译该模块时要在Compile opTIon中设置好。

集成仿真:将多个大模块合在一起进行仿真。覆盖率要求尽量高。

系统仿真:将整个硬件系统合在一起进行仿真。此时整个仿真平台包含了逻辑周边芯片接口的仿真模型,以及BFM、Testbench等。系统仿真需要根据被仿真逻辑的功能、性能需求仔细设计仿真测试例和仿真测试平台。系统仿真是逻辑设计的一个大分支,是一门需要专门学习的学科。

本文由朗锐智科编辑整理(www.lrist.com),如有侵权请联系本站。

本书全面系统地介绍了基于SOPC的嵌入式系统设计技术,内容包括Altera可编程逻辑器件硬件结构、Quartus II开发软件的使用、SOPC原理与设计实例,以及基于FPGA的算法实现。   本书内容丰富,取材新颖。可作为电子类各专业本科生、研究生的教材和相关领域工程技术人员的参考书,也可作为本科EDA技术课程的后续课程教材和现代电子系统设计、电子设计竞赛、数字通信系统以及Nios II嵌入式系统高层次开发的参考书。 目录 第1章 绪论  1.1 嵌入式系统简介   1.1.1 嵌入式系统的发展简介   1.1.2 嵌入式系统的概念与组成   1.1.3 嵌入式系统的特点   1.1.4 嵌入式系统的应用模式与发展趋势  1.2 SOPC技术简介   1.2.1 SOPC技术的主要特点   1.2.2 SOPC技术实现方式   1.2.3 SOPC系统开发流程 第2章 Altera可编程逻辑器件简介  2.1 MAX II器件   2.1.1 成本优化的架构   2.1.2 低功耗   2.1.3 高性能   2.1.4 用户Flash存储器   2.1.5 实时系统可编程能力(ISP)   2.1.6 灵活的多电压Multivolt内核   2.1.7 JTAG翻译器   2.1.8 I/O能力  2.2 Cyclone器件   2.2.1 新型可编程架构   2.2.2 嵌入式存储资源   2.2.3 专用外部存储接口电路   2.2.4 支持的接口及协议   2.2.5 锁相环的实现   2.2.6 I/O特性   2.2.7 Nios II嵌入式处理器   2.2.8 配置方案  2.3 Cyclone II器件   2.3.1 主要特性   2.3.2 数字信号处理应用   2.3.3 专用外部存储器接口   2.3.4 嵌入式锁相环   2.3.5 单端I/O特性   2.3.6 差分I/O特性   2.3.7 自动CRC检测   2.3.8 Nios II嵌入式处理器  2.4 Stratix器件   2.4.1 高性能架构加快模块化设计   2.4.2 TriMatrix存储器   2.4.3 DSP块   2.4.4 高带宽I/O标准和高速接口   2.4.5 用于系统时钟管理的PLL   2.4.6 器件配置和远程系统升级  2.5 Stratix II器件   2.5.1 新型逻辑结构   2.5.2 高速I/O信号和接口   2.5.3 外部存储器接口   2.5.4 针对Stratix II器件优化的IP   2.5.5 设计安全性   2.5.6 TriMatrix存储器   2.5.7 数字信号处理块   2.5.8 时钟管理电路   2.5.9 片内匹配   2.5.10 远程系统升级  2.6 Stratix GX器件 第3章 Quartus II软件应用  3.1 图形用户界面设计流程  3.2 命令行设计流程  3.3 交通灯设计实例   3.3.1 设计原理   3.3.2 设计输入   3.3.3 创建工程   3.3.4 编译前设置   3.3.5 编译   3.3.6 仿真   3.3.7 应用RTL电路图观察器  3.4 引脚锁定和下载验证   3.4.1 引脚锁定   3.4.2 下载验证   3.4.3 对配置器件编程  3.5 使用嵌入式逻辑分析仪进行实时测试   3.5.1 SignalTap II逻辑分析仪使用流程   3.5.2 编译特定逻辑条件触发信号  3.6 使用在系统嵌入式存储器   3.6.1 正弦信号发生器的设计   3.6.2 定制ROM初始化数据文件   3.6.3 定制ROM元件   3.6.4 使用在系统嵌入式存储器数据编辑器  3.7 嵌入式锁相环altPLL宏功能模块调用  思考题 第4章 基于FPGA的DSP算法实现 第5章 Nios II处理器结构 第6章 Avalon总线规范 第7章 基于SOPC的Nios II处理器设计 第8章 Nios II外设及其编程 第9章 嵌入式处理器应用实例 附录A VHDL基本语法 附录B Verilog HDL基本语法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值