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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    提高时序和FPGA资源利用率的小技巧
    3 l6 w! E4 s5 D8 L; N8 u% P6 y* |  |* A
    1.如果一个信号是由多个信号经过复杂的组合逻辑和时序逻辑产生的,那么应该将组合逻辑比较均匀的分布在各个reg变量前。不应当造成某些reg前面LUT里面没有组合逻辑,而另外一些reg前面的LUT里面组合逻辑过于复杂的情形。均匀分布不仅有利于时序,也能提高SLICE的资源利用率。例如:第一种:原始编码
    " @( i& P9 i9 ualways @(posedge Clk or posedge Reset)* K& Y. b, W+ u' W! Q5 M+ X" x
    begin4 p3 ~5 S6 }* b. J# R
        if (Reset == 1'b1)6 u5 K: G4 g' `  ]
            X <= 1'b0;4 h! e+ _" m" Y( C; t
        else: Y3 r+ r* W4 k& W* J
            X<=  (A & B & C & D & E & F & H & I);
    0 s, d: b' K1 V5 |end
    : o8 ]6 o$ P( _# x% q$ q6 lalways @(posedge Clk or posedge Reset)
    + w& ]8 U* @1 J1 L5 ^& Zbegin
    0 _7 m# [2 x* I3 Q    if (Reset == 1'b1)
    1 ]  C3 m- j4 K8 R$ n0 }        Y <= 1'b0;) B! V7 @& w8 q" f1 w
        else4 K( X" `6 o  m' o, y% d: S) G9 Z0 `
            Y<=  (J & K  );$ _0 p* F. ^& U3 Q$ K6 {0 T" b8 L& ?6 P
    end
    - B9 x9 V& A3 b: V# ~! Aalways @(posedge Clk or posedge Reset)
    5 `: e3 h/ C0 g6 p2 Q. gbegin5 V. }. t5 i, u. Z' E
        if (Reset == 1'b1)
    5 o: _! v2 ^9 Y" _3 a7 W( M2 b        Z<= 1'b0;
    , I/ V% d; ]# a2 M4 n3 ]+ X/ U7 c: w    else* B6 P  T4 _- `5 B0 m1 `' }
            Z<=  (X & Y );
    8 a' X$ W2 Z- E: u* B3 I8 A) Lend1 t7 C& O2 j: a. g
    可优化为
    $ a  M) z* h6 J1 G0 V第二种:优化后编码
    ) w4 w9 s. x+ P' g, D0 R4 Jalways @(posedge Clk or posedge Reset)
    # [( R. G* g1 x4 }3 Ubegin7 P4 G( @2 t% U& g# R5 s$ O; w
        if (Reset == 1'b1)
    : S" s! u) \4 _* p4 _        X <= 1'b0;! |. x1 H5 [) Y5 [; a' F
        else( z7 w/ ^5 r  o/ D  o/ f
            X<=  (A & B & C & D & E );0 [/ c9 U7 f, L8 S4 \* l5 C6 l
    end
    $ O* m/ V+ L& C& y0 u: zalways @(posedge Clk or posedge Reset)
    6 U( a6 q4 \! e6 Obegin
    2 m% r% c) E  Q7 K  L( Y    if (Reset == 1'b1)
    + l( Z8 c" }: c& e5 b  P- B7 E- t        Y <= 1'b0;
    6 R1 H2 v; R& r' m: L; w+ X: n    else+ T, w  B0 h0 y6 `
            Y<=  (J & K & F & H & I );; ^; V) v: I/ |% i6 A
    end0 x, _9 ~7 p% F; u
    always @(posedge Clk or posedge Reset)" t& R& L3 L( C: j6 Q+ f
    begin
    ! p# s2 s, ~( w; e" R: b    if (Reset == 1'b1): B% u# u& D  w$ B9 Q
            Z<= 1'b0;
    3 I* m: u1 {) u4 h! S! c9 ~    else6 t) P7 j1 c) j$ A
            Z<=  (X & Y );, D2 T# o; [' h0 J/ z
    end. x3 I* |- X9 s+ R. R
    原始编码出现的原因是A、 B、 C、 D、 E、 F、 H、 I存在着某种联系,放在一起与有利于理解和阅读,但是不利于最终在FPGA里面实现。因此,出现时序问题时,就应该优化成第二种编码编码方式。当然,以上只是举一个简单的例子,复杂的组合逻辑肯定不会仅仅是若干个与运算。
    " Z- t) v4 t2 u3 H8 l" H8 y* b* f

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-3 01:48 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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