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

通用的串口VHDL 源程序设计

[复制链接]

该用户从未签到

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

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_ProduceROCESS(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_GenROCESS(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_GenROCESS(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( @, _

该用户从未签到

2#
发表于 2019-6-3 17:05 | 只看该作者
楼主这个代码你验证过吗
  • TA的每日心情
    开心
    2023-7-4 15:39
  • 签到天数: 528 天

    [LV.9]以坛为家II

    3#
    发表于 2021-3-16 21:44 | 只看该作者
    这个代码你验证过吗

    该用户从未签到

    4#
    发表于 2021-3-31 16:29 | 只看该作者
    谢谢分享,学习了!

    该用户从未签到

    5#
    发表于 2021-5-24 10:29 | 只看该作者
    楼主的这个代码有验证过吗?( @& g( J! X6 n2 N
    + B1 d3 j) P4 P3 i7 C/ r
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-11 19:17 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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