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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    本帖最后由 Ferrya 于 2018-10-30 08:47 编辑
    & Z4 G, _+ Y& ~  y3 j6 W
    8 `/ H. F: v' J* R3 y( W cpld与8051的总线接口vhdl设计源码' v7 \3 h- Z+ j  F, P2 ~' S
    library IEEE;
    7 n3 j' P5 j7 h. @; L- A8 o$ U9 a# J
    use IEEE.std_logic_1164.all;! k6 W# V8 N* r2 U
    use IEEE.std_logic_unsigned.all;
    5 |! ^. ^5 h" }& E7 b- x
    entity cpldbus51 is
    0 i' n' _! [1 i
    port (            
      `, @! ?) c9 R* u& F: z
      Clk: in STD_LOGIC;                     --Clock    16MHZ  
    * q. M" }+ m- a. \. Y
      Clr: in STD_LOGIC;         --Clear   high
    ; V7 Y4 q$ P7 \7 }( {8 i0 `, N2 y, K1 _
      P0: inout STD_LOGIC_VECTOR (7 downto 0);   --8052 Port 07 N2 F5 t8 z& G' }
      P2: in STD_LOGIC_VECTOR (7 downto 0);    --8052 Port 2
    9 |. N6 ]& x: x3 U9 Q  z8 i- V/ H9 t
      ALE: in STD_LOGIC;                         --8052 ALE
    6 J# n+ T! C! w# s7 l" @* ^) G
    --  PSEN: in STD_LOGIC;         --8052'Psen2 [- C' y# ]- a: X3 A% [
    --  INT0ut  STD_LOGIC;                       --8052 INT0
    5 t  T. J/ v/ M
      Wr: in STD_LOGIC;         --8052'Wr0 T% G6 F" S0 \: }* U; ~% C0 F
      Rd: in STD_LOGIC;         --8052'Rd- y# E0 s9 l) W. j- {
    ---------------------------" F1 b1 l: u* f3 t
      Pinaut STD_LOGIC;                     ---output
    % s9 ~9 D5 {) {7 Z9 w' Y1 g+ s
    -----------------------& V$ n4 e$ H7 w
      nCS8255: out STD_LOGIC;           --select 82556 [: X/ e8 d0 K; M" Y8 K
      RamBank: out STD_LOGIC_VECTOR (1 downto 0);--Ram68128a bank switch   A15 A162 V, i5 g% p4 L* t
      nCsFlashRam: out STD_LOGIC;       --select Flash Rom   CE/ }4 \0 ?- [0 o# r! i7 w* E
      FlashRomBank: out STD_LOGIC_VECTOR (2 downto 0) --Flash Rom switch  A14 A15 A16
    9 _( B: O, j: m9 d, x' L# p
    6 ?; o5 j0 U' Y
    );
    6 I! ^% d: c" M
    end cpldbus51;
    * [1 }% X1 v' [
    9 i# |3 z8 o& M) r* A
    architecture cpldbus51 of cpldbus51 is           
    0 y+ A3 E5 \9 v7 [2 t% M( v
    ------------------------------------------------------------------------------
    / d' v8 Z/ ~; r/ d7 `+ N6 y3 q
    signal Addr: std_logic_vector(15 downto 0);  --16bit address  o7 }6 @5 v! H8 e# x; w, w
    signal ALE_Sample:STD_LOGIC;9 p* c. |% m- @) y" T
    signal RamBankReg: STD_LOGIC_VECTOR (1 downto 0);--Ram bank switch reg, 4 banks, 4*32K=128k bytes8 L( R7 T7 n" U; E
    signal FlashRomBankReg: STD_LOGIC_VECTOR (2 downto 0);--Flash Rom bank switch reg, 8 banks, 8*16K=128k bytes
    0 Y# F; T5 C8 D/ Q$ M
    --Rd Sample
    " O, H: t+ e' G! a: J
    signal RdSample:std_logic; --for Rd Sample4 M; O/ N5 _2 F$ }1 m1 x% I. \# o0 Y+ i9 V
    --WR Sample
    5 [8 N( v+ K7 K+ K1 m* W
    signal WrSample0:std_logic; --Wr for Sample
    & q4 k5 `: F0 _, H5 v# R! t  D
    signal WrSample1:std_logic; + L& g6 c2 A; `% ]- i5 ~9 t# N7 o6 O0 R
    signal WrSample2:std_logic; " t$ j, W6 o0 S. L
    signal WrSample3:std_logic;
    : Z" j- j- h  R
    signal WrSample4:std_logic; : [0 j5 q. ^, D
    signal WrSample5:std_logic;
    ; F# C3 D, C) m; _3 H7 r% p1 P
    --Wr Sample output4 }/ X, n8 }" n& |9 l
    signal Wr_en:std_logic; : A; O/ U3 y% z( d" i/ U# e
    --Clr Sample
    - W9 _% s& f( F) n$ \2 c
    signal ClrSample0:std_logic; -- for Clr Sample 0 o# {: V! n1 y8 _, T
    signal ClrSample1:std_logic; 5 P' B" G6 W5 f  B
    signal ClrSample2:std_logic;
    8 z, i  n! N" ^% Y+ m+ J7 R) ~
    signal ClrSample3:std_logic;2 t0 ]: ?8 j7 X8 L5 G% P! t0 k
    signal ClrSample4:std_logic;
    0 p; {6 u  C' w: R
    signal ClrSample5:std_logic;/ [: q. t# G& ]0 G) U
    signal ClrSample6:std_logic; - v% @9 E+ x( Y/ |9 |/ j
    signal ClrSample7:std_logic; 6 N% e9 c* M6 |1 l- Q$ m8 u3 K
    signal ClrSample8:std_logic;5 |4 O- |2 g' L7 o
    signal ClrSample9:std_logic; , M; P7 v& M: f5 `+ ~
    --Clr Sample output
    ' G8 A' J4 m2 }& X" `( n5 E0 C
    signal Clr_en:std_logic;
    ' A, J5 @, H* p7 P/ J; F
    ------------------------------------------------------------------------------# h/ ?4 |) x$ I4 ?7 M  N
    --output Reg
    1 s, d. f* ~  l! r& g, B
    signal PinaReg:std_logic;
    2 h2 ^, r) D% x# }/ S# ~2 i4 P4 o
    begin  
    6 X+ F9 ~) u% b  `3 K# g
    --------------------------------------------
    2 u* J+ e5 B$ ^& Y/ o# u( P1 _) p8 w
    --Sample Clr signal  
    0 h- n$ [% I3 [$ n
    ClrSample_p:process(Clk)! L. \5 ?* C- Z
    begin
    2 q( f9 ~6 C8 n9 ]
    if Clk'event and Clk='1' then, T1 o% s  i% n5 q
      ClrSample0<=Clr;5 M  Z, Z4 Q& T& F3 r4 Z/ J$ D
      ClrSample1<=ClrSample0;
    + Q9 E& K+ {' s. U. Z
      ClrSample2<=ClrSample1;. c' M. j! \( L# c! j$ d% Q( q5 Q" g" X- U
      ClrSample3<=ClrSample2;1 ^8 Z5 W3 _  v* ?
      ClrSample4<=ClrSample3;
    ; ]( K+ i! P$ E1 r& P: {; T
      ClrSample5<=ClrSample4;
    % M# r% r! {2 `$ t6 u: |
      ClrSample6<=ClrSample5;
    4 \( v1 ~8 \4 R4 ~# {
      ClrSample7<=ClrSample6;" C+ M9 @9 V5 k) Q( _, x: P
      ClrSample8<=ClrSample7;( e4 @5 Y6 S" S* F- I/ ]+ q/ h
      ClrSample9<=ClrSample8;2 N# v0 [" c/ Q" ~! n2 n! ]
    end if;% R& v) F/ B+ J: k8 Z
    end process;      
    : a) h8 N) I  _/ Y) n" v- C% [
    ---------------------------------------
      H6 S3 z6 B+ O
    --Clr Enable Signal
    / Q3 a# C9 P* X2 d9 b9 g# d: O
    Clr_en_p:process(Clk)
    ( ]5 I) g+ w# {
    begin    5 f+ U0 O3 A# K: g1 p; X! r! Z. ?
    if Clk'event and Clk='1' then4 E( R" ~+ z, w. N$ M2 d" h
      if      ClrSample0='1' and ClrSample1='1'' ]0 Z5 G3 @9 l# \- F8 Y
       and ClrSample2='1' and ClrSample3='1': i; w: j6 [- }: R. _0 V, o9 l
       and ClrSample4='1' and ClrSample5='1'
      ~7 n  o+ B4 x4 G6 Q
       and ClrSample6='1' and ClrSample7='1'8 B" Q! ]. `2 n; p
       and ClrSample8='1' and ClrSample9='1' then
    $ a' X8 L% [" G: p  V
       Clr_en<='1';* j4 z: Y* J5 n! _
      else4 B8 g! e2 n( W  Z$ M, I
       Clr_en<='0';  q) d( {$ r, Y
      end if;  z  E* h! j3 v6 h! t0 E
    end if;
    9 {7 {; R5 H! b5 L
    end process;      
    ) }, e* t. j" B. P! x, T1 K
    ------------------------------------------------) {/ A% Z: W% _) T
    --sample ALE signal   e! S5 f# a) D8 U0 v# Z( v
    ALE_p:process(Clk)6 n5 X& x6 g: O1 s' i
    begin6 I( T( o: Z! e$ a' Z  K
      if Clk'event and Clk='1' then
    # x- c* {9 `& G# z
       if Clr_en='1' then
    % j  B! D* c* V' C
        ALE_Sample<='0';4 p/ ~, z1 T4 u9 w3 @) G5 g
       else
    ; K6 E; s# B( G$ q
        ALE_Sample<=ALE;
    6 Z- W) G1 ?# M: d
       end if;$ J1 ]/ P3 d3 b" E4 K9 q& q  o
      end if;8 o' A. p) ?9 D$ S! g
    end process;
    0 C) J- K! N. h  P( P: g: V9 ?" ?  W
    -------------------------------------------------      
    + l' L& i8 f& r: b2 o8 ~: P
    --Address Latch " E4 }4 e1 \0 \
    Address_p:process(Clk)
    ( |) I5 q8 |2 v% g$ W' O
    begin
    ; C2 r2 u" V  O3 Z
      if Clk'event and Clk='1' then
    / U9 x2 \  ^8 Z% l  s& h, v
       if Clr_en='1' then- j- E5 \9 I7 ]
         Addr<="0000000000000000";7 ]# d$ ?$ J/ \4 o/ [
       elsif ALE_Sample='1' then
    4 x! b- a/ w' {) d8 u& Y
        Addr<=P2&0;& v2 h" G" l8 N' Z
       end if;+ e1 w9 o# _1 u+ [: I
      end if;. u8 `5 N  P: g2 H, S5 p+ N- A% H; N
    end process;            ' _  m" d" l# p/ [3 i3 D; @
    -------------------------------------4 G' z; h9 l8 i
    --Sample Wr
    ; [, ?, X& O% ~8 M3 J
    WrSample_p:process(Clk)
    3 a  }# S* Y0 V  j
    begin
    % `$ _; G5 m1 b9 |3 u
    if Clk'event and Clk='1' then
    & z! W) A3 _0 A1 e8 D; n: y& x! e
      if Clr_en='1' then
    1 f* L% L. c/ W% y9 F; u' \% j5 j
       WrSample0<='1';& e% D; h' H/ E8 ?/ j( D6 V' o
       WrSample1<='1';4 I9 z5 @  `8 l5 Z4 G, Z
       WrSample2<='1';& w, c0 s$ }8 e, p; d5 _$ [7 b3 n5 L
       WrSample3<='1';
    3 |8 H! }$ _3 y4 B; Z& ~* p9 M
       WrSample4<='1';
    : E& Y9 i2 H: q2 q& ]
       WrSample5<='1';, Q* K0 |0 ~2 B# s$ ~
      else& z3 B. P4 s6 X0 N' k9 D
       WrSample0<=Wr;) b2 T3 m7 k% n8 c& Z7 C
       WrSample1<=WrSample0;, ]4 Y, x3 E& `9 j
       WrSample2<=WrSample1;8 ~/ n5 u. B1 e3 E' @
       WrSample3<=WrSample2;/ S" P5 [9 E+ S# q% r
       WrSample4<=WrSample3;' Q3 o8 H0 Y- f* X8 a. h4 r
       WrSample5<=WrSample4;
    2 G7 {) H9 K7 f. O6 y
      end if;3 l0 m. P) b9 y- E: H( f+ }2 A
    end if;
    $ M# ~; p* Y4 q% g
    end process;
    ; V+ @- W! u2 V4 C6 L% f
    ---------------------------------------; \  Z2 B; p" s0 I" L
    --internal Wr enable signal( k% M' ^! Q1 Q  y) ], Y% b3 E
    WrEn_p:process(WrSample0,WrSample1,WrSample2,WrSample3,WrSample4,WrSample5)' N) n4 o- f9 i0 X! \
    begin
    & G6 A6 v0 g; E0 G' P% H, [
    if (WrSample0='0' and  WrSample1='0'( M4 `5 h- i, b9 L( P
      and WrSample2='0' and WrSample3='0'# E9 P* g3 j; y
      and WrSample4='1'and WrSample5='1')then8 W* X' b2 n4 c, q! _
      Wr_en<='1';! u! n2 j4 `1 I* j7 o9 C9 s
    else
    * `8 m1 C6 I+ C8 x9 V& @% u
      Wr_en<='0';* W) a7 w( I( S8 J1 M: i$ `4 v
    end if;
    7 l' t, N; R) f7 g! |
    end process;      
      }5 D: a. t3 ?0 p
    ----------------------------------------$ e' p  M* d8 r/ R
    --Rd Sample4 H5 w9 R' I( o& C
    RdSample_p:process(Clk), o- N/ v1 m# ?1 F+ d% _% r
    begin
    . E7 n+ M9 q/ c; E& U/ s" Z; O* S! I
    if Clk'event and Clk='1' then
    5 R9 {. @9 `6 Y. [& a
      if Clr_en='1' then/ n! M' D! n+ ]& ]
       RdSample<='1';$ w7 j* V# o5 ~% [, O7 C( u
      else
    ' j  e  K! b$ q2 t
       RdSample<=Rd;
    1 C, t. G# Z& R2 |
      end if;
    * {4 c) s7 A3 ?! `
    end if;
    8 B1 \. d* ?. z+ D4 ]. R8 }2 ?, E
    end process;1 l; ^. |. d  ^/ F2 d4 u
    7 H' Z8 w+ p# O6 \
    -----------------------------------: D# U) z1 C3 z  {2 e: ?; ~. d
    --Flash Rom Chip select signal; J! U9 [; \) B# s
    CS_Flash_p:process(Addr)/ i$ S$ i- P( g2 _2 ~
    begin4 e8 S; r7 A( q  V) p
    if Addr(15 downto 14)="10" then            --Address:8000h--BFFFh6 ^3 |- }$ t6 N$ n  j
         nCsFlashRam<='0';0 K$ W4 U8 M  Z* h& v: [
    else
    6 C) x) c3 u1 {' j$ q
      nCsFlashRam<='1';5 C4 P: ~3 v$ B
    end if;
    9 v9 `' V3 X/ I: L" J4 c
    end process;. X* [9 B4 y$ m" ]9 v. A
    -----------------------------------
    ) B; `5 c/ W* v
    -- 8255 Chip select signal
    3 g% X# Z' e) W/ v
    cs8255_p:process(Addr)
    / Y$ N. Z  M8 g/ e( O7 [
    begin5 ]: M4 Y; A5 U& D
      if Addr(15 downto 2)="11000000000000" then  --C000h--C003h
    " T  m( R+ _5 \9 c1 X
       nCS8255<='0';- }9 F; G% y; X" F5 {0 c0 e7 @
      else" |9 i! J5 a3 x
       nCS8255<='1';
    + ?8 u9 K0 m0 H1 z% e1 X
      end if;
    9 @& A2 _) j# J$ W: T
    end process;      ' w, T9 A- F+ A7 f+ R& @
    -----------------------------------
    1 X8 H' O6 {4 \* A! m- b4 u
    ----------------------------------- $ g; ^3 S! z: D7 r/ l- @
    -- Ram Bank Switch Reg 8 u; M7 \1 R5 r4 x9 S; n( d
    Ram_bank_p:process(Clk)
    % T2 G6 o& G0 G$ R3 V' U
    begin       ) K7 E6 a# n+ U5 b
    if Clk'event and Clk='1' then
    ! ]5 n; k4 o# o7 I8 t7 ]$ N/ a
      if Clr_en='1' then
    . z7 `$ I6 x2 T" G) h. i) X1 o
          RamBankReg<="00";  
    + ]+ H3 w4 v$ V8 |* j; w
      elsif Addr="1100000000000100" and Wr_en='1' then    --Address:C004h$ l( `3 U6 H3 N. W$ i
             RamBankReg<=P0(1 downto 0);
    % w! N* \; X/ C4 `* m
      end if;6 e; s7 ~; v0 t. ?7 v- g, l
    end if;0 o+ s2 e. S/ i* s" l
    end process;
    # }$ Q; L6 D) x- D6 C. c! B$ @4 `
    RamBank<=RamBankReg;      
    6 N! Y* ?# D( S  }- F. u
    ----------------------------------3 n8 I- B8 I& z; `3 S' ^7 F6 \
    ----------------------------------
    . L! C) t- o( Z8 p( s( W
    --Flash Rom Switch Reg; W3 o3 |0 a& M) A: T3 \6 |4 a
    Flash_bank_p:process(Clk); y* J) `$ c4 H! a& g
    begin      % S$ v3 B! S5 Z5 K! v
    if Clk'event and Clk='1' then
    4 s& P3 e. A) \  P* k! @
      if Clr_en='1' then
    - O7 ^  a. Q6 r8 y- j! H( q. W
       FlashRomBankReg<="000";
    7 ?# \7 r3 Y$ ~9 {& o8 \
      elsif Addr="1100000000000101"  and Wr_en='1' then      --Address:C005h
    4 _' M8 a+ \  K9 r& h/ r
       FlashRomBankReg<=P0(2 downto 0);" O" H$ {2 Y7 z0 e9 m# z- `! X7 f6 h
      end if;! M$ i- l; T9 k/ R6 s0 ^; z
    end if;
    4 Y. x. q3 F; t' t$ k
    end process;  l. c$ T& u" E" o7 a' D
    FlashRomBank<=FlashRomBankReg;   1 F! h; P# i0 ]7 t
    --------------------------------
    ; T$ p1 I$ t& V3 |* f* O; s3 G
    --------------------------------4 C5 _. u  |. x4 y
    --Rd process9 B- L) P# [# Q, u
    -- now just two in-builde register
    , X7 \8 b$ q. g0 ]
    Rd_p:process(RdSample,Addr,RamBankReg,FlashRomBankReg)* @, s) ]  }3 u6 C
    begin4 }9 c8 w# Q8 C, x
    if    Addr="1100000000000100"  and RdSample='0' then    --C004h& O( m9 T; n# [  g* p) C7 {
         P0<="000000"&RamBankReg;
    . J/ q0 i7 D9 t9 C' A7 R
    elsif Addr="1100000000000101"  and RdSample='0' then    --C005h' p# m1 [; x' L0 A$ L$ z; z% M3 F6 E
      P0<="00000"&FlashRomBankReg;9 K. c5 y! S* {
    else
    1 M5 b' x# d* y
      P0<="ZZZZZZZZ";9 V& E5 b4 y; w, F+ d- D, d' x
    end if;
    4 j' K  V/ P2 P
    end process;    $ O0 }6 L& h3 l
    -------------------------------   
    1 y' @: m  C. i+ ?2 K: S, e# u/ y
    Pina_p:process(Clk)/ R9 `( {9 H& C5 Q
    begin! n! J: j$ p6 J3 J' @; ]2 N
    if Clk'event and Clk='1' then
    1 ~( O4 s  d4 a$ P
      if Clr_en='1' then. k7 I: s- l( r. T, B! U7 G; V
       PinaReg<='0';( F! z3 W2 X( L: n9 i
      elsif Addr="1100000000000110"  and Wr_en='1' then      --C006h ' l* k1 `9 N) X+ a
       PinaReg<=P0(0);1 a5 x. O6 B1 u/ ?
      end if;- X$ ~/ A  G9 W  D/ B  a8 h
    end if;
    9 E( p/ x% [% K3 N
    end process;   
    , }: {! i9 `: V' Y  r) m
    Pina<=PinaReg;    1 f" x+ V# J% c6 w
    end cpldbus51;

    ; w+ l9 g: f$ P' N: N  x, a
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

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

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

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

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