你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32MP1嵌入式Linux驱动开发指南V1.7-IP核之MMCM/PLL实验

[复制链接]
STMCU小助手 发布时间:2022-9-27 23:11
IP核之MMCM/PLL实验- k/ y  I! I# w5 `& i- _6 z; Y" R
PLL的英文全称是Phase Locked Loop,即锁相环,是一种反馈控制电路。PLL对时钟网络进行系统级的时钟管理和偏移控制,具有时钟倍频、分频、相位偏移和可编程占空比的功能。Xilinx 7系列器件中的时钟资源包含了时钟管理单元CMT,每个CMT由一个MMCM和一个PLL组成。对于一个简单的设计来说,FPGA整个系统使用一个时钟或者通过编写代码的方式对时钟进行分频是可以完成的,但是对于稍微复杂一点的系统来说,系统中往往需要使用多个时钟和时钟相位的偏移,且通过编写代码输出的时钟无法实现时钟的倍频,因此学习Xilinx MMCM/PLL IP核的使用方法是我们学习FPGA的一个重要内容。本章我们将通过一个简单的例程来向大家介绍一下MMCM/PLL IP核的使用方法。# ?0 J. n4 A) `8 k
$ C0 W$ s" ~; C
13.1 MMCM/PLL IP核简介
- t) M* z% v6 ~  B6 m锁相环作为一种反馈控制电路,其特点是利用外部输入的参考信号控制环路内部震荡信号的频率和相位。因为锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来。: P1 }' u1 ^0 }& ]# S
Xilinx 7系列器件中具有时钟管理单元CMT时钟资源,xc7z020芯片内部有4个CMT,xc7z010芯片内部有2个CMT,为设备提供强大的系统时钟管理以及高速I/O通信的能力。时钟管理单元CMT的总体框图如下图所示。8 f  f2 H6 B" h! x- ]
0 _' E$ H+ _7 z, P
8788fb6fa02b40468cf23ee722264d64.png
1 o& A6 f  F9 N* x/ S# }2 j- q2 o7 M* s2 y
图 7.5.13.1 CMT总体框图5 q7 O2 \7 y" E2 G5 O0 t
MMCM/PLL的参考时钟输入可以是IBUFG(CC)即具有时钟能力的IO输入、区域时钟BUFR、全局时钟BUFG、GT收发器输出时钟、行时钟BUFH以及本地布线(不推荐使用本地布线来驱动时钟资源)。在最多的情况下,MMCM/PLL的参考时钟输入都是来自IBUFG(CC)即具有时钟能力的IO输入,本实验也是如此。MMCM/PLL的输出可以驱动全局时钟BUFG和行时钟BUFH等等。BUFG能够驱动整个器件内部的PL侧通用逻辑的所有时序单元的时钟端口。BUFG/BUFH/CMT在一个时钟区域内的连接框图如下图所示。
: S1 k$ C3 |' F9 z. h  b' h4 q
: Z, V9 s: b: j  p" L1 Z7 u 7be3cddc27c74c72bba8d395cd881013.png ' ^( T1 s1 k* x7 c, {. @
* Z+ a  W* }2 g! f1 K
图 13.1.2 BUFG/BUFH/CMT在一个时钟区域内的连接5 \; X/ V7 U( y
在本实验中,读者可以简单地理解为:外部时钟连接到具有时钟能力的输入引脚CCIO(Clock-Capable Input),进入MMCM/PLL,产生不同频率和不同相位的时钟信号,然后驱动全局时钟资源BUFG。但是要进行更深入的FPGA开发,就必须理解器件的时钟资源架构。有关Xilinx时钟资源和CMT的更详细信息,读者后期可以花一些时间和精力去学习一下Xilinx官方的手册文档“UG472,7 Series FPGAs Clocking Resources User Guide”里的介绍。0 w. v) n% O; E% _
MMCM和PLL的总体框图如下图所示。' s& {7 T9 {3 `' T4 Y* r( C7 A8 r

+ E8 R$ M# K5 {' V* Y8 E2 Z 6fc130a630fb40da9eeb27d3501f86cf.png 1 O& r* d; ]2 Y9 u) a) a  G4 _9 M
/ N7 M* O& D* d1 [
图 13.1.3 MMCM总体框图
$ D& U$ O4 \) S0 J0 k% E* Y- d
' ?6 L: u; M, ]! C2 E) q" w 707397e57d4a42a2a1d0a7bed5dbd721.png
) _( T4 d- B, b+ }- z7 I3 O
  H) ]/ S6 k0 ^5 T' C' \  z) z6 ?图 13.1.4 PLL总体框图
+ b) m* }) ^8 o! y5 X9 g" j; T其中MMCM的功能是PLL的超集,其具有比PLL更强大的相移功能。MMCM主要用于驱动器件逻辑(CLB、DSP、RAM等)的时钟。PLL主要用于为内存接口生成所需的时钟信号,但也具有与器件逻辑的连接,因此如果需要额外的功能,它们可以用作额外的时钟资源。4 Y1 [  ?6 M2 a3 C7 l6 i
PLL由以下几部分组成:前置分频计数器(D计数器)、相位-频率检测器(PFD,Phase-Frequency Detector)电路,电荷泵(Charge Pump)、环路滤波器(Loop Filter)、压控振荡器(VCO,Voltage Controlled Oscillator)、反馈乘法器计数器(M计数器)和后置分频计数器(O1-O6计数器)。
. v4 c/ S! g1 j1 y- X9 z在工作时,PFD检测其参考频率(FREF)和反馈信号(Feedback)之间的相位差和频率差,控制电荷泵和环路滤波器将相位差转换为控制电压;VCO根据不同的控制电压产生不同的震荡频率,从而影响Feedback信号的相位和频率。在FREF和Feedback信号具有相同的相位和频率之后,就认为PLL处于锁相的状态。% M0 m# r  \* t/ h( j
在反馈路径中插入M计数器会使VCO的震荡频率是FREF信号频率的M倍,FREF信号等于输入时钟(FIN)除以预缩放计数器(D)。参考频率用以下方程描述:FREF= FIN/D,VCO输出频率为FVCO= FINM/D,PLL的输出频率为FOUT=(FINM)/(N*O)。; _9 X: ~- _1 b: c  e
Xilinx提供了用于实现时钟功能的IP核Clocking Wizard,该IP核能够根据用户的时钟需求自动配置器件内部的CMT及时钟资源,以实现用户的时钟需求。在这里我们主要讲解的是如何使用该IP核,有关该IP核的更详细介绍,读者可以参阅Xilinx官方的手册文档“PG065,Clocking Wizard v6.0 LogiCORE IP Product Guide”。
$ h$ Y) A: D- ?- _13.2 实验任务
! Z, c; w* }. {$ H/ u$ D0 ^- h本节实验任务是使用Zynq开发板输出4个不同时钟频率或相位的时钟,并在Vivado中进行仿真以验证结果,最后生成比特流文件并将下载到开发板上,使用示波器来测量时钟的频率。/ ^" i) N7 ~0 z3 c4 w5 B
13.3 硬件设计: C/ u" ]4 X# [& C0 i: |( c) C$ L+ h
本章实验将Clocking Wizard IP核产生的4个时钟100MHz、100MHz_180deg 、50MHz、25MHz,连接到开发板的J3扩展口IO上,分别是第9、10、11、12号脚。扩展口原理图如下图所示:6 ~5 n3 Q2 T  ?' W0 m# ?3 p& O
0 D! f# b) o+ V
90fc77c849354eb7b09b1dbf0eb042fd.png ) }# Z1 ]5 o+ q

$ b, _" ^$ Q2 b2 W; F图 7.5.13.1 扩展口原理图
* r& u' c4 \$ |, e: V- L  j本实验中,各端口信号的管脚分配如下表所示:
; }5 u8 i, b) F6 i% n3 B表 13.3.1 IP核之PLL实验管脚分配
6 o1 u! L6 E' o! `4 ~8 P信号名 方向 管脚 端口说明 电平标准& L- z% t4 g' J) r0 Y$ q# D" `$ b
sys_clk Input U18 系统时钟,50Mhz LVCMOS334 o& f5 v' y& B" c  ?7 d
sys_rst_n Input N16 系统复位,低有效 LVCMOS33- m' ~( F8 [  g2 U
clk_100m output U20 100Mhz时钟 LVCMOS333 W9 L; k2 w! }, F% g8 N
clk_100m_180deg output T20 100Mhz时钟,相位偏移180度 LVCMOS33$ l- I+ a. ^% D
clk_50m output P19 50Mhz时钟 LVCMOS33
. }- s5 |/ X- s3 kclk_25m output N18 25Mhz时钟 LVCMOS33% g! D! F4 m3 v" t& a+ Y: H
对应的XDC约束语句如下所示:
% H* ?/ t' J6 ~- w, q0 x" G: C
0 J  Y" D* Z3 s2 y& n
  1. set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports sys_clk]+ v/ D; ~. Q4 _  n
  2. set_property -dict {PACKAGE_PIN N16 IOSTANDARD LVCMOS33} [get_ports sys_rst_n]
    - p$ W8 c4 @0 @6 P9 j9 W6 _. s
  3. set_property -dict {PACKAGE_PIN U20 IOSTANDARD LVCMOS33} [get_ports clk_100m]
    " L3 s  _: p% j: |7 B. \
  4. set_property -dict {PACKAGE_PIN T20 IOSTANDARD LVCMOS33} [get_ports clk_100m_180deg], a* x+ o1 g* E4 z2 [2 s# c2 E) _
  5. set_property -dict {PACKAGE_PIN P19 IOSTANDARD LVCMOS33} [get_ports clk_50m]/ S0 {$ g: c! t  L) m
  6. set_property -dict {PACKAGE_PIN N18 IOSTANDARD LVCMOS33} [get_ports clk_25m]
复制代码

* a. t% ?: w3 N3 J7 o13.4 程序设计+ e& E5 n& @0 o' H( c7 ]+ i  f, y
我们首先创建一个空的工程,工程名为“ip_clk_wiz”。接下来添加PLL IP核。在Vivado软件的左侧“Flow Navigator”栏中单击“IP Catalog”,“IP Catalog”按钮以及单击后弹出的“IP Catalog”窗口如下图所示。" S3 g; f8 h) s7 r
在这里插入图片描述
: S+ j. d3 f0 B( P0 i
" [( K$ T8 a; Y3 i8 g+ x/ q b471d2304de34072ad00d6458ac65196.png
$ P- z& |0 E# F5 m+ f0 ]+ S9 _* Z$ X' S( |
图 13.4.1 “IP Catalog”按钮
' Z4 n1 u2 |) O/ k8 Y
6 y9 M' A7 N+ b/ i% v! C2 t 5ebaec4ecffe4ead8c7ca5d71b922f3f.png . |0 }+ b+ b+ B: ]0 t
6 y8 q+ j$ i$ ^- w) J' z
图 13.4.2 “IP Catalog”窗口
! I1 T- H( K* r5 B6 i: j打开“IP Catalog”窗口后,在搜索栏中输入“clock”关键字,可以看到Vivado已经自动查找出了与关键字匹配的IP核名称,如下图所示。
8 D! n- q  ~3 f) I6 k: q8 P& A( F' [4 x
6d4ed4e4bd70454c9156933b05a7e74f.png - c/ u2 {- |! A2 F7 Y$ s
$ s! a. P$ `# k& A% l6 y# }
图 13.4.3 搜索栏中输入关键字. r) \0 f" A) z5 i* j6 B0 D
我们双击“FPGA Features and Design”→“Clocking”下的“Clocking Wizard”,弹出“Customize IP”窗口,如下图所示。- P6 F  p/ f) {, q/ t

9 {/ V, q- h4 `& {. w fbeafe89d3b74c4abc1dedc66c44bcf0.png & N2 a: s7 P' W" P% v& d# L

- T6 s1 u: O: M- D( H# S& j8 E图 13.4.4 “Customize IP”窗口
# L& ~% D# c  l7 ?* ^接下来就是配置IP核的时钟参数。最上面的“Component Name”一栏设置该IP元件的名称,这里保持默认即可。在第一个“Clocking Options”选项卡中,“Primitive”选项用于选择是使用MMCM还是PLL来输出不同的时钟,对于我们的本次实验来说,MMCM和PLL都可以完成,这里我们可以保持默认选择MMCM。需要修改的是最下面的“Input Clock Information”一栏,把“Primary”时钟的输入频率修改为我们开发板的核心板上的晶振频率50MHz,其他的设置保持默认即可,如下图所示。
. K; J" U2 `: Z: c* _0 @7 }" Z! M
" W) P: Q$ N: h8 A 5c08dfddca8a46728f9a5bce0a1cf0f2.png
" p  }) J7 {; X  R9 B9 F5 T* J3 \; ]6 |7 O2 s- c
图 13.4.5 “Clocking Options”选项卡的设置+ U- Z6 b, b5 [5 u$ n9 P+ \! @: Q
接下来切换至“Output Clocks”选项卡,在“Output Clock”选项卡中,勾选前4个时钟,并且将其“Output Freq(MHz)”分别设置为100、100、50、25,注意,第2个100MHz时钟的相移“Phase(degrees)”一栏要设置为180。其他设置保持默认即可,如下图所示。
( U" F+ Z% n' e+ O" q" x( m1 S& z8 O
23e2715b8d834ddc8de0288466a27c13.png
+ K, t7 ]9 k( L8 H& ]7 v
1 r6 C% w6 [* b5 o9 N  z) v& F. v6 a& w图 13.4.6 “Output Clocks”选项卡的设置  p3 N" ?" G% v* K$ n4 q
“Port Renaming”选项卡主要是对一些控制信号的重命名。这里我们只用到了锁定指示locked信号,其名称保持默认即可,如下图所示。0 |$ c+ z! A! r
" J4 I& ~8 T- f# n
98bdac52d01a420d89f45120ac4bb076.png
' K) q# e& G. T; N- `' X6 e
+ C+ X1 k- n$ I0 c* ]图 13.4.7 “Port Renaming”选项卡的设置
! {( W/ H  Z+ O' M" T/ L“MMCM Setting”选项卡展示了对整个MMCM/PLL的最终配置参数,这些参数都是根据之前用户输入的时钟需求由Vivado来自动配置,Vivado已经对参数进行了最优的配置,在绝大多数情况下都不需要用户对它们进行更改,也不建议更改,所以这一步保持默认即可,如下图所示。
& A5 ~2 w, T6 \6 ?; h9 @" b/ {; f. s* L! O6 |9 M; k0 Z' O1 ~) y2 l
e2be154c512d45a0ab456657c1b4eb59.png   ^+ o+ S* J# d' u
  M/ Q6 s- T0 h4 l9 S. I
图 13.4.8 “MMCM Setting”选项卡的设置: L  ~" o! R" f4 a/ X. i, ?& b
最后的“Summary”选项卡是对前面所有配置的一个总结,在这里我们直接点击“OK”按钮即可,如下图所示。
" {5 y6 N+ \; D3 J! |* X# q2 R: B8 b% k2 T- R
519e24a46638400ea0989473f5cb1f8f.png
' _7 B* [, l1 D6 R2 {$ X0 y+ G3 b- j4 G5 I
图 13.4.9 “Summary”选项卡- b1 I6 k8 S% Q  e: Z0 b3 @5 d" ^8 z
接着就弹出了“Genarate Output Products”窗口,我们直接点击“Generate”即可,如下图所示。2 X2 {; p1 u. H

4 p  a! }" E% Z( z/ I, x: q 4a9e4ca6de3e428ba4e88a239e06cc27.png 0 O3 p1 Z0 M. U1 e, l; f5 |1 q9 q
6 z" X0 F- A$ n# z( [; K
图 13.4.10 “Genarate Output Products”窗口
4 k7 ?2 H& l5 @* M之后我们就可以在“Design Run”窗口的“Out-of-Context Module Runs”一栏中出现了该IP核对应的run“clk_wiz_0_synth_1”,其综合过程独立于顶层设计的综合,所以在我们可以看到其正在综合,如下图所示。4 j4 w8 ?; x% [1 j

2 g) G4 V$ ~) Z# X! C+ i6 f/ h7 y b32fd6f8eb844b21ab2c4e8e84a3b7b9.png
3 }* ?4 p9 Y# Z2 O! B+ @: w% m6 v6 \0 S3 w
图 13.4.11 “clk_wiz_0_synth_1”run6 j" y# {3 F/ a0 F9 B
在其Out-of-Context综合的过程中,我们就可以开始编写代码了。首先打开IP核的例化模板,在“Source”窗口中的“IP Sources”选项卡中,依次用鼠标单击展开“IP”-“clk_wiz_0”-“Instantitation Template”,我们可以看到“clk_wiz.veo”文件,它是由IP核自动生成的只读的verilog例化模板文件,双击就可以打开它,在例化时钟IP核模块的时钟,可以直接从这里拷贝,如下图所示。
' q  G, l( Q2 U% y- N: g
- q! _+ u; [( J) o  j* f 3c513d4ca4834b07882f4200de04edd0.png 9 t3 \8 C- I& O" S1 G8 X

0 m' W- p/ \; k图 13.4.12 “clk_wiz.veo”文件
: c+ I" `4 e* M5 V) M我们接下来创建一个verilog源文件,其名称为ip_clk_wiz.v,代码如下:
1 p0 G' Z# O. b3 {- {. n$ m9 |& Q/ u# i2 O  F
  1. 1  module  ip_clk_wiz(& S# L) ?+ h) d4 I( ]. |( B# W9 n
  2. 2      input               sys_clk        ,  //系统时钟
    : {) d: C  J- E; Q5 f3 k
  3. 3      input               sys_rst_n      ,  //系统复位,低电平有效
    " Y8 X) \: U3 Q. O! w' b' I  B
  4. 4      //输出时钟
    5 L  l# o* v4 x, J$ {' F
  5. 5      output              clk_100m       ,  //100Mhz时钟频率
    ( y) b: t: S( A2 s0 `. O2 A
  6. 6      output              clk_100m_180deg,  //100Mhz时钟频率,相位偏移180度
    0 G3 k2 j! o& J) f; z
  7. 7      output              clk_50m        ,  //50Mhz时钟频率
    2 s7 g8 n' Q- R* c7 |( L5 Z3 m3 X
  8. 8      output              clk_25m           //25Mhz时钟频率! z& n" J( p% g! x# g' c4 }
  9. 9      );& D' R9 [6 C' z9 A* I% \; M, f3 Q
  10. 10 ( ~# |& Y6 H6 J9 D2 C
  11. 11 //*****************************************************
    ! u/ ?! A  R: \+ v4 U5 \5 `& F
  12. 12 //**                    main code& H  h! e: F+ P2 W5 P
  13. 13 //*****************************************************
    " P! o6 h+ x* F) @
  14. 14 # _" S5 |. y9 _9 L) K( H" x3 Y
  15. 15 wire        locked;  s- M- s. K" i8 B
  16. 16
    4 D# i2 h  a8 [' C
  17. 17 //MMCM/PLL IP核的例化5 D0 z' |2 ]3 p, S$ u7 w7 {
  18. 18 clk_wiz_0  clk_wiz_0% }% j: y! i+ S  F0 O
  19. 19 (
    $ t# w9 Q- d4 s: u0 r8 T: X* n7 U
  20. 20  // Clock out ports/ C: O+ S4 e' O$ [4 R. G
  21. 21  .clk_out1_100m     (clk_100m),         // output clk_out1_100m0 f8 L& x, R3 n, r) `/ d" p& o1 J- ]' @
  22. 22  .clk_out2_100m_180 (clk_100m_180deg),  // output clk_out2_100m_180
    ) K5 g# J" H; G; B+ d! f
  23. 23  .clk_out3_50m      (clk_50m),          // output clk_out3_50m
    6 d' W& f  t3 n0 ?5 l: s# B4 Q+ F& n
  24. 24  .clk_out4_25m      (clk_25m),          // output clk_out4_25m$ k8 J6 ^& Z$ H. r. C: [
  25. 25  // Status and control signals
    / E6 S# }! c) a1 n" }$ u" A
  26. 26  .reset             (~sys_rst_n),        // input reset( n) r* Y# w1 P, I; |* K6 {
  27. 27  .locked            (locked),           // output locked! \1 M$ I( e: `0 \  x9 j2 l2 V
  28. 28  // Clock in ports
    # L) p! S# h/ R, V1 C# U( f
  29. 29  .clk_in1           (sys_clk)            // input clk_in1
    * ~# C3 P7 Q$ O
  30. 30 );      
    7 v, a, D' w1 C% h
  31. 31 ) L& g5 b% q/ P; o4 P& d
  32. 32 endmodule
复制代码

" b( l* h5 d3 w/ s! @程序中例化了clk_wiz_0,把FPGA的系统时钟50Mhz连接到clk_wiz_0的clk_in1,系统复位信号连接到clk_wiz_0的reset,由于时钟IP核默认是高电平复位,而输入的系统复位信号sys_rst_n是低电平复位,因此要对系统复位信号进行取反。clk_wiz_0输出的4个时钟信号直接连接到顶层端口的四个时钟输出信号。
( V3 ]' ~3 A; a7 C6 T+ v我们接下来先对代码进行仿真,TestBench代码如下:! V1 `+ R& p. I, A8 X4 y) E7 O
" q. U0 y% I( s3 p5 ~7 ], `2 `
  1. 1  `timescale 1ns / 1ps6 ]& {4 y) r: u/ ?& Q8 J
  2. 2  , B& i* l! N2 p6 o  C
  3. 3  module tb_ip_clk_wiz();
      |+ d. `0 \: d# s+ {
  4. 4  
    ! H' F! ~9 o- }
  5. 5  reg     sys_clk;
    ' X8 _1 I  A0 d
  6. 6  reg     sys_rst_n;
    5 q6 y  q) p% e2 f$ E: w
  7. 7  
    ) g' t! U6 N( [( I2 @' s
  8. 8  wire    clk_100m;      . u3 b9 v+ N* {8 z/ j
  9. 9  wire    clk_100m_180deg;& |" |: S1 q, P$ A( C) w+ D3 ~1 Z8 |
  10. 10 wire    clk_50m;     
    ' N; j$ [" H% z
  11. 11 wire    clk_25m;        : X' V% n; i1 p- C: X: G  v
  12. 12 8 m& |8 S8 u0 b* D5 ^: w
  13. 13 always #10 sys_clk = ~sys_clk;; b( g: A- y- z3 H/ R4 g
  14. 14
    $ L" X$ B! o1 I
  15. 15 initial begin2 S/ `% i! |" R3 l! T( V
  16. 16     sys_clk = 1'b0;9 \7 Y: f& `% H
  17. 17     sys_rst_n = 1'b0;0 D$ G" n& y7 }8 s3 ~% z% j& u
  18. 18     #200
    ) x, _+ b. N7 Q. i& D
  19. 19     sys_rst_n = 1'b1;
    . Y" c: c/ b0 {+ r
  20. 20 end* Z9 ?3 L5 C* G
  21. 21 - L( r+ n: Z! n0 Y5 P9 l9 k( _2 {5 e
  22. 22 ip_clk_wiz u_ip_clk_wiz(  l# Q" _, M  [/ D+ L
  23. 23     .sys_clk          (sys_clk        )," O& q2 J9 m1 P* w0 o! r
  24. 24     .sys_rst_n        (sys_rst_n      ),5 `/ ]5 S5 u+ C, o: b
  25. 25   m2 P) s# C. O  [
  26. 26     .clk_100m         (clk_100m       ),
    3 L/ L' }  O+ z( G
  27. 27     .clk_100m_180deg  (clk_100m_180deg),) Q4 B* N' t) Z5 ~7 l
  28. 28     .clk_50m          (clk_50m        ),
    3 f8 y- p8 q9 K$ ^- N" q
  29. 29     .clk_25m          (clk_25m        )  3 f% ^* H/ }7 D
  30. 30     );
    / q3 \6 i0 f1 ^0 {  n8 Z2 ~, K& y
  31. 31 4 T' m  I! r1 g, [! ?
  32. 32 endmodule' S7 u! n6 _- O# u
复制代码

* E, }, a6 {1 l/ n- l5 D7 o6 U3 O对模块进行仿真的方法这里不再赘述,仿真后得到的波形如下图所示:
8 \. t6 @: U. R* S$ T9 I( |4 H" @
- ~. o+ j% ~/ r$ o1 d 1b0a6455e5a84e959a25e84109e25282.png 0 l* j. I0 D2 ?- d0 s; ]3 V
$ M$ l! ~& |) Y; |
图 13.4.13 Vivado仿真波形
) t* }0 ^7 I, |6 o由上图可知,locked信号拉高之后,锁相环开始输出4个稳定的时钟。clk_100m和clk_100m_180deg周期都为10ns,即时钟频率都为100Mhz,但两个时钟相位偏移180度,所以这两个时钟刚好反相;clk_50m周期为20ns,时钟频率为50Mhz;clk_25m周期为40ns,时钟频率为25Mhz。也就是说,我们创建的锁相环从仿真结果上来看是正确的。
9 Q! o$ B) O1 v- y0 S9 B13.5 下载验证
8 ]) c  M" a  n1 ^' Y, J编译工程并生成比特流.bit文件后,此时把将下载器一端连接电脑,另一端与开发板上的JTAG下载口连接,连接电源线,并打开开发板的电源开关。
- C/ o$ G- T6 z7 g' o点击Vivado左侧“Flow Navigator”窗口最下面的“Open Hardware Manager”,如果此时Vivado软件识别到下载器,则点击“Hardware”窗口中“Progam Device”下载程序,在弹出的界面中选择“Program”下载程序。- V7 u( A" O& P, ^" h' m
程序下载完成后,接下来我们使用示波器测量开发板J3扩展口的第9、10、11、12号脚。示波器测试依次为U20(100MHz)、T20(100MHz_180)、P19(50MHz)和N18(25MHz)。如下图所示:6 R, x; R0 F' X* ?; }) D8 K( Z

, E- G3 |6 _' q5 [+ q6 ?% V a2d65ac4e4464de8b8953fbbfd3ec5f8.png
7 A8 n5 H3 o* _
* a3 c1 d6 I- E6 h图 13.5.1 示波器测量引脚
8 P4 f: ^2 p2 S: z3 l- O. z* z# }$ ?此时在示波器上就可以观察到时钟的波形图。下图为使用示波器测量扩展口第11号脚(N18)所显示的波形。  o1 M. I$ Q# t+ v

) W% h7 G: M5 J/ X e7d16941b90f4118a1fb03c2e9d614fb.png
8 }# F& o! `, U7 s5 c$ f' a* o" R5 B. V) i! w! F
图 13.5.2 扩展口N18脚(25MHz)输出的波形2 ~4 r0 ]6 P# V6 U& C. f
由上图可知,示波器测量出的时钟频率为25Mhz,跟仿真结果是一样的,其它三个扩展口输出的时钟大家可以测试一下,这里不再贴出其它扩展口的波形图。+ s4 O7 R2 P% F+ o$ T4 J: {
————————————————
' [4 E2 d' Y/ D* x0 Y7 ~( k版权声明:正点原子
6 T% {1 z) ~& s% o6 M. R2 F. v) H. v% ], P
赞 收藏 评论0 发布时间:2022-9-27 23:11

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版