找回密码
 注册
关于网站域名变更的通知
查看: 256|回复: 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 编辑 7 `6 @( d; \5 R: _9 [- L
    4 P1 t, C: A) N
    cpld与8051的总线接口vhdl设计源码
    0 z( i1 C% t  G4 f5 ]: s! q" t
    library IEEE;
    $ m: {2 [0 m) R/ ]* t0 Zuse IEEE.std_logic_1164.all;! t8 m2 b" {# d7 L/ d# [* i
    use IEEE.std_logic_unsigned.all;
    8 _3 E) q3 \5 s5 N6 y* m0 Tentity cpldbus51 is' z4 j' X0 y: m& N% |2 q, t0 a
    port (            
    ) N3 N$ h) U" b; V: P  Clk: in STD_LOGIC;                     --Clock    16MHZ  " c* Z6 N1 H, K, k  O
      Clr: in STD_LOGIC;         --Clear   high
    6 m2 ]9 L5 Y6 s5 g2 d+ u  P0: inout STD_LOGIC_VECTOR (7 downto 0);   --8052 Port 0. Q8 e9 J" z) H7 O. k& |
      P2: in STD_LOGIC_VECTOR (7 downto 0);    --8052 Port 2# R. ^  {6 a) m' [4 a$ q
      ALE: in STD_LOGIC;                         --8052 ALE- _" k" D& \2 h, s3 |$ Q" C
    --  PSEN: in STD_LOGIC;         --8052'Psen8 W3 S2 F1 S; c& H$ ?, p" |
    --  INT0ut  STD_LOGIC;                       --8052 INT0
    # ^1 I' ?, q; G  Wr: in STD_LOGIC;         --8052'Wr
    & Y9 @& j& M2 k4 \, F$ R0 a6 ^  Rd: in STD_LOGIC;         --8052'Rd3 w* y) n8 |; {; ^# V* A
    ---------------------------" W: x1 f% J  s1 P, u3 t+ S
      Pinaut STD_LOGIC;                     ---output
    2 l. H+ J* d" d-----------------------
      U! ]& _, {6 f6 ?8 @. |9 g7 y; A9 V, e  nCS8255: out STD_LOGIC;           --select 8255& p* u0 ?* b0 |" S& ~  F  J
      RamBank: out STD_LOGIC_VECTOR (1 downto 0);--Ram68128a bank switch   A15 A16& u4 q9 u( L: v
      nCsFlashRam: out STD_LOGIC;       --select Flash Rom   CE
    ) W. b& t& w: E9 c$ T4 E  c" y  FlashRomBank: out STD_LOGIC_VECTOR (2 downto 0) --Flash Rom switch  A14 A15 A16
    ) Z4 ?$ @, x# U6 k# v. ^+ j& [
    ! ]" z5 i, l2 ]+ f5 ~) O);
    0 c: t* p9 A/ g& k; ?3 _end cpldbus51;
    ! E) E  I7 U% u$ r6 V
    # P8 r8 c/ j/ Y; Uarchitecture cpldbus51 of cpldbus51 is           % v8 g; V3 }9 N  X3 g
    ------------------------------------------------------------------------------# S. z' U. n$ u( k) ]% I
    signal Addr: std_logic_vector(15 downto 0);  --16bit address  [" s$ W' N7 g) @( M
    signal ALE_Sample:STD_LOGIC;
    ' }( ~2 i3 G8 d. s$ ^: i) Vsignal RamBankReg: STD_LOGIC_VECTOR (1 downto 0);--Ram bank switch reg, 4 banks, 4*32K=128k bytes
    8 q9 ]; D7 f' |0 P* L5 Ssignal FlashRomBankReg: STD_LOGIC_VECTOR (2 downto 0);--Flash Rom bank switch reg, 8 banks, 8*16K=128k bytes
    4 w" k5 X2 E3 A--Rd Sample
    + C- m5 r) w. F* I, lsignal RdSample:std_logic; --for Rd Sample+ K( l0 D7 d3 I, V/ c8 {0 z
    --WR Sample
    * g# X' \9 c8 U1 f1 B' L; Qsignal WrSample0:std_logic; --Wr for Sample
    $ R+ S% `# E2 a3 S8 A/ osignal WrSample1:std_logic;
    " w% d4 G' A; D# G' ysignal WrSample2:std_logic;
    . R: R2 h( {1 `, B' [. {signal WrSample3:std_logic;3 Q) Z0 _3 b* f1 Z
    signal WrSample4:std_logic;
    - M- @, n  n5 m5 D( dsignal WrSample5:std_logic;
    3 \! A" d% k+ ?: {$ E& q--Wr Sample output6 r; z$ R- X; W
    signal Wr_en:std_logic;
    3 i. R4 V2 y3 A) y--Clr Sample % z" Z4 _, D8 j' D! w9 E: N  W
    signal ClrSample0:std_logic; -- for Clr Sample ! A, f% o- P  W( L/ W5 ^
    signal ClrSample1:std_logic;
    % m. v9 C1 T) k* I7 osignal ClrSample2:std_logic; & q' L* m, Y* @( w7 U
    signal ClrSample3:std_logic;  t/ _+ c+ t9 G1 k1 g
    signal ClrSample4:std_logic; 8 |+ @/ f8 i+ `# j1 `
    signal ClrSample5:std_logic;
    - e, @! ^% q) Z1 gsignal ClrSample6:std_logic; 2 [4 B" \9 q. e& F4 A4 r
    signal ClrSample7:std_logic; & T1 a1 j) `6 c* y
    signal ClrSample8:std_logic;+ |2 k% p' I( u; _1 I1 u
    signal ClrSample9:std_logic; % L! _' y. i- m) S2 C% M0 y
    --Clr Sample output
    0 v$ [! N, Q9 Z0 |/ \, S" Psignal Clr_en:std_logic;6 u+ z- g: w, F7 a: J$ N+ s4 d
    ------------------------------------------------------------------------------
    # ^+ K9 l" L3 t: ?) b--output Reg' l! x- ]% l# D4 C$ I
    signal PinaReg:std_logic; 0 `" T0 p& R( I4 X
    begin  
    ; b  r" j$ ^9 L2 w* S9 g--------------------------------------------
    5 Z' ~! B' T4 l' r) X% z& k--Sample Clr signal  
    + e7 C2 ^. t9 ^+ ]/ I% DClrSample_p:process(Clk): [$ ?/ E3 `; k8 M* Q
    begin
    7 p4 ~5 I; l8 I, H! I3 B# ^if Clk'event and Clk='1' then" X; W7 ~; K/ U1 T% E. ]
      ClrSample0<=Clr;
    3 g+ b, H6 |4 U7 d+ `+ B  ClrSample1<=ClrSample0;- R8 k5 F9 d: x" m, a) B; b
      ClrSample2<=ClrSample1;
    8 t/ ~2 ~5 J$ _8 n. W- Y" K; k  ClrSample3<=ClrSample2;# N% ^7 ]$ k5 R/ A# l1 E8 i% ?9 c
      ClrSample4<=ClrSample3;
    + L$ E* m2 b7 v  _' C7 r  ClrSample5<=ClrSample4;. ^$ ]& a# y& _7 P7 M) g- O* y
      ClrSample6<=ClrSample5;
    : i. z2 B5 z, ]% B6 g" V  ClrSample7<=ClrSample6;
    : o# Z- A- X( f) y+ e- Q; P  ClrSample8<=ClrSample7;9 Q1 X7 n- t7 u  H  t  b
      ClrSample9<=ClrSample8;8 J+ X1 w8 C# V2 {) b. f
    end if;7 J& m; B- A. ^3 j
    end process;      
    5 B8 J. |6 O5 B" W* q% M4 e7 {---------------------------------------: U! r& q8 S8 n# Y$ d( L
    --Clr Enable Signal1 [  j" ^7 [7 n. U1 ]5 ~
    Clr_en_p:process(Clk)( o1 A; K, Y* l+ |/ D; L
    begin   
    ; `# @% [( D6 F5 tif Clk'event and Clk='1' then
    & l8 Q+ S5 q0 M. }  if      ClrSample0='1' and ClrSample1='1'& z+ o+ a  c9 E- U4 t+ X  }0 U
       and ClrSample2='1' and ClrSample3='1'
    0 O" w) X. _/ F3 ]! }. c2 }   and ClrSample4='1' and ClrSample5='1'8 \' K$ J/ j% q7 w( h# l
       and ClrSample6='1' and ClrSample7='1'
    ! v: \. ~/ U# E' o   and ClrSample8='1' and ClrSample9='1' then
    4 z: S& d. `$ e0 c  y# K, P   Clr_en<='1';1 B2 q$ R9 H, b4 I
      else
    / U- R! m$ @( p% }   Clr_en<='0';
    5 C" G6 n3 r; H2 q4 J  end if;9 l6 C! |3 R. U; n/ U* y
    end if;  p, t8 H4 w$ ?% G8 s: i
    end process;      
    , B9 b1 S7 P7 M8 P1 C# B, H------------------------------------------------5 K6 K6 N8 P2 A7 ?- w
    --sample ALE signal
    . T! i+ y. R1 q8 \, o, vALE_p:process(Clk)
    2 y" B: J. w7 m# Rbegin- ]: c5 p8 u9 F( g1 v
      if Clk'event and Clk='1' then
    8 F, P8 S* l  q" d   if Clr_en='1' then) ?, v3 G( K+ a1 \) w
        ALE_Sample<='0';
    , [8 Z, b2 R- h" o   else
    * \: v) N& ~1 F+ \9 k) G    ALE_Sample<=ALE;! a; d( Z1 V, s5 ?
       end if;
    $ [9 P1 e+ f- W- R3 K( D& ^  end if;3 s+ B8 b7 x( j5 i5 r
    end process;3 }; x7 Q* P# }3 f
    -------------------------------------------------      , U4 H* e0 n6 t3 Q3 G% v
    --Address Latch
    : B5 Z9 W6 L: q$ NAddress_p:process(Clk)
    7 U9 r& k. s" d6 C  A( D* |3 ~begin# B% C) A' u) o  i* [; B
      if Clk'event and Clk='1' then
    4 e5 [/ C* F' i) Q+ Q$ F0 W   if Clr_en='1' then0 b% z4 ^& k9 @3 G7 E
         Addr<="0000000000000000";
    / b9 W$ Z- K4 ^7 T& F$ ]# W6 z   elsif ALE_Sample='1' then* X% s+ w6 J: P; ?  N1 Y
        Addr<=P2&0;& z, ^5 P; v0 G# F
       end if;
    : f' b, u7 _0 c: g6 N# O' J  end if;
    9 J% _( F5 _  h1 p6 hend process;              i2 r8 F5 ]7 B  P8 A) m
    -------------------------------------
    . j/ P. f+ c$ ]& k, s, A3 _; }--Sample Wr
    : X8 C  e( X" YWrSample_p:process(Clk)' m' N: {, [$ P- l- d7 |, `
    begin
    * u, r; Q1 `/ `! P/ ]if Clk'event and Clk='1' then" U& l- s8 s& T; K
      if Clr_en='1' then) F. @9 S- B$ f. c$ n4 x& G
       WrSample0<='1';; I" x0 M: n1 h2 y7 ]6 d
       WrSample1<='1';$ U" U% j+ |! N( \9 y+ W
       WrSample2<='1';
    4 i1 W& Y0 r$ h, F3 ?9 N+ ]   WrSample3<='1';
      {- D% X% \% |: s/ W   WrSample4<='1';
    ; k7 |  P' E. ^: U! J$ P0 ~   WrSample5<='1';
    # q1 i( Y8 A' z# L  else
    ) ?1 J4 T/ E! l4 Z6 m   WrSample0<=Wr;! U5 a) s& M% p& F6 A4 [; y" C* y
       WrSample1<=WrSample0;2 y' q9 p! q  Z& W; q3 M* q, M
       WrSample2<=WrSample1;7 n# Z0 j% ^) p# x/ t
       WrSample3<=WrSample2;
    ) m/ k$ H! f! ?+ Y+ }- a   WrSample4<=WrSample3;3 G4 I0 l, _9 K1 f2 x/ f* C
       WrSample5<=WrSample4;* C3 s/ u. u  ~# E: m) Y1 I7 Z1 {- p- x
      end if;1 n8 i/ u3 e7 p: I# n
    end if;
    " \) i6 O4 |7 r* f9 f. z. oend process; % x8 e$ j5 i9 u' C9 F, q
    ---------------------------------------2 p8 G) l- ~- t2 }5 x
    --internal Wr enable signal+ c9 U1 I3 N6 o* X% n  a
    WrEn_p:process(WrSample0,WrSample1,WrSample2,WrSample3,WrSample4,WrSample5)/ g1 b9 e2 {* B. k- K* Q
    begin
      X0 _( W0 f. R+ [# `5 C& Jif (WrSample0='0' and  WrSample1='0'/ f" w/ g' ]: H4 D5 Z
      and WrSample2='0' and WrSample3='0'1 D" o& d7 m8 |3 \3 f5 o" j
      and WrSample4='1'and WrSample5='1')then
    ) J( A1 f9 f" n/ V+ o6 y0 p7 M  Wr_en<='1';
    5 K( F5 k4 W7 b$ Oelse
    & g$ o- Q* h/ p  Wr_en<='0';6 m2 a' A4 }1 ?8 u3 G" z5 k. G
    end if;; V, @% Q. v8 F0 s$ N
    end process;       0 q  S/ c& q6 d. `0 E* j/ P0 Y
    ----------------------------------------& c/ N! S. c% \: j" H
    --Rd Sample
    / N4 C' Y; n7 z# nRdSample_p:process(Clk)4 W( R# _7 N, n; q) O8 k
    begin
    8 D8 s/ ~3 U: n6 J3 ?) M7 Jif Clk'event and Clk='1' then' ^9 N& C1 M3 c9 U
      if Clr_en='1' then9 g5 f' h5 ]. a
       RdSample<='1';" \/ j  {* Y* e9 q9 p
      else1 A) _" N* i3 Q' d- D3 G5 S' A
       RdSample<=Rd;
    9 a6 d$ w4 z: W) j, `3 c# h; w  w$ j3 J  end if;1 C' G7 S+ o% Y2 L
    end if;( V9 {5 K( o1 Q6 r" y
    end process;
    # c6 H# a. f- ?! N7 k( s$ E) E% C; l( h' l" F" I
    -----------------------------------
      v0 Y% \7 I  c/ V7 ]' u--Flash Rom Chip select signal3 x' n) J' m4 n# \# r& a0 Q; D2 m
    CS_Flash_p:process(Addr)
    3 z1 ?: G+ d, H, ^begin
    * s( t! h. j5 T" m# o- {" ~* v3 uif Addr(15 downto 14)="10" then            --Address:8000h--BFFFh
    " p- L  s+ Q: U5 d; ~7 D, s- x8 Y     nCsFlashRam<='0';5 g1 |1 c, D) o
    else
    - e! w1 F; Z" r" K  nCsFlashRam<='1';
    , c0 E( V  G8 N: [+ h. ~8 gend if;3 D6 J* D: m) _+ M
    end process;
    5 x& q, P: T- I  r( ~6 o/ c-----------------------------------
    + O% R# p6 B. s1 j% j" K& l( _. Z: e-- 8255 Chip select signal
    $ n* p- j; Z1 p1 ^" `5 @6 e+ ]4 ~# wcs8255_p:process(Addr)
    $ S, t! A( U( G# N1 e# q( jbegin
    , l& O  i* f) q5 Q, b6 F  if Addr(15 downto 2)="11000000000000" then  --C000h--C003h 7 {, p+ t1 H( L! D6 w
       nCS8255<='0';5 @9 ]2 M2 t/ {. g, j
      else& a4 E% b! x1 G
       nCS8255<='1';0 w# w' f/ R! I2 q, W& _
      end if;7 q6 X# e" k7 B2 d  o
    end process;      
    - c4 M0 i4 H2 E. K5 Z-----------------------------------! T4 V) |* l; [2 p  F. W2 F
    ----------------------------------- & n# K) {0 L# N5 l; {. g
    -- Ram Bank Switch Reg
    ' ^- U. n0 Y/ o3 j- n' JRam_bank_p:process(Clk): r4 x( |+ K! B6 ~% E$ J' O; i
    begin       6 G: B3 X- J: j8 r8 k/ L
    if Clk'event and Clk='1' then
    * F8 ^) j: G, h& c  if Clr_en='1' then6 e+ \0 A- x- V+ l# O' J
          RamBankReg<="00";  " \  w: B# z1 J8 B: v2 ]8 i! J
      elsif Addr="1100000000000100" and Wr_en='1' then    --Address:C004h5 c; m3 |- ^% l4 s1 Z
             RamBankReg<=P0(1 downto 0);
    + I& Q: d1 f  x* X+ l- ]8 ~/ _6 \  end if;
    * Y  i& ]2 s: \+ Yend if;; ?1 w9 {) S% m% R# P: U9 M$ z
    end process;
    * x0 K9 P  M) x- S6 LRamBank<=RamBankReg;       4 s- ^! Y9 S+ V! L
    ----------------------------------* o8 |% Q& r9 B: E+ T
    ----------------------------------5 T5 C% L* y1 l; V0 t4 t
    --Flash Rom Switch Reg
    % B+ m' O- a0 e: L' n: L4 W/ L" mFlash_bank_p:process(Clk)7 P$ W, {% f/ J$ \3 Z( m- C
    begin      
    - O% X5 {) M( Y4 H! b0 H) jif Clk'event and Clk='1' then4 m. |! w: K1 a$ ?
      if Clr_en='1' then! T3 \% V; u1 l
       FlashRomBankReg<="000";
    8 e# m; ]7 `- T& w' K3 m+ v  elsif Addr="1100000000000101"  and Wr_en='1' then      --Address:C005h& o0 b0 b! n( [2 h
       FlashRomBankReg<=P0(2 downto 0);
    + q2 ~# V9 C) Z  S1 R  end if;+ X$ A/ \5 ~: N" @
    end if;4 Z$ h; T5 j1 o
    end process;
    2 M, _- d7 W1 W1 L/ `9 x: u) m3 I% LFlashRomBank<=FlashRomBankReg;   
      [! N9 X9 \! H/ O5 }, L) v--------------------------------
    / H7 A+ u, s* U2 h& v$ H% u% X--------------------------------* R/ m0 p7 ^8 v% f. V7 N3 V
    --Rd process) m* M: R/ Y( t, O- Y
    -- now just two in-builde register
    / A  I8 m1 f: A0 e+ h8 SRd_p:process(RdSample,Addr,RamBankReg,FlashRomBankReg)( D7 h! J( e: ?7 A1 o
    begin( r5 f2 b) r, ^" c
    if    Addr="1100000000000100"  and RdSample='0' then    --C004h
    8 k' p# [% `- h7 g/ ]) I     P0<="000000"&RamBankReg;) a! k( G8 r' ]- G( M; H
    elsif Addr="1100000000000101"  and RdSample='0' then    --C005h9 \  t' I8 |3 k- s3 k; u
      P0<="00000"&FlashRomBankReg;+ \) Z3 p% g+ ?; Q
    else " s% u' w! q8 U% q2 k0 v; k
      P0<="ZZZZZZZZ";4 i: o3 i+ a+ U% O. P0 t6 a
    end if;8 I( r7 S8 A, _4 ^/ ]4 e% F7 q
    end process;   
    " K  l. [4 ?% S, [4 r-------------------------------   
    7 I( L  u6 b- H6 mPina_p:process(Clk)$ x. w% s. }5 S* T/ p! p7 q8 z
    begin
    , Q1 m+ e/ A0 Z: kif Clk'event and Clk='1' then; o% I  X' r2 Y5 v, T
      if Clr_en='1' then. K  Y8 D7 e) l  K3 B& D3 j
       PinaReg<='0';
    * v0 R5 k. Q8 {% y; ^  elsif Addr="1100000000000110"  and Wr_en='1' then      --C006h
    ! k; B8 d8 b- B; M  P& b2 C   PinaReg<=P0(0);( \' J. C! N  z+ D; |% l
      end if;  x4 m$ m9 B4 }
    end if;  ]1 D' T' D# u0 ]
    end process;   8 f7 `+ B% ~0 N6 {
    Pina<=PinaReg;   
    5 l  S0 ^; n4 t: \) X8 [. a* Cend cpldbus51;1 V) g. {/ b$ y/ E, ^

    4 l5 B* I; L' s: d! q2 H; e  U4 h8 w/ N, f/ r4 Z. \% r0 a

    $ K9 x+ A* s  _( {6 A7 i. w, _. _" ^) z  [8 Q& ~3 W) V3 d

    , W& S" W5 }# w1 ]' `
    : k+ g' v0 r9 K% k6 p7 ^$ I/ M

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-23 20:57 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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