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

cpld与8051的总线接口vhdl设计源码

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    本帖最后由 Allevi 于 2018-12-6 11:14 编辑
    / r& D" H1 A8 H" Q
    * @( W' P: z* a; l" W
    cpld与8051的总线接口vhdl设计源码
    # P( C( B$ I, W' c3 n- Q/ h
    library IEEE;/ }# }3 s8 F9 {2 a3 s3 ]
    use IEEE.std_logic_1164.all;) ]: ]! y( b% F1 L
    use IEEE.std_logic_unsigned.all;, _" {; p& F* M. w! z; ]- ~
    entity cpldbus51 is" C, a1 N* D1 T/ U- y( x+ @
    port (            . W" }; c" T. Q" ~8 D" R3 s
      Clk: in STD_LOGIC;                     --Clock    16MHZ  2 T# n+ X9 C& [* c( p6 n1 r& N
      Clr: in STD_LOGIC;         --Clear   high
    " r" `4 k, h' D9 w8 c& ?  P0: inout STD_LOGIC_VECTOR (7 downto 0);   --8052 Port 0
    . s% ~7 d3 A, K6 c  P2: in STD_LOGIC_VECTOR (7 downto 0);    --8052 Port 2
    7 k/ Y  ~( \. U  ALE: in STD_LOGIC;                         --8052 ALE; g" B5 D' U# [  @  u9 F! S
    --  PSEN: in STD_LOGIC;         --8052'Psen
    $ h1 R% a+ G9 I' P1 c+ ]--  INT0ut  STD_LOGIC;                       --8052 INT0
    $ F" h! p1 X3 @$ u4 [5 \6 i. G  Wr: in STD_LOGIC;         --8052'Wr- l- L8 z* P# r$ K+ v( I% C
      Rd: in STD_LOGIC;         --8052'Rd. Y8 o; \7 c; q* E9 M& E
    ---------------------------' |! v: y) X$ [& c/ Q$ Q1 d( ?
      Pinaut STD_LOGIC;                     ---output 5 O7 v5 ^: e7 f* H& v
    -----------------------
      Q" n: b7 O' ?! s; u) A  nCS8255: out STD_LOGIC;           --select 82550 d- ^3 O7 p. h
      RamBank: out STD_LOGIC_VECTOR (1 downto 0);--Ram68128a bank switch   A15 A16% M2 B. P' ?: P3 X3 P0 t9 R
      nCsFlashRam: out STD_LOGIC;       --select Flash Rom   CE0 ^, n0 f) u& j1 H/ |! ]" n" P
      FlashRomBank: out STD_LOGIC_VECTOR (2 downto 0) --Flash Rom switch  A14 A15 A16
      q: _. c0 ~2 z/ s+ ^6 |; J. O; I- |  q; I& w
    );
    / O0 Q  X6 B$ T6 M/ H. _1 kend cpldbus51;
    ( c' Z/ P+ Z; k7 l( J7 Y
    8 e! S' Y! a; ^( p( y+ }! F" ]: Larchitecture cpldbus51 of cpldbus51 is           . X  H. _5 O5 e3 x, }
    ------------------------------------------------------------------------------5 I7 h% C5 Q$ P8 ]" z, a+ B
    signal Addr: std_logic_vector(15 downto 0);  --16bit address
    % L. b" R  f1 p( asignal ALE_Sample:STD_LOGIC;
    $ g" }8 g- U* m) r8 b+ ~6 {signal RamBankReg: STD_LOGIC_VECTOR (1 downto 0);--Ram bank switch reg, 4 banks, 4*32K=128k bytes/ k" m% K. n) B. x7 B
    signal FlashRomBankReg: STD_LOGIC_VECTOR (2 downto 0);--Flash Rom bank switch reg, 8 banks, 8*16K=128k bytes
    . q7 a6 T/ Z+ V0 H--Rd Sample1 K. k% |9 t) P; B$ W
    signal RdSample:std_logic; --for Rd Sample. Q0 H2 X6 e: K  C8 Z+ e3 U5 N
    --WR Sample 1 A! q' Q. P) q/ m$ E
    signal WrSample0:std_logic; --Wr for Sample / u% O' I: A, ?' q
    signal WrSample1:std_logic; 7 ?* L" l1 P- b. p. a5 x! t, t
    signal WrSample2:std_logic; + y2 j3 ~/ w% f* f5 w
    signal WrSample3:std_logic;( _, u, I+ x! R: o( p7 N5 @
    signal WrSample4:std_logic; 1 w# Z& L6 L4 K9 K& g3 t9 a
    signal WrSample5:std_logic;" d1 ]6 h; c& L% m
    --Wr Sample output
    , A# Y4 o8 `5 ]7 E& K* V. q" ?signal Wr_en:std_logic; 6 u9 }$ x/ z, g4 S
    --Clr Sample . X1 y4 b# a1 O. U
    signal ClrSample0:std_logic; -- for Clr Sample
    6 K/ |# f, a+ Q  E- J- p6 m& `) Qsignal ClrSample1:std_logic; & B4 D2 j  H  i* c" O
    signal ClrSample2:std_logic;
    ) f2 U1 \/ v2 A6 c  N/ b0 H4 lsignal ClrSample3:std_logic;+ s3 U5 \( W! A/ `; x
    signal ClrSample4:std_logic;
    , n  c* f6 {; l0 x% Nsignal ClrSample5:std_logic;
    7 g4 Z6 q+ Z! Hsignal ClrSample6:std_logic; - G* S( t- p0 x+ s( n; n
    signal ClrSample7:std_logic; & M* v, E1 j9 \/ q+ J" s; @) P
    signal ClrSample8:std_logic;# `/ f% }4 R' j
    signal ClrSample9:std_logic;
    ! P4 M8 {( q& G* G, G--Clr Sample output
    & V2 P7 f' h) p+ [9 r0 a( tsignal Clr_en:std_logic;
    2 F( ]6 E2 V( ^) S4 {------------------------------------------------------------------------------+ e1 P1 E, Y+ U0 E  C
    --output Reg! o. M1 s  Z4 G3 X+ L, C5 H$ y
    signal PinaReg:std_logic; 1 k9 I+ r% @; R
    begin  2 h( P, `3 v& z' y( I
    --------------------------------------------1 A& g3 S9 o1 Q
    --Sample Clr signal  / f$ \& I2 E& w8 ^) R# X
    ClrSample_p:process(Clk), A) S5 v+ R9 _8 W
    begin# O* r; j$ J' K: A- N# ?) U
    if Clk'event and Clk='1' then0 {2 z4 a& F7 F9 |
      ClrSample0<=Clr;
    9 U. [: J  J+ }  ClrSample1<=ClrSample0;; m2 N; t' \' _9 t: E' {! |
      ClrSample2<=ClrSample1;& K4 c+ U7 z) k6 z8 H$ C
      ClrSample3<=ClrSample2;
    . ]( Z& b/ L& _0 D5 \! T  ClrSample4<=ClrSample3;
    1 q$ X' g8 N  Z; t4 l$ [9 u, w  ClrSample5<=ClrSample4;
    & U; \1 T4 x1 u5 h. Z; ]6 H8 c  ClrSample6<=ClrSample5;
    * _/ M0 t" T3 ^  b% g  h  ClrSample7<=ClrSample6;
    7 B: o$ O# @4 H' m  ClrSample8<=ClrSample7;" j. t. Q8 C: J" O
      ClrSample9<=ClrSample8;) ^7 a( G# T0 y; N
    end if;; F& n" k5 I8 D& P0 O. f
    end process;      : n8 ?" Z# @5 d" F# A7 e
    ---------------------------------------4 J9 P9 ~6 o+ |5 @. O4 K- D8 L
    --Clr Enable Signal  p8 a5 g4 y6 N
    Clr_en_p:process(Clk)
    8 h. i9 e7 ?9 i8 ^begin    ' ~  a5 L. x2 B( ?; b
    if Clk'event and Clk='1' then; k0 D) l& }1 x- z& t" d% N( p
      if      ClrSample0='1' and ClrSample1='1'/ Z; k+ j% q3 O5 t* W
       and ClrSample2='1' and ClrSample3='1'
    ' N& E3 A% Y, p9 m   and ClrSample4='1' and ClrSample5='1'. x# @+ x( k* a* ~3 z
       and ClrSample6='1' and ClrSample7='1'
    5 I( c3 @% f0 F6 P7 {  C3 t) o   and ClrSample8='1' and ClrSample9='1' then- l- M/ {# X" e+ n& \6 a4 T! D& ~
       Clr_en<='1';- S4 \! G4 D7 Y- q- ]( U
      else
    ( P! n* U; I5 h( T0 H- x, D   Clr_en<='0';/ X% w. _( {( P% a: a6 u
      end if;
    + x- c0 M% X$ a! ~- S6 H. _5 wend if;
    3 X+ Z' n! V/ g( b3 p' Oend process;      
    ( O6 Q4 l3 d5 i, f: h! Y------------------------------------------------" ]" Q1 S- e3 ?4 b3 g, H0 }
    --sample ALE signal . {& o: s6 ]; c5 \0 n
    ALE_p:process(Clk)
    # j0 b8 K* s0 K8 Zbegin0 |$ o# z" [6 E- m4 \# P4 [
      if Clk'event and Clk='1' then
    5 C  O3 V/ Z8 p1 C5 u   if Clr_en='1' then
    9 X& p0 u8 b3 l9 ?    ALE_Sample<='0';  l3 n3 O/ l/ G9 R* ]- F
       else9 g  ^# x2 k" z# g, @8 V
        ALE_Sample<=ALE;1 s( o/ b2 z: N1 \# O+ u: z
       end if;
    ( O$ L" D) n( ^1 q  z  end if;8 V0 z! [( r& u$ |/ c, t5 r
    end process;
    ! v$ M/ S( l6 |* E5 C1 w+ l-------------------------------------------------      5 a/ }2 l. h; i- V2 y) p7 `; K
    --Address Latch
    $ [8 N4 v1 Q, r/ hAddress_p:process(Clk)
    1 t' y5 R- c; j0 P  y  L4 v3 _- }- Wbegin. `; X, x7 [. b* V( L
      if Clk'event and Clk='1' then
    - @+ C$ ~+ C: t8 `6 g: r   if Clr_en='1' then
    : F9 Z6 b9 v' G# ]5 L# w& [3 i$ Z     Addr<="0000000000000000";
    1 E( J0 f' p4 R   elsif ALE_Sample='1' then
    7 Y6 c+ c: @, ?) H! C    Addr<=P2&0;4 M& q9 h2 z: q+ R1 P9 a) G) B; V3 m
       end if;
    * v/ D4 B! ?8 [0 a  end if;
    + `. }5 c" H; t7 Kend process;            . D3 W1 y/ r, n, i/ w* ~
    -------------------------------------
    5 z! l3 `" S- s2 C--Sample Wr
    1 T* c6 ~1 J$ _$ s. wWrSample_p:process(Clk)6 T$ A+ P0 ^( i& M: ?4 v
    begin
    5 N* l' W6 W; |if Clk'event and Clk='1' then& F: k5 ^8 w/ k8 [0 u% A6 ^6 F$ z  f
      if Clr_en='1' then
    - _! I! s& R" [4 v8 G) p   WrSample0<='1';
    : H2 t) s8 t( n3 e  E% |2 U1 R! N) U   WrSample1<='1';. Y8 E3 k1 _) K
       WrSample2<='1';
    3 `) C; r1 c) f* ~2 g6 a& {   WrSample3<='1';% U4 ^. d0 M% }2 Q5 f
       WrSample4<='1';' y% O+ W0 Q4 k! P( E+ b
       WrSample5<='1';
    . x7 U: `& L3 ~: l- s  else
    ; J) _6 w% x6 J' n4 `   WrSample0<=Wr;1 J1 t  E' f6 T
       WrSample1<=WrSample0;
    4 {1 N0 N0 s& y0 }5 E$ B   WrSample2<=WrSample1;
    3 q: }5 Z5 Q0 O. ^8 F   WrSample3<=WrSample2;" z. Z# R5 C" I% Y* i
       WrSample4<=WrSample3;7 L) Z/ W# X* W& D: U
       WrSample5<=WrSample4;7 a2 ?1 A; z* Q0 d9 b" t! U- B
      end if;( u9 |/ z  _9 Z0 h1 Z1 l; @7 _
    end if;
    - t" u8 ~  ]9 v5 `4 U5 [6 U( fend process; # f7 T) Z, O. t' J
    ---------------------------------------$ m, x7 z6 S2 W$ y% N3 ]2 A
    --internal Wr enable signal: _+ _. B1 Q4 G& }, D9 L$ ~5 T# r
    WrEn_p:process(WrSample0,WrSample1,WrSample2,WrSample3,WrSample4,WrSample5)
    ! ?9 ]9 f0 o2 ]* rbegin
    3 D% r4 I: |1 g3 Pif (WrSample0='0' and  WrSample1='0'
    $ D7 L9 d4 \0 ~7 L1 b' |  and WrSample2='0' and WrSample3='0'; @8 _1 n8 k0 E, ]: {8 z% p
      and WrSample4='1'and WrSample5='1')then
    : u1 I5 r0 j: h8 x+ j  Wr_en<='1';
    3 A+ U7 T/ i! t0 l! Telse, [) s0 y% _0 e* Q2 C9 ^# n
      Wr_en<='0';$ `3 E- `/ ~& s
    end if;4 p& z9 ~7 h! F( f: [
    end process;       / @6 S; f; D' u$ B  x' j' w6 v8 ?
    ----------------------------------------
    & j1 a2 G. A0 I) u$ r--Rd Sample" u8 z9 @; G- L) K7 ?3 u/ g
    RdSample_p:process(Clk)
    / H8 s% ?, H" sbegin7 ?: r2 Z$ y3 t
    if Clk'event and Clk='1' then
    ) X1 J% h" W8 Z5 y8 u) {3 r  if Clr_en='1' then* M9 o0 W; q8 s; ]# V9 U% b
       RdSample<='1';2 y! J3 i7 [6 R. X/ w
      else6 N' N+ B( h7 G, B* A; u) A0 b
       RdSample<=Rd;8 B% l3 E  }; r9 L- f& k4 _! E, Q* o
      end if;
    % y, C3 V* p' H3 w4 Y% V; h7 cend if;/ J5 _, [8 P& `3 U% w  m
    end process;
    ) V; P/ \* r% C, Q
    ; d1 X2 |# A! r7 k-----------------------------------, p4 T& _2 l6 `/ q$ k- ^
    --Flash Rom Chip select signal
    ! Y! B8 a0 ?! C) H# v$ n* ]CS_Flash_p:process(Addr)$ n$ Q/ ~, M- M; E
    begin2 o" b  a/ Q; i3 h' S  B; B
    if Addr(15 downto 14)="10" then            --Address:8000h--BFFFh
    ' G  G; t2 w7 ~1 B0 N/ m# ?, s     nCsFlashRam<='0';
    6 K+ C+ E1 @7 S( \- S$ Selse  o$ f& ~2 c% r9 H1 T* i" f: y
      nCsFlashRam<='1';* m# K+ y; @9 N) U9 X; M
    end if;
    2 ?& j! ?5 [4 I& o" Jend process;) Z" g4 e  M- h; n) u8 Q
    -----------------------------------" p  {) j& {+ z' E1 j6 J# X
    -- 8255 Chip select signal0 E! K& J0 g" b& ^
    cs8255_p:process(Addr)7 g. y' g1 X# v1 N/ J! O
    begin  n0 U: l2 n5 S# R. Y7 K- Y* D
      if Addr(15 downto 2)="11000000000000" then  --C000h--C003h ) \9 i: E, D8 ?* [0 C" e
       nCS8255<='0';
    # L- L( W5 o" @3 A  else. j3 s. F" Q" x+ T* L" C
       nCS8255<='1';* @2 ~; S* Q; p$ C& ]
      end if;
    7 _  G9 E+ d- uend process;      ; T. z  [0 u; _. @9 J# R* t
    -----------------------------------
    0 I2 @( b3 _% Z8 D-----------------------------------
    + L8 I- Y2 U( L6 H: u' r6 F-- Ram Bank Switch Reg
    ! j/ d* ]* E5 y; l6 xRam_bank_p:process(Clk)
    ) Y& B5 f' e1 e8 z- ~begin      
    ) ]  X6 p+ P$ I' `7 yif Clk'event and Clk='1' then* d4 _- v3 s' H' }" e) L
      if Clr_en='1' then
    ! B, ^9 e( ?1 r      RamBankReg<="00";  " z: }+ d" k1 f. e6 ~
      elsif Addr="1100000000000100" and Wr_en='1' then    --Address:C004h0 @6 v; F+ s- q/ ^+ U6 R' D
             RamBankReg<=P0(1 downto 0);
    + t3 ]& j/ L8 Y5 o0 z4 ]: v5 s  end if;0 C; s& g0 P, h  l# k
    end if;9 C4 t3 f/ r8 f6 z) ?5 X' P
    end process;
    2 g. D5 z% C  ZRamBank<=RamBankReg;      
    ! v( v; r- d0 @* L  M6 E----------------------------------
    . A( a: C$ M4 b1 L6 I, M7 B----------------------------------; I& H% e+ [  J$ B5 G
    --Flash Rom Switch Reg
    " I+ ?. J( y- ]& {0 jFlash_bank_p:process(Clk)
    $ @0 Z7 x4 K; x7 X8 K' ]+ Q1 Dbegin      4 T* N& L! _# z5 o
    if Clk'event and Clk='1' then4 L3 \* j* Z0 q- o. ]  c. M
      if Clr_en='1' then6 Z9 F8 K1 F# J) w( n6 a
       FlashRomBankReg<="000";, H/ h! e, W0 B# i  p" n1 U
      elsif Addr="1100000000000101"  and Wr_en='1' then      --Address:C005h; q6 {" n. ?- H  f1 i
       FlashRomBankReg<=P0(2 downto 0);
    * c) M9 Z6 Z9 g' r. v! F  end if;4 p% X$ ?" o( @% ]$ Y) f" C- m/ h
    end if;) X# [# j, k3 P: y" f8 Z6 F
    end process;
    1 |% j. ^3 t- q) a# o% DFlashRomBank<=FlashRomBankReg;   6 [! E0 Q' M6 G) M# p
    --------------------------------  M7 r" v4 w; Q8 x& f* Q) N
    --------------------------------- Y9 S5 x  ]5 {/ K$ K7 ?
    --Rd process& b/ }6 g' H& n: ^4 \
    -- now just two in-builde register
    " _9 g6 J) s! jRd_p:process(RdSample,Addr,RamBankReg,FlashRomBankReg)
      V; W; ^  q0 G; V5 {* bbegin0 f8 a- O7 O  \. O: Q3 v
    if    Addr="1100000000000100"  and RdSample='0' then    --C004h/ A, H# R- M7 N
         P0<="000000"&RamBankReg;
    ) ~* l* o; _0 delsif Addr="1100000000000101"  and RdSample='0' then    --C005h
    3 ^5 M* O5 K# R  P0<="00000"&FlashRomBankReg;/ N. c6 q1 i' j" s% R, q& @+ t/ y
    else $ A3 `% A& Y# f8 D
      P0<="ZZZZZZZZ";
    ) w( B& Z" ^1 ^2 Bend if;' r. K# \7 {2 Q9 c& c/ l
    end process;    ) T  G) w$ f0 e% M/ [' W
    -------------------------------   
    7 A5 B# _! s. I, S# X( PPina_p:process(Clk)
    ) C6 I( g& A  h! rbegin+ v3 v  x* V; X8 n, R0 z4 Z
    if Clk'event and Clk='1' then
    8 I9 T# f$ ]& V  if Clr_en='1' then) u3 D7 \4 G& G% l+ c( g. C3 R
       PinaReg<='0';* h# a8 W! T6 x
      elsif Addr="1100000000000110"  and Wr_en='1' then      --C006h
    * w' x$ o  Y% Q, ^   PinaReg<=P0(0);
    " ]. n2 [. l( v: g& |( f& h  end if;
    0 }5 F8 s1 z4 Fend if;, v+ e4 R6 S% p9 A. }
    end process;   
    1 N: I; v. G# [9 [2 S& C7 ^Pina<=PinaReg;   
    1 D9 A' g7 h9 j8 q  a# K8 u  Aend cpldbus51;
    1 G" T' i2 U+ A; J
    % U5 @+ d8 C( I: u% a! n
    ; |$ J4 X1 E5 G( L4 D/ V4 \4 I1 @" F! M4 I. P
      F+ b' d/ k/ d8 |$ X
    ! ~! k* j: d4 x: Z

    / O0 {6 V" t# \

    该用户从未签到

    2#
    发表于 2018-12-6 11:38 | 只看该作者
    不错 学习中 谢谢楼主
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-6 21:04 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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