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

MicroBlaze串口设计(附源工程)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
 楼主| 发表于 2023-8-24 20:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
本帖最后由 Heaven_1 于 2023-8-25 17:04 编辑 1 o1 l+ U7 J8 n2 B2 w. y+ T6 }. C9 u

" ^# K& m9 a. o  N  Q& j# X, P; _


5 `1 F0 c% F# S# r  C' j+ i& e5 n


" x4 L# e/ `: |! r


+ d# m1 W2 d! j8 `


: N$ }# X! i6 N1 X3 Z$ @2 P

本篇通过原理图设计,学习MicroBlaze基本结构,通过Tcl脚本创建简单的MicroBlaze工程,实现MicroBlaze调用UART模块,完成串口打印功能,掌握在模块化设计中,MicroBlaze最小系统的组成,学会导出、建立以及运行基于SDK的工程。获取本篇相关源工程代码,可在公众号内回复“MicroBlaze串口设计源工程”。


* ]1 q: y& m9 s" I8 n6 z9 R1 h
/ c  f" M" Q) O9 i
3 j9 t. A& k; I* e
7 Y$ a+ r, J1 w! m/ k' q8 @) l1 I' p
7 h! A4 n5 o% [/ a8 T6 }
设计原理  
" z* w; ?# T: N  _
4 ~5 q7 {. z2 N% {, s0 G# s9 ^

& Q6 ]- E- l1 j- C/ Q1 p3 R( [# C" R7 B, N9 p) |: b+ E

- g# K, x, F8 h# Y/ I1 Y1 d" a本系统中,Basys3的MicroBlaze模块调用基于AXI协议的UART IP核,通过AXI总线实现MicroBlaze-UART之间的通信,完成串口打印。
6 `0 U$ L  W" v. ]
! `1 U9 S2 G- E' f1 @* h- ]  v$ P

5 Q. E) ~1 f- N3 u. c* [
" C; s. j, B/ V; W+ s
6 U- T6 j, S- R
操作步骤6 J1 j$ w( L* u- \5 ^8 ?4 g* F0 P

$ t- @0 A0 g  ?" P2 ^) a
: W: n, l8 f# b& }$ S* [
7 V" d! {8 k* V9 _

& v2 E# z9 d' ?! Z; }7 `, V4 w

一、基于GUI界面创建工程


# F8 D3 V2 T3 H/ l* `6 p" G8 \0 Y

1. 创建新的工程项目


$ [8 N" m9 T; N' t2 Z. E

1) 双击桌面图标打开Vivado 2017.2,或者选择开始>所有程序>Xilinx Design Tools> Vivado 2017.2>Vivado 2017.2;

2) 点击‘Create Project’,或者单击File>New Project创建工程文件;

3) 将新的工程项目命名为‘lab6’,选择工程保存路径,勾选‘Create project subdirectory’,创建一个新的工程文件夹,点击Next继续;

4) 选择新建一个RTL工程,由于本工程无需创建源文件,故将Do not specify sources at this time(不指定添加源文件)勾选上。点击 Next继续;

5) 选择目标FPGA器件:xc7a35tcpg236-1或Basys3;

6) 最后在新工程总结中,检查工程创建是否有误。没有问题,则点击Finish,完成新工程的创建。


  E! e$ k4 w, C: K6 P% V  I

2. 创建原理图,添加IP,进行原理图设计。


9 |5 B& B. M! b+ l7 D+ Z& A( g2 F

1) 在Project Navigator下,展开IP INTEGRATOR,选择‘Create Block Design’创建新的原理图设计;

2) 将新的设计命名为‘MB_UART’;

; L( V1 B9 K" H6 e& m
. _$ S1 p4 I. \4 e

2 b0 y  e, U) O; U2 @  V5 I

# R4 m# m7 w* H' ?8 M" k
5 n, S  `' J9 d

3) 添加一个clock IP,在原理图(Diagram)界面中鼠标右击,选择‘Add IP’。在IP搜索框中输入‘clocking’,双击添加Clocking Wizard;


$ y# e' T2 I/ @1 D- I4 u- l! s. k
* R& R3 f5 G3 A

' |: _* l7 M  q/ r8 b
2 t0 ^: T" e$ c7 d8 K3 S) `% j

$ O8 t! U2 v; ?, P+ c2 G" L1 Z/ n

4) 双击Clocking Wizard模块进行自定义配置,选择Output Clocks一栏,确定clk_out1频率为100(MHz),Reset Type为Active High;


$ j* e8 G- |0 C) n
) @1 T9 O: ~3 Z9 i3 _& E
9 @; r. C) L6 {- _; P
8 B; I9 Y/ U$ O% I) g* j+ G
; f+ ^* _0 w$ D0 q) N. w2 b
# n! y9 c' @) K. }

& g8 Z" n- f2 [* _( `. B$ {. ~2 P$ T) W  R9 J" b6 k0 d% n

9 a* h, V  [: B/ \% g2 @

' b$ ^) P& y0 D6 q% @7 Q1 S7 X# E  m2 y6 P* P- r: Y

* l' x" a  S/ O# |4 f  k
5) 鼠标右击‘clk_in1’,选择Make External添加引脚;
' r6 k- m" R' l$ ?
, ^3 J' r# O6 q8 s- e2 m2 K
7 W2 l1 p: o) [: j: j9 a0 I/ p

8 x: J7 o1 E( M% m2 p, {$ ?/ Y. W; I5 H, `1 R, H

  j6 ?3 f9 \' W: c7 ^9 m
9 i% ^8 g- \/ x9 i
- |1 {9 w( X4 R6 Q, w  I/ t
6) 完成后,如下图所示:
0 ^5 h% O% X: F1 `) q$ T
2 B+ ~8 a3 d8 v/ g. L% Z

. c0 ?2 V6 Z0 ?- I; p6 w* [
# e$ Q2 d2 o2 w. o8 I; s* H
, {4 G4 `& A6 g9 ^+ r

6 b- A) }3 x- d
7) 同样的,在Diagram中添加MicroBlaze IP;

$ D- V) D0 c2 @9 G( _
' P# ^3 |0 \; q
3 q/ S2 I! M$ _9 ]& V6 q* q; K* t6 B. c+ \
' {; l; E* j' ^0 `) r/ m+ Y

" a9 V' s, n0 t/ J) h6 s: M8 E' }" [7 n- t: S/ g9 _
* i: k. `9 b: h& p
8) 添加完成后如下图所示,点击‘Run Block Automation’;
# W! c7 T/ t& G
0 ]& }' _) K7 _& ~
# {: Q" Q+ p, s7 W* ~9 e

# A' h4 J; U6 k* O, N' z' j
" x* P4 o7 ]1 }& }9 U/ r
- j; ~  s. N- r. M& g3 w$ ^# M# s$ h

' b7 a% e4 S+ Y( }* \. q3 B# _% c) O; Y/ z- t( t7 I4 x

& P! |: o# H9 {. g2 P$ W& a9 [5 a& D* x5 c/ W, }

9) 在弹出窗口中,使用以下设置替换默认设置;


: f! x; Z" q! Q- V

Local Memory: 128KBLocal Memory ECC: NoneCache Configuration: NoneDebug Module: Debug OnlyPeripheral AXI Port: EnabledInterrupt Controller: 不勾选Clock Connection: /clk_wiz0/clk_out1(100 MHZ)


  T7 V/ Z' u, y8 u- w4 V
! x4 V6 K8 J1 P, Q


) `3 {2 D6 W! a% V6 P8 }4 L# W& S4 O  D: \0 {3 Q' H

; i  L% Y6 _% a+ A+ \/ z0 S) G- C: _( q* O; n( l

10) 完成之后,Vivado会基于之前的设置自动生成一些额外的IP,并且会自动连接完毕,此时不要点击‘Run Connection Automation’;


  H# L( t9 G0 f: J% }7 V# o4 ?& H: o2 u! d+ g. Y
# m1 S5 M$ X: v2 n  y* z

1 ~" t  }9 y, U+ r  p) T" u' M5 i- F2 k

0 |, |+ t6 j8 S
9 d/ r! M% n& M% `5 A, c

0 ^' ?- D+ ~/ y; o/ ?+ s" i: e) ~" ]. _7 i3 Z+ o9 ~& r. @
$ f! |3 ~; l/ J# n7 \5 h/ p1 l2 z

; w: O6 h6 L8 F$ ]0 r! E2 s% \
11) 在Diagram中添加AXI Uartlite IP,在搜索框输入‘uart’,选择相应的IP;
$ {* S3 S5 y% }/ A0 S

: Y" g' }# l. l! f7 z% d' t2 d- g2 l: b2 h! w) m- [# y
8 E0 L1 T9 ~0 g
+ W& r7 B0 f+ i" [& R% c
8 {- Q/ I+ D# ^5 P
8 ~& o7 D- J: r  k$ e, l) t

8 @# @, G9 W3 x+ O# j& A% m* }
9 P0 l% f% W, O- J+ O; c* M, T0 _! K& a
12) 鼠标右击Clocking Wizard的‘reset’,选择Make External添加引脚;

" s9 w# I, m: ]8 ?9 D! q. I( l5 k7 S8 K4 ^- o, S
* W( L5 w; F  h5 _
- v9 P% |9 U" p' g0 X# M5 d) W3 J# P

" c  {0 d; W1 m: e* `/ s- `$ r* W

& Q/ i) q& O" f: ?) T, ^% q: P9 n. k* {1 L

13) 使用连线工具将Processor System Reset的‘ext_reset_in’与‘reset’相连接。

9 x" i, Z+ {4 L( ^

8 U; w: a" M7 N  k& e' K; n1 d5 @/ B2 N

1 a8 c) x2 q, l! n( c

2 L# h) r% A' a( D; V' H# K: o, j) f+ g* }0 R/ z3 e$ \: S

/ l  r! |9 o+ c2 E4 ?3 l% T
+ @) o) `$ g! N& E4 a- [; j  T. h( R( G

14) 完成后,点击‘Run Connection Automation’,在弹出窗口中勾选所有端口,点击OK继续;

5 H- S7 c0 V+ Z7 Q* t6 Y7 O
# v7 I+ W  e$ D! u% a+ v/ F
7 V" r. p' z# I  F
8 u9 R, s6 k; j$ p) ]% X
  R5 P3 L+ V# d( {
' y. m5 o& D2 X5 m

2 A. b+ y3 Y% b0 O+ A  _$ D
1 R/ v5 d$ _& E- e# O, H6 U8 Z9 t0 i0 r0 S3 r: n. E
15) 完成后,点击按钮重新布局,完成后如下图所示:
# x8 c& q; s; x
. w+ B5 D+ ^5 ?3 V& C1 a2 D

. l9 L  M  j- \" Y/ q( H- @$ I3 ?; v$ B6 H

* U3 s! c3 Y, e( ~6 l
8 ]9 ?% g) q" C0 E

3 L. H+ n  a; h6 l
0 q' \% I& s; ?  S/ \% S1 \; m$ a  b
! ~" k' q( e2 P- P/ P" Q

16) 点击按钮验证设计是否正确

17) 验证成功,设计与连线都正确,点击OK,Ctrl+S保存设计。


9 K8 t: z4 U4 x1 E' y
" P% J% [6 {' O


/ A( j9 G) `8 A
8 B5 t9 P9 i9 ]9 Q, b; Y& u  x3 s3 W2 a/ V. _, G. ^

18) 在Sources窗格中鼠标右键‘MB_UART’,选择‘Create HDL Wrapper’。

8 J* N% Q7 e4 T7 {  D6 s
- \; M" x2 J2 L) E$ l0 y

7 x4 {/ U9 L! ^5 [3 M
0 x+ z& f0 S2 m0 ^1 P
+ P5 _7 g- I9 W; X

19) 使用默认选项,点击OK继续,完成HDL文件的创建。


3 {0 q1 M! e) l6 ~; Q" V8 b2 `" D1 s8 \* z7 u


! k3 Z- {" ~: [7 J: R! ~9 L2 w% _+ z) I- Y" W. p+ V

20) 添加约束文件

a) 在Flow Navigator中,展开PROJECT MANAGER,点击‘Add Sources’。

6 N& t$ p/ `( ]8 n- k

b) 选择‘Add or create constraints’,点击Next继续。


& X0 A: A- L8 s- Z9 K7 B5 ?# u) Q2 ~0 w9 G; y2 E

) A7 Y: Q7 w# R& E* M8 A% j$ E2 k
( x* ?  j, Q4 D

c) 选择‘Add Files’,找到并添加‘MB_Uart.xdc’文件。注意,要勾选Copy constraints files into project


# B. k% D  F. [( m$ e

(文件路径:\Basys3_workshop\sources\lab6\Src\Constraint)


! k5 @( R$ }1 k' v2 g& w


: P" b* |8 g$ J5 g# O
" T7 V  N( G6 H' V- f/ Y. V3 y

3. 综合、实现、生成比特流文件


5 Y& N% D3 l0 U7 D9 o( \; |

1) 在Flow Navigator中展开PROGRAM AND DEBUG,点击Generate Bitstream。Vivado工具会提示没有已经实现的结果,点击‘Yes’,Vivado工具会依次执行综合、实现和生成比特流文件。

8 u, z1 h' I/ `1 K5 `& y0 I2 Y3 i
: r% I2 \# a" T+ K) \) W/ n


- E. U% M" s+ G2 z* v" w
6 k7 @& O& C  l; i+ k
' Q3 R5 p, X& \* D: _

二、基于Tcl脚本创建工程


$ M0 N  x- ]& t1 p$ B6 E

1. 打开Vivado 2017.2

2. 在底部Tcl命令框使用‘cd’命令,进入MB_Uart.tcl文件所在路径。参考路径:C:\Basys3_workshop\sources\lab6\Src\Tcl,在Tcl命令框输入:cd C:/Basys3_workshop/sources/lab6/Src/Tcl (注意:Vivado使用‘/’)

3. 在Tcl命令框中,输入命令:source ./ MB_Uart.tcl。输入完毕按回车,运行Tcl,等待Tcl进行创建、综合、实现,最后生成比特流文件。

4. 建立SDK应用工程


; K8 ?" c) ]5 C1 F% o" q' G# @

1)  在顶部工具栏中,选择File>Export>Export Hardware导出硬件工程到Vivado SDK;


' u' p$ C9 D8 m- a* g

) X& ?$ |$ W% Z( Y2 x

: g1 Z, g3 m: j: o

2) 在弹出窗口中勾选‘Include bitstream’,点击OK继续;


" ~: Q% g8 ?2 d* P8 Z6 A$ y& K/ d9 W: x) S+ n- y


* V" Q1 P8 p8 o. h8 a% i" i& V- d% t% ^# j

3) 在工具栏中,选择File>Launch SDK,使用默认工程,启动Vivado SDK;

: D" ]: C' N0 v

  y* _' o) a$ D$ _  S; C+ F; Y) d

" F  p; `2 E% {7 _$ l5 r6 j

4) 在SDK上方工具栏中,选择File>New>Application Project,新建一个SDK应用工程;

2 ]- y* Y5 ]9 |; G, p# y, c


  m  P4 A' p$ `0 t- \- W4 N/ Y0 E3 l1 T

5) 工程取名为‘helloworld’,点击Finish完成创建;

3 D$ }: w  @8 U, a

' L! @& {6 k6 N; c) y
/ B+ w9 I$ ?) @( K" b: E

6) 可以看到 SDK 界面左侧如下,新增加了helloworld和helloworld_bsp两项。其中helloworld_bsp为helloworld应用工程的板级支持包:

8 b2 a" n; V. I7 z4 r# y5 r

, Z# Z# h7 L& \4 s; {! m

# s. l. c! Q: y
! T' s/ F$ g* a. k2 c- K, |" f
# t9 h  u' ?' `% ~, T" R8 p* z

7) 双击helloworld下的src下的helloworld.c。这个文件为包含主函数的C语言文件,然后可以通过 CTRL+B 完成工程的 build;


" W5 u' X6 N+ q! E6 _' b% a


* I% Z% ]" T. k) r  @& K- t2 x
8 n/ O. T9 }/ x: i8 b$ q( C

8) 连接Basys3开发板,打开电源,点击SDK任务栏Xilinx Tools>Program FPGA;

7 t* g3 R2 i! `0 L/ s* k9 i+ s

( Z4 t4 r$ i1 ~1 z1 l4 _: u: ]

/ D; ]8 I3 Z) E+ x

& x) m6 H# L" e' E1 W$ G9 q! v2 t

9) 在弹出窗口中点击Program完成比特流文件的下载:


9 ]& K! ]' _  j


  I; O$ U, \" E
6 B$ M2 l8 Y! }/ b- l$ Y* Q# R1 G. k

10) 连接Basys3的串口。选择SDK界面下方的Terminal窗口,点击下图的连接按钮:


8 C2 |- V9 E  M$ v: k6 c# r
0 T+ }4 f2 N- P

) g! O7 ]& _5 q, l

% g" I+ O6 ^- S9 u( v6 M5 ~$ L7 r5 C0 e. E( a% F

11) 在弹出窗口中,将Connection Type设置为Serial,在Port一栏选择正确的串口,点击OK完成串口配置并连接;

2 [* s% a; I% p) T

" H* d( k2 p; \8 F" O

. n' O4 H) p3 b
+ t# V* G( ?( N

12) 在SDK界面左侧Project Explorer中鼠标右击helloworld,选Run As>Launch on Hardware(GDB),运行SDK软件工程;


% U# r: S6 j8 R7 z1 o" P- u9 s

$ P, H: [3 O$ s1 \0 I  I  j
9 f* f7 I/ L% `! O0 @

13) 稍等几秒,可以看到Terminal界面出现了打印的‘Hello World’字样。


3 X4 S6 d* _3 K& l  I* g2 p2 t. [; N- K+ _' d# I% K. j


* C. M5 H. N% I

该用户从未签到

2#
发表于 2023-8-25 17:05 | 只看该作者
开发板很精致,有程序包吗
  • TA的每日心情
    开心
    2025-6-26 15:09
  • 签到天数: 487 天

    [LV.9]以坛为家II

    3#
    发表于 2024-11-29 23:15 | 只看该作者
    回复学习以下
  • TA的每日心情
    开心
    2025-7-11 15:55
  • 签到天数: 35 天

    [LV.5]常住居民I

    5#
    发表于 2025-2-11 13:06 | 只看该作者
    感谢分享,学习了
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-17 16:22 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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