当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

《EDA技术基础与实践(Electronic Design Automation)》课程教学资源(实验参考资料)FPGA基础知识(FPGA设计的指导性原则、FPGA设计的具体准则)

资源类别:文库,文档格式:PDF,文档页数:100,文件大小:3MB,团购合买
基本原则之一:面积和速度的平衡与互换; 基本原则之二:硬件原则; 基本原则之三:系统原则; 基本原则之四:同步设计原则; 基本设计思想与技巧之一:乒乓操作; 基本设计思想与技巧之二:串并转换; 基本设计思想与技巧之三:流水线操作; 基本设计思想与技巧之四:数据接口的同步方法; 常用模块之一:RAM; 常用模块之二:全局时钟资源与时钟锁相环; 常用模块之三:全局复位/置位信号; 常用模块之四:高速串行收发器。 HDL语言的层次含义; ·Coding Style的含义; ·结构层次化编码; ·模块的划分的技巧; 比较判断语句case和if...else的优先级; 慎用锁存器(Latch); ·使用Pipelining方法优化时序; 模块复用与Resource Sharing; 逻辑复制; 香农扩展; 信号敏感表; 复位逻辑; FSM设计的一般型原则; 用Verilog语言设计FSM的技巧; ·CPLD原理与设计方法。
点击下载完整版文档(PDF)

第1章FPGA设计的指导性原则 王诚Westor Wang westor@edacn.net 这一部分主要介绍FPGA/CPLD设计的指导性原则,如FPGA设计的基本原则、基本设 计思想、基本操作技巧、常用模块等。FPGA/CPLD设计的基本原则、思想、技巧和常用模 块是一个非常大的问题,在此不可能面面俱到,只能我们公司项目中常用的一些设计原则与 方法提纲携领地加以介绍,希望引起同事们的注意,如果大家能有意识的用这些原则方法指 导日后的工作,不断积累和充实自己,将取得事半功倍的效果! 本章主要内容如下: 基本原则之一:面积和速度的平衡与互换; 基本原则之二:硬件原则; 基本原则之三:系统原则; 基本原则之四:同步设计原则; 基本设计思想与技巧之一:乒乓操作; 基本设计思想与技巧之二:串并转换; 基本设计思想与技巧之三:流水线操作; 基本设计思想与技巧之四:数据接口的同步方法; 常用模块之一:RAM; 常用模块之二:全局时钟资源与时钟锁相环; 常用模块之三:全局复位/置位信号; 常用模块之四:高速串行收发器。 1.1基本原则之一:面积和速度的平衡与互换 这里“面积”指一个设计消耗FPGA/CPLD的逻辑资源的数量,对于FPGA可以用所消 耗的触发器(FF)和查找表(LUT)来衡量,更一般的衡量方式可以用设计所占用的等价 逻辑门数。“速度”指设计在芯片上稳定运行,所能够达到的最高频率,这个频率由设计的 时序状况决定,和设计满足的时钟周期,PAD to PAD Time,Clock Setup Time,Clock Hold Time,Clock.to-Output Delay等众多时序特征量密切相关。面积(area)和速度(speed)这 两个指标贯穿着FPGA/CPLD设计的始终,是设计质量的评价的终极标准。这里我们就讨论 一下关于面积和速度的两个最基本的概念:面积与速度的平衡和面积与速度的互换。 面积和速度是一对对立统一的矛盾体。要求一个同时具备设计面积最小,运行频率最高 是不现实的。更科学的设计目标应该是在满足设计时序要求(包含对设计频率的要求)的前 提下,占用最小的芯片面积。或者在所规定的面积下,使设计的时序余量更大,频率跑得更 高。这两种目标充分体现了面积和速度的平衡的思想。关于面积和速度的要求,我们不应该

               ! " #$%& '()*+,-../01-2345678 9 : ;?@ABCDEFGHI3 JKL&M-NKO 9;?  345678@ABACD  3456 E 'FGHIJ    gh.Ti $ jk  lmno pqrs  ,Ctj k uvwxy"z{|x y}~q€ ~q;,C t‚ ƒ lm„p!h…†i )‡ˆ‰Š‹Œt-Ž0 ‘’$’ •™‹" š› •œž     Ÿ •¡¢q£¤¥¦!.Tx y"…†x!y §$ ¨©ª«  ¬­# ®q ¯ƒ ­°¨±!g23²³´ e¦s.T"…† §$ µ¶f.T:…† ·~".T:…† ¸¹! .T"…†#rrº» ¼½¾!¿$H•ÀÁ .TÂŒ’‘ #+ÃW !ÄÅ 7¨ÆÇ#)š› •¿xÈÉr ’ ¿y Ê =e‚Â ‡ˆ.T!ËÌ)t͋ .TeÎ •Ïq&’Ð\ ‘!§Ñ7¨V¾ÃÒ.T"…† ·~ !¦s.T"…† ¿23+ÆÇ

第I章FPGA设计的指导性原则 简单的理解为工程师水平的提高和设计完美性的追求,而应该认识到它们是和我们产品的质 量和成本直接相关的。如果设计的时序余量比较大,跑的频率比较高,意味着设计的健壮性 更强,整个系统的质量更有保证:另一方面,设计所消耗的面积更小,则意味着在单位芯片 上实现的功能模块更多,需要的芯片数量更少,整个系统的成本也随之大幅度削减。 作为矛盾的两个组成部分,面积和速度的地位是不一样的。相比之下,满足时序、工作 频率的要求更重要一些,当两者冲突时,采用速度优先的准则。 面积和速度的互换是FPGA/CPLD设计的一个重要思想。从理论上讲,一个设计如果时 序余量较大,所能跑的频率远远高于设计要求,那么就能通过功能模块复用减少整个设计消 耗的芯片面积,这就是用速度的优势换面积的节约:反之,如果一个设计的时序要求很高, 普通方法达不到设计频率,那么一般可以通过将数据流串并转换,并行复制多个操作模块, 对整个设计采取“乒乓操作”和“串并转换”的思想进行运作,在芯片输出模块再在对数据 进行“并串转换”,是从宏观上看整个芯片满足了处理速度的要求,这相当于用面积复制换 速度提高。面积和速度的互换的具体操作有很多的技巧,比如模块复用,“乒乓操作”,“串 并转换”等,需要大家在日后工作中积累掌握。下面举例说明如何使用“速度换面积”和 “面积换速度”。 例1.如何使用“速度的优势换取面积的节约”? 在WCDMA预商用系统设计中,使用到了快速哈达码(FHT)运算,FHT由四步相同 的算法完成,如图1所示。FHT的单步算法如下: Out[2i]=m2]+n2i+81:i=0-7: Oudf2i+1]=m2i+1]-n2i+1+8l:i=0-7 MMMM n+1bits/寄存器 n+2bits/寄存器 n+3bits/寄存器 n bits/.寄存器 图1-1FHT原理图 原设计由于考虑流水线式数据处理的要求,做了不同端口宽度的4个单步FHT,并用 将这4个单步模块串联起来,以完成数据流的流水线处理。该FHT实现方式的代码如下: //该模块是HT的顶层,调用4个不同端口宽度的单步HT模块,完成整个EHT算法 module fhtpart(Clk,Reset,FhtStarOne,FhtstarTwo,FhtstarThree,FhtstarFour, I0,I1,12,I3,I4,I5,I6,I7,I8, 2

 "    ÓÔ ÕÖ×RØÙÚ· =‘" ÛÜ Ý¿ÞÆÇßO0à3#"23áâ ® q"ãä奦 !L •Ïqæç&Ð ’æç‘Kè« éê ëì$í» ®qNîïðñ;. tjk .TÂKè«)Ôò‡ˆ ‰Wà ^- ó ‡ˆpqôì$í» ãõö÷&ø†ùú! ×¼½ §$ûã.T"…† Aò#+ü !¥æ÷eš›•R ’ ¿ý9þ§Ì•…† ±! .T"…† ¸¹#  $ý!Õ´‰$ L• Ïqç&t-Ð ’‘s ¿ ²- ^- úôì$ j k ‡ˆ.T²#…† ¹.T ð÷L$ •¿‘  ;<+0 ’ €,C Zp¹  $ rì$ [hi"h¹i Œ)‡ˆ)rp h¹i# !‰"ì$‡ˆš›Ò#Յ† ¿¥þs.T ¹ …†=‘!.T"…† ¸¹ À¾N  æ hih ¹i ó&M)PQR8TU$%!e.&'()*Îh…†¹.Ti" h.T¹…†i!  "#    ) $  +,í» 8Î0Ò-…./xyŒ0 12¥H 0<Ûã3 " t4! Ô20<ef +* "' +* "' +* " )'( & % +* ' +* ' +* )'( & %(                                         ""    s56Ú7p#Õ ¿8Ò+H9:;† , $Ô2  Z , $Ô2<G}CÛãp Ú7#Õ!Ç  WÃ; =/ef                    !"#$%

基本原则之一:面积和速度的平衡与互换 I9,I10,111,I12,I13,I14,I15, 0ut0,0ut1,0ut2,0ut3,0ut4,0ut5,0ut6,0ut7,0ut8, 0ut9,0ut10,0ut11,0ut12,0ut13,0ut14,0ut15): input Clk;//设计的主时钟 input Reset;//异步复位 input FhtstarOne,FhtStarTwo,FhtStarThree,FhtStarFour;/4个单步算法的时 序控制信号 input[11:0]I0,I1,I2,I3,I4,I5,I6,I7,I8: input[11:0]I9,I10,I11,112,I13,I14,I15: //EHT的16个输入 output [15:0]Out0,Out1,Out2,Out3,Out4,Out5,Out6,Out7; output [15:0]Out8,Out9,Out10,Out11,Out12,Out13,Out14,Out15;//FHT 16个输出 /第1次FHT单步运算的输出 wire[12:0]m0,m1,m2,m3,m4,m5,m6,m7,m8,m9; wire[12:0]m10,m11,m12,m13,m14,m15; /第2次FHT单步运算的输出 wire [13:0]mm0,mm1,mm2,mm3,mm4,mm5,mm6,mm7,mm8,mm9; wire[13:0]mm10,mm11,mm12,mm13,mm14,mm15; //第3次EHT单步运算的输出 wire [14:0 mmm0,mmml,mmm2,mmm3,mmm4,mmm5,mmm6,mmm7,mmm8,mmm9; wire [14:0 mmm10,mmm11,mmm12,mmm13,mmm14,mmm15; //第4次HT单步运算的输出 wire[15:0]0ut0,0ut1,0ut2,0ut3,0ut4,0ut5,0ut6,0ut7,0ut8,0ut9; wire[15:0]0ut10,0ut11,0ut12,0ut13,0ut14,0ut15: /第1次FHT单步运算 fht unitl fht unit1(Clk,Reset,FhtstarOne, I0,I1,I2,I3,I4,I5,I6,I7,I8, I9,I10,111,112,I13,I14,115, m0,m1,m2,m3,m4,m5,m6,m7,m8 m9,m10,m11,m12,m13,m14,m15 ): /第2次FHT单步运算 fht unit2 fht unit2(Clk,Reset,FhtstarTwo, 3

  & !"      !  " # $ %  &     !  "'( )  ( )   (  )    (  !"#$% ) *+, !"#$%( ) *+,& !"(  # &'   *"+,     !  " # $(   *"+, % &     !  "(  # &( )  *  +&( ) * +, !"#$%&( ) * +, !"( ) *  +&( ) *!+, !"#$%&( ) *!+, !"( ) ! *  +&( ) *+, !"#$%&( ) *+, !"( )  *  +&( ) *"+,     !  " # $ % &( ) *"+,     !  "( )  *  + - ) - )      !"#$% & !"  !"#$% & !" '( ) *  + - )  - )    

第I章FPGA设计的指导性原则 m0,m1,m2,m3,m4,m5,m6,m7,m8, m9,m10,m11,m12,m13,m14,m15, mm0,mm1 mm2,mm3,mm4 mm5,mm6,mm7,mm8, mm9,mm10,mm11,mm12,mm13,mm14,mm15 ); //第3次EHT单步运算 fht_unit3 fht_unit3(Clk,Reset,FhtStarThree, mm0,mm1 mm2,mm3,mm4,mm5,mm6,mm7,mm8 mm9,mm10,mm11,mm12,mm13,mm14,mm15, mmm0 mmm1,mmm2,mmm3,mmm4,mmm5,mmm6,mmm7,mmm8, mmm9,mmm10,mmm11,mmm12,mmm13,mmm14,mmm15 ): /第4次FHT单步运算 fht unit4 fht unit4(Clk,Reset,FhtstarFour, mmm0,mmm1 mmm2 mmm3,mmm4,mmm5 mmm6,mmm7 mmm8, mmm9 mmm10,mmm11,mmm12,mmm13,mmm14,mmm15, 0ut0,0ut1,0ut2,0ut3,0ut4,0ut5,0ut6,0ut7,0ut8, 0ut9,0ut10,0ut11,0ut12,0ut13,0ut14,0ut15 ): endmodule 单步HT运算如下(仅仅举例第4步的模块): module fht unit4(Clk,Reset,Fhtstar, In0,In1,In2,In3,In4,In5,In6,In7,In8, In9,In10,In11,In12,In13,In14,In15, Outo,Out1,Out2,Out3,Out4,Out5,Out6,Out7,Out8, 0ut9,0ut10,0ut11,0ut12,0ut13,0ut14,0ut15 ): input clk; /设计的主时钟 input Reseti /异步复位 input FhtStar; //单步EHT运算控制信号 input [14:0]In0,In1,In2,In3,In4,In5,In6,In7,In8,In9; input [14:0]In10,In11,In12,In13,In14,In15; //单步EHT运算输入 output [15:0]Out0,Out1,Out2,Out3,Out4,Out5,Out6,Out7,Out8,Out9; output[15:0]Out10,Out11,Out12,Out13,Out14,0ut15;/单步EHT运算输出 //single FHT calculation reg [15:0]Out0,Out1,Out2,Out3,Out4,Out5; 4

 "      !"#$% & !"  !"#$% & !" '( ) ! *  + - )! - )!      !"#$% & !"  !"#$% & !" '( )  *  + - ) - )      !"#$% & !"      !  " # $ %  &     !  " '(   Ô2  Œ0ex>>&'? , 2 yf   - )     !"#$% & !"      !  " # $ %  &     !  " '( )  ( )   ( ) (  +"#$% ) *+, !"#$%&( ) *+, !"(  +&'   *"+,     !  " # $ % &(   *"+,     !  "(  +&( ). / / )  .*"+,     !  "(

基本原则之一:面积和速度的平衡与互换 reg[15:0]0ut6,0ut7,0ut8,0ut9,0ut10,0ut11; reg[15:0]0ut12,0ut13,0ut14,0ut15: /1补码运算 wire [14:0]In8Co =~In8+1; wire [14:0]In9Co =~In9+1; wire[14:0]In10co=~In10+1: wire[14:0]In11Co=~In11+1: wire[14:0]In12Co=~In12+1; wire[14:0]In13Co=~In13+1: wire[14:0]1n14co=~In14+1: wire[14:0]In15Co=~In15+1: always @(posedge clk or negedge Reset) begin if(!Reset) begin 0ut0<=0;0ut1<=0:0ut2<=0:0ut3<=0: 0ut4<=0;0ut5<=0:0ut6<=0:0ut7<=0; 0ut8<=0;0ut9<=0:0ut10<=0;0ut11<=0: 0ut12<=0:0ut13<=0:0ut14<=0:0ut15<=0: end else begin if(FhtStar) begin out0<={In0[14],In0}+{In8[14],In8}: out1<={In0[14],In0}+{In8co[14],In8co}: out2<={In1[14],In1}+{In9[14],In9}: out3<={In1[14],In1}+{In9Co[14],In9co}; out4<-{In2[14],In2J+{In10[14],In10J: Out5<=(In2[14],In2 }+(In10Co[14],In10Co } out6<={In3[14],In3}+{In11[14],In11J; 0ut7<={In3[14],In3}+{In11Co[14],In11Co}: 0ut8<={In4[14],In4}+{In12[14],In12}: out9<-{In4[14],In4}+{In12co[14],In12coJ: 0ut10<={In5[14],In5J+{In13[14],In13J; out11<={In5[14],In5}+{In13Co[14],In13co}: 0ut12<={In6[14],In6}+{In14[14],In14}: out13<={In6[14],In6}+{In14Co[14],In14Co}:

   .*"+, # $ % &  (  .*"+,   !  "( ,-+ ) *+,%01%2( ) *+,&01&2( ) *+,012( ) *+,012( ) *+, 01 2( ) *+,!01!2( ) *+,012( ) *+,"01"2(  34 .   . .   ' 5 .) ) 6  ' 5 .)  70( 70(  70( !70(  70( "70( #70( $70(  %70( &70( 70( 70(   70( !70( 70( "70(     5 .) ) ' 5 .)  708*,928%*,%9(  708*,928%*,%9(   708*,928&*,&9(  !708*,928&*,&9(  708 *, 928*,9(  "708 *, 928*,9(  #708!*,!928*,9(  $708!*,!928*,9(  %708*,928 *, 9(  &708*,928 *, 9(  708"*,"928!*,!9(  708"*,"928!*,!9(   708#*,#928*,9(  !708#*,#928*,9(

第I章FPGA设计的指导性原则 0ut14<={In7[14],In7}+{In15[14],In15}; 0ut15<={In7[14],In7}+{In15Co[14],In15Co}: end end end endmodule 当评估完系统的流水线时间余量后,发现整个流水线有16个时钟周期,而FHT模块的 频率很高,加法本身仅仅消耗1个时钟周期,加上数据的选择和分配所消耗时间,也能完全 满足频率要求,所以将单步FT运算复用4次,就能大幅度节约所消耗的资源。这种复用 单步算法的FHT实现框图如图2所示,由输入选择寄存、单步FHT模块、输出选择寄存、 计数器构成。 将T中间结果反馈 输 输 选 单步FHT 选 选择的 运算 HT中 4步FH 1/Q 寄 间结果 的结果 入 数据 存 存 计数器 系统轻制器 的控制信号 图1-2HT运算复用结构图 代码如下: //复用单步算法的EHT运算模块 module wch fht(Clk,Reset, PreFhtStar, In0,In1,In2,In3,In4,In5,In6,In7, In8,In9,In10,In11,In12,In13,In14,In15, Out0,Out1,Out2,Out3,Out4,Out5,Out6,Out7,Out8, 0ut9,0ut10,0ut11,0ut12,0ut13,0ut14,0ut15 ) input clk; //设计的主时钟 input Reset; /异步复位信号 input PreFhtStar; //FHT运算指示信号,和上级模块运算关联 input [11:0]In0,In1,In2,In3,In4,In5,In6,In7; input [11:0]In8,In9,In10,In11,In12,In13,In14,In15; //FHT 6

 "      708$*,$928"*,"9(  "708$*,$928"*,"9(        þ¯@Ûí» Ú7•AÏqQvÃì$Ú7N "- $•œžÞ   ’‘B>jk " $•œžB‰p CD"Etjk•Aõ-ÛF š›’¿tCZÔ2  Œ0  , G²-&ø†tjk no!Ñ  Ô20<  WÃH33 * t4ICDJKÔ2  CDJK pwLã!                   "*    =/ef    +  /-     :   !"#$ %& !"      !  " # $ %  &     !  " '( )  ( )   ( $% ) : (+./$%012+34 ) *+, !"#$( ) *+,%& !"(

基本原则之一:面积和速度的平衡与互换 的16个输入 output [15:0]Out0,Out1,Out2,Out3,Out4,Out5,Out6,Out7; output [15:0]Out8,Out9,Out10,Out11,Out12,Out13,Out14,Out15;//FHT 16个输出 //EHT输出寄存信号 reg [15:0]Out0,Out1,Out2,Out3,Out4,Out5,Out6,Out7; reg[15:0]0ut8,0ut9,0ut10,0ut11,0ut12,0ut13,out14,0ut15; //EHT的中间结果 wire [15:0]Temp0,Temp1,Temp2,Temp3,Temp4,Temp5,Temp6,Temp7; wire [15:0]Temp8,Temp9,Temp10,Temp11,Temp12,Temp13,Temp14,Temp15; /FHT运算控制计数器,和前一级流水线模块配合 reg [2:0]Cnt3;//count from 0 to 4,when Reset Cnt3=7; reg FhtEn;//Enable fht culculate always @(posedge clk or negedge Reset) begin if (!Reset) Cnt3<=#13'b111; else begin if(PreFhtStar) Cnt3<=#13'b100: else cnt3<=#1Cnt3-1: end end always @(posedge clk or negedge Reset) if (!Reset) FhtEn<=#1 0; else begin if (PreFhtStar) FhtEn<=#11; if (Cnt3==1) FhtEn<=#1 0; end

    # &'   *"+,     !  " # $(   *"+, % &     !  "(  # &(  &(56$%  .*"+,     !  " # $(  .*"+, % &     !  "(  789: ) *"+,     !  " # $( ) *"+, % &     !  "(  +"#;2?@ABC  .* +,!(/     !0$(  .;(;5  / /   34 .   . .   ' 5 .) ) 6  ' !70(     34 .   . .   ' ) 6  ' ;70<(  5 .) ) : ' ;70<( ) !00' ;70<( 

第I章FPGA设计的指导性原则 //补码运算,复制符号位 assign Temp0=(Cnt3==4)?(4(In0[11]},In0):Out0; assign Templ=(Cnt3==4)?(4(In1[11]),In1):Out1; assign Temp2=(Cnt3==4)?(4(In2[11]),In2):Out2; assign Temp3=(Cnt3==4)?(4{In3[11]),In3):Out3; assign Temp4=(Cnt3==4)?(4(In4[11]),In4):Out4; assign Temp5=(Cnt3==4)?(4{In5[11]),In5):Out5; assign Temp6=(Cnt3==4)?(4{In6[11]),In6):Out6; assign Temp7=(Cnt3==4)?(4(In7[11]},In7):Out7; assign Temp8=(Cnt3==4)?{4{In8[11]},In8):Out8; assign Temp9=(Cnt3==4)?(4{In9[11]},In9}:Out9; assign Temp10=(cnt3==4)?{4{In10[11]},In10}:0ut10: assign Temp11=(cnt3==4)?{4{In11[11]},In11}:0ut11; assign Temp12=(cnt3==4)?{4{In12[11]},In12}:0ut12: assign Temp13=(Cnt3==4)?{4{In13[11]},In13}:0ut13; assign Temp14=(cnt3==4)?{4{In14[11]},In14}:0ut14: assign Temp15=(Cnt3==4)?{4{In15[11]},In15}:0ut15; always @(posedge clk or negedge Reset) begin if (!Reset) begin 0ut0=0&&FhtEn) begin 0ut0[15:0]<=#1Temp0[15:0]+Temp8[15:0]: 0ut1[15:0]<=#1Temp0[15:0]-Temp8[15:0]; 0ut2[15:0]<=#1Temp1[15:0]+Temp9[15:0]; 0ut3[15:0]<=#1Temp1[15:0]-Temp9[15:0]: 0ut4[15:0]<=#1Temp2[15:0]+Temp10[15:0]; 0ut5[15:0]<=#1Temp2[15:0]-Temp10[15:0]; 0ut6[15:0]<=#1Temp3[15:0]+Temp11[15:0]: 8

 "      ,-+#D% ). 0!00'?88*,99+ ( ). 0!00'?88*,99+ ( ).  0!00'?88 *,9 9+  ( ). !0!00'?88!*,9!9+ !( ). 0!00'?88*,99+ ( ). "0!00'?88"*,9"9+ "( ). #0!00'?88#*,9#9+ #( ). $0!00'?88$*,9$9+ $( ). %0!00'?88%*,9%9+ %( ). &0!00'?88&*,9&9+ &( ). 0!00'?88*,99+ ( ). 0!00'?88*,99+ ( ).  0!00'?88 *,9 9+  ( ). !0!00'?88!*,9!9+ !( ). 0!00'?88*,99+ ( ). "0!00'?88"*,9"9+ "(  34 .   . .   ' 5 .) ) 6  ' 5 .)  70( 70(  70( !70(  70( "70( #70( $70(  %70( &70( 70( 70(   70( !70( 70( "70(   5 .) ) !70'@@!A0@@;' 5 .)  *"+,70 %*"+,(   *"+,70 &*"+,(  *"+,70 *"+,(  #*"+,70< !*"+,2 *"+,(

基本原则之一:面积和速度的平衡与互换 0ut7[15:0]<-#1Temp3[15:0]-Temp11[15:0]: 0ut8[15:0]<=#1Temp4[15:0]+Temp12[15:0]: 0ut9[15:0]<-#1Temp4[15:0]-Temp12[15:0]: 0ut10[15:0]<=#1Temp5[15:0]+Temp13[15:0]; 0ut11[15:0]<=#1Temp5[15:0]-Temp13[15:0]: 0ut12[15:0]<=#1Temp6[15:0]+Temp14[15:0]; 0ut13[15:0]<=#1Temp6[15:0]-Temp14[15:0]; 0ut14[15:0]<=#1Temp7[15:0]+Temp15[15:0]: 0ut15[15:0]<=#1Temp7[15:0]-Temp15[15:0]: end end end endmodule 为了便于对比两种实现方式的资源消耗,我在Synplify Pro对两种实现方法分别做了综 合。两次综合选用的参数都完全一致,器件类型为:Xilinx Virtex-EXCV100E一6BG352, 出于仅仅考察设计所消耗的寄存器和逻辑资源,Enable“Disable I/O Insertion”选项,不插 入IO,取消Synplify Pro中诸如“FSM Compiler”、“FSM Explorer'”、“Resource Sharing”、 “Retiming”、“Pipelining'”等综合优化选项。两次综合的结果如图3,图4所示。 Log Parameter rev 2 fhtpart Part zcv100ebg352-6 fhtpart 1/0 primitives Not Available fhtpart 1/0 Register bits 0 fhtpart Register bits (Non I 928 (38%) fhtpart Total Luts 1328(550 夫复用的T实现方案古用的资源。取消了所有综 合优化选项,并“Disable-I/0 Insertion”。 图1-3未采样复用方案的“tpart'”模块综合所消耗的资源 Log Parameter uch fht Part zcv100ebg352-6 wch fht I/0 primitives Not Available wch fht 1/0 Register bits 0 wch_tht Kegister bits (Non I 263 (10M ch_fht Total Luts 392(16 复用的T实现方案占用的资源。取消了所有综 合优化选项,并 “Disable I/0 Insertion”。 图1-4采样复用方案的“wch fht'”模块综合所消耗的资源 通过对比可以清晰的观察到,采样复用实现方案所占面积约为原方案的1/4,而得到这 个好处的代价是:完成整个FHT运算的周期为原来的4倍。这个例子通过运算周期的加 9

    $*"+,70 *"+,(  %*"+,70  *"+,(  *"+,70 !*"+,(   *"+,70 *"+,(  *"+,70 "*"+,(        ×ÒMsræ§ÑWÃ; nojk2) ./  r§ÑWÃ;>5X tjk JKw"lmno3.7h !7 8 8.! .iC6+Y I 8[j ./  8Zh   ih  31  ih !  9 .:i h .:ih..:i OP[C6!§GOP \L3 53 , t4! "5 /9  ", ;9</9 ræ,C]^ !X0ü WÃ;_t‚.T×;_ ",Þ\0 $`# =ƒ#fÛãì$  Œ0 ž×} , _!$'a Œ0ž B

第I章FPGA设计的指导性原则 长,换取了消耗芯片面积的减少,是前面所述的用频率换面积的一种体现。本例所述“频率 换面积”的前提是:FHT模块频率较高,运算周期的余量较大,采用4步复用后,仍然能 够满足系统流水线设计的要求。其实,如果流水线时序允许,FHT运算甚至可以采用1bt 全串行方案实现,该方案所消耗的芯片面积资源更少! 例2.如何使用“面积复制换速度提高”? 举一个路由器设计的一个例子。假设输入数据流的速率是450Mb/s,在而FPGA上设计 的数据处理模块的处理速度最大为150Mb/s,由于处理模块的数据吞吐量满足不了要求,看 起来直接在FPGA上实现是一个“impossible mission”。这种情况下,就应该利用“面积换 速度”的思想,至少复制3个处理模块,首先将输入数据进行串并转换,然后利用这三个模 块并行处理分配的数据,然后将处理结果“并串变换”,就完成数据速率的要求。我们在整 个处理模块的两端看,数据速率是45OM6/S,而在FPGA的内部看,每个子模块处理的数据 速率是150M6/s,其实整个数据的吞吐量的保障是依赖于3个子模块并行处理完成的,也就 是说利用了占用更多的芯片面积,实现了高速处理,通过“面积的复制换取处理速度的提 高”的思想实现了设计。设计的示意框图如图5所示。 150Mb/s 150Mb/s 的处理模块 串 450Mb/s 150Mb/s 串 转 150h/s 的处理模块 换 换 150Mb/s 150b/s 的处理模块 图1-5“面积换速度”示意图 上面仅仅是对“面积换速度”思想的一个简单的举例,其实具体操作过程中还涉及很多 的方法和技巧,例如,对高速数据流进行串并转换,采用“乒乓操作”方法提高数据处理速 率等。希望读者通过平时的应用进一步积累。 1.2基本原则之二:硬件原则 硬件原则主要针对HDL代码编写而言的。 首先应该明确FPGA/CPLD、ASIC的逻辑设计所采用的硬件描述语言(HDL)与同软 件语言(如C,C+等)是有本质区别的!以VerilogHDL语言为例(我们公司多数逻辑工 程师使用Verilog),虽然Verilog很多语法规则和C语言相似,但是Verilog作为硬件描述语 言,它的本质作用在于描述硬件!应该认识到Verilog是采用了C语言形式的硬件的抽象, 它的最终实现结果是芯片内部的实际电路。所以评判一段HDL代码的优劣的最终标准是: 10

 "      b¹[Òjk‡ˆ.T úô#Ê.tc ’¹.T ѾÃ!'tch’ ¹.Ti Ê=#f ’ç‘Œ0ž Ïqç& , 2 Qde- Žš›í»Ú7 ¿!fWLÚ7•gh Œ0ij,C "7 F;_WÃÇ;_tjk ‡ˆ.Tnoôa  *#   &$kw $'a!l Ip …# ,6& 7!)Þ  ‰ p#Õ #Յ†&× "6& 7!s#Õ pmnqš›+Ò¿" G}äå)  ‰WÃ#$h!!7 !!.i!Ñoe²ÆÇph.T¹ …†i jô  5 $#ÕqZIp¹eQpr$ #ÕE peQZ#Õ\Lhs¹i²Ûãp… ¿!23)ì $#Õ §9"p…# ,6& 7!Þ)  c"t$a#Õ p …# "6& 7!fWì$p mnq îu#vws 5 $a#ÕÛã õ² #(p҂  ‡ˆ.TWÃґ…#Õ h.T ¹[#Յ† = ‘i WÃÒ ! 4KH33 6 t4!                   "6  !" ‰.>>#rh.T¹…†i $ÓÔ &'fWÀ¾ Ø8xyz  ;<"'r‘…p¹hi;<=‘p#Յ !DE{Ì ·• Æ2TU!    |T}r   =/~ހ ! qÆÇ)  8 lm t |T‚cƒ€x y:H„ Tƒ€x == y#N®…N aC 2 :  ƒ€×'x2345 plmR ØÙÎ 2 :y†e 2 :  ƒ<Í"  ƒ€¥‡ˆ# 2 : ×|T‚cƒ €à ®)s‚c|TaÆÇßO0 2 : #Ò  ƒ€‰ |T Š‹ à ­WÃ\L#‡ˆc WŒk!tC¯Ž   =/  ­¨±#f

点击下载完整版文档(PDF)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共100页,可试读20页,点击继续阅读 ↓↓
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有