|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
通用的串口VHDL 源程序设计
. T* ?) h8 B6 s( e5 F1 X( T
Q0 O9 F2 k5 z2 Y第一部分: 串口接收程序9 }+ w7 i) g* n6 i
LIBRARY IEEE;
: t. B& [1 t1 u; r5 F+ k/ FUSE IEEE.STD_LOGIC_1164.ALL;4 K5 t/ w- r7 H. W, e
USE IEEE.STD_LOGIC_ARITH.ALL;! T) l1 _3 o9 B) f- C
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
5 S& Z) y! K6 M/ z--LIBRARY ALTERA;
9 E! ?9 c' b: o b/ g--USE ALTERA.MAXPLUS2.ALL;
" Q% F# F' K% {: M4 o HLIBRARY LPM;3 W5 D$ [5 W6 ^& E6 h$ r9 ^: r+ ]
USE LPM.LPM_COMPONENTS.ALL;8 ]* Q5 e+ f a! G
-- ****************************************************************************
) k+ W/ v) F. @, yENTITY Rx_Com IS3 n. g5 b5 \1 s' Q. b( r
GENERIC (Rx_D_Width : POSITIVE := 8;Check:STRING:="Even";Check_En:STRING:="En");
( }' a+ Y4 ?# K8 y6 C+ X PORT(
, s; V: C7 g, d3 h3 M3 c
+ O9 ^, }& y7 x0 x( s: Z Clk : IN STD_LOGIC;
: E) ~5 l+ I0 ?# m: u Rst : IN STD_LOGIC; / D) g& U) A1 s; T
6 x* m) } q9 G B3 Y5 `+ P' _
Rx_Clk : IN STD_LOGIC; -----------串口接收时钟
+ R3 q% Z; Y3 z* C1 _ Rx : IN STD_LOGIC; -----------串口接收数据
8 i: c! Y' X5 A q8 H4 F Dout : OUT STD_LOGIC_VECTOR(Rx_D_Width-1 DOWNTO 0); -------------串口接收数据输出
3 b7 t1 z+ z. @/ l- o Rxrdy : OUT STD_LOGIC; -------------串口接收数据有效使能3 A7 [' b8 E! x( t( Q3 ^
. {; w8 j* T u Rxerr : OUT STD_LOGIC; -------------串口接收错误标志! L$ g$ S0 q) E0 U8 J; E3 P
Clrdiv : OUT STD_LOGIC -------------串口接收时钟产生使能标志
( R+ D2 ~1 _; t8 O! a' I& d2 G' P# B 6 U M$ f" C2 j, G
); & f0 o) e* P2 {4 F$ s9 v; [
END Rx_Com;" D/ |2 N4 w, f* N4 ?7 I+ h* N' n
-- ****************************************************************************5 M R( E" f! e+ m5 p- A8 t; i5 u3 D
ARCHITECTURE Arch_Rx_Com OF Rx_Com IS+ W6 s- M3 u5 Z$ j: l7 q
CONSTANT Bit_Valid : STD_LOGIC:='1';' R/ y* D5 H' H3 g
CONSTANT Bit_Invalid : STD_LOGIC:='0';
% C& F' o$ {8 a----------------接收状态机--------------------------------------------------------------------------------" f, E4 Z3 ` F* \
TYPE State IS (Idle,Start_rx,Edge_Rx,Shift_Rx,Stop_Rx,Rx_Ovf,Rx_Crc); ) w0 o& t5 K) J9 \
SIGNAL Rxfsm : State; . w" \7 d: F0 A7 v
SIGNAL Rx_Reg : STD_LOGIC_VECTOR(Rx_D_Width DOWNTO 0); --------------接收数据寄存器4 r0 b$ c# m6 k4 i
SIGNAL Rxbitcnt : INTEGER RANGE 0 TO (Rx_D_Width+3); --------------接收计数器8 U2 q2 u" o8 b& ^4 o5 C
SIGNAL Rxrdyi,Clrdivi : STD_LOGIC; --------------中间寄存器% d: m% P# g+ D" v7 O' c; z- r
, s! k* j8 E0 A% x: ]. E0 i4 ]4 E4 @: Z' p
SIGNAL Rx1,Rx2,Rx3,Rx4 : STD_LOGIC;" F2 @# Q/ X, B
SIGNAL Rxrdyi_Buf : STD_LOGIC; 4 S' \9 T5 k) v% d3 j% ?% v6 }
SIGNAL Rx_Clk_Reg : STD_LOGIC_VECTOR(1 DOWNTO 0); 2 f5 _9 x! L) J5 B
BEGIN
) A& I+ [) z0 F) v% p2 I$ l-------------------------------------------------------------------------------
) c7 ?5 `4 V$ Q) M+ O [' D3 \
PROCESS(Clk,Rst)
M" B: A2 e. N9 I( UBEGIN
8 B' D; H, m @+ B) q$ F( ?4 g; f! ~IF(Rst=Bit_Valid) THEN* g' X! I9 T$ V* V7 ]
Rxrdy<=Bit_Invalid;
H+ w8 I7 I2 C. j6 n+ PClrdiv<=Bit_Invalid;
! w$ z& }" m& u6 |ELSIF Clk'EVENT and Clk=Bit_Valid THEN
( W( k+ M2 M# A3 Q- ^3 U4 G& B' K Rxrdyi_Buf<=Rxrdyi;2 ]# j) R2 a9 N& z- o! |$ A6 K/ v* Z" }( L
IF (Rxrdyi_Buf=Bit_Valid) AND (Rxrdyi=Bit_Invalid) THEN- @. X4 ~! i9 L6 j
Rxrdy <= Bit_Valid;
# ^, o$ d9 {% W! ` ELSE
2 d9 `' z v4 {- V9 ~) j Rxrdy <= Bit_Invalid;
- Z* t& w, w/ a/ W& D END IF;
9 M7 `9 U |- v3 ~8 t Clrdiv <= Clrdivi;
/ H. M, v- ^7 S% V -----------------------------------
7 j& I4 }! i' ^$ E IF (Rx_Clk='1') THEN
; {4 r x. ^5 n# f Rx_Clk_Reg<="01";
' Z3 y. r" F: q' E* H7 S- C ELSE1 E0 M |- K- I( f! j5 {$ P5 \
Rx_Clk_Reg<="10";6 X6 U1 y6 s% |) u; z
END IF;; P2 i2 E3 e3 V7 X* o' {& K) a
' a& T' j3 p1 p2 }! @END IF;# S4 E& }9 D( r
END PROCESS;
/ N3 E, D+ w3 o9 @9 \3 GPROCESS(Rst,Clk)4 d* |0 \6 s& ^
VARIABLE Rxbitcnt : INTEGER RANGE 0 TO (Rx_D_Width+3);2 z. Q: N( T8 {6 {! V( O5 x
VARIABLE Highcnt : INTEGER RANGE 0 TO 100;, M1 u+ |2 a5 J; E
VARIABLE Par : STD_LOGIC; ' H( i8 _2 l& c1 b& \+ ^" u
VARIABLE Par_Reg ,Rx4_Reg : STD_LOGIC_VECTOR(1 DOWNTO 0); 4 d3 ^$ |2 J, V" v7 e4 V0 s; s" O6 O
BEGIN' }& y. e% E8 ~2 v! Q* m. X- a R
IF Rst=Bit_Valid THEN
/ m$ ~% P' b' q* S+ b$ S& m Rx_Reg <= (OTHERS=> Bit_Invalid);
# G) `6 |9 [6 J E! K Dout <= (OTHERS=> Bit_Invalid);9 z0 u; s- F3 Y \; {/ m; B+ Z
Rxbitcnt := 0;" \( `/ {0 K! b6 r* ?3 M+ j
Rxfsm <= Idle;
1 \6 ~& V) j8 ~. V% g( c% P) L* T Rxrdyi <= Bit_Invalid;0 A) ^5 A. G+ W: y* }# z i3 m
Clrdivi <= Bit_Invalid;% f0 A' Z4 \' D. M
Rxerr <= Bit_Invalid;: g6 G' b/ o! \& Q: e2 n4 J
Par := Bit_Invalid;* I! I$ F7 O% x2 Y0 d3 I" [
Rx1<=Bit_Valid;
- u' N2 k E$ U1 z0 T Rx2<=Bit_Valid;
P% o8 W% |, Z2 U, ~; ^ Rx3<=Bit_Valid;
4 ^; ]6 a& L* @ Rx4<=Bit_Valid;
, M2 V7 P1 g/ I& B Highcnt:=0;- ?4 J7 y9 K5 ]9 L- M, {. m) r; D
ELSIF Clk'EVENT AND Clk=Bit_Valid THEN9 w- W" g& b, g# j: ?
Rx1<=rx; / Z8 N0 w- w6 d. U
Rx2<=Rx1;
% E+ q6 `8 i5 P; ^: u( `2 Y4 W Rx3<=Rx2;& k# F5 Y* C' g" q
-- Rx4<=Rx3;! X+ ^6 l7 K- \
Rx4<=(Rx1 AND Rx2) OR (Rx2 AND Rx3) OR (Rx1 AND Rx3); ---- 6 L- d- n# j0 ^' A$ v
-- CASE Rxfsm IS
9 f z8 f- T4 j -- WHEN Idle =>
, o, u* x+ Z1 U7 }! G+ ?0 x' t IF (Rxfsm=Idle) THEN
' K, U2 j% P/ d; A* m+ {$ i8 @ Par:=Bit_Invalid;( ?! I# w: i3 I, d$ m, I6 j9 F
Rxbitcnt := 0;
8 q6 _% n2 F3 } Rxrdyi <= Bit_Invalid;
! y* A6 H; G. y3 k Clrdivi <= Bit_Valid; + x# t* W% a c3 g' P/ q
' d6 @; u( e- |5 @) F5 Z5 ~& | IF (Rx4 = Bit_Invalid) THEN, J& c" E6 ?4 o0 K
Rxfsm <= start_rx;3 f+ m5 ~3 f' J4 N2 f! ]$ Q8 g+ |
Clrdivi <= Bit_Invalid;
$ H! J* k l! P1 X4 t% I END IF;
! j- p3 p3 o6 [( a7 z/ I6 F5 E& ] -- WHEN start_rx => 4 e1 M7 C8 B7 k
ELSIF (Rxfsm=start_rx) THEN
7 D2 l" W# o% C1 [7 P 8 r) V/ P0 y: N0 |' ~/ Q
IF Rx_Clk = Bit_Valid THEN
' L: a& E1 A% W4 b" S1 B( L: @ -- IF Rx_Clk_Reg="01" THEN# J+ ]' | w. Z4 X, a" W
IF Rx4 = Bit_Valid THEN - S8 Q4 q; e) e* o
Rxfsm <= Rx_Ovf;. B4 N) ]' ~4 M% |
Rxerr <= Bit_Valid;: w& H, Y0 {% a1 F. J
ELSE
- H7 o! |7 X, S. r) p, }7 e3 | Rxfsm <= Edge_Rx;/ h l1 l2 q& O. Q/ \1 E9 C
END IF;0 g) t/ z) H- i I
END IF;" i1 h8 B6 v$ \& h2 f5 d( U3 x# k
3 J& g* r, v1 u3 H& N -- WHEN Edge_Rx =>+ Q. k' ?8 ? z5 M! n/ x, a, o# ^
ELSIF (Rxfsm=Edge_Rx) THEN ' b" s1 G9 h0 }! d+ Q4 M
& L/ ?+ \% L! ? W IF Rx_Clk = Bit_Valid THEN* b6 C6 ?7 D, C
-- IF Rx_Clk_Reg="01" THEN
8 p) c+ [" ^. ^/ Q, o; n1 K+ a Rxfsm <= Shift_Rx;8 T; l9 F- A' C* l# f3 D. u
IF(Check_En="En")THEN6 P0 _% @; W7 o( [
IF Rxbitcnt = Rx_D_Width+1 THEN h( r4 l, p0 ^/ I
Rxfsm <= Stop_Rx;
1 H* F; a1 t" t8 N& T ELSE
2 \; \: t/ S6 r; d1 t% x8 J Rxfsm <= Shift_Rx;
8 X. ]! e: t) }) p- |6 x. t1 v END IF;
! r9 \7 l( n# [/ u# {, B m ELSE; \0 l- h: i, |2 j+ \4 b4 B4 H
IF Rxbitcnt = Rx_D_Width THEN ) B0 ~' f+ @# V& a+ _6 a
Rxfsm <= Stop_Rx;( G1 d3 @, b; [/ U6 S
ELSE) n1 t! M% F: Z% O2 H; |
Rxfsm <= Shift_Rx;
# Q. E1 ?) h* @" m- N END IF;7 u- u9 L4 F7 R0 Z
END IF;
" K& U. |3 [ Z$ ]: Z y END IF;
+ Q+ I, Q) w7 o$ F% @' K0 u |. K
3 k* a, \" B+ A! F --WHEN Shift_Rx =>
3 \6 e% \ J" e, z- e' ]3 H9 v ELSIF (Rxfsm=Shift_Rx) THEN ) O* O1 m4 k9 ~ U' N
4 T5 W% B$ l( G& [6 \* f IF Rx_Clk = Bit_Valid THEN5 W7 G6 f2 X: Y. Y8 D, V) s0 D
-- IF Rx_Clk_Reg="01" THEN
% V- T' D( r) d6 Z/ U Rxbitcnt := Rxbitcnt + 1;( P) O' q: |6 s4 U. H q! J
IF (Rxbitcnt=1) THEN% J6 {% ^: O7 a* C7 N
Par:=Rx4; - d V1 ]$ A7 X7 o, P
END IF; 0 f: \% \# d; I" t1 a- k" z& _
Rx_Reg <= Rx4 & Rx_Reg(Rx_Reg'high DOWNTO 1); 9 b# D; p, {' k! c- \
Rxfsm <= Edge_Rx;
7 c9 o' ?- g1 w0 B END IF;
2 B9 W$ z! ^- j --WHEN Stop_Rx =>
5 `* Z; ?, m$ l; ?; ?# d' }8 T ELSIF (Rxfsm=Stop_Rx) THEN ; g0 Z& c+ |/ `! E: r& [
4 b+ O/ R# r7 K2 D+ R9 v
IF Rx_Clk = Bit_Valid THEN
6 I) p# d7 T: M3 _
- T7 B7 a% R9 L- y) t. S IF (Rx4 = Bit_Valid) THEN
# c- t, X( D+ S! o( P Rxfsm <= Rx_Crc; * e5 ^& x4 f9 ^" ?: U
ELSE
1 R& d5 v" R! U. | Rxfsm <= Rx_Ovf; 2 A" L( H4 e; j+ T
Rxerr <= Bit_Valid;
4 u* r/ c: K& F8 @& P- e END IF;
( ~; {, `# j3 A7 z END IF; 8 y7 {8 y. [0 C8 o
-- WHEN Rx_Ovf =>. ?" p4 E) A: d4 t1 H/ O' I/ t
ELSIF (Rxfsm=Rx_Crc) THEN
, g$ ]! a& d3 c: ]% n/ n+ ~ FOR i IN 1 TO (Rx_D_Width) LOOP2 w7 C' ]& U8 P; m
Par:=Par XOR Rx_Reg(i);
* P: k/ \/ f& _) M; h/ ~6 w* d END LOOP;
3 m; t: G, ~# S* `; o IF ((Check="Even") AND (Par='0')) OR ((Check="Odd") AND (Par='1')) THEN
?1 K7 f# A- m; h" d2 z . X6 A$ X! n" F" g' c
Rxrdyi <= Bit_Valid;
6 W d! z, S, O0 ` ELSE/ \* b6 F4 w8 G8 f5 N0 c7 H* ?6 N
Rxrdyi <= Bit_Invalid;
/ H! G! a% [1 V3 S- J* h c Rxerr <= Bit_Valid;
+ @0 g1 H+ P/ @( M% L: m END IF; # m2 X/ Z- ~. i+ X
Dout <=Rx_Reg((Rx_D_Width-1) DOWNTO 0);
9 `: Q; R% \- {( s& o -- Rxrdyi <= Bit_Valid; ) f% |& [% Q1 `% c o4 J v
Rxfsm<=Rx_Ovf ;
X* U: K+ R' b9 Z5 x6 K ELSIF (Rxfsm=Rx_Ovf) THEN
' O7 V) o$ n. O% I- }3 \7 O9 x Rxrdyi <= Bit_Invalid;
! k, X: b) Y) o4 i Rxerr <= Bit_Invalid; 4 a4 s" Y7 J) o4 t$ [! }, f
-- Rxerr <= Bit_Valid;
! |: ^) v' l1 x M IF (Highcnt=40) then( E& [( H8 p) ]% p8 z
Highcnt:=0;
U! ]7 s' Y! ^2 j Rxfsm <= Idle; , N- J0 a) @4 J; ~8 ]8 j
ELSIF Rx4 = Bit_Valid THEN5 w; v) y" z+ X/ a$ W
Highcnt:= Highcnt+1; 1 R- I& V$ N V# v' g {6 I
END IF; . ]2 m; y! f, `
IF (Rx4 = Bit_Invalid) THEN$ [ N! q. v$ p4 }
Highcnt:=0;
! u. i, Q0 E4 I5 E, K* j END IF;
. ~7 X+ ?5 N7 z* D -- WHEN OTHERS =>5 V' ~* ^* t1 n/ q& q I: S- I6 G
ELSE: L8 X& Y: i7 w; M( w7 m
Rxfsm <= Idle; 2 z) b: e# l# H% h, M
--END CASE;( P* w/ ]1 c+ ]8 y' m+ h
END IF; ; ]7 M G: y6 }) \* M$ ?' z0 l" B) @
END IF;
# U2 K% T" W. S& ^6 {1 W% ^) U/ s* nEND PROCESS; * l" U; Z$ n/ z- Z6 p+ B, I
END Arch_Rx_Com;
/ ~2 N. d+ B5 b- n) s第二部分:7 l/ G" Z' k& p% m3 v( a' ]" I
串口发送部分
( p: c, W U3 G- p- Q+ w6 DLIBRARY IEEE;. {& n' o% P* \+ u( N, Q
USE IEEE.STD_LOGIC_1164.ALL;" D0 _9 O5 M* V( X
USE IEEE.STD_LOGIC_ARITH.ALL;
# Z# e" m' a5 v5 i% P9 [6 YUSE IEEE.STD_LOGIC_UNSIGNED.ALL;
/ f; J% J4 U2 R! J6 k--LIBRARY ALTERA;
; b+ N0 t$ V2 G, W* C--USE ALTERA.MAXPLUS2.ALL;
: b9 E3 W' m. g0 p" V- r* ?$ TLIBRARY LPM;
7 R. \( }! q8 f; W, P' MUSE LPM.LPM_COMPONENTS.ALL;# k3 K1 q, _, |2 |' e3 W; @+ ^
-- ***************************************************************************** e! q& F# [' i$ I* e8 `
ENTITY Tx_Com IS
T" j# T0 I$ M+ x! o2 C% Y) a+ q/ lGENERIC(Tx_D_Width : POSITIVE := 8; Check: STRING:="Even";Check_En:STRING:="En");2 t# S$ M" P6 }' T% u {6 J
PORT(
3 B- h: b% p9 M5 p: P Clk : IN STD_LOGIC;
4 `0 Z, p4 X, E9 i Rst : IN STD_LOGIC;
F$ P( e& Q; u7 k1 l4 w5 Z
$ G; o. Q) K2 x' U- z Tx_Clk : IN STD_LOGIC; ---------串口发送时钟 3 v b' l# f) x* v5 U2 \
Din : IN STD_LOGIC_VECTOR(Tx_D_Width-1 DOWNTO 0); ---------串口发送数据
# V A" j* |! M! C" v Tx_En : IN STD_LOGIC; ---------串口发送使能' u$ r" i: {# s! G+ `% Z
Txbusy : OUT STD_LOGIC; ---------串口状态
1 m5 w( @3 @5 z; p Star_Clk : OUT STD_LOGIC; ---------串口发送时钟使能. e6 x" M/ ` g3 M
Tx : OUT STD_LOGIC ---------串口数据按位发送
2 m2 o7 [/ L K% ], D2 F5 Z );
4 a$ Q& Y( b# aEND Tx_Com;0 G6 z/ |; r; w: [* B: k
-- ****************************************************************************6 X$ B! M+ Q6 b+ v1 k
ARCHITECTURE Arch_Tx_Com OF Tx_Com IS7 V# h( f7 ?0 N7 r, }, |1 h
CONSTANT Bit_Valid : STD_LOGIC:='1';; O; i) R1 X5 ^2 Q* e
CONSTANT Bit_Invalid : STD_LOGIC:='0';
1 w# g( [9 g5 @1 H5 [9 L, s6 U& U$ u- _% ?
CONSTANT Idle :STD_LOGIC_VECTOR(3 DOWNTO 0):=X"0";
2 A5 D: Z( ]6 {9 f b$ ?& {CONSTANT Par_Tx :STD_LOGIC_VECTOR(3 DOWNTO 0):=X"1";
" H% A7 d; e; O8 o' v5 vCONSTANT Load_tx :STD_LOGIC_VECTOR(3 DOWNTO 0):=X"2";
3 ^! m+ \3 F% u% ~CONSTANT Shift_tx :STD_LOGIC_VECTOR(3 DOWNTO 0):=X"3";/ z* u0 c, x L# v- }5 I
CONSTANT Stop_tx :STD_LOGIC_VECTOR(3 DOWNTO 0):=X"4";2 F; |- A$ d# ?
SIGNAL Txdiv : INTEGER RANGE 0 TO 10;
+ y. ?1 P N: WSIGNAL Regdin : STD_LOGIC_VECTOR(Tx_D_Width-1 DOWNTO 0);8 P: e, c& Y9 B" F# Z/ @# p& W$ K
SIGNAL Tx_reg : STD_LOGIC_VECTOR(Tx_D_Width+2 DOWNTO 0);
' ^1 W) k& c. I1 b) c. q: Y, \SIGNAL Tx_En_Buf : STD_LOGIC;8 R2 n7 g# \; w8 F& v- T6 w
SIGNAL Tx_Clk1,Star_Clk1 : STD_LOGIC;
* R# F, q. a$ rSIGNAL Tx_Clk_Reg : STD_LOGIC_VECTOR(1 DOWNTO 0);
6 _' V3 d8 `6 u8 D( q1 S9 Z' |
( c7 a u& B9 H5 Y& R& |: gSIGNAL Txbitcnt : INTEGER RANGE 0 TO (Tx_D_Width+3);
7 {3 s* e) A' o% s# \) G hSIGNAL Cnt : INTEGER RANGE 0 TO 3;
, t/ y: F3 r% p' c4 uSIGNAL Tx_Data_Buf : STD_LOGIC_VECTOR((Tx_D_Width+Tx_D_Width-1) DOWNTO 0);7 t7 j! g* W1 \6 f2 J
--TYPE STATE IS (Idle,Par_Tx,Load_tx,Shift_tx,Stop_tx); 7 \5 k' C5 S6 F: a" N/ E
SIGNAL Txfsm : STD_LOGIC_VECTOR(3 DOWNTO 0); ! X6 W7 w2 T K; O* _6 T2 e- ^
BEGIN
0 F/ M0 h) P0 W( j4 R! Z& @-------------------------------------------------------------------------------
0 u/ ~+ Y2 N4 z: V8 Z! y----- syn transmit with system clock-----------------------------------------------9 L- b# k- F3 L) W# d
PROCESS(Clk,Rst)
: K0 n6 A, I: }* d/ tBEGIN
$ H4 g- i' f+ N2 {IF (Rst=Bit_Valid) THEN
6 P( @; V; [( U7 ?+ Y3 q0 o--Tx<=Bit_Invalid;
* \" O, X: b( M. i" Y Tx<=Bit_Valid;
/ E# ]2 X( k/ m8 }ELSIF Clk'EVENT AND Clk=Bit_Valid THEN. S2 J e* U. ?# Q$ E4 i' ]
--IF (Clk_Work="011" ) THEN
+ d: w3 t* I4 y7 JTx <= Tx_reg(0);
^$ a7 t8 T4 E9 TIF (Tx_Clk='1') THEN
% X7 ?5 F/ v% b; m) E Tx_Clk_Reg<="01";* M/ N4 C. a- D2 Z
ELSE/ O' m$ Z: \* y& f2 W/ [
Tx_Clk_Reg<="10";
/ |1 s! o& x6 ?& x: E' q9 \END IF;
8 P6 g; r. I: T. x3 W+ Q* s4 {5 Q--END IF;
: p1 `8 E5 a. Z) q" E, h3 Y. E END IF;
8 I* C# S1 u7 N* ]2 H0 R) lEND PROCESS;
2 x) W8 s' ~2 s' R3 a4 [9 o [" _- r7 c4 Q- K" ^
-----Input Signal Delay a Clock-----------------------------------------------+ {9 N: r, @4 c5 \* J6 \
PROCESS(Clk,Rst)
' D, G. Q) ^4 r8 N, E! BBEGIN
: [! M ]* H g# {( l) I* LIF (Rst=Bit_Valid) THEN, K+ d6 e2 _/ i( N
Tx_En_Buf<=Bit_Invalid;
, _ O! u# p+ E9 E; M: W& X- ^ELSIF Clk'EVENT AND Clk=Bit_Valid THEN/ _5 L3 x0 m; u; W$ ~7 t
--IF (Clk_Work="011" ) THEN5 f9 F, G$ w1 e: z2 y6 x3 d2 g
Tx_En_Buf <= Tx_En; 7 W* M2 Y& E0 Q3 v
--END IF;8 G0 \" u% [: D8 B2 H7 }
END IF;
" M8 L2 K0 d4 a" W1 uEND PROCESS;
* X) g( F* f4 s% x% }--------------------------------& p: g s! E' ^3 i' u
-- Tx_ FSM
: ]5 H ^4 \; e--------------------------------$ Z: ^+ z( w" D+ y/ a! y
PROCESS(Rst,Clk)$ V; l+ U3 T% B' h
VARIABLE Pari: STD_LOGIC;. s* t, l, V0 S( q. O/ _
( m) C2 P! U+ P2 q- `, {8 u6 iBEGIN% b& N8 W% u5 d1 C& t8 ^
IF Rst=Bit_Valid THEN: J4 I1 I4 _2 {. H4 _4 ]
Tx_reg <= (OTHERS=> Bit_Valid); . {, V% f+ A/ Z3 |
Txbitcnt <= 0;! M ]$ Y$ n/ r
Txfsm <= Idle;
& F3 d3 `: R2 f2 A Txbusy <= Bit_Invalid;) V+ X8 [; P2 @
Regdin <= (OTHERS=> Bit_Invalid);
8 G& e; B6 d& m# h8 |# n0 S Star_Clk<=Bit_Invalid;- u5 h: @4 e5 H( l5 P% e/ Q3 p8 X
Cnt<=0;1 L. h( {/ O$ ^) D
ELSIF Clk'EVENT AND Clk=Bit_Valid THEN
$ f+ `$ N7 H* N* n E -- IF (Clk_Work="011" ) THEN1 z' e4 }6 e# E: _( o0 k
IF (Tx_En_Buf=Bit_Invalid) AND (Tx_En = Bit_Valid) THEN2 U& N% x' a% u) N! p
Tx_Data_Buf<=Tx_Data_Buf((Tx_D_Width+Tx_D_Width-1) DOWNTO Tx_D_Width) & Din;3 c6 ^/ z- Q: K1 h$ Q
ELSIF (Tx_En_Buf=Bit_Valid) AND (Tx_En = Bit_Invalid)THEN3 c% c$ X" Q6 V, @
Tx_Data_Buf<=Tx_Data_Buf((Tx_D_Width-1) DOWNTO 0) & Tx_Data_Buf((Tx_D_Width+Tx_D_Width-1) DOWNTO Tx_D_Width);1 w$ q. ^, `+ C& N
Cnt<=Cnt+1;
0 h4 t1 }. j3 ^7 } ELSE9 @3 J5 q* W4 f' ^2 y* x6 W+ O
Tx_Data_Buf<=Tx_Data_Buf;3 i3 X7 S4 V& W% j
END IF;
4 R; b4 W: W8 k8 e2 g
, G8 J! ]( V9 c! t! K+ S --CASE Txfsm IS
X6 u- l6 @9 Z* p/ x& y
% ~; o8 g2 y1 z6 T7 R -- WHEN Idle =>9 \3 j0 C4 J0 o7 P3 l+ }/ K8 M0 \
IF (Txfsm=Idle) THEN
- I T N3 U& L# a$ @6 G4 l% U Star_Clk<=Bit_Invalid;
; A" m0 O# S5 X% _$ Y Tx_reg <= (OTHERS=> Bit_Valid);
. C+ i) O% a3 M- i2 L; x IF (Cnt>0) THEN! @$ j2 e: F8 a6 _
Regdin <=Tx_Data_Buf((Tx_D_Width+Tx_D_Width-1) DOWNTO Tx_D_Width);
) u7 N D" C0 d. r2 l% _' d Pari:=Tx_Data_Buf(Tx_D_Width);( Z, ]7 \3 X+ F2 i" F% z
Txbusy <= Bit_Valid;
; q3 O' v2 B$ B% a: k# D Txfsm <= Par_Tx;" F; ?; Y; P: }) o m% e
Cnt<=Cnt-1;) {4 U# c, ~6 @/ o' v1 g7 W
ELSE4 `0 C. D1 D) ]4 A) w' M
Txbusy <= Bit_Invalid; 3 R9 V7 T; P" }5 X, @. I/ s
Txfsm <= Idle;* q/ X$ a" n6 A1 S/ F" w. {) f
Regdin<=(OTHERS=>Bit_Invalid);
+ q) M& W: i% O! B Pari:=Bit_Invalid;
6 E- \6 H, k) T7 x3 h. P END IF;8 B: i) I+ p+ {
--WHEN Par_Tx=>
, i9 j1 ^4 t/ M ELSIF (Txfsm=Par_Tx) THEN2 e! A7 {5 J& Z$ b8 |
FOR i IN 1 TO (Tx_D_Width-1) LOOP7 k5 Z5 d4 h/ K' {4 r
Pari:=Pari XOR Regdin(i);" `! D1 F! j9 W# b0 Q$ O
END LOOP; ! M! K; i5 H! `3 W3 t
Txfsm<=load_tx;8 q/ Y" P! r0 f+ l
Star_Clk<=Bit_Valid;
`0 X. J( j7 p: z; J$ D
6 H: [1 j1 c. D: k+ Y --WHEN Load_tx => 9 T" N( [2 E" c$ h
ELSIF (Txfsm=Load_tx) THEN
* n: F; C/ p" {# x( x# _. { --IF Tx_Clk=Bit_Valid THEN
- w4 t8 Z! q) g IF Tx_Clk_Reg="01" THEN
- j( u2 m5 w! A6 ~9 H# e: ^0 \ Txfsm <= Shift_tx;0 \/ M1 i$ E# f# [3 R/ Z& R1 S
IF (Check_En="En")THEN
9 @: S; u1 _/ ^. d Txbitcnt <= Tx_D_Width+3; 3 o2 d1 d" t* }+ A
IF (Check="Even") THEN3 y/ J) @1 \* M9 V) s
Tx_reg <= Bit_Valid & Pari & Regdin & Bit_Invalid; 3 r9 R# {$ m+ k
ELSIF (Check="Odd") THEN8 @) T1 B$ M' y6 Y9 m: A9 H
Tx_reg <= Bit_Valid & (NOT Pari) & Regdin & Bit_Invalid;
/ j2 ?/ x: Q0 F2 A END IF;
; J; N5 _3 x2 `* F& R ELSE l4 `: }' A- f
Txbitcnt <= Tx_D_Width+2; % g6 P7 S- p9 `6 v) U9 D& R
Tx_reg <= Bit_Valid & Bit_Valid & Regdin & Bit_Invalid; 7 y$ {) \3 {; f( t3 g" l; o
END IF; : l" Q8 t' ^0 t( Z' N
END IF;" x+ @6 t3 @8 C0 a
--WHEN Shift_tx =>" E' p3 I: @2 b0 E* H
ELSIF (Txfsm=Shift_tx) THEN1 c8 n$ y& |0 h) y8 e( F7 x
--IF Tx_Clk=Bit_Valid THEN6 }; D" F! |! x( l; z9 l7 ?
IF Tx_Clk_Reg="01" THEN
; x7 p; L) T G' { Txbitcnt <= Txbitcnt-1;: k% E1 ^) ]& l8 r
Tx_reg <= Bit_Valid & Tx_reg(Tx_reg'high DOWNTO 1); " {# ~' V. T1 i" e
IF Txbitcnt = 1 THEN
- G+ n- g8 L' F; H. v" {/ t5 T5 B Txfsm <= Stop_tx;7 @6 [3 |7 i' d
END IF;- E- G/ k0 z+ o7 \+ M
END IF;
! H6 I7 K: C h$ i" n- n 0 j7 ^8 r- F b8 F- \
--WHEN Stop_tx => ) h z! `. P- ?: O4 m- D
ELSIF (Txfsm=Stop_tx) THEN
* d& }: h* D# v0 P! c: w# B. I) a
3 \; B$ P% s, o. g; q+ Y Txfsm <= Idle;
8 ?; x/ Q& d- E. a/ P5 F/ V -- WHEN OTHERS =>
$ _5 M& ^: V/ j' T1 [$ x ELSE
/ U6 q z; r% [ Txfsm <= Idle;
& B. S$ S W/ A* o --END CASE;
) g$ U) N$ B! I" R5 i8 R- d END IF;
! R4 _' ]3 b- G4 z# \8 K END IF;
" }; N6 a, q0 ] -- END IF;. m! Y$ l! S5 b+ [
END PROCESS;& `+ O: s- [. F1 I7 J n: ?' c* ]% k
END Arch_Tx_Com;
a8 y, G- o- P% i# ?- o `) ?第三部分:& Y0 Y. y' V3 W4 |6 u9 M+ o4 D3 B
串口时钟产生
+ e) D/ E/ O4 ]8 f5 sLIBRARY IEEE; n, i8 y2 d0 O0 g1 P, X
USE IEEE.STD_LOGIC_1164.ALL;) _( m/ j# ^0 Z1 o% z
USE IEEE.STD_LOGIC_ARITH.ALL;
1 q1 e; X; e# T% |USE IEEE.STD_LOGIC_UNSIGNED.ALL;" d3 [5 d* u1 e4 e0 j' g5 N* S, m
LIBRARY LPM;, Z0 f7 I" E# f0 p% G- e- i4 t
USE LPM.LPM_COMPONENTS.ALL;& o c& b6 v, E* N7 H- O4 l7 z
-- ****************************************************************************+ d) V s* Y- G6 `% Y8 L$ A
ENTITY Uart_Clk_Generate IS
7 H1 E; G* q9 X' `) ^7 }, v) e GENERIC ( Baud_Set:INTEGER:=19200);* O5 P/ H( a" Q) z. h0 c ]
PORT(
4 f$ b" i1 c, f! f Clk : IN STD_LOGIC;
; l' L4 Y# W& r9 _0 d- I/ e Rst : IN STD_LOGIC; - L' ^! Y9 J! ^' B# }
Star_Clk : IN STD_LOGIC; 6 a0 T" q- p- I6 p/ e
Clrdiv : IN STD_LOGIC; : U! B$ ^' `- e& |/ C2 u
Tx_Clk : OUT STD_LOGIC;
! f3 B. K$ o8 g& I1 Y( j+ K1 y Rx_Clk : OUT STD_LOGIC
7 }2 p" W& P* T );
3 T) y+ q# O: D4 L1 f' J$ MEND Uart_Clk_Generate;: D" F/ M2 x; T* m
-- ****************************************************************************
" @9 V2 g6 A( E, dARCHITECTURE Arch_Uart_Clk_Generate OF Uart_Clk_Generate IS+ C) u" H) z, Q, X# B# Q( }
CONSTANT Bit_Valid : STD_LOGIC:='1';1 l4 z9 C6 g- s2 Y n
CONSTANT Bit_Invalid : STD_LOGIC:='0';6 F/ H4 V9 N, A. j* j+ e2 x
CONSTANT BuadSet : INTEGER RANGE 0 TO 1042:=1042;
# D! I6 n! v0 w. \8 `; iSIGNAL Txdiv : INTEGER RANGE 0 to BuadSet;9 V) A1 T, y* W" h4 ^0 b( @
SIGNAL Rxdiv : INTEGER RANGE 0 to BuadSet;$ y3 a' v# y7 t G1 B& [1 k
SIGNAL Tx_Clkset : INTEGER RANGE 0 to BuadSet;
: k2 `; E* p3 s: w( ISIGNAL Rx_Clkset : INTEGER RANGE 0 to BuadSet;2 q* n0 D# s5 B% n, y
BEGIN% G: g7 L- E' t9 x7 p
-------------------------------------------------------------------------------
, p/ m) E3 M+ r- C' _. }' Y& J% Y5 C--------------------------------' I. u* J$ e0 P) n6 J3 g* L* |
-- Buad Produce) I; K. H1 I4 A
--------------------------------: P7 t q, U) z7 h* ^
Buad_Produce ROCESS(Rst,Clk); S; s: w( i( j( d. f
BEGIN
: Y/ W- `1 r) n( i& w! X IF Rst=Bit_Valid THEN
# {/ z& {1 |6 l! p. F+ y! ? Tx_Clkset<=0;
2 x9 L* R3 [7 K, l9 |1 C0 r Rx_Clkset<=0;7 t6 g1 Q) s5 D. W2 ~4 o9 q
ELSIF Clk'EVENT AND Clk=Bit_Valid THEN$ ^- ~1 _8 x, _/ `$ Z! `5 Z% ?* j
CASE Baud_Set IS
, W0 w7 R8 g+ X! \ WHEN 19200=>0 M; U3 Q/ O! j* s( m2 L% R
-- Tx_Clkset<=2604; ---50HZ8 X' a5 A! k7 h% f7 ?0 K
-- Rx_Clkset<=1302;
* u' H4 j1 H* l Tx_Clkset<=1042; ---20MHZ
0 l' Q1 J$ G/ }! D, b0 @ Rx_Clkset<=521;) n5 ~0 t. U8 f9 y3 p
WHEN 9600=>
$ w$ {; \0 Z" D% i+ j# f N -- Tx_Clkset<=1042; ---20MHZ5 C! x9 p5 d* }! w" Q& G
-- Rx_Clkset<=521;
+ u: a6 ?" p8 X4 m WHEN 2000000=># F" w5 z7 ? a# k8 c2 O8 ^
Tx_Clkset<=10;/ S# h4 ?: X1 D, r8 L
Rx_Clkset<=5;2 P. l, j, [7 a0 V
WHEN 62500=>: j& n9 |* s b9 ~/ _) |7 K4 t! o
Tx_Clkset<=320;
& P6 {) a9 p/ u( a# ~& r1 Z4 z Rx_Clkset<=160;) j# r. |( B+ o
WHEN OTHERS=>
, ?/ Y$ S. W! u7 a Tx_Clkset<=1042;
: `" T% V1 K; v! J1 \; t Rx_Clkset<=521;
% Y0 q) W8 s; q$ {2 p* g2 j END CASE;; l) a5 g" k p6 q
END IF;
8 | d8 H, U% Q9 H: BEND PROCESS Buad_Produce;) G8 E) q$ N1 ]
- Z# p8 Q Q9 u! w3 ^+ f' e--------------------------------% w1 n& c2 P: H
-- Tx clock generation
7 H* o1 q5 d K( B--------------------------------
: \# M! \; c4 A3 y2 P8 S4 gTx_Clk_Gen ROCESS(Rst,Clk). l5 A# t2 M* f, F
BEGIN2 P% Y0 {7 E/ a0 d
IF Rst=Bit_Valid THEN! {) @8 ?0 i) k0 z- S9 v
Tx_Clk <= Bit_Invalid;( x* G6 D, _5 v
Txdiv <= 0;) }& k- s5 K; U3 n( q+ @
ELSIF Clk'EVENT AND Clk=Bit_Valid THEN 0 G$ a$ B2 K( {5 N& h/ N+ G
IF Star_Clk = Bit_Invalid THEN& a8 _/ X; Q* S& V1 W7 H
Txdiv <= 0;
" r4 T& G( i: [' Y ELSIF Txdiv=(Tx_Clkset-1) THEN/ k- h: \1 Y! y) N& w
Txdiv <= 0; ' T& ^ I4 L- m+ K* y
ELSE
6 u2 v) e4 E( p9 I: `+ ?3 E IF (Txdiv=0) THEN
) }8 {! E9 x! s2 C" T' K" ]$ s Tx_Clk <= Bit_Valid;
+ a6 K; A! E1 R' ^0 H" Z8 [+ v5 n ELSE; D* N- D* f# }8 Z
Tx_Clk <= Bit_Invalid;
6 l% \: d) l4 \ END IF; 4 d- A; J- \8 c7 e: E$ P' K2 p
Txdiv <= Txdiv + 1; 9 A8 P6 W: o y H/ ?0 f7 t
END IF;" R( Y Z: y- n( p
END IF;
8 b% |% l- G: m" f* n8 |8 v3 zEND PROCESS Tx_Clk_Gen;
( R2 T2 c+ i0 P$ E! @. n--------------------------------
9 Z% E+ \- y+ K5 X: O-- Rx sampling clock generation9 A: o' o ~8 }. L5 f3 K1 I
--------------------------------
! D# i# } S7 ` P; n, RRx_Clk_Gen ROCESS(Rst,Clk)
7 z7 U' w. N, F+ _- K) M2 QBEGIN: m; K) m, j0 j" W$ M: i8 i+ K
9 X" @# q" f) k, X% D IF Rst=Bit_Valid THEN* \* _" z7 w4 s; y' j4 v
Rx_Clk <= Bit_Invalid;
8 T, h8 R% z3 O, b Rxdiv <= 0;/ @8 B& m& K. {$ h2 P
ELSIF Clk'EVENT AND Clk=Bit_Valid THEN
$ j9 |7 S! f1 d; Q Rx_Clk <= Bit_Invalid;" N* e7 m" V! n; H& |
IF Clrdiv = Bit_Valid THEN
- e; V* `/ @. N( [1 [ i" U Rxdiv <= 0;
' G' ^* c$ F. G7 ^9 B, O, J* K0 D ELSIF Rxdiv =(Rx_Clkset-1) THEN
: s) E! F% M9 j Rxdiv <= 0; 7 D7 M: T. T2 W: q# U8 I2 J( d8 {
Rx_Clk <= Bit_Valid; ( W( J! l! i& \2 q2 Y% P! Q. G
ELSE: Z) k. B; l4 Z; R) ~
Rxdiv <= Rxdiv + 1;
3 L, m3 _! |0 I. R, ^1 ?/ L) {7 p Rx_Clk <= Bit_Invalid;
: w* K/ Y9 ^4 c# h3 S. X END IF;
6 Y' T# Z w5 s- l4 [# `5 B
5 H. B% a7 e6 Y8 n END IF;. Z9 Y" h% a$ t9 T2 w" `9 n4 p
END PROCESS Rx_Clk_Gen;
4 r- ^% @# N! E# P! K2 i7 h6 o# Q7 j-------------------------------------------------------------------------------' a0 ?) v( W" Y% m' v* t6 m
END Arch_Uart_Clk_Generate;
1 |1 H+ ~$ _* f" A: ?% J第四部分:串口子程序调用
' ~' p! R! F! A' ]( qLIBRARY IEEE;+ I5 _1 c1 Q% d, k6 `. u; ?
USE IEEE.STD_LOGIC_1164.ALL;+ ?: a; {, C/ o `" r! {' j% M
USE IEEE.STD_LOGIC_ARITH.ALL;
5 \* K/ G* E5 C" p4 EUSE IEEE.STD_LOGIC_UNSIGNED.ALL;
* L% h. s' O3 t5 KLIBRARY LPM;; n# O4 v+ r# t
USE LPM.LPM_COMPONENTS.ALL;* d5 S0 M& \1 R+ t3 P
-- ****************************************************************************
0 r6 k1 v' Q! C% y, y/ b$ u7 IENTITY Uart_Gen IS
; R0 U. A: W6 M) u. ?; {. q! V GENERIC (Rx_D_Width: POSITIVE:=8;Tx_D_Width: POSITIVE:=8;Check:STRING:="Even";Check_En:STRING:="En";Baud_Set:POSITIVE:=19200;Module_En:STRING:="Enable");+ R+ l5 N# @+ ~
PORT
& N( f$ ]0 x* {# E$ `( M (Clk : IN STD_LOGIC;. M* Y$ F4 N" r0 z, x
Rst : IN STD_LOGIC;
1 k1 G; h1 P( L! ~" y Tx_En : IN STD_LOGIC;
3 |# Q' ^" j6 ]; G Tx_Data: IN STD_LOGIC_VECTOR(Tx_D_Width-1 DOWNTO 0);& Y6 k8 d5 _3 y2 D3 I6 v
Rxd : IN STD_LOGIC;5 t5 e; Q4 e3 K0 ]. V8 I
Txd : OUT STD_LOGIC;' z7 r: ]$ x, W. m; `0 i% J# N; E
Tx_Busy: OUT STD_LOGIC;
4 G9 N0 ?" E) f- w0 Z6 {# L+ K Rx_Rdy : OUT STD_LOGIC;5 p4 z7 A0 d( B0 c4 a7 F7 j
Rx_Data: OUT STD_LOGIC_VECTOR(Rx_D_Width-1 DOWNTO 0);
8 Z. X3 c8 o3 U Com_Err: OUT STD_LOGIC
$ R4 r, i' Y; }" m# l% y );6 S! O; p" C9 u8 Q4 g0 S' D
END Uart_Gen;
, W2 D. c# ]9 TARCHITECTURE Arch_Uart_Gen OF Uart_Gen IS
. p- S5 N0 e) S, Q8 t
7 @1 u' k+ Y& Q1 n2 f COMPONENT Uart_Clk_Generate IS2 {- q8 g/ Q0 S3 J; j5 p
GENERIC ( Baud_Set:INTEGER:=19200);7 Q+ | T) L" p3 y
PORT() X0 o1 g8 c# Z9 }# c. N
Clk : IN STD_LOGIC; 5 w o8 F6 U" H- C2 M) k
Rst : IN STD_LOGIC;1 d$ C6 X5 z# O3 q7 [
Star_Clk : IN STD_LOGIC;
7 M' B- o# K5 p0 k Clrdiv : IN STD_LOGIC;
, \6 H% A% Q# ]2 X& G1 Q3 q! X Tx_Clk : OUT STD_LOGIC;
& y7 Q4 _7 x$ \& V/ W* M# ? Rx_Clk : OUT STD_LOGIC
: ]/ R& W$ o \: T0 g, q8 {5 ? );
: }. G) @4 l+ O6 Z" }0 ~ END COMPONENT;- K0 {. e/ K" N6 U' j! X0 Y# v- V
COMPONENT Tx_Com IS/ P- c# s2 c; v" H: a
GENERIC(Tx_D_Width : POSITIVE := 8; Check: STRING:="Even";Check_En:STRING:="En");
9 N h! I3 z% d+ N PORT(
" R- h6 i5 K# m7 L3 c( K4 {3 D Clk : IN STD_LOGIC; 8 i" Y" B0 {' H0 f6 C1 j6 o" O
Rst : IN STD_LOGIC;
" u. q6 s% i! l1 x" t Tx_Clk : IN STD_LOGIC; # K4 O, ~3 \. a4 Q6 h
Din : IN STD_LOGIC_VECTOR(Tx_D_Width-1 DOWNTO 0); 6 v1 F+ Q& d& p% w, ?
Tx_En : IN STD_LOGIC;
! ^- r. Z& U( l3 s) _ Txbusy : OUT STD_LOGIC; $ d' s6 Y& ~# r0 I& `
Star_Clk : OUT STD_LOGIC;
, j" X: P, o$ H Tx : OUT STD_LOGIC 6 r# p4 ]# S& L8 D' j3 X
);/ ?* R+ m# M, O
END COMPONENT;
6 Z. v+ l$ ~; i% C1 T3 M! o ! ~5 ] d- [! G
COMPONENT Rx_Com IS
6 I. C+ s0 x u/ j6 Q, J GENERIC (Rx_D_Width : POSITIVE := 8;Check:STRING:="Even";Check_En:STRING:="En");
4 [3 o4 a4 Z g PORT(
5 X0 u$ v/ v$ O* H# L0 l Clk : IN STD_LOGIC;
$ C1 ]1 {- W$ Q8 _ Rst : IN STD_LOGIC; # q4 L5 o) S6 |) M6 Q( z- S3 t0 `
Rx_Clk : IN STD_LOGIC; 7 f, q9 i# `, ^8 N& x
Dout : OUT STD_LOGIC_VECTOR(Rx_D_Width-1 DOWNTO 0); , C# E# v5 A( q. w
Rxrdy : OUT STD_LOGIC;; q* Y9 I' Q! d; C) n& F- Q9 G# O" A
Rxerr : OUT STD_LOGIC;, C' C w9 {0 {' s- a3 N
Clrdiv : OUT STD_LOGIC;
( X' K" n4 r) B Rx : IN STD_LOGIC 3 a( T' X9 a* I5 H5 m5 r. }0 {
); 2 a" \9 W" @+ T1 l
END COMPONENT;
# V( }$ d% p* e+ P( L8 O' i
0 Q' F2 V! L) h2 t1 \ SIGNAL Clrdiv_Buf: STD_LOGIC;
5 G9 b/ N; N6 y- ~4 Z: i/ ? SIGNAL Star_Clk_Buf: STD_LOGIC;
" C6 H) N. c e y& _+ P) f/ q" G SIGNAL Tx_Clk_Buf: STD_LOGIC;/ N o0 W* d) U9 Q# X t- R3 B
SIGNAL Rx_Clk_Buf: STD_LOGIC;
+ @6 e$ l. u& |* q
n/ c: n+ O3 G! T BEGIN3 m* U; s E e2 k9 \
Uart_Gen:IF (Module_En="Enable")GENERATE ! s! R6 Y ?' \4 q: g
Uart_Clk_Generate_Ins:Uart_Clk_Generate) I- ~. o% E2 W( c/ C; b9 Q
GENERIC MAP (Baud_Set=>Baud_Set)0 P1 i$ y- w0 x2 T- B% U- ]* F
PORT MAP5 N+ l8 \* p q: n
(
3 J/ U1 G5 A; N |$ I1 B Clk=>Clk, : {7 n9 I$ m$ U& d+ h
Rst=>Rst,
6 `! i4 N9 J& z5 E9 K" s Star_Clk=>Star_Clk_Buf,
, M( H" O& t1 N8 a Clrdiv=>Clrdiv_Buf, * O- `& f# }" |7 ~
Tx_Clk=>Tx_Clk_Buf,
6 C$ t; G4 J& ]" T Rx_Clk=>Rx_Clk_Buf 8 @) s8 R* F( d. e8 I. A
);
( J! s; ?* }/ a. u# F7 r ; `+ g) u# Q. q4 J8 \9 H3 p
Tx_Com_Ins: Tx_Com
0 L% u' H+ z# x- J1 H GENERIC MAP(Tx_D_Width=>Tx_D_Width, Check=>Check,Check_En=>Check_En)
1 B8 s; L$ N/ g! j PORT MAP(
: u: W8 j! [+ `- W9 A! q Clk=>Clk, 8 X8 M! v y; e+ o5 T' s- ?
Rst=>Rst,
% ]1 Z3 u1 T1 {! e& k Tx_Clk=>Tx_Clk_Buf,
" T. c4 B* u7 H1 t: V Din=>Tx_Data, ( j" m$ C9 q% s1 A" s% e6 [
Tx_En=>Tx_En,/ Q$ B$ t% l0 a6 G" r. d! _2 _
Txbusy=>Tx_Busy, 1 Z( b4 \( `& g7 e5 g W+ j. k
Star_Clk=>Star_Clk_Buf, 1 r! N8 q+ ?6 I# s
Tx=>Txd 5 f; \* R6 c" o$ k& U) D" Q
); 6 `# g4 O ]& J, m# {
Rx_Com_Ins: Rx_Com
- j! {+ J9 h: F9 I; O GENERIC MAP(Rx_D_Width=>Rx_D_Width, Check=>Check,Check_En=>Check_En)
4 H) P& M; m% H$ w" S PORT MAP(5 @" I; G5 E! |. ~$ }1 r/ W8 ]
Clk=>Clk,
3 c" y, W7 ~- u& C! z Rst=>Rst, 5 D8 E2 J8 C: }; `9 G
Rx_Clk=>Rx_Clk_Buf, b `( b2 b2 F$ c% s/ ^
Dout=>Rx_Data,
1 Z# ^) F I. M0 A" W8 y5 d Rxrdy=>Rx_Rdy,
9 V& e" W* x) [6 s0 ]' b Rxerr=>Com_Err,' e! X9 v t4 U7 T/ F* |: o
Clrdiv=>Clrdiv_Buf,
( }8 `: H+ C" P/ [, ? Rx=>Rxd # r* g+ _( L9 c+ l$ s1 d F& X* |
);
8 b: b; W. W+ p" l+ k END GENERATE;/ S' F, w* I; I
END Arch_Uart_Gen;
. O* @ `9 h1 W2 N
' P) ~. V2 p$ ?% z& K+ C( @, _ |
|