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

朋友面试时候面试官遇到的问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
帮朋友问,' @* W! U* g9 s# \6 q
' z5 Z# p! v6 u- e5 {, e9 x
面试官问道针对一个大数分频器(比如1千分频1万分频)的计数器,有什么好方法可以节省一点资源?% \: P+ ]: |6 s1 M- v' |( d
当时想了很久,就说按实际分频用到多少位就分配几位,避免一些无用寄存器的使用。然后他摇了摇头,我向他请教,他说正确的是要把大计数器分拆成几个小计数器,溢出计数。他说这样子反转的位数就少,才可靠。
' r/ L8 b5 d& _# s, }& O4 C$ f+ I我当时纳闷了,你不是说要节省资源吗?怎么问题跑到这上面去了?1 h9 i1 L5 n) c/ P' V$ E) N2 i
私底下思考了一下,请问大神:分拆成小计数器对节省资源来说有作用吗?按我理解用到几位就需要有几个寄存器,这是省不了的。  s$ Q! N' F/ ]7 o; e5 }
盼回复,谢谢!

该用户从未签到

2#
发表于 2019-8-5 18:27 | 只看该作者
面试官说的对,但是,没有说明白,或许是有意不说明白的?2 x+ ?" {( I! R: D" _$ y0 G+ g
因为,你要真的是实际搞过分频器而不只是个书面高手,那你就应该明白:分频器就是同步计数器,而多位同步计数器是很占资源的。分拆成几个小的同步计数器,再串联成大的计数器,就能节省大量的资源!这时,几个小的计数器之间不是同步计数而是异步计数。

该用户从未签到

3#
 楼主| 发表于 2019-8-5 18:28 | 只看该作者
谢谢大神您的回复!谢谢!经您的解释好像有点懂了。& L8 c9 \7 a! E! k" M0 n" W
可以具体举个例子吗?比如用一个8位计数器拆成两个4位来说,具体可以节省哪些资源呢?(寄存器应该是少不了吧,我理解是不是节省了一些组合逻辑资源?). Z7 ]' K) w9 c; i
谢谢您!

点评

节省大量的组合逻辑和布线资源。多位同步计数器的组合逻辑,会是几何级数增加的。布线,也是很占资源的。有时,布线比寄存器占的资源还多!而且,布线多了还要隔离,隔离占用的资源也不小。单层布线走不通,还要用  详情 回复 发表于 2019-8-5 18:30

该用户从未签到

4#
发表于 2019-8-5 18:30 | 只看该作者
mm58690 发表于 2019-8-5 18:28( c( V" k0 V2 c4 ~. s
谢谢大神您的回复!谢谢!经您的解释好像有点懂了。, g5 T: T' K1 t" a9 g
可以具体举个例子吗?比如用一个8位计数器拆成两个4位 ...
/ R5 M. A& @, L1 y4 d. s1 h) G
- d/ V4 g2 c, h" u4 V4 W
节省大量的组合逻辑和布线资源。多位同步计数器的组合逻辑,会是几何级数增加的。布线,也是很占资源的。有时,布线比寄存器占的资源还多!而且,布线多了还要隔离,隔离占用的资源也不小。单层布线走不通,还要用多层布线,这个资源就是几何级数增加了!

点评

感谢大神您的耐心解答!  详情 回复 发表于 2019-8-5 18:31

该用户从未签到

5#
 楼主| 发表于 2019-8-5 18:31 | 只看该作者
felton 发表于 2019-8-5 18:30/ k/ @: m: E8 v! c8 b& V
节省大量的组合逻辑和布线资源。多位同步计数器的组合逻辑,会是几何级数增加的。布线,也是很占资源的 ...

% {- q. T; F, p8 q+ l3 s$ W# f( R' P, c8 J" _% Z  g3 P3 \- s6 [& `
感谢大神您的耐心解答!

该用户从未签到

6#
发表于 2019-8-5 18:32 | 只看该作者
远离这种低水平学究型的单位,资源不是这么省的,等我有空写个超级省资源的计数器,128bit可能只需要十几个LUT

点评

你那是纹波计数器,也叫异步计数器。只能用在低频上。  详情 回复 发表于 2019-8-5 18:32
  • TA的每日心情
    开心
    2019-11-20 15:05
  • 签到天数: 2 天

    [LV.1]初来乍到

    7#
    发表于 2019-8-5 18:32 | 只看该作者
    wu68aq 发表于 2019-8-5 18:32+ D5 U8 U% o  m8 a! w6 z
    远离这种低水平学究型的单位,资源不是这么省的,等我有空写个超级省资源的计数器,128bit可能只需要十几个 ...
    ; S7 _- Q" p+ L: w- F
    ! @* F1 r: h9 P
    你那是纹波计数器,也叫异步计数器。只能用在低频上。
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    8#
    发表于 2019-8-5 18:33 | 只看该作者
    以altera为例:
    ( P5 X" l  e5 M1 J. o& A1 m' c* }% b; c5 a0 E  k9 o2 A
    assign                  led = cnt[127];8 s( f+ q9 e  a7 b" t  g
    reg     [127:0]           cnt;) a0 H% H2 d3 j9 Q- L
    6 D+ ~  U* I3 X$ z! z1 @$ U
    always @(posedge clk or negedge rst)
    ( z  W  L: v' `% y5 sbegin/ G7 t4 B% X9 n4 N% [$ e
        if(~rst)+ q& |8 \" F  l- W" V4 [
            cnt <= 0;9 A- X# E' g& t
        else5 a4 [$ h5 {: s1 r  ~' {
            cnt <= cnt + 1'b1;;; C# t. X3 B8 J
    end
    & t* H/ L9 l" g3 `3 ~4 f复制代码
    $ P( C% ~9 ?, [- ~6 X: h( ^# K" x' X7 D' [: \0 I8 _
    一个128bit的计数器,消耗资源) h4 n! J% O/ @& B: N2 q* Z5 H
    Total logic elements        128 / 10,320 ( 1 % )( W0 S$ W" Y7 k" I1 K& t5 e
    Total combinational functions        128 / 10,320 ( 1 % )3 F! X/ r9 {. A3 _& O) k
    Dedicated logic registers        128 / 10,320 ( 1 % )1 ]# L- L7 O. e" t, B; r
    Total registers        128' E# {+ N: i3 C
    复制代码0 |! s. s* k; b4 ?
    ) B  U1 F4 a5 ^5 n: S0 e
    assign                  led = cnt2[63];
    . z- `- O8 C& U( A1 s5 I% _/ Nreg     [63:0]           cnt1;; U; x2 p" ?  Y; F0 e8 c7 D: B9 M! P
    reg     [63:0]           cnt2;
    % U5 O7 T$ ?+ U3 D0 M; b/ q6 L6 e6 [4 ^% V
    always @ (posedge clk or negedge rst)+ m$ w" X4 b! v5 g
    begin
    - t* n' Q1 S! g    if(~rst)" l( d; b9 S; R! n; l
            cnt1 <= 0;3 f7 [& s. i1 v
        else0 |- ?, f" Y. s9 |( h, D7 f
            cnt1 <= cnt1 + 1'b1;;4 W# J0 P) b. v3 e2 {8 {1 }
    end
    " B: V& _, d7 B1 |0 W$ r* y  m6 W0 u! H- s1 e( O) w6 [  h( J0 `
    always @ (posedge clk or negedge rst)
    # ~3 Q" k1 Y# C% @* e& f& Rbegin% J" A. k6 Q6 k: y, H* o
        if(~rst)
    7 I# ^& x: R, \+ [( `. |' B& V        cnt2 <= 0;% D- x5 n7 D- P) D
        else if(cnt1 == {64{1'b1}})
    3 u+ H% V' t' }5 e6 r8 _        cnt2 <= cnt2 + 1;: d5 a6 X$ @1 T1 e
    end3 ^. D' ~. P- E( c$ c6 D- e. o. `- z
    复制代码- r" V( z3 w" C0 h8 f% U0 Y, o0 R

    4 h7 [( R- W8 p; k1 X. Z拆分成2个64bit的计数器,消耗资源
    7 s- `7 p1 i" o; o8 M/ GTotal logic elements        149 / 10,320 ( 1 % )
    3 _2 T* O& K% n8 |/ h# vTotal combinational functions        149 / 10,320 ( 1 % )
    1 V2 Y. M) L. _1 X. J8 Y2 mDedicated logic registers        128 / 10,320 ( 1 % )
    ' a7 C6 ~: g3 F0 ?Total registers        1288 M4 w" ~, b, _; f) ?& F
    复制代码
    5 R) K& s  k/ l, Y. X; ?0 Q. S( F/ H1 d! C/ a6 r4 w9 Z! W
    & w7 z, q+ F; q2 S+ h5 Y+ k
    可见拆分为2个更小的计数器,消耗的资源反而更多了,比较cnt2需要多一个比较逻辑才能加+ n; u3 Y$ K+ b& o/ ]# s
    : D, B( J9 k8 x  \# {
    这么做只有一个理由,那就是减少了计数器的组合逻辑路径(减少了加法器的进位链级数),提高了Fmax' F0 T1 l# |- q. C0 B6 U
    可以说是面积换速度吧。

    点评

    先感谢大神回复!我再仔细研究一下. 其实后来我也实际写过这两种情况下的代码,我也发现实际上分拆计数器的话消耗资源确实比一个大计数器要多出很多LUT和REG! 我也很同意您的观点。实际上只是速  详情 回复 发表于 2019-8-5 18:35

    该用户从未签到

    9#
     楼主| 发表于 2019-8-5 18:35 | 只看该作者
    Allevi 发表于 2019-8-5 18:33
    / N# ?" P/ D% u* C8 t8 e2 x以altera为例:* A7 a* V4 F# X
    , G% @7 c7 t  T: f* W* w7 y
    assign                  led = cnt[127];
    + _" h8 i' M$ Z/ w# q# e

    % ^; }' w3 e0 A先感谢大神回复!我再仔细研究一下.
    " ]; t. Q; K, G7 a+ E( H        其实后来我也实际写过这两种情况下的代码,我也发现实际上分拆计数器的话消耗资源确实比一个大计数器要多出很多LUT和REG!0 z8 ]" L/ k& [) W% h! s
           我也很同意您的观点。实际上只是速度变快了,反转变少了。感觉其实跟流水线是一个原理。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-13 20:14 , Processed in 0.140625 second(s), 30 queries , Gzip On.

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

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

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