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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    提高时序和FPGA资源利用率的小技巧
    ) @9 y6 `- |4 B4 d/ K6 a" H
    1.如果一个信号是由多个信号经过复杂的组合逻辑和时序逻辑产生的,那么应该将组合逻辑比较均匀的分布在各个reg变量前。不应当造成某些reg前面LUT里面没有组合逻辑,而另外一些reg前面的LUT里面组合逻辑过于复杂的情形。均匀分布不仅有利于时序,也能提高SLICE的资源利用率。例如:第一种:原始编码
    ; V# I. U+ b' s* Salways @(posedge Clk or posedge Reset)) W! i" `9 ?" a
    begin0 v9 p6 j0 n% |! Y1 [3 J
        if (Reset == 1'b1)
    $ M. O0 D0 ?1 _( ]  ~+ w        X <= 1'b0;2 `" a* l9 ]) I$ g7 F
        else
    1 J3 M( f* @% B        X<=  (A & B & C & D & E & F & H & I);
    , l$ Z) ?$ ~3 Q  u2 I+ [% P7 Iend
    , X  B. T  y, O; Y8 j' M2 Balways @(posedge Clk or posedge Reset)
    5 z, O) `0 H0 |. L+ Jbegin
    ; C9 y( _! N9 X  F    if (Reset == 1'b1)
    % H+ _# y6 m* c  N4 K1 {* n5 ?        Y <= 1'b0;
    " x# s) s7 m' v3 S# V, y3 {    else
    0 v- R+ H# x. H; u" C+ }        Y<=  (J & K  );& {; t+ [8 \& a7 Z& I4 {
    end
    8 K- `2 Z/ _8 e2 h7 Yalways @(posedge Clk or posedge Reset)' e# {) N4 d/ `" y
    begin
    % W$ c* e4 C$ b7 ~6 w2 Y    if (Reset == 1'b1)  S/ r$ Z7 ^1 A/ g8 b% L4 `
            Z<= 1'b0;1 K. ]$ g- R8 T; @  F
        else
    4 y5 O7 A: q8 w, @        Z<=  (X & Y );
    ; O" W7 w. s$ G3 u  ^end
    * E2 p0 z2 C- g- J* s; E4 f, o可优化为3 N' l# a, T* ~/ i; d) r
    第二种:优化后编码4 u% O7 D" {, P0 Y
    always @(posedge Clk or posedge Reset)
      l2 S* Y: z! L8 Jbegin! ?1 v2 S% d/ @5 O
        if (Reset == 1'b1)
    5 V% x! a9 w( I3 Q2 J; _) {0 h        X <= 1'b0;
    . `; D, l; e* @8 z1 A+ y3 ^9 h$ r: H    else
    : a, @3 s/ [: G- Y) ^3 D9 }        X<=  (A & B & C & D & E );) c6 d  j3 T% J% k
    end9 {+ e9 W3 l7 e' X9 P6 @
    always @(posedge Clk or posedge Reset)
      I8 {9 a' a0 o) ibegin0 l' J. M& N# \% n! ?
        if (Reset == 1'b1); D7 B: Q) p& f
            Y <= 1'b0;
    9 P! _5 d# O" p5 k5 L    else2 T1 E  I" q- W; x0 G% t
            Y<=  (J & K & F & H & I );
    , o1 _8 S3 [# I4 J1 A, f9 @; \end
    ) b' T- \) r4 B+ k- u0 ^5 Walways @(posedge Clk or posedge Reset)
    , W3 \  L& }2 Qbegin
    4 W- C3 g( z$ p6 L3 f    if (Reset == 1'b1)
      B: q( A7 t2 [* a        Z<= 1'b0;% F2 |& ^2 m; k! N$ Q0 i9 ]! X" G" R
        else
    5 W, U* |4 Y2 x! R: z        Z<=  (X & Y );  V* C) K! c8 e% }# n
    end. ^- i: j* D# v, Z( e$ ^$ v; c5 D& z3 M( P
    原始编码出现的原因是A、 B、 C、 D、 E、 F、 H、 I存在着某种联系,放在一起与有利于理解和阅读,但是不利于最终在FPGA里面实现。因此,出现时序问题时,就应该优化成第二种编码编码方式。当然,以上只是举一个简单的例子,复杂的组合逻辑肯定不会仅仅是若干个与运算。) r5 n! q9 b8 f
    1 R- C( y$ Y0 N* z2 ^

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-3 06:36 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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