找回密码
 注册
关于网站域名变更的通知
查看: 352|回复: 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 编辑
    5 g! {  N9 G* e! e4 w. X. d, W
    ' y9 z( B: X! y5 o8 P. |7 U' O cpld与8051的总线接口vhdl设计源码" L, P/ @$ S) ]/ ?4 d6 G
    library IEEE;
    8 Q. e6 {' z, Z9 E; r
    use IEEE.std_logic_1164.all;& a$ `5 l: }* X2 z+ P6 e
    use IEEE.std_logic_unsigned.all;
    2 j8 L/ D& ~# ]4 E4 ^
    entity cpldbus51 is
    6 J  x# f0 ]$ J/ T- _& h4 B
    port (            
    ! Z5 k2 ~  m% ]* B$ W
      Clk: in STD_LOGIC;                     --Clock    16MHZ  / T$ v3 z2 o! m3 p5 [1 y& ^
      Clr: in STD_LOGIC;         --Clear   high
    ' O. g( `1 |" F
      P0: inout STD_LOGIC_VECTOR (7 downto 0);   --8052 Port 0
    . v5 j" ]0 ^7 c3 `+ Q
      P2: in STD_LOGIC_VECTOR (7 downto 0);    --8052 Port 2
    ; @( _  o. T, e$ n1 g: Z2 w
      ALE: in STD_LOGIC;                         --8052 ALE8 q6 d0 W+ W3 Q2 f  H
    --  PSEN: in STD_LOGIC;         --8052'Psen, i6 P, R0 Z: e. d' z" @; w
    --  INT0ut  STD_LOGIC;                       --8052 INT0
      v( ^" l/ s. w. p
      Wr: in STD_LOGIC;         --8052'Wr
    : z. d5 K  a8 l- f7 R( R2 L
      Rd: in STD_LOGIC;         --8052'Rd
    % _2 S: K4 l/ c# r1 |# W& A1 Z
    ---------------------------
    / d( F2 `+ n0 {* Z6 b( P
      Pinaut STD_LOGIC;                     ---output
    # _5 Z/ ?4 ~% A8 l! U9 Z1 {
    -----------------------
    2 H& F" K% G5 n& g  h0 }
      nCS8255: out STD_LOGIC;           --select 82554 B7 x; }2 y5 G# Z2 G9 |
      RamBank: out STD_LOGIC_VECTOR (1 downto 0);--Ram68128a bank switch   A15 A164 e# W( s3 m5 K
      nCsFlashRam: out STD_LOGIC;       --select Flash Rom   CE
    / g; d4 G/ w, E- k4 f
      FlashRomBank: out STD_LOGIC_VECTOR (2 downto 0) --Flash Rom switch  A14 A15 A16
    5 k/ r* d+ C! ~) h0 G5 n4 n. n* @

    . ^! O! K' a) t9 }% A% v2 z, u
    );, ^+ I" N1 o& L
    end cpldbus51;3 E8 _0 h) D( \5 `- [3 N2 O- F

    ; s/ f0 G' P. q
    architecture cpldbus51 of cpldbus51 is           
    ! I* Q# z& }1 A6 m/ K
    ------------------------------------------------------------------------------
    - ?0 i/ M( t" K9 m# m4 n' n
    signal Addr: std_logic_vector(15 downto 0);  --16bit address- c- ~; T" K- A8 ]% G
    signal ALE_Sample:STD_LOGIC;& Z+ |" ?. t1 H6 B6 E; f: c
    signal RamBankReg: STD_LOGIC_VECTOR (1 downto 0);--Ram bank switch reg, 4 banks, 4*32K=128k bytes- x+ l/ x+ T* b! ^: H; H1 \4 x
    signal FlashRomBankReg: STD_LOGIC_VECTOR (2 downto 0);--Flash Rom bank switch reg, 8 banks, 8*16K=128k bytes( G: x  M; D- V0 ]
    --Rd Sample$ M# j/ ^6 k" N
    signal RdSample:std_logic; --for Rd Sample
    % Y4 P' G* r5 P3 N: v' a: x; u
    --WR Sample
    2 |' A- G, `/ @$ C4 z5 \9 e! _- L
    signal WrSample0:std_logic; --Wr for Sample / ?7 K4 M0 {; t" E. Q
    signal WrSample1:std_logic; 4 {3 P( F" O$ r: w4 v
    signal WrSample2:std_logic;
      d0 I; @0 U1 D4 b
    signal WrSample3:std_logic;5 k! s' Y" y' p4 n: T9 C4 F
    signal WrSample4:std_logic;
    , E( `  R$ H# `2 x: N: i& A$ j/ _" Y
    signal WrSample5:std_logic;& U- |% u  s6 c% j# p* x
    --Wr Sample output0 k5 K+ D; Y: m* M2 g
    signal Wr_en:std_logic;
    * Y1 g" ^5 u: Z3 O+ X! ?! I
    --Clr Sample   i2 K6 e, }4 Y: w8 L' t% h
    signal ClrSample0:std_logic; -- for Clr Sample 4 h6 B- p+ x( X& u3 R' d
    signal ClrSample1:std_logic;
    % @( }: b9 ]6 ?
    signal ClrSample2:std_logic;
    6 K/ o" n) U7 j
    signal ClrSample3:std_logic;9 q+ y9 @8 W# z, Q
    signal ClrSample4:std_logic; 9 A4 N7 g/ j0 ?) E6 |0 W( ^5 Q
    signal ClrSample5:std_logic;
    : ]) e+ l3 Q/ N! c' V
    signal ClrSample6:std_logic;
    ; z" I& u3 R5 G
    signal ClrSample7:std_logic;
    5 ~4 D+ F8 s( O
    signal ClrSample8:std_logic;
    ! B! x+ e( ~* \6 ?0 x9 ~1 L7 [
    signal ClrSample9:std_logic;
    $ Q1 e) f* k; `3 M$ H
    --Clr Sample output0 h. P# R$ S: h+ S# B
    signal Clr_en:std_logic;
    : {+ e4 i" r2 Z! f" w
    ------------------------------------------------------------------------------
      A" z- `. Q+ }) }
    --output Reg
    " i% P( i& ?. `
    signal PinaReg:std_logic; & q6 I5 f0 g0 w# {
    begin  ! N3 r, Q6 ?2 |. n1 Y' r: c
    --------------------------------------------
    ! V' \- t/ U" Z2 d' A0 ~5 R
    --Sample Clr signal  
    % i5 S8 c1 \( K6 n
    ClrSample_p:process(Clk)
    2 a8 J& F% a+ z
    begin+ \: Q. Q. l+ n: |
    if Clk'event and Clk='1' then
    2 n! D  n3 X' ~) F' l5 n
      ClrSample0<=Clr;
    % I. v; F7 A) ?. j/ \8 e9 G
      ClrSample1<=ClrSample0;: d( e3 D& o$ {" D
      ClrSample2<=ClrSample1;9 G' K$ H: s6 m# l
      ClrSample3<=ClrSample2;
    9 r% e, a4 g7 K
      ClrSample4<=ClrSample3;/ o# f5 h& I& k0 m& l
      ClrSample5<=ClrSample4;
    0 i. F2 x& h1 j+ z2 h. i
      ClrSample6<=ClrSample5;
    % }7 P8 }* k$ o6 J
      ClrSample7<=ClrSample6;0 k7 U& A' t, M4 M- F2 x9 V
      ClrSample8<=ClrSample7;! s0 S. R- X: ]+ u6 F
      ClrSample9<=ClrSample8;0 B# r$ S0 Z: x0 [5 O# e: \
    end if;7 [) }" B4 T, W) N
    end process;      - q+ W8 P: Y9 Q9 \3 {
    ---------------------------------------
    6 S2 k$ G3 g& D! X
    --Clr Enable Signal% R& ?  C( H- g- v4 F' r
    Clr_en_p:process(Clk)
    ( X/ R2 c# \2 U0 {6 _7 N8 K$ [
    begin    . t2 Z, _! d* q1 k
    if Clk'event and Clk='1' then  h* v* P8 F  _  C% G+ C
      if      ClrSample0='1' and ClrSample1='1': Z7 ^; [9 g2 f& q
       and ClrSample2='1' and ClrSample3='1'
    5 G, m- @- z% A+ L+ _5 v8 V; e$ N, Z
       and ClrSample4='1' and ClrSample5='1': G: }2 M2 [6 g
       and ClrSample6='1' and ClrSample7='1'% c4 B( ^4 c( b& M: q  x
       and ClrSample8='1' and ClrSample9='1' then/ E, k3 d# X& g, o! H" B& u6 c) ?
       Clr_en<='1';
    % @+ H& p: c2 O( x8 w
      else- ~* j- N7 O' E0 L
       Clr_en<='0';- x! A5 b: B, v# A! o  ?
      end if;# ]8 n& c4 G5 }# M/ F& ^- M
    end if;
    : {% Q( l5 N& R  q6 ~
    end process;      
    3 K) K2 h' g: G' c7 r
    ------------------------------------------------
    * M  ~* e0 G6 x# y1 O2 ^) ]! q1 Y
    --sample ALE signal * k5 h: x2 B* d: D' |. G& H" J
    ALE_p:process(Clk)
    / @% Z' R; a  G. U, W6 |7 m, Y5 M6 ~$ g
    begin
    2 h! I: m! }1 f5 i+ A  k
      if Clk'event and Clk='1' then( d+ ^" \( l! x3 m4 h9 u) S
       if Clr_en='1' then! t) N* r! c% `/ f/ b$ p/ c
        ALE_Sample<='0';
    / Z/ K4 L7 C3 q2 S
       else. c, N' d; W; o2 n
        ALE_Sample<=ALE;
      `  p4 q- q. Z0 ]. S( t
       end if;! r0 J/ @+ t4 m8 Y+ Z' {
      end if;  _& i0 f$ n$ v8 w4 @
    end process;$ H7 H& ~; Q7 H! G/ Q7 B
    -------------------------------------------------      
    % q, u9 ]3 U& d& B1 a
    --Address Latch 0 N" f) j( Y$ j1 {. p% E( Q
    Address_p:process(Clk)1 n* K4 W6 t& q! q+ u  ~1 Z
    begin$ n+ F2 k; \" n1 D9 Q
      if Clk'event and Clk='1' then
    7 A% [- \9 e/ U. I0 g# v; Q6 \
       if Clr_en='1' then$ G% `; F* e$ Q" l
         Addr<="0000000000000000";" C. e% v- n& T! L# g, D
       elsif ALE_Sample='1' then
    / J) l1 V& e1 R; l
        Addr<=P2&0;
    + r( E$ H% {( D) [: o5 a6 j6 t- V" H. D+ Q
       end if;
    ; p4 b$ u- G3 B2 k# x  d5 A, J3 |; j5 f
      end if;
    ; s, u2 Q3 u+ T1 M5 c1 o
    end process;            
    % ~" F  l- W3 r% \# _+ c. D
    -------------------------------------- y7 h% D0 Q) `
    --Sample Wr
    ' r! {) F: D! i  u
    WrSample_p:process(Clk)
    ( z: B/ S& U9 L. W
    begin# R$ Y4 j  q) j
    if Clk'event and Clk='1' then
    ( d+ r5 p# K: U3 w& o
      if Clr_en='1' then
    6 d% a! j  y7 @; {" ~  t0 U* X
       WrSample0<='1';
    . U% Z. [1 G5 w- B9 U0 w
       WrSample1<='1';7 K. Z: L, b( i  A2 V- i" D
       WrSample2<='1';+ K1 M- {* X* T9 s( a, g9 D0 j0 n
       WrSample3<='1';
    & Q7 w9 R7 t+ D4 F, T3 E( Q
       WrSample4<='1';2 C% O2 E+ D, C5 U; V
       WrSample5<='1';$ N; k/ z+ ~+ o  _
      else
    . i8 J( t+ {8 g% X% n! X
       WrSample0<=Wr;" s5 `6 \3 \: Y, K4 r2 O
       WrSample1<=WrSample0;# P! ?- [6 I8 e) q3 I* M; w' B
       WrSample2<=WrSample1;$ r  E# H# }! Y( M
       WrSample3<=WrSample2;1 ?' x( ~7 V, W
       WrSample4<=WrSample3;% b! z% h  K8 g; ]
       WrSample5<=WrSample4;" o) {6 t9 N2 O% Z$ v$ Z* g
      end if;8 J6 g# I# [! D. f
    end if;( N4 r0 {! N+ x0 I
    end process; " u4 @! B0 Z; k0 C+ s9 ^# q7 M
    ---------------------------------------  h9 {# R6 d. ^! s- g9 m& x
    --internal Wr enable signal
    % k/ h- e" @( F+ T: S" A# b2 [
    WrEn_p:process(WrSample0,WrSample1,WrSample2,WrSample3,WrSample4,WrSample5)/ @* a( F: n" {( ~
    begin, k9 I; z4 m$ `7 v8 u
    if (WrSample0='0' and  WrSample1='0': d. L2 Y1 D5 @0 Z1 n
      and WrSample2='0' and WrSample3='0'
    8 J! |: C0 b3 m1 J3 |% V9 B
      and WrSample4='1'and WrSample5='1')then
    8 R1 g1 o% n% k
      Wr_en<='1';# h' \4 l$ C6 J# i3 y$ X3 \
    else
    5 r6 Q' _* L3 @
      Wr_en<='0';- s- D: q! t, w* @, ?9 Y
    end if;$ F7 L7 L3 s6 D  \8 e
    end process;      
    " a3 b; e, p  N/ q' R
    ----------------------------------------' C& k6 z2 R" t& A( d5 r: ]" X
    --Rd Sample; V0 c* ^: i5 ?, y& t" l) N
    RdSample_p:process(Clk)) J- G+ ]+ ?$ y5 N6 W7 \& V
    begin2 L* h6 A% M- ^: i. J' f0 a2 z
    if Clk'event and Clk='1' then( Q. y/ `* I, W9 C  c) [
      if Clr_en='1' then/ o( Z2 K  b- h7 b; m* D
       RdSample<='1';7 j3 v6 J  @8 G, {
      else) M/ L" ?  r+ p& G$ w, W
       RdSample<=Rd;6 r4 q" ~' E% O) O; J- I$ S
      end if;0 w. j2 }* X4 ~! T; d
    end if;1 B. G$ F7 o. n8 }' A
    end process;
    6 W1 y& K. O! A  y% H0 u! h' i( p
    ) _+ n0 t) e, W* W$ b  ]: s
    ------------------------------------ K# K9 i! a6 U, K% w* e, R% C; Y: y
    --Flash Rom Chip select signal
    3 E% y: _! Y- s% Y
    CS_Flash_p:process(Addr)5 E8 B1 H0 i- {$ x/ t' P0 Z) ~
    begin
      ^8 j; }. K2 m( y' \6 b
    if Addr(15 downto 14)="10" then            --Address:8000h--BFFFh+ |9 ~  p( F! I0 v
         nCsFlashRam<='0';
    % v# R1 h5 f/ s! K
    else) s- Y3 O% k6 L0 s6 B" f
      nCsFlashRam<='1';
    3 j5 `+ A  ]0 }' F5 [
    end if;: i9 a& s. M0 @$ r/ \
    end process;
      X" b' p1 c! s! S( k4 h9 ~
    -----------------------------------5 O5 v  }5 h2 g* H# f! w& h; ^! {
    -- 8255 Chip select signal0 o& s, j8 a$ n- G' u
    cs8255_p:process(Addr)
    9 X0 Z: }8 C6 t, }/ U0 j/ Q* ^6 B+ N
    begin4 n2 \5 I) Z# W# w# [  g
      if Addr(15 downto 2)="11000000000000" then  --C000h--C003h
    , v+ I: R% g% E: i/ _; Y8 N$ W
       nCS8255<='0';' M) Y  N! }# o% c* s
      else5 O  p, N- L6 z0 Z. s
       nCS8255<='1';
    4 f0 f! l0 R) ~9 F
      end if;5 b/ y5 t! [& ~+ @
    end process;      
    ) d, H/ Q, T7 d6 |+ a
    -----------------------------------
    6 I3 I, l% l0 a' a, x
    -----------------------------------
    " S$ W2 W7 L4 ]- ^, _
    -- Ram Bank Switch Reg ! ]7 @7 g6 I' D4 M' G6 R
    Ram_bank_p:process(Clk)
      e& C% J% |. s4 H
    begin       ; A$ Y: {, e& D- e, n/ c
    if Clk'event and Clk='1' then% G8 u, Y( z* G# |  @. z3 e0 G' H
      if Clr_en='1' then
    5 T2 _& x, n, i
          RamBankReg<="00";  5 n6 K; }8 a5 `' g" s) U7 N. O
      elsif Addr="1100000000000100" and Wr_en='1' then    --Address:C004h* r; O2 i1 B, ?" M0 e$ O' P( x
             RamBankReg<=P0(1 downto 0);' R/ _5 [5 u* B) o
      end if;- U! ~" {) F3 x6 ?) H3 n
    end if;
    % M& A: |/ I+ P$ w7 R* E
    end process;
    0 c! F2 O( k) y6 T6 |6 l6 k* k
    RamBank<=RamBankReg;       $ g5 u* Q- D3 |4 R1 P8 }  A
    ----------------------------------
    " Q, A: w* I& o; o$ I* J
    ----------------------------------- J- H! N& X0 v# n' t
    --Flash Rom Switch Reg  ]5 F& u7 x  F% v4 T
    Flash_bank_p:process(Clk)
    # W9 L2 E; T1 I0 l0 S
    begin      
    ) {. y0 e, u. ]% y" ]9 F% V
    if Clk'event and Clk='1' then
    1 y* [* z5 U$ q/ y: D! c
      if Clr_en='1' then7 Q. p  `5 r* U  I
       FlashRomBankReg<="000";+ G$ B% g9 A: `' [! W2 a; ]' X6 s$ P
      elsif Addr="1100000000000101"  and Wr_en='1' then      --Address:C005h
    , [7 w; K! b; L2 q& _9 X
       FlashRomBankReg<=P0(2 downto 0);+ J4 C0 u  Y6 E* M
      end if;
    ) ]1 ^' N+ E) X: R% P/ C
    end if;! \& ?( x! y  i- h$ z+ M% l
    end process;* b. q$ C0 S& w6 F' P2 C4 g
    FlashRomBank<=FlashRomBankReg;   8 o/ X, R2 `$ q5 B/ [2 K
    --------------------------------8 D4 v! Y0 Y, r; Y) f
    --------------------------------" q9 i7 y) N+ C# q7 w! w! v" ~
    --Rd process7 i; K) ~$ m) X; p+ ~$ s6 V
    -- now just two in-builde register; q5 K/ q- M, c+ x
    Rd_p:process(RdSample,Addr,RamBankReg,FlashRomBankReg)
    ' F+ o/ a) {$ f- b7 }% L3 A
    begin
    , U! J, g) j& T3 W$ c
    if    Addr="1100000000000100"  and RdSample='0' then    --C004h
    6 S/ z. [: @' h  `
         P0<="000000"&RamBankReg;
    5 ~+ {! D% V7 O0 H$ F+ F4 C
    elsif Addr="1100000000000101"  and RdSample='0' then    --C005h
    . q1 ?9 \. D9 L9 l
      P0<="00000"&FlashRomBankReg;! X& x- U  }" e9 B
    else ; s. V* a2 ~; H! c) ~: t# s
      P0<="ZZZZZZZZ";8 `$ \( X: F/ o" a
    end if;
    5 {+ ~% Q" A8 q
    end process;   
    0 z- j/ f) L* j3 w# p
    -------------------------------   
    / r. |  S/ V; L4 ]
    Pina_p:process(Clk)! I7 ^* {2 Y: H& ^& v$ P
    begin
    ; E) a3 ~5 J( b* Y4 @4 G" [
    if Clk'event and Clk='1' then
    5 Q+ o4 u! y/ q8 g( U3 g& M
      if Clr_en='1' then) i* f. _& ~! J7 K: e. \
       PinaReg<='0';
    2 g! k$ g+ Q- W+ V( r) C$ V
      elsif Addr="1100000000000110"  and Wr_en='1' then      --C006h 9 Q/ A8 h0 }* }! u0 P+ F9 D
       PinaReg<=P0(0);  n, u0 e" B# r4 \! W& k# m
      end if;7 w) w9 o% O1 U8 q* O4 C
    end if;
    ' e; E) t6 T, \  M& N- P3 \  a
    end process;   
    ) Z* l4 x# P$ M4 L
    Pina<=PinaReg;    " j/ _* j" U- w" v' p* N. {
    end cpldbus51;
    . A* y# x8 ?8 [! l  [
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-23 02:51 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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