找回密码
 注册
关于网站域名变更的通知
查看: 209|回复: 1
打印 上一主题 下一主题

提高时序和FPGA资源利用率的小技巧

[复制链接]
  • TA的每日心情
    开心
    2019-11-20 15:00
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2019-5-14 16:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    提高时序和FPGA资源利用率的小技巧
    , z1 v1 `6 Z; S% z
    1.如果一个信号是由多个信号经过复杂的组合逻辑和时序逻辑产生的,那么应该将组合逻辑比较均匀的分布在各个reg变量前。不应当造成某些reg前面LUT里面没有组合逻辑,而另外一些reg前面的LUT里面组合逻辑过于复杂的情形。均匀分布不仅有利于时序,也能提高SLICE的资源利用率。例如:第一种:原始编码
    . S  k& e/ j) @5 D# Aalways @(posedge Clk or posedge Reset)  n' `+ R3 x+ Z' C' h; P
    begin
    2 M) Z& f" t2 C! S    if (Reset == 1'b1)( O4 j4 e  E3 p" T: e5 z
            X <= 1'b0;5 p8 O; n* _- b! o$ V. w
        else
    2 \6 B1 e( A& n9 C& ?) J        X<=  (A & B & C & D & E & F & H & I);; j% E- [1 w# o6 {8 E8 F/ b; Y' s2 D
    end
    4 c7 K3 G- ]. K/ b( A# S4 H# palways @(posedge Clk or posedge Reset)
    ) J: U3 G& w% f  |3 ^6 T7 tbegin% Z% n- Q6 ?# ^/ m
        if (Reset == 1'b1)$ i8 ~% _( B' N) U. C* M
            Y <= 1'b0;6 M8 w% r& T" Y8 M) V6 t
        else$ S3 A& Y9 [% z1 X
            Y<=  (J & K  );% e, A5 V2 K1 \1 |6 z( ^5 j
    end
    9 n# f) L8 d0 M( @3 _* R! e" W. O* Ealways @(posedge Clk or posedge Reset)
    5 U) ]( h7 L. w, Z- fbegin
    1 c( t* G2 k, U& i! N    if (Reset == 1'b1)
    ; Z( ~2 N! C' G) t5 y        Z<= 1'b0;
    3 ]! m9 ^2 V2 v; @* v4 f, p    else  Q; P# g, c/ T% n& M" C
            Z<=  (X & Y );
    # a" `# l+ C! |( i  J5 _0 Nend
    " l6 V) V- o& U- O: c可优化为1 n8 B+ b: B" V9 ?* r" _
    第二种:优化后编码
    ' M3 r; g6 ~# g8 b+ `( Walways @(posedge Clk or posedge Reset)
    / V3 |( t0 Y/ z  K' F& zbegin
    ; p+ \) _/ j) Q    if (Reset == 1'b1)
    8 }9 E7 r& [# Y/ o6 e) x        X <= 1'b0;
    9 ]- |5 k; l3 ]: H1 F, Z3 @    else
    , g8 h% ?% {& U+ R2 f; R! P        X<=  (A & B & C & D & E );" ]! q2 D- z; t
    end
    8 g5 ]1 ^& I# P6 kalways @(posedge Clk or posedge Reset)- ]5 `3 S# N2 a: C3 \
    begin+ k& z* F4 t* p% [
        if (Reset == 1'b1)
    7 y3 d/ Y0 b5 ^* I        Y <= 1'b0;
    7 L1 G/ \- L1 r0 J+ O+ j! l    else. r7 t* Z2 S5 F! V0 Y6 b8 v( R2 W
            Y<=  (J & K & F & H & I );
    : q$ E$ {+ c4 T; [: s, k5 i' o% yend: H/ ]5 v, J" ]+ b
    always @(posedge Clk or posedge Reset), p: }1 Y7 O& G( u
    begin
    2 v; H6 s' |: r# g: R! O/ c* N    if (Reset == 1'b1)
    / I- f" z; G( _2 M1 j        Z<= 1'b0;2 M- \$ f4 r  }, F$ ?
        else: n0 q3 d: U6 c( E4 t8 H
            Z<=  (X & Y );6 y$ [1 k' S  ^, a" \: z; _+ K2 H& d
    end2 Q) @( O: R6 l. U7 U6 {4 t7 z
    原始编码出现的原因是A、 B、 C、 D、 E、 F、 H、 I存在着某种联系,放在一起与有利于理解和阅读,但是不利于最终在FPGA里面实现。因此,出现时序问题时,就应该优化成第二种编码编码方式。当然,以上只是举一个简单的例子,复杂的组合逻辑肯定不会仅仅是若干个与运算。
    . A. m& u; v( n* W$ }$ i0 ?6 [" ^! q% o5 k1 ^

    该用户从未签到

    2#
    发表于 2019-5-14 18:01 | 只看该作者
    给楼主点个赞
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-10-10 08:34 , Processed in 0.125000 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表