FPGA的运用
FPGA的用途比咱们平常幻想的用途更广泛,原因在于其间集成的模块品种更多,而不只是是本来的简略逻辑单元(LE)。前期的FPGA相对比较简略,全部的功用单元只是由管脚、内部buffer、LE、RAM构建而成,LE由LUT(查找表)和D触发器构成,RAM也往往容量十分小。现在的FPGA不只包含曾经的LE,RAM也更大更快更灵敏,管束IOB也愈加的杂乱,支撑的IO类型也更多,而且内部还集成了一些特别功用单元,包含:
DSP:实践上便是乘加器,FPGA内部能够集成多个乘加器,而一般的DSP芯片往往每个core只要一个。换言之,FPGA能够更简略完成多个DSP core功用。在某些需求很多乘加核算的场合,往往多个乘加器并行作业的速度能够远远超越一个高速乘加器。
SERDES:高速串行接口。将来PCI-E、XAUI、HT、S-ATA等高速串行接口会越来越多。有了SERDES模块,FPGA能够很简略将这些高速串行接口集成进来,无需再购买专门的接口芯片。
CPU core:分为2种,软core和硬core。软core是用逻辑代码写的CPU模块,能够在任何资源满足的FPGA中完成,运用十分灵敏。而且在大容量的FPGA中还能够集成多个软core,完成多核并行处理。硬core是在特定的FPGA内部做好的CPU core,长处是速度快、性能好,缺陷是不可灵敏。
不过,FPGA仍是有缺陷。关于某些高主频的运用,FPGA就力不从心了。现在尽管理论上FPGA能够支撑的500MHz,但在实践规划中,往往200MHz以上作业频率就很难完成了。
FPGA规划要害解析
FPGA规划要害之一:时钟树
关于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中的时钟树不一样。关于AS%&&&&&%,就有必要对时钟网络的规划、布线、时延核算进行细心的剖析核算才行。
FPGA规划要害之二: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中。
FPGA规划要害之三: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规划要害之四:逻辑仿真
仿真是FPGA规划中必不可少的一步。没有仿真,就没有全部。仿真是一个单调而繁琐的作业,很简略让人发生抛弃或许偷工减料的想法。这时必定要挺住!仿真分为单元仿真、集成仿真、体系仿真。
单元仿真:针对每一个最小根本模块的仿真。单元仿真要求代码行覆盖率、条件分支覆盖率、表达式覆盖率有必要到达100%!这三种覆盖率都能够经过MODELSIM来检查,不过需求在编译该模块时要在Compile opTIon中设置好。
集成仿真:将多个大模块合在一起进行仿真。覆盖率要求尽量高。
体系仿真:将整个硬件体系合在一起进行仿真。此刻整个仿真渠道包含了逻辑周边芯片接口的仿真模型,以及BFM、Testbench等。体系仿真需求依据被仿真逻辑的功用、性能需求细心规划仿真测验例和仿真测验渠道。体系仿真是逻辑规划的一个大分支,是一门需求专门学习的学科。