EDA365电子论坛网

标题: linux学习之路_基于or1200最小sopc系统搭建(三)--串口 [打印本页]

作者: mutougeda    时间: 2021-2-7 16:14
标题: linux学习之路_基于or1200最小sopc系统搭建(三)--串口
接上一篇
linux学习之路_基于or1200最小sopc系统搭建(二)--QuartuII工程及DE2平台下载
. V0 H8 s8 T) x* V8 V$ F

$ W" g7 h! w: K! n% l3 s* Q) F现再为构建的or1200最小系统添加上串口。先进行仿真,再在DE2上验证,在hyperterminal上显示hello world!
" E) B9 L! D! X5 O6 I9 P/ d" x- ~0 t  h+ r. p- z2 Y& k' w9 |
在or1200_sopc目录下新建uart16550目录,将uart16550的源码在解压到这个目录。修改or1200_sys.v文件。修改后文件如下:
* a4 N! }% Y$ N. B( K! y: P8 Z  k* E
module or1200_sys(
  M+ T1 _  U% k0 k- n+ W( b/ D% l- C, r' |, B$ g
    input clk_i,% K3 h# O5 J7 o' N; ~

9 s( ^7 C- }8 ?8 |. n: h. Z    input rst_n,8 [# ?9 Q! N: F9 w8 j( ~
: t, ?8 r. ?+ x. Z1 X' Q3 ]& ~
+ t, n& j* M- i% G1 f1 N$ p

. K4 n3 o8 Z! [- |: h2 c5 F; W    // buttons
& k* Y) x+ e& B) o$ ?
, e1 c$ b# D( K3 D. [% I    input [15:0] SW,
' _( a; S# n" b3 A9 X$ y
6 m# q* ~3 `1 A/ p7 V1 e    // uart interface
0 `2 V$ @7 w( E0 Q( N# L; X
7 w. p8 {' P6 u    input uart_rxd,* J5 W0 X' }3 j: t

/ p, z+ `  _" k- V  x    output uart_txd,8 K' f: l5 l2 w1 F$ o1 A) [2 I

2 l% l  V9 V+ R3 Q   2 s  o0 _, J% [0 G2 T) H/ n

. |: f% M/ |2 w: U9 ^2 h9 e) i    // segments! K! M  b; P( A/ C: |6 I

/ X7 b6 y9 w, A    output [31:0] LEDR, `2 m% z! d; q: S) f7 @. s! E

7 `. [+ i% c: A% ?& n6 h. Q: R);3 f4 E, d; s" K8 S2 M  u

0 ^) L5 ?. j& e7 X( Y( F# R' m % d$ Q+ `* _. j; q$ u; I; f
5 N( J' m& Y0 o0 e  D9 W6 [8 q
wire rst = ~rst_n;$ |3 `4 e+ x% p2 a
: G: a! `' N6 O+ {. a: r" M# Z5 @

5 w. V( R9 d4 b- S: m9 U- J! k
9 I* s2 T: \4 J" O' g' P: ?       // **************************************************
+ y: U3 v% T- T9 p" J3 A2 k  Z2 J: g) q- ?0 A
       // Wires from OR1200 Inst Master to Conmax m0; I- F' M9 M5 O+ I! c) g

5 P; U- P$ Q# }2 J* J6 W       // **************************************************" A' y9 v5 b7 w6 J
2 `3 Y, a/ {' ]2 f  S
       wire wire_iwb_ack_i;: j# I1 s- L6 H7 O+ T3 b
: \7 o9 V9 y, x  o* B/ p
       wire wire_iwb_cyc_o;
! n+ |# o/ z3 H$ |# n  Q# {; X8 w# j6 M
       wire wire_iwb_stb_o;
' c1 d8 k& }$ d5 n8 H& s2 ~
, y0 s8 [! `9 o) l3 K' j       wire [31:0] wire_iwb_data_i;6 q2 R/ B  Q* O! H" J5 t

! z5 |' o) K: E  c       wire [31:0] wire_iwb_data_o;5 T7 i# q" D2 S6 g) {3 ~
3 i/ s% B+ Q$ u) H- X' f& |3 G$ n* h
       wire [31:0] wire_iwb_addr_o;
3 c: `! |+ d+ I' E" R7 a( C
8 X- ?3 r7 s( [$ r& c       wire [3:0] wire_iwb_sel_o;6 ^3 c8 D, m3 ]' @% V
) l. N) u2 t! E$ c" P4 ]! K0 x
       wire wire_iwb_we_o;* P2 L% M( Y2 i( C

' I! d3 M+ S1 a0 H% o       wire wire_iwb_err_i;
4 x+ B, ^. |+ p! v' d7 R4 l1 E  ?1 C2 w& f/ ^' M
       wire wire_iwb_rty_i;
. B; ]. ^: V- J2 O4 Z9 o2 z+ T. b( M  \+ E) d
      ' x4 n# a6 W" F! V( [
2 a& E8 M2 Z$ \' n, R* l% G
       // **************************************************
  b( K  K; H9 R( a: B8 G' H" K3 G, z6 [4 V' l; [
       // Wires from OR1200 Data Master to Conmax m1
* R, s" y+ p1 X9 q
4 c: w/ F: E7 y8 Y0 v7 V       // **************************************************
, S6 x; d0 L3 p( O
2 ^/ i9 Y1 j$ D( s       wire wire_dwb_ack_i;" ~; [5 Q# j+ F) f: K7 W

  {+ k- y* |* c0 E       wire wire_dwb_cyc_o;
6 j: p5 g3 m+ [) W' u; {! t6 y3 F3 [* U* F
       wire wire_dwb_stb_o;
! u2 j! z5 w# e! e- P7 e  u  ], e3 F3 B
       wire [31:0] wire_dwb_data_i;
& N! S' y& G/ V; z% X! i8 [5 S4 Z6 d% W: w1 r* m" u
       wire [31:0] wire_dwb_data_o;
8 ~6 Y) c: I  T$ y' B, a
2 \1 _6 V) G- c# I       wire [31:0] wire_dwb_addr_o;- y" M. o. `: t2 X
* z8 S' C, F7 K& E
       wire [3:0] wire_dwb_sel_o;! {7 D" x$ _6 W( ], n

3 N+ K2 S) V( B( o) y       wire wire_dwb_we_o;
( k% v3 l4 r& O4 ^& u
, B3 U& I" n! _% X       wire wire_dwb_err_i;
/ }$ W7 v$ @9 m* k4 T5 D$ B3 b* d6 U* s: ~+ H$ w. K6 S( ~
       wire wire_dwb_rty_i;
' b8 a- p; X! K/ V$ p( X; Y) P/ S8 T! [1 G
      ' k* j( Z6 o7 f! m2 I
) i- i, ^) j1 R( \7 V" c9 x
       // **************************************************# z3 R  u2 K. F7 v0 V

8 n- `( }: M0 n- a$ r+ y7 P       // Wires from Conmax s0 to onchip_ram0
& A) a6 I$ `0 _, O7 c* p7 \& K
" Y# `) X- ^) f- H  |       // **************************************************
# M; e: c  U& y0 y5 x! K
/ p+ L- k1 O9 s5 h       wire wire_ram0_ack_o;
- ~& C2 U9 [' j0 [# ]  ~9 E$ M% E9 K+ U3 v
       wire wire_ram0_cyc_i;
7 \6 v# T5 s4 z- R8 {3 W% E% Z$ D& D( L7 n+ h0 M; u; p
       wire wire_ram0_stb_i;0 N5 ~; G" e! k( C

8 D7 M7 d8 f4 u; Z       wire [31:0] wire_ram0_data_i;/ q9 ~3 s6 e1 y' N  o

" a$ L3 P$ F6 O9 v: m       wire [31:0] wire_ram0_data_o;
" ]: g0 x: ~$ Z9 M- a  t- j- C( O0 `, g2 F7 T0 g3 \- Y2 d
       wire [31:0] wire_ram0_addr_i;
  r8 b4 j# j' d( [1 _3 X
9 A5 p2 Y2 x* T       wire [3:0] wire_ram0_sel_i;
; {6 }* m& m& G1 j* g
& z8 A9 g: }/ Y' L  \; F& ]       wire wire_ram0_we_i;/ M( r, B8 _: D  U5 b
! g; [2 A, K* P5 V& |
% |( ^3 [  f7 Y8 v% O: i# B  o
: }: \% e9 `4 O  [+ a* h7 H9 Z
       // **************************************************
( L( ^9 u9 c/ Z1 ?* M) C1 _2 j! L, p2 ?
       // Wires from Conmax s1 to GPIO# E; [4 B0 U3 |, r+ p7 e8 q
8 l, E: Q& G' @  m8 O2 B% h7 L9 f' z
       // **************************************************
* h& H8 F; Y- O' V' G( `2 @+ b& S. v9 M/ F( U" E
       wire wire_gpio_ack_o;
0 Q! {5 q, i* M  W* s4 l3 M! x9 B4 D) V; f
       wire wire_gpio_cyc_i;
+ _' C$ L( `, B+ f/ p7 N. A' D( U+ A
       wire wire_gpio_stb_i;* f8 z' _9 B: o) ]

# O" I) z) y, H       wire [31:0] wire_gpio_data_i;" B- h. Z+ K/ |5 E+ u2 D' s

% X3 `" _4 j" [8 ~/ b- F       wire [31:0] wire_gpio_data_o;: S" i% p" u0 c4 }: {: x7 ?

/ I+ u4 d0 ^( H( j5 N8 D       wire [31:0] wire_gpio_addr_i;
% G! }; [# W- c# s7 d1 z3 h4 N( n' G
# C" `7 s* |( I. c1 w: s% \' O* C       wire [3:0] wire_gpio_sel_i;
* e8 N# @/ H# [+ b; P7 O* N! C/ i  Z! E, }3 I$ R
       wire wire_gpio_we_i;
' Y# _* b( l# V; v7 H* s8 {( V% Q" o5 D, ?. H0 J) R
       wire wire_gpio_err_o;2 C+ k5 K0 N: W$ `3 j

/ s( q& e8 {" A1 d# U       wire wire_gpio_interrupt;
0 n) u  h5 g7 a3 V+ H" r$ \- H8 E8 g. U2 T$ r" D
      
+ Q  h& u) g- j- Q8 [- N2 @7 Z9 G- ]8 |; ?- G
  // **************************************************$ Z; @/ L/ G4 t! j3 m0 a8 h

" S' x$ O( b4 G8 h  m       // Wires from Conmax s2 to uart16550. o. v. Q2 b5 E9 r. _

6 p! K# ^- x0 A. D* Q0 Q% _       // **************************************************$ h: S- o/ R0 W1 Q

. p% i4 N4 N8 J1 A$ g) D       wire wire_uart_ack_o;' a4 z8 v5 Z7 d) s/ l

$ X) u' f7 |' [0 X" h+ ?       wire wire_uart_cyc_i;" S" W. `( Y6 `" [& {' \/ z
) E; B* y# `+ `3 U. X" R/ D
       wire wire_uart_stb_i;
4 m9 j/ \, k$ O" h, A9 R9 U% [' a( y7 Y, s
+ O$ t5 X3 y( X       wire [31:0] wire_uart_data_i;
. w" m! X* [1 _
, V1 X& G0 j7 V$ O, d       wire [31:0] wire_uart_data_o;, t" i6 K2 [/ q( F9 K* S  l0 X' |- c
' d3 K. A$ d; x0 j% \
       wire [31:0] wire_uart_addr_i;
7 W: q! V! P5 I  M8 a! v% u( h8 m  o+ z
       wire [3:0] wire_uart_sel_i;
7 M+ Y8 z2 c( G; C+ K
8 z5 V2 V: G3 R' j       wire wire_uart_we_i;9 A; U1 m& O! f; F; g

/ ?& d$ Z1 Q3 q( L4 J* \7 V       wire wire_uart_interrupt;8 `; ?6 o* N0 c- s3 E; Q
) A7 M( F4 v' g# S& S) _& j

0 D/ o$ X- y8 g) g
' I0 E( i# e4 I* S- bor1200_top u_or1200(
" o, `2 G# F+ T" g2 @
$ K+ n+ f3 _  i% T+ O& P/ G* u, f  // System$ U- d5 `- K/ O4 U) L" ^

- R; M6 ~( j9 E. w  .clk_i(clk_i),
; y; l# P9 _7 z+ ]0 Z$ ?* _5 @! J/ p' `3 b' M' n. _0 H
  .rst_i(rst),
. g, x+ c9 X( Q: `% J. T- x, i4 }
  .pic_ints_i({18'b0,wire_uart_interrupt,wire_gpio_interrupt}),! ?# e6 P8 ]0 q0 R. J7 U1 ~6 v, n
/ G7 v( F9 x7 z! e1 e" ^" \
  .clmode_i(2'b00),
/ d( S. Y/ r7 J+ b7 h; _; ]7 X# S0 D3 c, p( _

; `( F  R6 J. a" p, J& a1 B* P+ z  H0 Z' y6 g; {; I
  // Instruction WISHBONE INTERFACE
+ M, X4 O) ^# x1 T1 G) {9 v* K+ ~7 l  t, w& c5 `, V/ j
  .iwb_clk_i(clk_i),/ i: B9 Q9 _$ `3 H9 p
& p% T, k1 e# \+ f. |# M3 R
  .iwb_rst_i(rst),8 R7 i) ^8 Z* ]% h/ r# |

1 t  {$ Q# s# m  .iwb_ack_i(wire_iwb_ack_i),
2 o6 c% r$ T3 @$ }/ |
$ \7 M. C' F: i/ X% q$ T+ k" T  .iwb_err_i(wire_iwb_err_i),! a% P- H" A9 N
% _: f$ V1 ?% o4 f4 N
  .iwb_rty_i(wire_iwb_rty_i),
/ O% B  h2 {) r; _! _! g- |2 W
5 d1 Z' v- j6 F  .iwb_dat_i(wire_iwb_data_i),
! Q, \  u$ H: Z2 U$ p+ C" w/ c# e  _1 d# T+ S$ _) E
  .iwb_cyc_o(wire_iwb_cyc_o),9 ]- v& F4 z* l4 \3 y
+ L9 m& M* j3 E) K: @
  .iwb_adr_o(wire_iwb_addr_o),' b% p+ {+ O1 d4 n
& s, w# j( J  W7 A( K
  .iwb_stb_o(wire_iwb_stb_o),
7 u/ K) }$ `2 v, v. d- P( E5 M$ n  y1 D/ \7 [
  .iwb_we_o(wire_iwb_we_o),% s- G' l: c  C/ ]9 b
' x2 @( k) U# i3 p
  .iwb_sel_o(wire_iwb_sel_o),/ f( r5 @5 E1 s$ {6 p
3 |3 G* c3 g) d: E7 Z; c3 Q
  .iwb_dat_o(wire_iwb_data_o),
0 o: ~# h( V* k/ X1 F* Z1 K6 r: G  u  ~" t% b; i6 w
`ifdef OR1200_WB_CAB$ ~4 _7 |" |4 \% l  x. o) \

2 n2 ?. e; D% a# U6 \  .iwb_cab_o(),
- Z" X) j0 U" t0 j. A4 \5 ^& Z3 F4 Z# S5 o
`endif- D& D! F4 f8 Y# R4 e  k

2 i; h9 g2 _7 ]+ v% R- ]5 B( o& I//`ifdef OR1200_WB_B36 v) D- v% b8 l* y6 _8 }& U% Q

5 q8 ^; F' J# t1 p+ {//  iwb_cti_o(),3 E. e4 ]: N7 h4 D+ T7 i

6 a+ i; l" G! g7 Y' l# G- S//  iwb_bte_o(),
/ y1 m/ x) B9 d4 P* q+ E
3 A/ K- ]! {/ |% L  B) b; \//`endif
$ y# o7 A7 ]/ O$ f
3 R+ z! J1 P/ p, g+ z2 K  // Data WISHBONE INTERFACE, E, [( l7 C2 s1 f+ e% Q# N! a
" N1 V0 N, f5 x5 P4 C: R! Z
  .dwb_clk_i(clk_i),- x- `+ F3 Z8 d1 h8 ^, u% [6 I5 q8 q$ [
, P+ j3 x, U( v4 {- I
  .dwb_rst_i(rst),
  w' a+ I+ x; S6 g! E# S1 C& ]3 @6 H+ s* W: `
  .dwb_ack_i(wire_dwb_ack_i),
2 g& l, z* }% T1 v& ]/ H3 s0 A5 v- h0 n8 q6 g: q: M) j. E
  .dwb_err_i(wire_dwb_err_i),
( e: K7 T. G/ \( A
! k5 Z7 D5 w; z  .dwb_rty_i(wire_dwb_rty_i),* e& k9 E5 m, t

  L( B. D1 J7 `5 g. |# y0 q  .dwb_dat_i(wire_dwb_data_i),
! o, ^# U( x% v& ^) c, E" f+ D% l3 L- [! L; I( {. @
  .dwb_cyc_o(wire_dwb_cyc_o),& q% F4 u: L7 ?& p: \" E
5 Y" J9 _! ^; A4 T' w, I1 V4 B
  .dwb_adr_o(wire_dwb_addr_o),4 Z! P, j* ?* H* h# z2 H
5 J5 z9 x8 P8 J4 p
  .dwb_stb_o(wire_dwb_stb_o),
/ y% S9 Z# H- v+ E9 b4 ~' o4 {) B6 Y. s+ }( ^) Q* w; u
  .dwb_we_o(wire_dwb_we_o),5 {- V3 t# F3 n' a5 v
, F" U9 C0 L' g- ]7 z
  .dwb_sel_o(wire_dwb_sel_o),
6 N7 A& ^% v$ u. G/ ]& ?7 l- k. ~- w$ e
  .dwb_dat_o(wire_dwb_data_o),
1 V1 c( w& r. P0 g  `1 i0 R/ w4 q( n. g( E4 ^1 I* o
`ifdef OR1200_WB_CAB
/ K) j0 R0 T4 _& L7 p8 V5 k# `0 `- |8 E$ z
  .dwb_cab_o(),
4 a$ R; F+ x4 q6 ~3 `$ f0 L9 U4 ?: D* l
`endif% A; s* A. R6 Q2 m! Y& _8 r8 W& J
& `4 C2 \6 H* o6 ]
//`ifdef OR1200_WB_B3
; J& l7 D( R2 B- s$ f' `1 ]# o. K3 U' N4 f' @' V+ F& f- B
//  dwb_cti_o(),# i( b, Z# ~0 P$ I8 N# ]
* c4 _3 `4 w" x3 C+ U9 b7 U
//  dwb_bte_o(),
9 H; D' B0 P2 r9 Y
. P$ Y8 j5 m' a/ R% d2 D//`endif
4 l+ {5 k( ?/ s0 O$ C7 e
2 D4 ~$ a0 O# x
+ j% W5 E9 Y. u$ E$ F# ~6 r0 b& e7 Y  G2 E
  // External Debug Interface* G: i" r! \7 G& H4 S% l  k2 R9 ?

* s" J0 ~. C2 d/ G  .dbg_stall_i(1'b0),
. m1 s$ o( ]$ E( g- Z  E' n4 k) O  ]6 t$ i8 A, l) k! \% h% R$ {
  .dbg_ewt_i(1'b0),
% i/ C$ k" M* ^4 H3 j1 c; m5 L
. r  W) B" ~" E" Z; W  l5 T8 S% b, D  .dbg_lss_o(),
8 G  V: @4 i. ^- X" e. `& y, s/ O7 u: S5 k
  .dbg_is_o(),
2 k+ w& S8 H& |. A
# b8 e% l; R8 L5 j! j  .dbg_wp_o(),, j, g( B0 {! z/ L+ s) [, R2 m; R( A
. G  ]" `, K4 @$ w4 m% a) @
  .dbg_bp_o(),
% Q2 N& N" G) j4 ~# V: _9 m. N4 Q  N1 l! |  M
  .dbg_stb_i(1'b0),
% _" M2 E" w; a; U" h' W2 E% v8 z, c! w3 I. p+ T* C2 K' _. w
  .dbg_we_i(1'b0),
; T% v  x% @, i. a, H; r+ |# X& y( t
  .dbg_adr_i(0),
  X  m+ ]* h' N/ ^( x2 L# u( {
' T5 q  f8 a) Q( s" h  G" @, h* B  .dbg_dat_i(0),/ M/ t7 q& J$ D) o  _6 E* o2 I$ {- ^

! E& M. u8 n5 f1 x7 w  .dbg_dat_o(),
% W' W& U) w( A/ ?
  B# `5 f" B2 j0 f  .dbg_ack_o(),' W5 R- g# A: ^" D' i
8 N7 U/ U6 t4 f. r
$ d/ ~* i: {, z( \5 ?4 q# [6 i

3 \% Y0 L) B( W: |//`ifdef OR1200_BIST, l% \7 s7 J) }5 c. H5 [

2 Z# t- A8 E% {: w! u* N//  // RAM BIST& A: Q. a% g  G  q5 M
9 Q- Q* r/ O2 \1 x6 z( `6 o
//  mbist_si_i(),
. E: `* F0 Q, c( e+ U* s' P, e8 f% V9 Z, c# F5 w6 U9 m* {8 O* _
//  mbist_so_o(),/ P4 ^' c9 V/ K8 S4 k3 W. K
! Y  O) J5 K2 ^7 ]! g
//  mbist_ctrl_i(),- v6 E" |5 N% i- {5 M" _9 i7 E

- ^" e& U" c  d7 G  ~6 T//`endif$ [, {0 t& Q% A* X* j
. t- q7 [- R, d# P: z
  // Power Management
3 J6 b0 ^" P6 d6 O) K5 o
; w$ e/ v% P* m  .pm_cpustall_i(0),
, |& @; k* l' s5 D7 Q8 o
7 _2 O5 y9 ]7 ?' U2 p2 ^) x  .pm_clksd_o(),% f* t( ]  |6 Z, q5 |2 u- n

8 R, Q9 ^5 J* J! ?* e  .pm_dc_gate_o(),
, l+ b. Y; d$ Z1 X: [1 M: X) _3 W0 C" J2 o
  .pm_ic_gate_o(),
9 ?. B  S9 u/ K: [) ^! }* V
1 M- h7 v% i3 [( r6 `3 {6 {7 {  .pm_dmmu_gate_o(),$ a* s7 {" a; v8 ?% h) X$ P

* A* r* u; k3 t/ \* n7 M$ L  .pm_immu_gate_o(),3 H) Q  I$ I, _! a# g
7 t4 C+ n' S& i6 G/ C2 ~
  .pm_tt_gate_o(),
; i1 x8 I) F3 C$ @/ s# ^! ~! W! N: K0 B: B( L7 E; W/ n5 s
  .pm_cpu_gate_o(),
8 Q- [. Q; c3 X! _- Y0 s5 v5 p+ Y. R" ^. g+ m9 X0 m- X
  .pm_wakeup_o(),+ m# ~+ U: R* V( d
$ j' r( z* u6 Z
  .pm_lvolt_o()
' ^3 {7 a, b: V; r* l( q
% G- Z, S8 G; T);+ w4 C$ i) F8 R9 h

. b* `# [) w6 }
7 f  C, P& ~5 @0 L) x5 U/ I. s# c- V5 f, V
wb_conmax_top u_wb(" X* l* p$ @% S# |/ x7 `/ E: F
& V+ U6 K5 K5 X
  .clk_i(clk_i),
8 R& O" `0 s8 \( z: g% `! w8 [! z! w& r2 e- ^* w$ ?
  .rst_i(rst),! h3 e% ~# x2 G) d+ L5 m- Y5 H

4 S: Z' g; o1 c, i4 o, Z
7 m- I: |" t9 |6 ?
' g1 ^& f6 |9 q5 P  // Master 0 Interface
) `+ Q! h, {; Q0 `5 V2 I& _7 y. n0 h. O9 j" l! g, v
  .m0_data_i(wire_iwb_data_o),
! G; Z8 ]9 @" P& }  e0 l% c  s" `
5 t5 \4 H' F+ D% W$ n9 R& ~  .m0_data_o(wire_iwb_data_i),
' ?' t2 b4 M9 p8 C9 C% O  v2 V2 O: Y) s
  .m0_addr_i(wire_iwb_addr_o),; [9 V7 S1 S# ~' @
9 ]9 P+ z- d8 w
  .m0_sel_i(wire_iwb_sel_o),9 f6 F/ V- }7 U+ q* q- `: h9 f. v
3 r/ K  ?6 X8 Z/ o
  .m0_we_i(wire_iwb_we_o),
, X2 O; n% [) ?2 A
$ `' w# h& i8 a* b+ w9 d, b  .m0_cyc_i(wire_iwb_cyc_o),
4 H  h& v  k6 S; x% W0 M
+ P! u, S" y- q: S2 }  T. g3 V  .m0_stb_i(wire_iwb_stb_o),
! j' v8 }+ A: k- S+ {9 w3 X, e0 o( o# e" `% ^+ i+ f
  .m0_ack_o(wire_iwb_ack_i),
# b+ c# Z  x+ }1 o0 K9 {, o' X8 o, G* B
  .m0_err_o(wire_iwb_err_i),, G* v" E: ~" q" K

" A7 Q* W& y% N  N0 X  .m0_rty_o(wire_iwb_rty_i),. y. G" B+ R) W/ }0 Y; T* ~

3 t0 j3 I8 U# q: ?9 M& w9 j; q$ A//  .m0_cab_i(),
  r% D  c! K6 ?( S0 q  P9 R& ]' U' a# {$ p, }% {

0 G; ]6 d' ]+ o4 |4 Y' _
6 b$ y' K2 ~1 \: j8 n+ P  // Master 1 Interface# i. S* B: i; o) V( H. I# r/ C

2 g) J3 g2 K% e$ Q5 `) h6 e# n  .m1_data_i(wire_dwb_data_o),% d/ c2 N3 M* |; K

/ u) K. Z4 v3 C/ v' F. P. t- l  .m1_data_o(wire_dwb_data_i),
1 A9 G3 h, i; z- R, ?( r! E. L( p* P. V1 r: l* |# e/ J
  .m1_addr_i(wire_dwb_addr_o),4 F# O/ \1 w* D4 l7 C
9 b# U6 q8 z+ @7 h( a, D5 c0 L/ b7 p
  .m1_sel_i(wire_dwb_sel_o),. I2 e7 `1 k$ J7 p9 ~
: c8 F; y4 q6 y# i" E
  .m1_we_i(wire_dwb_we_o),3 s3 O6 d) M$ ]6 ^: D
# n1 Q* L7 E& _! t- G# o
  .m1_cyc_i(wire_dwb_cyc_o),
6 ^$ A0 [/ s! C
5 u) r2 A( z3 P9 _/ p, T  H7 q  .m1_stb_i(wire_dwb_stb_o),& r  J7 B4 Z7 t) H4 f
' q& f3 K0 L% B. y! E
  .m1_ack_o(wire_dwb_ack_i),
: ^' c5 |4 X% P1 H0 q. [- Z3 j3 |8 @) d0 n; w
  .m1_err_o(wire_dwb_err_i),* C# g  k: F; }7 R* A; G* ^) X1 }

% k8 o1 {' S9 P5 K5 K! c  .m1_rty_o(wire_dwb_rty_i),7 \+ B: J! C! [! _, ^' ~

0 _# b; R6 o( n//  .m0_cab_i(),
/ H9 w& Z  C5 P" J" n# S- {3 q% _- w. m# w% B  {, D

' B8 i, f3 Q" ~+ u2 w; S, ]
7 E5 @+ l0 @) U  // Slave 0 Interface- S6 Z! n# x9 B

* k8 W$ G. W  P" ~# G8 G  .s0_data_i(wire_ram0_data_o),. u' q6 M1 U- m/ o# N2 A
+ U6 v" H7 ?- \  B( N- _+ y* M! K
  .s0_data_o(wire_ram0_data_i),$ R# O$ `$ e* d( p0 ]* L
9 k/ e% C+ K: s% \
  .s0_addr_o(wire_ram0_addr_i),
# X4 I3 n/ M* v; c% Q% E) ^% Q" \7 ]- \
  .s0_sel_o(wire_ram0_sel_i),
8 V9 }% ^& ~1 t4 g0 \( B/ e; S+ p8 d" V
  .s0_we_o(wire_ram0_we_i),
+ V1 V# W% v! O3 w  S- l6 l+ u: _6 ^6 L9 n4 p7 D) x
  .s0_cyc_o(wire_ram0_cyc_i),+ x& f7 G  A7 t1 i6 R+ x' {9 s

& F; Z, _, A% W/ B0 w" |/ b+ u  .s0_stb_o(wire_ram0_stb_i),- ~2 V* w/ x8 V, @  e
; V1 T$ E3 F/ h& N* o% L( ]
  .s0_ack_i(wire_ram0_ack_o),
6 e! l' \  [, P$ W+ S$ Q/ D5 y% w/ o- C: b1 ?4 K
  .s0_err_i(0),# v% `+ ~! D: ]: ~3 n* B) L
9 K: W% a2 B$ u: s, v! u( [" K9 i- @
  .s0_rty_i(0),
, Q& ~, |# ?6 L' D3 T: g9 m9 Y2 o
& J" v' M8 C# d  //.s0_cab_o(),
8 C3 a+ t+ u' n" k2 a- I  J9 N# G9 b% ]2 Z3 H5 M

  o3 W0 Y( X2 h/ W% @8 }) `( T! Z$ _  ?- h5 o& n
  // Slave 1 Interface, I2 C9 t9 N% O+ l- E8 B

1 `1 v: L2 |% \$ H( K: n$ ?  .s1_data_i(wire_gpio_data_o),. h2 d5 d: v8 n/ R8 W# ^9 [

& O' a& J: e! l8 Z/ C  .s1_data_o(wire_gpio_data_i),, `- Q" o. G4 K' e) H1 j" O

1 d/ p% d. T0 f* k( R' Z& J) G, u  .s1_addr_o(wire_gpio_addr_i),& _* v7 c( P' `/ d
8 |; ^, v/ b3 `: F/ \6 a, {
  .s1_sel_o(wire_gpio_sel_i),
8 t7 _" ]/ ]2 h; C! }; {4 C4 w8 o5 R5 n6 L) {
  .s1_we_o(wire_gpio_we_i),
, S! A5 D! e& p3 V' t0 A( U6 O! z1 R0 T) ?% f0 r4 E3 o( e# v
  .s1_cyc_o(wire_gpio_cyc_i),% d4 `3 |7 P6 d4 ^. g
; R% n$ W! C. Y" I
  .s1_stb_o(wire_gpio_stb_i),
5 X8 E& E/ q) j4 g% z; @
3 H; R$ C* P1 ^8 M* S  .s1_ack_i(wire_gpio_ack_o),
! Z. v; z' N) K2 O# h2 W) s8 J: N' T$ X# ~1 y2 _& c
  .s1_err_i(wire_gpio_err_o),
; D- M3 \& f8 n/ ^9 T; D6 Z6 A
, ?7 }; _4 p( @0 G* f) [  .s1_rty_i(0),
1 i$ T6 [$ Y8 f; C1 h
5 x2 A& n9 I! H  @  //.s1_cab_o(),
- ^  ]6 R7 a2 ]4 Y8 s0 V+ L0 j# V; S( a$ O) o

% h4 ~8 E/ R& o6 m+ y( R* J- m
0 K; l6 \! P8 x8 L  // Slave 2 Interface
2 r4 I# r7 X0 }- n# W3 Q- Y0 F; x7 k3 {
  .s2_data_i(wire_uart_data_o),! m+ P8 m" _- T: \' X/ ?

$ @5 W; l5 v4 @3 o: q  .s2_data_o(wire_uart_data_i),
) @  k* g& |7 Q- T4 T  @6 x9 o/ ~- N$ M  n3 H# J; h3 A- N% Q( |+ d
  .s2_addr_o(wire_uart_addr_i),
& m% M' Q7 Y; Y; k- u, r
0 E9 @3 ?! f1 F0 {8 ?  .s2_sel_o(wire_uart_sel_i),0 j7 W) Z; @9 S7 s1 B

) p3 M( q# M4 z/ h6 o  .s2_we_o(wire_uart_we_i),! q" z: F) q3 h  O2 b
/ Q9 |" i% v( T3 X6 i- Z' E( ?$ u
  .s2_cyc_o(wire_uart_cyc_i),8 d* _" b$ N2 r* p. M1 @

7 \5 E: m7 J$ c+ k# ~/ G  .s2_stb_o(wire_uart_stb_i),5 k' K- V; W2 O9 k; {+ D, m
+ y! G9 [' c) S  j/ A
  .s2_ack_i(wire_uart_ack_o),
7 s% }- d# W1 l( j+ ?" g. D* [( P" q2 j, A) G% i7 o
  .s2_err_i(0),
4 A; X& k$ M- y
  u" q" G: f$ G; V6 u  .s2_rty_i(0)//,6 ]. U* Q" ?( G6 R5 K
  s; F% b& }) N( Q' ~* U
  //.s0_cab_o()," E$ u, J4 V0 ?+ G/ n
2 V: m4 S3 q. j3 A3 @4 H7 `. L
  );8 h3 o7 j7 C: a+ h. C  d$ d

9 C/ o% Z/ X7 y3 }0 R2 k/ r  P6 G6 Y $ v* Q9 `- H* `4 u% ]

! @  _5 F4 H; O: b, j, o4 p) wram0_top u_ram0(
0 B) D6 {* ], }, u0 h5 U$ |/ r9 w& O% d( [
    .clk_i(clk_i),/ s& `6 }3 Q7 {9 z2 w+ ~+ ]1 \3 k

  f) v, d  q6 H2 @: L% O: F    .rst_i(rst),3 C& ?/ }; G9 Q" g- e" |$ g$ e
) Y2 ?1 s& f& o- w( Z
   
& ~4 Q- i% K. W, b$ ~, d
) z7 M5 n/ k3 {4 Q1 n1 W# I/ r    .wb_stb_i(wire_ram0_stb_i),/ q$ M- Y4 n5 `6 w
* @7 q" O: K0 Y4 Z
    .wb_cyc_i(wire_ram0_cyc_i),
" O7 v/ i& F5 S) q% J6 t0 E. W1 a3 r( ~) w
    .wb_ack_o(wire_ram0_ack_o),
  j  ?. x9 y, r' ^% r+ E
6 T, h# a* r& r: X5 z1 Q) M6 j    .wb_addr_i(wire_ram0_addr_i),
6 O* a9 t* n& `
% _" G' G' k/ [+ W" a9 ]9 u    .wb_sel_i(wire_ram0_sel_i),
% X) D5 K8 A1 e. Q$ c. I2 d3 J! _" r" g9 w# S: e- A
    .wb_we_i(wire_ram0_we_i),
1 @) e! P# o7 A7 i( p4 e  O
: ^2 Z1 f6 f: N' K: d1 o    .wb_data_i(wire_ram0_data_i),, s. n2 J$ p: x& d7 a

' s. t* M& L% Z/ \( U0 T( }1 [    .wb_data_o(wire_ram0_data_o)
3 t) Z/ Y$ r4 j3 q
$ V' `# u+ P$ U, s4 m$ w6 j8 j  );+ _; Y- p3 i3 g+ N2 u

9 N9 f( q7 b7 T
$ Q, X# e  r1 j' a% n" C( j# I. A- H+ X# {% D) e
gpio_top u_gpio(# a/ \* \* r2 z: r3 j
/ E, i( L& ^& c8 a
       // WISHBONE Interface& {8 w1 V6 [$ W2 V
! D) o3 q/ E6 A4 r/ r
       .wb_clk_i(clk_i),7 _: l' M! s) U' N4 _

/ E# D! e6 t: _  d4 ^       .wb_rst_i(rst),/ s( W* r+ }- O$ q8 \

! ?! g! R6 b# ?: `" t4 Y# n       .wb_cyc_i(wire_gpio_cyc_i),
+ T8 ?% h3 T  P1 y* m1 h/ C& c2 v6 k, a# g: o- c: w% [" c( o. i& P- D6 y
       .wb_adr_i(wire_gpio_addr_i),; s1 q# A  W8 z& B+ b' t( y

7 e" }% F- c5 Q  K$ f' E0 Q       .wb_dat_i(wire_gpio_data_i),2 F1 g# z: n& r( e

1 ~. o- A4 i, q: a7 u/ v       .wb_sel_i(wire_gpio_sel_i),, h4 _1 I: S) j! x1 ^
% }: \3 Q. E: D& H3 u7 p; m
       .wb_we_i(wire_gpio_we_i),
6 v8 M+ ~5 L9 {4 S- I6 B/ u0 b$ X
% Z0 @; ^+ X$ `) m       .wb_stb_i(wire_gpio_stb_i),
& E0 r" D+ v1 m
* i4 ^$ z+ W3 v% B; E7 d" }  A1 E       .wb_dat_o(wire_gpio_data_o),3 K. w6 B" F3 b" z1 j

: C2 \. L+ j) e! B       .wb_ack_o(wire_gpio_ack_o),
0 A- o9 w3 F8 U* e0 R* m% f! c+ H+ p4 V
       .wb_err_o(wire_gpio_err_o),6 D1 u5 d' I# f# u- R  k( Q

) _0 Y# X& Y( Q4 @2 T$ W       .wb_inta_o(wire_gpio_interrupt),! z; Q9 P/ H9 g! [! p4 s$ q3 T
# w/ S, Q8 g( s3 ?% y0 ]9 v9 K

# ^- P9 ^7 R- ~3 L" A  {) i& E9 c( v4 f  y! Q: |% l
//`ifdef GPIO_AUX_IMPLEMENT
  E5 Q) ?2 n! w) x: X4 L  X& z! ?- C1 U8 M
//     // Auxiliary inputs interface
5 {4 O! s, p' S. V# \( y. h! ?
//     .aux_i(),
# _1 s& h8 p" I' \$ u6 j- f% r, z' K$ a* @7 v  d  e; A
//`endif //  GPIO_AUX_IMPLEMENT
" c9 _- x9 {* @5 j4 ]: u( W& Y# V, n1 r1 u! D- o6 T

* y: B/ A5 @  m' b1 v% S' ^2 F, F; n4 a8 [: W4 H
       // External GPIO Interface
/ n8 {. v* U& J1 Q6 ^/ E/ H- s) X+ a( S' Z3 l
       .ext_pad_i({16'b0,SW}),/ l, V8 W( \4 a; y
% H4 C1 L5 f5 W
       .ext_pad_o(LEDR),
. E+ w$ ?  m! E. M$ H4 X1 f/ N1 K* o8 D( I
       .ext_padoe_o()//,0 d! |' s7 b! x+ s+ O

; m% A) U) p. A2 l& r- H1 C- W" q//`ifdef GPIO_CLKPAD/ K" |; m/ i# a9 j3 ?

" S# h3 ~, e# |5 C- p' y//  .clk_pad_i()
- U& m  \; D* H  d1 {# v# i, i1 t- s$ e8 ]
//`endif
& Z( G, O0 G: S8 X
3 f2 b) `8 S6 k- _+ p- S% A6 a);# z$ t( o! i& H0 Y

" v/ \& u1 W. O# v  m
' d$ x# S8 K* _* N, J. H
5 y; p2 n1 y* H% auart_top u_uart(. v  Q( w0 }$ l5 K& b

: [0 L, O# ~7 G3 Y6 S  .wb_clk_i(clk_i),
! H( q( e( S- K4 m& E9 a% v1 I, x* _% t6 z1 K$ ~! U

- g- k) t) G# W& G& N$ I3 v9 R- P: l. C) \6 x
  // Wishbone signals+ m8 j7 m' R7 v( I3 v( _
' c+ E+ U' W4 I" X- z; J) i8 }
  .wb_rst_i(rst),0 ]9 I% u) f5 f+ a& }
; r6 s3 j) E5 G% i% K4 K( R9 f
  .wb_adr_i(wire_uart_addr_i[4:0]),* I4 o. ?! n1 e$ b* S

! L" q0 Q: Z, D/ q+ x" b/ Y/ S9 C  .wb_dat_i(wire_uart_data_i),/ d" u  ^  \* r) o$ H6 x! t
+ R1 P9 v% x/ }/ [. _' s& P
  .wb_dat_o(wire_uart_data_o),
' t% X* I4 F6 h  Q
" @+ ~0 b* r$ k) n  .wb_we_i(wire_uart_we_i),
  c* F) F6 }' r7 y. Q% d) k" k9 S
* v% o. t; ?5 G+ O  .wb_stb_i(wire_uart_stb_i),, Q, R" l# X2 u0 Z

& R% E, ?6 i- r! T  .wb_cyc_i(wire_uart_cyc_i),
4 r- i% e5 j& i8 J: w: b9 u8 f! N; [
  .wb_ack_o(wire_uart_ack_o),
* T# S1 p& g4 J& {) t- L6 p7 v2 r+ S
  .wb_sel_i(wire_uart_sel_i),: O% V7 j& ~( I) y. D
( w0 C" f. }. V9 Y1 w* _( ~0 y9 k
  .int_o(wire_uart_interrupt), // interrupt request6 I2 }; v. q% \9 P/ ]( d& |- f- {
5 f# ^1 j, p  M) g' q6 A4 F: G
7 V7 T. {0 T' |" n) ?
) g" q( ?& l  t; O
  // UART  signals
) J( C; R) ?9 {5 ]& h, g! v
, s4 d* @5 e/ b( F6 N; L/ F  // serial input/output
; F& N" o8 g4 w4 k8 k; \0 y; T% E0 W+ j/ m8 W5 n
  .stx_pad_o(uart_txd),
+ ]6 m. t# C4 U1 E* Q1 P$ g, V
+ M; j' b4 ^8 _1 B. g% `  .srx_pad_i(uart_rxd),
6 M, ]# L! K6 N) h0 a# H! |+ _9 V. N/ V+ q% E& l2 w, @& e
) H6 v. p$ x' I0 x  ?

  [5 J  t( n7 G- M) S( a, T9 V  // modem signals  i  K2 o; b' Z5 v$ ?

8 d( f+ s/ z8 J2 ?1 Y3 \- ?: Y  .rts_pad_o(),
6 m8 c! E- t/ Q7 a2 M# F) q
! P. a( L7 D: n8 B" {0 `6 Q  .cts_pad_i(1'b0),
' {, a/ d2 V* h6 a: t& D4 B4 O( j, u9 f9 n) p/ p' x
  .dtr_pad_o(),
8 _% f( y+ D7 ?4 p. f- c
) d8 |+ X: u: M/ [1 ?+ {7 l  .dsr_pad_i(1'b0),
. g! u& K# k" t  \' c6 l7 s" V7 f9 x1 a, G
  .ri_pad_i(1'b0),' |8 i/ j3 ?3 I0 A' u+ A

5 Y5 K$ @! w1 F$ ~/ a  ?  .dcd_pad_i(1'b0)//,
% h/ Z$ E# I- K* B0 R' k7 e2 n2 U9 B2 ^1 ~9 D. Q* D9 R4 `
//`ifdef UART_HAS_BAUDRATE_OUTPUT
( R% k* W3 A  u7 T0 l0 F' h$ P) E* Q
# {, k, R0 ^3 j: ^& R3 c//  .baud_o()1 S9 i# W, `8 H4 K. X. z+ p  F
/ N" }( y5 r0 ]4 Y8 w! v/ ]5 l
//`endif
/ y/ H# B* g4 B' U% G9 m+ G' [8 r
4 G/ x- N4 @$ \- U. K  D% P/ O  );/ _: E$ D: f4 Q( c4 }% o% t

4 ^) \* p& a& }! M+ U ( m: q( ^8 a* ?8 z
8 e! a, f  K' U
endmodule9 o9 A! P2 b0 q1 r) r& n
7 H/ O: f' f2 Q2 q

2 c4 R+ V- Z8 Y( R$ f( d/ h8 x; h

2 H; Z& R( j, m, a, L' f4 i/ z
3 W% d; ?; u) R8 X' d修改or1200_sopc.v文件:
5 r: r7 E* D# t7 y, G8 E
) @! t% ], D  P) |//small sopc with openrisc4 z; l, \  Y" y8 V

) p: L3 ~1 \) n//`include "or1200_defines.v"; ?' [; {6 V4 n: G: L& d
9 c. S5 G3 u3 c0 @7 |
module or1200_sopc
0 _& J- v" a' G7 m8 y/ ?+ b, e2 j+ s9 Z8 Q' ?' Y* w! t
       (
1 ]5 N' D6 M0 l0 Y
/ T; D5 P( r' B7 d' r                   Clock Input               6 Q' q) ^- ~% c6 I! K1 ]
3 ]! Y8 l5 f) W9 g) \3 ~
               CLOCK_27,                                   //      On Board 27 MHz
1 E7 T$ L  s' W) P( W0 B
' s- C" t* b  o$ G               CLOCK_50,                                   //      On Board 50 MHz4 Z: N: D& h8 O1 N- a- w% m  j

4 X# @/ L& u# e4 _1 Q7 I                   Push Button           % H" U- m" f, E7 p" c/ H) x) H5 f

" M- ], T+ W8 l) `- R4 M- S               KEY,                                          //      Pushbutton[3:0]' s! j- X% P+ y# R( S! G$ O
* E3 N9 {. A9 X/ x8 M
                   DPDT Switch          ( n- j2 r& U9 ^- H( J4 z3 W9 s

2 L+ m0 U2 b6 g+ r) B: z7 t7 i               SW,                                          //      Toggle Switch[17:0]
0 y" s+ u  Z& {$ X  ]; K& a# s
) z6 F* y* [9 N8 z                       LED           
/ f0 l; F  m( W  J) \5 r8 N0 O. H
               LEDR,                                        //      LED Red[17:0]
8 G  e  k: ~8 s) X! j+ d- V8 Y* s$ u( t& [7 p% }" S6 k$ {
                       UART   
" z# B& e9 h& I1 E+ K  n. C/ Q/ V7 s# I
               UART_TXD,                                   //      UART Transmitter* i5 {8 w% s! L+ W4 B6 W

; L1 F9 R0 U; S& b               UART_RXD//,                                 //      UART Receiver
6 w! G* I8 o3 [" z, b4 X' C, _" P( \" [3 t6 U2 d% o
       );
3 p8 s" q. t( N9 a. A1 `3 N# b- U$ q  `6 k' o, |, f- b6 O
5 G8 V' u+ y6 \) X9 t
' k3 l% Z, |0 ~5 L
       Clock Input            - G; s/ }* h1 S$ e  D$ g
/ Q& K" }' {3 H! f0 r6 ^, {$ p
input                  CLOCK_27;                     //      On Board 27 MHz6 `0 ~1 Z% a2 g4 w, t

; t' N3 Y( v% Rinput                  CLOCK_50;                      //      On Board 50 MHz
  ^4 n$ r# E+ L) }6 w
1 N! z; Q$ `; p- k) l8 t       Push Button              h, ^4 k/ z: ?/ \3 z" @7 \

8 I/ S! q7 U$ _input  [3:0]   KEY;                                    //      Pushbutton[3:0]' r' V9 m3 O; d  M, A6 [

* J* N/ R7 H1 @0 ]7 T       DPDT Switch            
+ h2 d+ r6 z9 _% q) z7 {$ Z( c3 M0 T; Y* b
input  [17:0]  SW;                                    //      Toggle Switch[17:0]
7 }7 W7 N  U7 s
% n: _6 l+ N4 T6 D   LED            2 G: H$ {# h" O7 s4 l6 g4 W' u
6 b. U) L) D' f) a2 C: n, J
output [17:0]  LEDR;                                  //      LED Red[17:0]
' P  f2 U- _4 |/ j0 F. z6 g, X1 A; Z
   UART   
9 E) r0 F+ g0 R& C- D7 H2 n6 g, f3 C7 k# V+ ]6 m, P
output                 UART_TXD;                     //      UART Transmitter
4 J5 N  x' L# g5 C6 k3 M7 T6 S$ [8 f+ o0 x& q0 N0 K$ x+ }
input                  UART_RXD;                    //      UART Receiver
) K6 D0 \" s; `* m4 R/ y, D* A( Z: w: N4 ~" o

6 m) V/ {# t! e# ^7 D  ]" p. k* z0 L. V
wire CPU_RESET;
( w* D2 A/ s0 X
: [7 h& k8 c0 u7 y. ~( Hwire clk_25,clk_10;
9 s, U; I1 S& G, m; c: |/ O: w9 j3 Y  X# {# X6 ^8 ^- o
7 k; R3 ]3 _% j5 u7 @

9 q1 K# X9 R, q7 V1 p8 ^- PReset_Delay    delay1 (.iRST(KEY[0]),.iCLK(CLOCK_50),.oRESET(CPU_RESET));0 O% T9 C& q5 H. `9 p8 }/ F: i2 {
7 a( v# P4 ]7 Y4 O  w6 U
cpu_pll pll0 (.inclk0(CLOCK_50),.c0(clk_25),.c1(clk_10));1 _" C9 c& X1 C. V6 {/ r2 F

, J/ n" E6 H$ x) E8 v7 b
; [: d3 k# k, Z- g6 B7 @$ O; l9 a0 V4 y8 p- z
or1200_sys or1200(" j, N3 q; t3 W
2 @& L4 Z1 ?  o' t! ?' c
    .clk_i(clk_25),
; ^5 y4 A4 {/ ~7 i$ V
) M( Q0 q6 l8 s5 d! Y8 P' a' `( |& P    .rst_n(CPU_RESET),
- g6 s, @( U/ s2 G5 ~
7 `4 {4 d# A7 a$ v% H( [9 ^; ? " a! Y2 y; P( T% z
$ |* W' o- v/ G8 q; _' _
    // buttons
) ]0 ]/ g8 o1 h+ Z! G3 v. f0 w* d2 Z1 P. l3 a0 B: a  k
    .SW(SW[15:0]),
/ g" G: |! e. N* f" D2 j: c& u3 X; [. O0 N) D5 {6 g0 W9 {
/ d6 a( a& }3 D6 ]+ y2 \# Q  z# M

* z/ b5 i4 g- T$ Y; s( o, t" b    // segments6 O$ c8 v0 E, g8 }/ a, ]0 Q4 r
5 m8 ?; [/ }! j4 R2 c/ O
    .LEDR(LEDR[17:0]),
) {* ?' X9 ]6 E& g+ S% f* R
8 p( E( z4 \% @( i4 R  }   
+ ~* I  e7 V+ Z) U; m* w: t( I* {$ B( V$ O% q9 _4 m
    // uart interface
9 E# R! t0 Q$ W1 o6 J4 d( S/ a# k+ `3 p
    .uart_rxd(UART_RXD),
8 Q6 W/ \5 Y3 d6 ~4 j# a  \* m- v2 M+ e) j
    .uart_txd(UART_TXD)//,5 {3 v- E3 p4 N! @. k
, C: N% F) i5 y
);
/ x' B9 i1 c, n- ]3 I8 h" |2 ]8 A/ T6 N

- H% x7 W4 M1 T) ^- J" @( a9 w& v8 R  ~% I
endmodule& J+ v+ S9 _, l9 ^

; s$ U( X% C- [* p0 ^ ( o# [7 [! D% z; ]6 y
! Q; l- v0 g& A# Y/ p/ |, i3 B. H6 S' q
1 j: N3 v, V0 U& v4 e! R$ s4 m% |

% q* W9 p" H, f* _' m" `7 H仿真UART时需要用到UART的接收器核uart_rx。将uart_rx.v文件(从张老师那拷过来的,也不清楚在哪里可以找到)拷贝到or1200_sopc文件夹下,并修改or1200_sopc_tb.v文件
; G0 L( P1 o0 a7 V7 t( _. y, S% y5 K9 A0 L& M/ H
`timescale 1ns/100ps
( ]' s' ^" @! E5 C! R3 @8 q! H' t
module or1200_sopc_tb();
: o. {4 }5 w- L: e3 L/ I7 m7 \$ T
) T& L. y+ T0 y. G( ~) l9 @       reg     CLOCK_50;
. n% `) ]8 a- n- n9 l2 m3 k! Z+ M( w
) ^4 P) t. ~7 t+ I1 i: M5 J       reg     CLOCK_27;
$ y2 D+ H! m9 c/ i4 p# `1 t$ h& R# }! V
. r" _$ L1 [- v+ l  u5 Y       reg     [3:0]   KEY;
' ]" S3 p5 q& s/ D  c) F( s! @1 _8 ]9 H7 b
       reg     [17:0]  SW;! r- N! ^3 U7 [3 j

- E6 [& X& k5 ^- f6 O0 K' s       wire    [17:0]  LEDR;
; @' F. C4 G; \" W# }* t% M4 s3 _+ Z( M% D" Y+ m
       wire    UART_TXD;
: K: G* _6 N0 l& X) c3 q' }, j6 q; n" B7 O3 K+ E
       reg     UART_RXD;
3 R6 P: f/ ^4 ~2 K/ d" Y' N7 `4 w% O
- e9 w. q3 {+ t9 K3 L : L% G' M- N3 F7 G3 i
; j- V6 s  r+ u+ C
       initial begin8 l* L3 m! D5 F3 l

: B: \0 w! K( D; K$ |               CLOCK_50 = 1'b0;$ F" m. s' A: i3 t, x

0 _; H3 g5 T! v               forever #10 CLOCK_50 = ~CLOCK_50;: \  I; P/ t$ r8 Z5 t

$ J$ a& e& v4 V" [       end
) t1 i% A# R6 Q& j
3 j1 q4 X/ v# G8 N, I+ F  {3 u% Z      0 u( k' T8 y5 ^6 [
8 O8 B4 i- S* g+ u8 p
       initial begin
6 k! G4 L4 Y( L- V+ [
8 r8 H, h' ?6 G+ |' F( C1 g               KEY[0] = 1'b0;
; }4 Z& o5 w" e) B, |# S1 O) a) {' P2 ?) _6 P1 V: X
               #50 KEY[0]= 1'b1;
. W) X3 V9 w1 R' f  K; J/ M
( w# q  ]3 Y2 c9 o       end  R0 y5 n- Q, w$ A! Z) [1 u0 }
* P' U' ]- V; C4 Q, N
       initial begin2 L  k5 o. N1 V) S
6 m2 l+ k& R; O. B- r1 L1 f- o
               SW = 18'h1234;
5 U( d: |: `) r( ]. }1 k. c' C7 K' x% l& M& A" u2 X+ f% O
       end& U2 {4 Y% g0 `( a7 B' H7 B: m

4 I: X6 P; }% ^6 S
4 k# ^, l6 l: o  |; z3 ?$ B% A! M; v6 T
       or1200_sopc     or1200_sopc_inst
" f" b  r% h6 z. h/ @1 c# O9 h  W  f3 q4 w: O0 ]3 u8 |+ g6 V- d) ~( J
       (% U* \1 F$ Q9 N; u& e# H/ i* v/ k
2 _' v2 f! O) ^% A% ]. T
                   Clock Input                 
1 S8 P7 _$ c3 |) I& P) y, F; X3 X
* f+ }" ^% C0 B& r: F               .CLOCK_27(CLOCK_27),                       //      On Board 27 MHz& @/ L& W: ^  Y3 _+ J. U) [
. [/ T( q4 b( K+ W5 c
               .CLOCK_50(CLOCK_50),                       //      On Board 50 MHz8 K5 m$ O1 B  o; o
7 @- C/ ]7 |7 ^; h3 N+ p
                   Push Button            0 H! ~! J3 f/ T5 s& F# ^/ @
0 B* N  G# _; o; r7 o1 o$ B, k7 s" S
               .KEY(KEY),                                     //      Pushbutton[3:0]" v6 W4 D4 ?& H, ~  H

/ F7 w  l! C9 Q, [                   DPDT Switch            
  J8 M( J' G) g! R$ e' E$ W7 M0 B/ |4 A& @( T1 @9 h; [: b
               .SW(SW),                                       //      Toggle Switch[17:0]
/ Q- F% ?" S5 `/ S
5 R# b0 }' ]* l. r0 w/ }; F% d  c                       LED            
5 w+ Z. W9 W. p- ]" L3 ~4 S+ X8 |8 G) ?7 b; c7 ~  I, R) Z
               .LEDR(LEDR),                                  //      LED Red[17:0]
& U& K8 j8 E( h  z/ Z# a* u
! t" v+ m2 s& G0 I7 h$ ]' P! l                       UART   
5 H' T$ @/ o* ~# |. X: \# `6 ]# I: n  M
               .UART_TXD(UART_TXD),                       //      UART Transmitter
: k  l, f% i( o" Q0 t" t" C/ _& w) a* x% B! c* \4 |' y
               .UART_RXD(UART_RXD)//,                     //      UART Receiver& b1 u- t* |) R) _

, e/ g* e" s( U% L# s1 l9 q       );
  v: D4 H/ r' r. ~/ g
* V' `0 P6 r" z/ t0 e3 `% A, s3 f9 k 9 X& a6 ?% d9 f7 z! }9 S

/ h# r5 H* T8 J! U7 t    reg        baudclk;
. \: C* C, h6 f/ M$ P
+ q( h; _, m7 L! @  M    //baudclk   : 1000000000/(16*baud_rate), when baud_rate=9600, is 6510
) c* V8 h% p1 x# I7 z0 Q; A1 w: a6 O* |' Q
" u2 w- C9 e2 [0 s8 ?
& ~$ _: ~$ x# k# d& s
//`define BAUDCLK_HALF_PERIOD 3255% F6 A# w, l, g+ T- B

: g2 P5 ~' S) a% k`define BAUDCLK_HALF_PERIOD 271% ^4 Z7 ~/ }4 p; s9 \! _/ I
8 l" Y8 h) m3 _. g5 q4 n

3 i; r+ l2 K( l/ @) E5 d. l- w
. E6 P4 }* f6 N. Z( Y, A4 C$ {+ ?5 x    initial begin1 B* X  ^. @7 m4 N
! K  P1 w8 ^% T
        baudclk = 0;: B# p  h, K7 F
, U) ]5 ^$ w+ v* Y7 s
        forever # `BAUDCLK_HALF_PERIOD baudclk = ~baudclk;
" \! O- \( ]9 S% H! [  ~# p- u7 N* q
7 t) C0 L: r( M" }    end
) l0 ^8 a" ], o  c4 E, r
  b) h0 g" m/ ^& g9 E. w0 B+ V
# ?" l2 p/ O4 J! i, B, p/ `
# ]' B0 n, w9 u9 v# q    uart_rx u_uart_rx (
) h/ Q# ^  [0 G* v5 U
# `. Q3 K, `6 _5 u) P* d" e                .reset(                ~KEY[0] ),, X5 M$ N3 B! `* V: o6 z/ k

: D5 C& ~7 j4 k/ z! V2 S6 t                .rxclk(                baudclk ),* C! X7 y5 o' ^0 X

% _' J; g9 S6 a: L) L9 Z+ F                .rx_in(                UART_TXD)
5 P" |' E; `9 {* W4 {  v, O0 `. F; v
            );' H+ F! ^7 Y8 z4 f1 M
. V' e" k* H/ |8 e# }, k4 \# O
endmodule
: C6 ]8 @% ~, K7 k- {( I1 D/ }6 r3 z. w& h9 F$ I1 ?% m
! J' l1 _$ f$ {+ W
& u( I. v6 @: x7 a" f$ @. s4 V' }
7 o8 D1 P2 u5 Z( H+ F* l
) x5 h8 h5 ]  B
修改vlog.args文件
3 G0 K$ G) s) V# J( l& |: @
( ]. J) Y, g* E+libext+.v; \9 y5 P  V" f! D2 T
- `" k# s1 f6 y  k$ Q! ]* {/ |
-vlog01compat6 {; X7 U& {# D2 r
  g; B, Z, u: y, v/ U4 D
+acc9 r1 k# P* [, d2 c

, E& w. V1 t) p2 _7 t; f* j  `-y ./pll
( Y- v2 I, a% v. [: s: I7 N  }4 g
, `3 t  Y( d$ ~8 L6 i' G- [-y ./ram. R! T5 t/ G: y4 x. B: i

; G8 i) Q2 }, V-y ./or1200
( E, s  _4 Q3 x2 o$ f+ E4 Y/ ~/ `6 L
-y ./gpio! ~0 K! L! A3 c1 k" c

. L, {! H+ I, L7 {) W) g" j-y ./wb_conmax
; c6 Y* X/ R. A7 e0 [) l& w- s, }6 {1 f( Z
-v altera_mf.v, z6 F1 p# Y$ `+ c6 k6 U" G0 U' o
6 C, x9 @2 M  Q
-v 220model.v
$ w+ Y( s0 z9 G" ?0 w
7 X2 W# T6 T' `) ]/ ~
, R  z; S6 H' P; [9 P
) u- g- ^2 A* a( f- l7 a! s-work ./work
( j# x5 T" V* @  ^. N. Q2 f9 }# b
% s( j3 n7 W3 [3 D0 c' { + @8 ]: Y: M: R! b
( a2 A/ _) \9 k1 m9 [
//$ _( N/ J- x! k( i5 v6 n

, H1 E' b) ], ~/ L# c// Test bench files
7 k6 j1 m/ Z+ Y5 [$ a6 j- d
! S. y2 e1 j5 e1 k5 t//
" _8 j. e: M/ S* l
9 c* e7 J6 B8 Q4 Eor1200_sopc_tb.v9 S: _; a1 r5 S: Z

9 ?6 ^8 N2 s4 R- t//
; u. \9 ]' i6 W4 F# W) C2 k/ \# p3 `8 p) A- a
// RTL files (gpio)
# j% o3 ]' t" d9 a0 e* _' F$ Q, N; Z. C
//
" l% X1 A9 D4 C; Y7 h* M1 i
! V( M# v! e9 O6 t+incdir+./gpio
$ F! I6 i- Q3 c- Y7 H  V9 {& Q/ C8 q2 ]
./gpio/gpio_top.v! W0 t0 N( k2 O7 E1 ]3 O* \
) p( z: f# O! J% e
./gpio/gpio_defines.v, w3 U' G' Z- Q5 [! y

! x) q  v3 [7 A, ?
: L7 L6 T  N$ F/ e! u. J7 C- ^  F$ F" q6 i6 y% {
//, M- C* Q" Z& K! c2 r: \

5 @8 s+ o, H& Z// RTL files (top)5 b! N) Z$ d! k8 C6 `+ g3 I

! c( m* }6 J" q. M  E. C//
& Q( x/ Y: @0 B" M0 t' _( ^1 q. ?& c$ Z4 N7 Z
+incdir+../rtl
/ a9 G1 x( ]+ e' ?7 K& k
! o; b  S) M3 i  R7 }( G./or1200_sys.v0 k. }. f0 W0 q! n+ I$ A, n$ F) y9 l* \

8 @: c2 g! ^8 L# s./or1200_sopc.v2 o7 Q' G8 S* k5 c9 Q/ W3 |
9 O" x: z: Z+ u* R! H
./pll/cpu_pll.v8 f  U5 K+ Z. k6 V7 e$ ?9 @  {  O

# ~2 x% ?# K5 L* [2 E./Reset_Delay.v  k: p8 U0 }9 X5 L
( J- ~) D  H  o7 n
./uart_rx.v4 I3 V( G7 i3 L5 E7 {' [

" ~8 |% p% L+ P: c
! B: a1 `, r9 Q1 @/ t/ j* `" d- R7 \# A4 m) I4 ?7 Z+ J1 }6 H! I3 \
/// n* l, h: _) k0 s, z% O( m

- p1 u6 ]  E3 D' `# t// wb_conmax
6 A. ~' u: d, R- l7 e7 P/ E+ g7 V' o8 g$ i* t7 y& a
//
( N  `5 L. }7 t$ B( C, @
5 E9 B7 K0 {/ }* ]! }. `+incdir+./wb_conmax- Q% _0 ?2 s9 f8 o% a

5 _3 y7 K% Q& f5 z( B) T) ?1 Q./wb_conmax/wb_conmax_arb.v
! h5 s( Z1 `. V) f  r# t& ~% T6 ]7 ]' f& N8 v( v3 D' E
./wb_conmax/wb_conmax_defines.v
1 q, v+ p+ d6 y. Y( {& ?
( Z+ B/ C+ \: P& x5 {) ~, ?2 y./wb_conmax/wb_conmax_master_if.v
9 @$ X$ I) ]5 A: a% {& G  z8 V  h  R/ X: T( e! M4 q
./wb_conmax/wb_conmax_msel.v5 Y$ X0 D7 Q7 u/ g! C

1 X4 y$ d% v; [" e, o# y. W./wb_conmax/wb_conmax_pri_dec.v4 j9 C% P8 z8 O9 y0 ]8 I
5 L7 Z5 r$ d% W' s  x
./wb_conmax/wb_conmax_pri_enc.v
3 {) {. b2 B+ c( ]( {5 u5 @( T/ k7 y, A: |" O+ S
./wb_conmax/wb_conmax_rf.v
$ c0 |" A7 z" c  C
, W; q/ l  k5 q8 @9 L./wb_conmax/wb_conmax_slave_if.v
/ y  e9 @% B' A3 K) j: H8 K' r
- _6 ]+ b# F+ r/ O6 W./wb_conmax/wb_conmax_top.v
7 k; _2 z8 u' d1 g, T, t+ {9 _( t8 L" E" m% F) F# G
. M3 E/ _9 I0 P( }& V0 p
. Q$ p# y! }0 }- U( o
//
+ r$ R# ^1 m7 z+ W0 x) K9 W" h9 Y! q! O6 A! n/ r
// RTL files (or1200)
% j7 @( }$ a* L" }9 N
7 d  M+ \4 A6 m' W: z//3 _7 n" f; ?. {( Z( s
  i9 ?- I: T3 D# V
+incdir+./or1200
' a# |& G+ d! w
$ O% e4 O) y: l9 l; y9 ]./or1200/or1200_defines.v
( H# ], S$ Z1 k7 W: G6 x2 F3 p
, _3 J; d7 }0 G: w# ?; c% x% F0 c( [7 D./or1200/or1200_iwb_biu.v$ g3 v  B8 y% \  N
6 P+ Z( O7 B1 v% x" f
./or1200/or1200_wb_biu.v6 G9 @: `# V% Y9 j6 G: R) a, Z
$ ^7 R8 Q, T1 u) S  R
./or1200/or1200_ctrl.v, o9 C5 u( h# N; P# Q

8 g$ Y- G! _" C. n./or1200/or1200_cpu.v
, \3 j* Z  N6 ]1 n
. V  C* ]3 a, V./or1200/or1200_rf.v* R% t, G. y# G
9 w# l' _- x. Y: J
./or1200/or1200_rfram_generic.v
/ X9 w6 f8 g9 T9 d% N+ ^$ K# P* N
, O2 v" m9 w! |6 F1 \./or1200/or1200_alu.v
4 ~3 l0 Z$ b" _2 s6 L1 ?5 r" T% x! p4 P0 V( j$ w
./or1200/or1200_lsu.v5 U: B" `( m, z& g4 s* d' \
  @+ [* i$ w  f$ S+ ~* w( L
./or1200/or1200_operandmuxes.v- b& Q' ?9 T  n) F7 Z

6 e4 f' y. c* ^4 H, S: l3 U' q1 o# S./or1200/or1200_wbmux.v* l! ^6 L# D5 V' n" }3 ]
$ ^* N6 L, t0 N- R; S6 B
./or1200/or1200_genpc.v9 Y% F: r6 C. G" \
9 W  r. p5 u8 \7 }! w
./or1200/or1200_if.v
) h& {% i7 Z/ C2 j  L4 d9 T& M. Z% Y& o
./or1200/or1200_freeze.v
+ _4 o: N7 m2 C& K
- l9 y# B/ X& [./or1200/or1200_sprs.v2 ^) b5 A% [5 V: ?3 O: l# {5 @; m
; }$ `2 R" |" V& [+ p* j$ g6 z
./or1200/or1200_top.v
2 l/ |0 ^2 Y. _: l0 Q3 X2 C+ E# N% ^; m! }8 a" F7 E
./or1200/or1200_pic.v
+ x! d- m) n& H& @+ [7 H+ s
& Q3 X  J$ s& Y0 f2 U./or1200/or1200_pm.v4 V; C" k8 }) f" Q" m; `
6 f/ w/ K7 l5 W; m- i& w4 a
./or1200/or1200_tt.v
1 i# C4 L4 u4 D4 w, a; A" _* s4 ?% T' h+ N- J5 H
./or1200/or1200_except.v
0 U4 t  V; r* q. y- f0 t- }5 q8 H. D% a1 Q% a
./or1200/or1200_dc_top.v3 |) \# Q3 q/ W( X8 G7 V

# `2 O' `" z) T' x) x& J; I+ h./or1200/or1200_dc_fsm.v. e( N# z8 K- y( l

# J/ v% C+ p4 y# t: y./or1200/or1200_reg2mem.v* T2 ~( i9 A* j

2 W5 Q; D  p/ W./or1200/or1200_mem2reg.v
7 [6 Z/ P- @9 g- {' T0 Z$ O. e! y  |2 N1 c- ?
./or1200/or1200_dc_tag.v" [. _( ]- d% H# k( f

+ e+ j6 m9 O( n& s9 X. K./or1200/or1200_dc_ram.v
! j3 q+ D3 g5 F" [9 j8 U* \$ b1 ~  y6 ?- {4 z8 T
./or1200/or1200_ic_top.v2 p+ Q4 K$ J+ V, e
9 i2 |$ b$ k# I6 v
./or1200/or1200_ic_fsm.v
  n! K4 G  o* N: W6 K5 p& J/ [
" k$ }0 X, j6 Q7 y" F3 M0 f./or1200/or1200_ic_tag.v
; W/ ?) B- v* V0 B0 d: Y+ y8 n4 F; s
./or1200/or1200_ic_ram.v+ x, G- i0 B3 p' U, _

  T- I1 A2 f- L5 G2 b* `6 Y% W* o+ ~./or1200/or1200_immu_top.v
. b) F% d1 u+ P, N" _, l- S3 J# e" J2 r/ r- ~; `
./or1200/or1200_immu_tlb.v1 S# T9 k: p" y

. T& J' v0 r* i! I8 k3 }./or1200/or1200_dmmu_top.v
2 {4 d! l/ Y$ M: Q( N. h  O/ K! B. o3 b7 o# c8 x( D% v
./or1200/or1200_dmmu_tlb.v% v: [$ _. m2 M3 p, V7 Z( U: ?, r2 a
" T2 |& E3 W# ?# X/ A8 F( p& B
./or1200/or1200_amultp2_32x32.v
. J0 c+ n  ^' {9 D3 `6 j! u% Z# p+ d+ O% u; h' l1 s& Q) T
./or1200/or1200_gmultp2_32x32.v
) Q: D% W( T# K. v+ A6 I! z
. L$ Q1 I5 d1 n: O& x& T1 ?./or1200/or1200_cfgr.v! f8 _0 c) s  S% y& `7 s

8 g3 a( L6 V9 B% ]8 G& H./or1200/or1200_du.v0 j- _" V8 g6 O: Y1 M9 ^3 w3 c
- ?7 @/ }, i* E2 o% D- c' \' Z. J
./or1200/or1200_sb.v
* t8 o. P+ d. Q3 P0 }2 Q- o& j& J# A7 M' k- S
./or1200/or1200_sb_fifo.v: _5 U5 d3 a; {5 G: X  C

' C& P3 x8 j5 {3 _./or1200/or1200_mult_mac.v
4 f0 G) c" V  o. T
. F2 ~7 @) @% ^9 v- w./or1200/or1200_qmem_top.v5 I4 g8 d& `# {8 `0 S0 p! n3 D
1 i$ y: b+ r; N8 [
./or1200/or1200_dpram_32x32.v) r* h8 h, u& [8 k4 u

; O% Z) e$ H  s1 |1 y/ _. N./or1200/or1200_spram_2048x32.v
. n( V. ~4 [; H+ w0 V# O2 Z. k% W$ i+ A# X- R9 O
./or1200/or1200_spram_2048x32_bw.v7 v# c4 r& J- x% c
1 _) I: D3 N* A% M! ~5 F
./or1200/or1200_spram_2048x8.v) Z8 S  P2 u3 s! D5 O

6 ^8 l3 }- {' y7 _5 }./or1200/or1200_spram_512x20.v
1 B+ \" G8 B' v3 f  E; ^: Q- W9 J: Z/ S% h
./or1200/or1200_spram_256x21.v4 g* r( {. o7 m+ |2 Y
  V! U5 M, v: E7 Z
./or1200/or1200_spram_1024x8.v4 I6 {' t0 N, |8 |
3 C; D0 @0 R) B3 e
./or1200/or1200_spram_1024x32.v$ U. d5 k& Z- }  ?* K

& R7 s  t) j+ P: i( n# X./or1200/or1200_spram_1024x32_bw.v: Q; r% c" ~& x4 e% [0 v
. x! Q6 X# q' d, y; n" Q4 J. D; ~
./or1200/or1200_spram_64x14.v
+ ?1 H4 i# Q2 I& m& F, o2 p
- p, [: J# B5 x! O./or1200/or1200_spram_64x22.v
+ z; e, u. \& v+ {- E9 ?8 D9 |1 s7 Y9 B8 }
./or1200/or1200_spram_64x24.v
$ C7 c& R6 n8 z$ w' }" b5 A
1 d& p# ^0 |7 R  z./or1200/or1200_xcv_ram32x8d.v- ^7 q4 F) f! I1 @! |4 h4 Z$ F
1 Q* Q4 W. B7 q
  ]0 n9 @# R# k" `; B
5 {& D* g. J# r
//$ f  o! E% q) X, C6 U
( c* {7 T. A/ ?, s* N) M" t) O0 b
// RTL files (uart16550)
6 d- B3 ^  l/ r5 F3 }5 u* y
" ]" f, u, F  A, n! |//1 M1 S2 ~" R' {9 C: G2 ^
! g$ o3 Z7 M. l( z8 B5 ?$ p% {8 i8 j, _
+incdir+./uart16550
6 ^4 p' X2 i' x  p6 p( u# [0 W2 ~6 X& B. S
./uart16550/raminfr.v5 B' V2 |, S: s
2 K9 e4 Q; V3 i' y
./uart16550/uart_debug_if.v& a# v+ r; {3 |. Y

% Z4 C. M+ k/ F6 O5 z8 y2 O./uart16550/uart_tfifo.v
4 J2 P9 S- t+ h+ D/ g4 h9 i7 x6 g; I+ f6 ~# F# i: s7 Q' h
./uart16550/uart_rfifo.v$ O8 A7 d( z% w/ d1 a! P+ g# {

( X: e  P3 E5 b" [+ n./uart16550/uart_receiver.v( h0 m0 _( D5 f# a( S1 K
/ f1 k' S" _& ^  j1 j; s
./uart16550/uart_regs.v, j1 ~3 ^9 [' }9 V0 y4 j

% d5 R$ {5 D$ T./uart16550/uart_transmitter.v
: X1 ~" j* `& ?) c0 i2 \7 g" A: ~2 ]6 C9 D" q/ E
./uart16550/uart_wb.v
2 T0 p8 }0 L; o+ n1 b
! k  Q+ `( E8 S8 e( {./uart16550/uart_top.v
, [1 ^- h6 R1 j: ^0 x% X" i- @) b& @. S
./uart16550/uart_sync_flops.v& k+ M, i! `1 K9 i

: ~* \6 R3 S+ o
2 f* z6 r: p: u! o+ l
% y; ?; Z  Q9 ~//
, w6 N& h+ }; Q
) o! g/ c7 b+ h% y* I$ d" _// Library files$ _( H- o5 T1 y! h4 }8 ~/ _5 Q7 U8 L1 j

* }4 @: }3 _& q  d$ y& d, l//$ {! h& y/ z" G

- `8 a: g- H. V, c//altera_mf.v
9 S/ v/ d/ X4 Y' x' A1 t3 N) j; x6 l- I2 O  E* D( S' Q; n
4 y: ]0 D" D, M5 m3 p
3 r8 x+ J$ A. A- a+ U# [6 J
' m$ }: |# @" o: ^$ `
, D/ m9 V# T5 a! ~$ B
7 n+ E) _2 v. J1 s, T3 V
加长sim.do中的run的时间
# B1 W5 R1 q! j" z7 _  p" d3 L' q. ^7 K% L9 u3 U8 _1 O
最终的文件目录
& Q5 \% x& V- H. }9 l6 E
' D) g- Y& a2 B/ v8 ^3 Y) ?/or1200_sopc0 N8 [# _8 s% v" O: N

( \) A& F0 ]" W$ H  /or1200
0 N2 W  q- p* k- _' h- f) p0 F$ P8 ~4 Z' Q3 d
  /wb_conmax3 R) `5 L. D0 v- o7 u$ d1 y

/ A& V4 ~& t1 q" I# p3 \% C' C# i  /gpio
5 X1 T, K9 y, A5 z4 Z4 D- I  h. a1 A' s. z) F
  /ram$ w, k, F- [1 B1 \+ q; W% f) }

* o  l! }% g0 z% p1 j- [% S% M  A  /pll
1 J, x" k0 x% ~9 N- E8 {" ]. }: \  m3 F# C
  /uart165501 G# P6 D1 P3 o8 A: R! _
+ O& ~3 I2 b" ^* c9 j6 z1 s
  or1200_sopc.v
3 Q3 V2 f) z9 @4 t6 t  e3 g
3 n  m& S# }  `  or1200_sys.v% y% L4 m! j. `2 d! v

  N0 G/ o7 l# i0 J  or1200_sopc_tb.v  O/ |& l' B4 q- L# h

) _  ~# t; c3 y. j  Reset_Delay.v3 w% C$ J  k2 p. {

1 o9 T  J! l, o( y  altera_mf.v
9 K  k% S7 Q- G2 z+ _; m5 K7 n& {' P( D# D; b) J' {( d. I# D
  220model.v$ [" d8 w) T9 l& i5 h% q/ r% |

, ~% J! b: O9 k; r5 {. @  uart_rx.v
& X6 Z7 c* I0 x  d5 \) M$ z1 T) o! Q' }  T& c

. I; o+ _+ q2 t% X; ?1 p- v0 F" B) T# k& F. t0 t" ?

7 D7 k+ q) e& G6 _8 [) Svlog –f vlog.args调试至硬件没有错误
5 L; m' S$ s; e0 C5 K$ L5 \+ [( j  u& T" z+ }; u; R3 N
+ ]! l+ M4 P( \- D- K' O, t

. h! ^; T4 ^- Q4 ^5 _下面修改软件代码。& U2 ^+ ^# M% _& p! D% Q; H; X

' E9 m5 s( Q/ G从demo_or32_sw.zip工程中把uart.h和uart.c拷贝到software目录下,把gpio_or1200.c重命名为or1200_sopc.c并修改其中内容
: h  l( N. v( n3 k5 ]5 b0 i" T( ~! {; d( b+ L% m4 `+ _
#include "orsocdef.h"5 ~1 g2 H6 d- @2 z  {$ r7 {2 }7 t

' s  V# O; b9 N, W% y  ]#include "board.h"
% J. q6 C; B( U6 ?. T, C8 |
! v3 T' U/ Q$ X6 H  n& G+ Q4 ?#include "uart.h"
7 A! _- l7 a5 B+ ~& W! G6 t2 o5 G+ f

/ \: u9 l% h! ~
2 {  A" r# {- A+ qint! G: v/ u1 D9 U

1 \  k3 C- I7 b5 @4 gmain (void)' b& F& X- \5 t
3 h/ L, N% D6 C) |
{
& r: c$ A" K3 n4 x3 ?0 B1 |* |/ |. q7 ?+ C3 D
  long gpio_in;
% P5 q. d4 }# U
$ h5 y/ O9 e6 S7 k2 @% c9 K% i* T& e  REG32 (RGPIO_OE) = 0xffffffff;
% p4 Z6 h: D* ^( y3 R( V: ]2 r7 C  r1 [- B; o, c. [/ l) K2 M

0 s5 V2 L7 @- y' Q7 Q0 X5 X$ B' V& M9 ?
  uart_init();
9 h9 O" g+ U% [. o9 U( g) w
# ?0 A% G+ a0 @ 6 q2 C! ]: W8 N$ U& C+ v2 B& {

$ P1 n& M/ U& c& e3 Q  uart_print_str("Hello World!\n");# L5 n& `4 _9 l( F( W

$ Q! Q7 p& ]5 E7 z4 V- x! M/ E6 }
& n  `7 N( ^6 _9 L- g: f: ?3 S5 i
; E5 L9 B: g0 o% A+ x  while(1){; @0 W! ?0 g3 S
' X2 b5 c  n! g# j6 v4 M& l' V
    gpio_in = REG32 (RGPIO_IN);  M8 r* w9 P/ n& D3 f

. o$ O+ {' S/ Z5 `0 ?7 r0 n' _    gpio_in = gpio_in & 0x0000ffff;
, H7 r4 m. p6 v+ Y9 c- |2 L% k/ B! c, k' j% @/ m# G: s7 r
    REG32 (RGPIO_OUT) = gpio_in;
. U6 q! t$ I+ V' N) K- `) P9 ~$ V" i# ]; H$ h
  }
1 d+ N+ _- L  ~, U' N* S. o4 n6 J2 h

1 }4 `, k0 K  S- f. T
# ?' |/ y) C+ y# V  I  return 0;
* U6 W( c# j8 @6 i8 a  Q/ J9 e+ U% k" _; w( S6 {
}
/ i( G- R8 s4 |4 J8 d3 W" ?' W4 B( e' g" k) V

4 P7 U, }) [" F" Z& b& [
# \" ~6 C/ e  L5 j4 P% y
" r( Y: A( [3 m9 L! Y$ g/ W# q& s8 Q" ]7 B. `9 [2 b7 n/ s5 |
执行make all 生成ram0.mif文件,拷贝到onchip-ram的初始化目录。
" i4 b! r8 d1 `3 [8 n! S4 I& l- G5 P7 D2 Z! z
仿真,在dos窗口下运行
& {- ^2 i' O* s' B( Y: g2 h6 h" w) @3 v; i
# vsim –do sim.do
" M/ }. j5 }: R* O& }
# y) i3 t, u7 m5 W) Y0 P5 {1 i, S1 _+ H. Y/ p; S" ?

; m8 L) B! N1 ?8 [! L) e# X. i! m' I! Z6 s+ Q+ ~
仿真结果,在命令行窗口处会显示:8 n! k6 k4 O8 X& V3 ~2 Q5 C! Q

* e7 c) T# d1 {/ G  B# H, |7 _" L$ Q4 ?6 D

/ p8 X8 z; ^# [' i2 I# e" P% t0 }: f5 E/ C8 x' H
. A# l$ _+ U- {8 U; M' {& g
# l1 X5 h0 o# Y/ X' z* W& f
  G7 c* X# P9 I( w4 \
# l
  r( b% `+ K0 _6 `5 ^0 C& o. H( V5 W  H4 ?  Y: K( J
# o0 x; _3 t7 J$ _* q

7 Z0 o& N+ Y/ c& Y( ?# 2 v6 M8 r3 n; a- k) I' ^* z& a
/ \. J# D$ k& Z2 Z5 \
# W7 C8 V: [4 P, T# Q0 g
2 V% E3 A- Y& F5 I6 x- p! Y
# o
; V& {6 F- e/ I" a  a2 X& F! L" c* V/ L. t/ ^
# r3 A% n( q- j0 y& S7 f, R" O

/ R8 P7 Y8 L4 @2 L! Y# |# l7 D+ j! b0 e$ ^4 j0 V4 L

0 X# g1 ?* ^9 w/ T- _# d- k' k/ Y3 a, x4 |4 J) V) J8 G
  z% L- x5 i; [; T( C- N. {2 G) j
# !
; I4 V/ A% W: J6 c, C
0 `8 e- v/ ^/ s  ~8 }; u / q4 a+ K9 m2 h' Z
1 O: o' R6 a+ t8 W* o
在DE2平台上验证,参考
- P  r' q) u+ o) ^. {
linux学习之路_基于or1200最小sopc系统搭建(二)--QuartuII工程及DE2平台下载
: `' {1 u9 a' O: O
构建quartusII工程。生成or1200_sopc.sof文件。
1 O2 K' q$ w, t2 [( @6 Y
/ J1 S" H: l# v& b. G设置超级终端
7 e0 Q5 L5 m6 T0 G# Q2 `
! E$ E) T1 s' q
4 ^8 Z9 i9 }$ l0 @
4 P# w0 o6 o3 j将生成的or1200_sopc.sof文件下载到DE2中。- s( \+ U" V, Z" x8 z8 t

# D% ]; U0 P0 o5 Q+ M8 s. |6 Q在超级终端上显示
  s7 C& _8 _% U* g4 _6 x+ Z- x; J) p% I- ], J, ~1 _0 _

1 f( J. p8 b3 ?+ j8 _7 U8 h; j/ L) n4 z, X* a8 b
有乱码。可以设置一下超级终端属性。
# F& Y. j" n3 |  W+ i& ~0 B9 H; d) J7 `6 @2 L9 Y
文件à属性à设置àASCII码设置à将传入的数据转换为7位的ASCII码8 M. h0 [( W' N% k% r
/ j7 Z4 I$ W5 Z1 r6 e
8 ^2 d1 ~: u8 o% R

1 F* t2 K4 }" z按复位键KEY[0],在超级终端上显示。1 w* l( J7 P/ m6 X; J6 ?. i+ x
! ~: C! I  i3 @( L7 k( ~5 B# D+ M

% |+ a5 D1 l2 w+ R- e
! W$ b0 D# ^8 w4 U+ L: L# sor1200的最小系统先到这里,此后有时间陆续加入opencores上的其它开源组件。: d( T, O# L8 i% Y

作者: regngfpcb    时间: 2021-2-7 16:53
基于or1200最小sopc系统搭建(三)--串口




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2