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

DCM使用详解

[复制链接]
  • TA的每日心情
    开心
    2024-12-19 15:41
  • 签到天数: 36 天

    [LV.5]常住居民I

    跳转到指定楼层
    1#
    发表于 2010-3-11 09:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

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

    x
    本文翻译自Using Digital Clock Managers (DCMs) in Spartan-3 FPGAs
    * C) _8 \3 Q0 `5 K; l- jDCM主要功能) ^6 l% b0 r% l  \1 O
    1. 分频倍频:DCM可以将输入时钟进行multiply或者divide,从而得到新的输出时钟。
    2 q4 o3 I8 z: d1 ~+ L2. 去skew:DCM还可以消除clock的skew,所谓skew就是由于传输引起的同一时钟到达不同地点的延迟差。. K$ g% r9 y3 Q4 k
    3. 相移:DCM还可以实现对输入时钟的相移输出,这个相移一般是时钟周期的一个分数。8 p9 i, ^6 x9 t  @# _8 b
    4. 全局时钟:DCM和FPGA内部的全局时钟分配网络紧密结合,因此性能优异。
    8 h1 x( x9 [) ^9 m9 X% ~) l5. 电平转换:通过DCM,可以输出不同电平标准的时钟。
    ' z) r8 E1 G1 p% j) ~3 N6 CDCM的特点与能力(Spartan-3系列为例)
    • 数量:4 DCM / FPGA(也有例外)- p( q* h% I7 m' Q
      -- 应该够用了
    • 数字频率综合器输入(CLKIN):1-280MHz
    • 延迟锁相环输入(CLKIN):18-280MHz
    • 时钟输入源(CLKIN):, u7 k$ e, S% V& G% K) J! s
        Global buffer input pad6 P) o9 R$ x. U3 H# l
        Global buffer output5 ?" i+ c1 j+ x! M7 p/ p
        General-purpose I/O (no deskew)
      , Q3 q) R; w' s) N6 [, V) r: a  Internal logic (no deskew)
      ) e* K) z4 U# l( B" `-- 上面最后两个分别是外部的普通IO口和内部的逻辑,没有deskew,所以时钟质量不会很好。
    • 频率综合器输出(CLKFX、CLKFX180):是CLKIN的M/D倍,其中# M) _6 I: r7 Y5 P9 k- O( o
      M=2..32
      & c' I. p6 {# Q* i D=1..32
      & n& H7 y; p# ~* s" r-- 这样看来最大能倍频32倍,最小能16分频。
    • 时钟dividor输出(CLKDV):是CLKIN的下列分频  _2 ?( I) d% B( b' v3 U
        1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 9, 10, 11, 12, 13, 14, 15, or 16
      0 |( b  h8 J. ^" |: \1 n-- 发现没有,最大的分频也是16。不过能支持半分频,比用频率综合器方便。
    • 倍频输出(CLK2X、CLK2X180):CLKIN的2倍频
    • 时钟conditioning、占空比调整:这个对所有时钟输出都施加,占空比为50%。
    • 1/4周期相移输出(CLK0/90/180/270):是CLKIN的1/4周期相移输出。
    • 半周期相移输出(CLK0/180、CLK2X/180、CLKFX/180):相差为180度的成对时钟输出。
    • 相移精度:最高精度为时钟周期的1/256。
    • 时钟输出:9个$ n8 v( s) O9 ^2 k) f8 V& {
        到全局时钟网的时钟输出:最多9个中的4个* K# d6 d; N6 O
        到General purpose互联:最多9个
      2 y$ }; F" p/ i/ \  到输出脚:最多9个/ q9 k. |: N1 Y/ I3 A
      -- 可见9个时钟输出可以随意链接内部信号或者外部输出,但是进入全局时钟网的路径最多只有4个。
    ; U& M) h- D- n" m: _" k0 A, z
    DCM的位置在哪?
    7 C" y: C+ q4 y: H& h1 R# }
    我们以Spartan3系列为例。- u+ T! B0 R, [7 S5 j; p" K+ C
    FPGA看上去就是一个四方形。最边缘是IO pad了。
    - n( b% J( G$ V4 c2 R除去IO pad,内部还是一个四方形。
    # U# A/ W, o3 H& P0 {, k' d: |0 N# G1 y四个角上各趴着一个DCM。
    " J8 b% D. I. g9 l上边缘和下边缘中间则各趴着一个全局Buffer的MUX。
    & @; b0 l8 _5 z9 Y0 y这样的好处是四个DCM的输出可以直接连接到全局Buffer的入口。, L8 g, F) F$ M* O# ?1 s
    下面是手绘简图,很丑是吧,呵呵。" X& J: K. F0 }6 g9 y
    ; D0 Y2 v" A6 S; [- ?3 g
    2 I. p. s5 Q$ g4 e3 B5 B" _; F
    DCM是全局时钟网络可选的一部分- o) [) }& m4 @8 p# N
    一般,时钟通过一个“全局输入buffer”和“全局时钟buffer” 进入全局时钟网络。如下所示5 y# I) d% z6 c9 p, e4 }7 j
    GCLK --->( IBUFG ---> BUFG) ---> low skew global clock network) t4 `1 ]$ J5 _# \9 U
    在需要的时候,DCM也成为全局时钟网络的一环。
    6 ^) k* o5 i& S* Z, q: U7 ]
    0 M4 T% ]* X8 V( b/ a9 L
    $ _" ]. K% V  w3 U* m% lDCM 内部构成一览
    6 Q, w0 Q5 ?7 Y* q# r1. DLL 延迟锁定环6 |9 h$ y  R, u: G6 T% d
        说是延迟锁定环,但是我觉得叫做延迟补偿环更加贴切。因为DLL的主要功能是消除输入时钟和输出时钟之间的延迟,使得输入输出在外部看来是透明连接。
    5 b' |, L2 W1 l7 s9 v- W    实现这种功能的原理是:DLL通过输出时钟CLK0或者CLK2X观察实际的线路延迟,然后在内部进行补偿。
    ; i( j, x; w6 p5 J! U% V2 b/ ?    一句话,DLL的核心功能是无延迟。
    4 L- g5 J' y- {, L" |3 V- \7 B    DLL的输出是CLK0, CLK90, CLK180, CLK270, CLK2X, CLK2X180, 和 CLKDV。9 |2 F: n; l; `7 _; G) u- j3 z
    " p( t6 V" T7 S2 m' G5 ]
    2. DFS 数字频率综合
    1 Z; P" V8 X) j: i+ T" `    DFS的主要功能是利用CLKIN合成新的频率。
    , F& J% \6 z8 N' u0 ]" K! R    合成的参数是:M(multiplier)和 D(divisor)。通过MD的组合实现各种倍频和分频。
      A0 [- x- w) l' A4 Y- R3 G  d    如果不使用DLL,则DFS的合成频率和CLKIN就不具有相位关系,因为没有延迟补偿,相位就不再同步。
    % z$ y8 m$ N9 t+ I* l( N
    8 ?1 G7 z/ \' `  S; R; t! U5 n3. PS 相位偏移
    $ ^2 n. L- y0 u; q7 R    注意这个相位偏移不是DLL中输出CLK90/180/270用的。这个PS可以令DCM的所有9个输出信号都进行相位的偏移。偏移的单位是CLKIN的一个分数。
    " V* B6 T& A" h- t; E    也可以在运行中进行动态偏移调整,调整的单位是时钟的1/256。
    / O" l; t" Y# @* R! }+ O9 ~这个功能我们平时不常用。, O' h  p. U0 {2 G4 T% H- b, K

    6 [5 [) T) \2 ]. Q7 n0 B4. 状态逻辑
    / I% r  y; W: y# ~; q    这个部分由 LOCKED 信号和 STATUS[2:0] 构成。LOCKED信号指示输出是否和CLKIN同步(同相)。STATUS则指示DLL和PS的状态。
    ' X4 k4 N3 {5 I" \6 d///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ) \' l2 Z1 b  ]: I+ ?; ^9 v5 N' \7 X5 G% L
    DCM_BASE ! ^& w. O# P; l( _. B
    DCM_BASE是基本数字时钟管理模块的缩写,是相位和频率可配置的数字锁相环电路,常用于FPGA系统中复杂的时钟管理。如果需要频率和相位动态重配置,则可以选用DCM_ADV原语;如果需要相位动态偏移,可使用DCM_PS原语。DCM系列原语的RTL结构如图3-8所示。5 M& N9 a# X+ n' B) j
    模块接口信号的说明如表3-8所列。
    9 o2 F8 R- s0 B/ K% ^1 m  |; o
    - n2 V! ^4 y" |* J5 hDCM_BASE组件可以通过Xilinx的IP Wizard向导产生,也可以直接通过下面的例化代码直接使用。其Verilog的例化代码模板为:
    8 ?) E: r  e' K: U/ L6 p- k8 S# H; c& M% F! l% e0 ^+ _
    // DCM_BASE: 基本数字时钟管理电路(Base Digital Clock Manager Circuit) : ^2 w; p' @& v$ M. I! |9 N& D* A
    // 适用芯片:Virtex-4/5
    % W) y. T* b$ T// Xilinx HDL库向导版本,ISE 9.1
    0 A* w: G; B0 W3 xDCM_BASE #(
    8 @) ^* E9 g2 P, S; ]0 T9 F6 d.CLKDV_DIVIDE(2.0),
    & J! j* s, }8 H# B9 K4 m9 I// CLKDV分频比可以设置为: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
    : A& ?# X" Y0 D; s5 k4 L" I// 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0 " J% V. K8 e9 o& g" t# a+ _
    .CLKFX_DIVIDE(1), // Can be any integer from 1 to 32
    5 E' ?! `& U4 G  b1 r- h// CLKFX信号的分频比,可为1到32之间的任意整数
    ) F2 m/ D, G/ _" \.CLKFX_MULTIPLY(4),
    7 K. W. T# h# b3 i! ?6 H; n// CLKFX信号的倍频比,可为2到32之间的任意整数 ' E) y$ M. l0 o& [6 [( h9 D
    .CLKIN_DIVIDE_BY_2("FALSE"), 3 z/ A; a1 i) `; ?7 K) Y' W
    // 输入信号2分频的使能信号,可设置为TRUE/FALSE 3 @, n# a& G7 s% Z
    .CLKIN_PERIOD(10.0), 9 f" }9 P. K8 j, v9 [
    // 指定输入时钟的周期,单位为ns,数值范围为1.25~1000.00。 " K/ M1 Q$ c3 b& a/ Z
    .CLKOUT_PHASE_SHIFT("NONE"),
    % S4 T: R& J, d- Z( f// 指定移相模式,可设置为NONE或FIXED
    . d; v$ ~9 }$ l+ F9 S. `) B.CLK_FEEDBACK("1X"),
    $ v0 p' G5 I8 o, j4 e! M% e: v6 V// 指定反馈时钟的频率,可设置为NONE、1X或2X。相应的频率关系都是针对CLK0而言的。
    ) z; O& H& ~, E9 f! r6 [+ N.DCM_PERFORMANCE_MODE("MAX_SPEED"),
    # }3 \. `2 y0 ~2 A) g// DCM模块性能模式,可设置为 MAX_SPEED 或 MAX_RANGE
    % F, r- f, T( J.DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"), % |' q# o1 ^  j% u* K4 F
    // 抖动调整,可设置为源同步、系统同步或0~15之间的任意整数
    * [  u3 N# ^0 @: J( ]( V% n.DFS_FREQUENCY_MODE("LOW"),
    / I/ D. L$ L* Y% i4 M: d// 数字频率合成模式,可设置为LOW或HIGH 两种频率模式
    2 u: w0 z, I6 V* ].DLL_FREQUENCY_MODE("LOW"),
    ) A+ H2 P: M( w4 |3 t$ d& J2 ?8 `// DLL的频率模式,可设置为LOW、HIGH或HIGH_SER 5 V; G: X% H0 ~
    .DUTY_CYCLE_CORRECTION("TRUE"), 2 y7 I- Z$ C- y& s- P
    // 设置是否采用双周期校正,可设为TRUE或FALSE
    2 u8 k# g, [* S1 R  e7 [.FACTORY_JF(16'hf0f0), 3 S) i& K9 N1 T6 z1 q# d; L
    // 16比特的JF因子参数
    / m4 \; [( N1 a.PHASE_SHIFT(0), ( ^, K/ M& P: o
    // 固定相移的数值,可设置为 -255 ~ 1023之间的任意整数 % e5 g" j" {2 ~$ G1 h3 K
    .STARTUP_WAIT("FALSE")
    * V; I6 w$ Y( i. A% w7 s# E// 等DCM锁相后再延迟配置DONE管脚,可设置为TRUE/FALSE
    ; _  y3 K* h8 {, t) DCM_BASE_inst ( 4 A8 K' u/ a9 ~
    .CLK0(CLK0), // 0度移相的DCM时钟输出 0 p2 _! S+ [  Z, H; i
    .CLK180(CLK180), // 180度移相的DCM时钟输出 1 C+ P& U' Y$ I* x% N$ Z
    .CLK270(CLK270), // 270度移相的DCM时钟输出   e7 m) o( Q1 E3 T( v9 K+ _: v
    .CLK2X(CLK2X), // DCM模块的2倍频输出
    0 m2 M5 e, D  D: o* O) N# {7 k.CLK2X180(CLK2X180), // 经过180度相移的DCM模块2倍频输出
    + B$ c# s! u% t% |1 L.CLK90(CLK90), // 90度移相的DCM时钟输出 8 S: y& _) e6 n0 r& G% P
    .CLKDV(CLKDV), // DCM模块的分频输出,分频比为CLKDV_DIVIDE
    % i- r5 }& X8 Y+ L  U8 {+ e  G.CLKFX(CLKFX), // DCM合成时钟输出,分频比为(M/D)
    - ^2 n! D7 Y& s+ G/ u  Y1 F! ^.CLKFX180(CLKFX180), // 180度移相的DCM合成时钟输出 5 u/ C# D. \4 @- {
    .LOCKED(LOCKED), // DCM锁相状态输出信号
    , D0 d2 M% C6 E, ^% u0 t0 a$ B( Y.CLKFB(CLKFB), // DCM模块的反馈时钟信号 * [. L% G+ Y: ~2 A
    .CLKIN(CLKIN), // DCM模块的时钟输入信号 & H% t# j1 E* t
    .RST(RST) // DCM 模块的异步复位信号
    9 y% @* J% V; I( B, z+ ?5 z); ( J9 j. O' _: a7 t$ k) I3 l
    // 结束DCM_BASE模块的例化过程
    ! o/ ]; q' B& z在综合结果分析时,DCM系列原语的RTL结构如图3-36所示。
    - g0 Y3 G/ K; R/ W& s 0 }. ?# m! \+ H3 L/ F2 F% l3 M
    图3-36 DCM模块的RTL级结构示意图 - w) R1 Z& E2 t- ^$ P9 M+ y' `
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    % K1 Q3 u$ V! n. ~) OSpartan-3 DCM的兼容性2 i9 T: k1 t# M5 q% R
        S3 的DCM和 Virtex-II 以及pro的DCM 功能基本相同。但是S3 DCM的技术属于3代技术,因此在抗噪性能、相移能力方面有进一步提高。(客观的说,对我们的普通应用,不是特别重要。)2 V+ K7 }  D$ X
        但是和Spartan-2系列相比,有很大改进。S2系列不叫DCM叫DLL,可见DFS和PS等功能完全是新加入的,所以S2系列其实除了二倍频几乎没有倍频和分频能力。从这点来讲,S3真的是用起来很爽了。  8 \8 d# G. a. P
    ( N% Q) `  M! \5 D3 D% Q) O
    DCM 输入时钟的限制  X5 `2 X8 P( C, @# A/ H
       
    和所有物理器件一样,DCM的工作范围也是受限的。由于DLL和DFS的要求各不相同,因此DCM的输入频率的限制也视乎是否同时使用DLL和DFS还是单独使用其中之一。如果同时使用,则取限制较严格者作为整个DCM系统的限制。我们来看两者的独立限制。- A; F; _+ s3 \8 u

    . Y% E0 E/ s9 t    呵呵,这部分内容不用记哦,需要的时候查一下软件或者手册就可以了。只要明白“CLKIN输入频率有限制,而且DLL、DFS同时使用时取其严格者” 这些道理就可以了。
    ' `7 u% e* g' |& V) Z    除了时钟限制之外,对于时钟的质量也有一定限制,主要有3个:# t. e( l6 G2 J4 |$ ^
    1. CLKIN cycle-to-cycle jitter:约束了前后两个CLKIN周期的差异;6 w) A3 d" D; \( G8 v2 x" R
    2. CLKIN period jitter:约束了100万个cycle中最大周期和最小周期之间的差异;
    6 I/ j* }% ~8 E3. CLKFB path delay variation:约束了从外部进来的反馈回路的延迟波动,这种延迟波动在概念上其实和jitter如出一辙。" K6 L2 d' t0 ~  e2 V6 C
    具体数值请查手册,知道有这么回事就可以了。
    0 w. A  E; C, I. i  u( Q+ Z6 oLOCKED信号的行为方式
    9 Y( U. g2 B; s& n% n: \
    LOCKED信号用于指示整个DCM系统已经和CLKIN同步,从LOCKED信号有效开始,输出时钟才可以使用,在此之前,输出时钟可能会处于各种复杂的不稳定状态。我们来看一下LOCKED信号的行为状态机。
    / Y6 r4 g) i2 v/ K, ]  BFPGA配置:
    1 M! v( t! q3 X    if (CLKIN已经稳定) next_state = 判断同步;
    ! V  \- w) o3 }8 b' b    else                         next_state = RST_DCM;
    , o0 O# S- J6 I* ~5 ]) U. y2 X判断同步:
    2 d: Y0 w+ r- Z    if (已经同步)          next_state = 判断同步;5 h8 K$ s  \" ]8 ~5 J$ n
        else                         next_state = 同步失败;
    ' [) G; Z' n: ^( ^% r同步失败:                    next_state = RST_DCM;
    " e3 E9 p% m6 l* ~RST_DCM:                  next_state = FPGA配置;
    % `0 L% u2 r1 m3 F* ^* O  q3 ^1 O4 u( d+ `7 |
    现在来看看各个状态下的输出。! m; ~3 V9 l% w7 e
    0 R" p8 a' W' G  E
    case (state)
    3 S1 c' h4 J& J3 g3 s    FPGA配置: LOCKED = 0;0 ~5 Y9 w" Z. _  f/ w( c3 D
        判断同步:   LOCKED = 1;
    - R% i: \7 h& z5 e    同步失败:   LOCKED = 0;: v- K6 i; e- J. u2 A5 Q4 m. h7 x9 |
        RST_DCM:LOCKED = 0;5 R3 t: u$ h! @% s1 K
    endcase
    9 P6 k$ f5 O& F0 O* URST 信号——重启锁定1 ]9 T! u, E4 P
       
    RST信号用于在时钟不稳定或者失去锁定时,将DCM的相关功能重置,从而重新启动锁定追踪。
    ' G1 E4 A# i, u$ E& R# ?1 [    作为一个输入信号,RST无法被DCM自身置位,因此需要我们的应用设计来控制这个RST信号,否则需将其接地。' V, Y0 ]. x% r; s0 c7 D% o
        置位RST会将延迟tap的位置置0,因此可能会产生glitch或者是duty cycle 发生变化,另外相位偏移也会重置回到默认值。
    ' K3 p; u& t  m& o& X+ sDCM 生成向导+ j& ]& [+ X( ~( R- ]
    安装了ISE就能得到一系列accessories。利用其中的Architecture Wizard 我们可以生成DCM模块。生成的DCM将产生3种输出:7 B% I' r+ c6 o4 [& v
    1. 一个例化了DCM的逻辑综合文件(采用生产商特定格式的VHDL / Verilog)
    ; g, k/ m% ]0 Z. V3 t2 e2. 一个UCF文件控制特定实现
    . {, {& b" j) W6 C" `2 u2 p! m9 _1 E3. 所有其他用户设置都保存到XAW(Xilinx Architecture Wizard)文件中。6 x+ t9 r5 _; u# \* L2 Q
    : O0 m8 T+ L" |' j! {
    接下来描述一下向导使用步骤。
    0 L# |, ~$ D8 z, s/ T1. 从ISE或者Arch wizard中启动界面;5 Y  G+ N/ E$ o0 s( _% l
    2. 第一个页面做基本配置:路径、XAW文件名、VHDL / Verilog选择、综合工具、FPGA型号;9 n& _, b2 O' g' |6 d1 \# W
    3. 进行General setup,一看就明白,不细说,注意一下几点:, W3 ~8 K! \0 `/ e2 [
        - CLKIN source 如果选 external 则 DCM 的 CLKIN 会自动连接到 IBUFG。
    5 ~7 L9 f; K0 k* g0 l    - Feedback如果选 internal 则反馈来自 BUFG。
    2 l; B2 X& q- ?, h1 L4. 高级设置% R2 F6 q' K3 B/ N! S) o
        - 选择FPGA的配置过程是否包含DCM的锁定,如果是,则配置完成信号DONE将在LOCKED信号有效后方能有效。
    * x/ F7 ]$ m' R5 }/ D, \- o! ?/ H, C    - 选择CLKIN是否要除2。由于DCM的输入频率有限,对于过高的输入时钟通过除2使之可用。9 S( ]% \3 v5 x, y7 h; ]% g2 }
        - Deskew调整,这个选项建议在咨询xilinx工程师后再使用。
    $ Y% s( Y% n' m' I' Z' s5. 时钟输出口 Buffer 设置% p2 A+ Q8 g2 e
        - 默认情况下所有输出口都链接 BUFG 全局时钟网络入口
    * ?0 C$ c1 o: Q( g0 d    - 由于全局时钟网络的入口有限,用户可以定制时钟输出口连接到其他类型的Buffer0 z- H* I: t) K  y0 g
           - Global Buffer:进入全局时钟网络的入口Buffer,共有4个,简称BUFG
    % F2 `2 Q1 t. v) b9 s/ D       - Enabled Buffer:还是上面的4个全局时钟Buffer,但是配置为有使能信号控制,简称BUFGCE. ^3 E4 R( s# M% U$ X7 c
           - Clock MUX:还是上面的4个全局时钟Buffer,但是配置为 2-to-1 MUX类型,由S信号控制选出,简称BUFGMUX$ P; Q; Y7 d: j7 l
           - Low skew line:没有buffer了,只能使用 skew 比较小的连线
    . Y4 N* {( B" A/ N* B; \2 ]/ w3 k       - Local Routing:连到本地,skew的要求不是很严格6 [5 Y) m. D2 k" K
           - None:禁止输出" K0 h9 a% q  y
        - 对于Enabled Buffer类型和Clock Mux类型,需要指定En口的名字8 v& e% V9 y+ B, {
        - 需要为输出时钟信号指定名字或者使用默认
    2 m" H2 b, \, d- l6. 设置DFS; R; ?/ o: g# W
        - 设置目标输出频率,然后按calculate,自动生成 M/D 值和 Jitter 值
    * R8 t* A8 f% K' q  W& w% l9 D) {1 u    - 或者手动设置 M/D 值,然后按calculate,自动生成频率和 Jitter 值
    " |3 U# `0 T! F0 [7 x: [7. 最后输出所需的3种文件。

    该用户从未签到

    2#
    发表于 2014-7-22 19:20 | 只看该作者
    太棒了,感谢分享

    该用户从未签到

    4#
    发表于 2015-7-21 17:45 | 只看该作者
    感謝分享~~这么好的东西没人气,太没天理了

    该用户从未签到

    5#
    发表于 2015-7-21 17:55 | 只看该作者
    D=1..32,  
    + p  h0 o% Q9 T" T-- 这样看来最大能倍频32倍,最小能16分频。5 t* G0 @6 e6 \) g# S
    这个16从哪来?

    该用户从未签到

    6#
    发表于 2015-7-31 09:11 | 只看该作者
    感谢分享哦。

    该用户从未签到

    7#
    发表于 2015-8-14 19:13 | 只看该作者
    多谢楼主的无私分享
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-10 09:17 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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