找回密码
 注册
关于网站域名变更的通知
查看: 257|回复: 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 编辑
    8 k7 S8 w2 C( c2 Y/ g8 b" M2 B6 k9 P3 \# t% Z- F( e' K
    cpld与8051的总线接口vhdl设计源码
    4 y- A" _. D/ G0 d% L+ `3 j8 p
    library IEEE;
    6 ~$ [/ l6 N  c! G- Wuse IEEE.std_logic_1164.all;: _, c" u  M& k
    use IEEE.std_logic_unsigned.all;
    8 U  i' e8 i/ q5 u2 Y2 A! Wentity cpldbus51 is9 `* l) T# s6 ?: ~$ E* P7 O  |! L$ n
    port (            / C; \5 N3 N! w/ L
      Clk: in STD_LOGIC;                     --Clock    16MHZ  8 \# W2 |! S. G# U$ e/ [% c) }
      Clr: in STD_LOGIC;         --Clear   high 1 _& |) e% |9 f6 T, z/ x
      P0: inout STD_LOGIC_VECTOR (7 downto 0);   --8052 Port 0
    4 q/ x( o) V* ~  P2: in STD_LOGIC_VECTOR (7 downto 0);    --8052 Port 2) W9 s6 C  z+ A6 R1 B3 Z
      ALE: in STD_LOGIC;                         --8052 ALE* z/ C# L9 x/ i. ?0 ]
    --  PSEN: in STD_LOGIC;         --8052'Psen' Q$ R& b4 T$ [
    --  INT0ut  STD_LOGIC;                       --8052 INT09 M: v0 {. W( B$ [
      Wr: in STD_LOGIC;         --8052'Wr. x! A- N" ?& v# G
      Rd: in STD_LOGIC;         --8052'Rd
    ! o: w* B" I! m/ p  E( |4 R---------------------------
      u% ]: u: U# b" }2 `- ~2 E$ c8 v  w+ ?+ ~  Pinaut STD_LOGIC;                     ---output
    8 A( u" J" k$ n9 g; K-----------------------) n3 E7 }) m; A  k0 w; s
      nCS8255: out STD_LOGIC;           --select 8255
    & G8 D0 L! P) t! o  RamBank: out STD_LOGIC_VECTOR (1 downto 0);--Ram68128a bank switch   A15 A16/ i7 G; W2 n/ F, M" \- z& B2 Q& \, N
      nCsFlashRam: out STD_LOGIC;       --select Flash Rom   CE
    & u  D1 V( @) `, e1 X  FlashRomBank: out STD_LOGIC_VECTOR (2 downto 0) --Flash Rom switch  A14 A15 A162 E$ x) q+ Z3 u& g0 \3 Z
    % T' _3 b3 {5 c# }4 u* Y# ]9 F
    );! H" ?' m0 p, h9 m) @! V. z: u
    end cpldbus51;6 K. M. ^! W* ]3 B* W4 o0 V4 F

    ) ]7 W0 C1 Z% U/ U+ Qarchitecture cpldbus51 of cpldbus51 is           2 n* k# T( ?6 r; ?  G3 l
    ------------------------------------------------------------------------------
    ' c: z, T" E) @9 Z# {5 }2 M' @signal Addr: std_logic_vector(15 downto 0);  --16bit address
    ! L: |8 ]9 }/ ~# Isignal ALE_Sample:STD_LOGIC;
    / y- ^9 u' M2 E0 o$ D' Rsignal RamBankReg: STD_LOGIC_VECTOR (1 downto 0);--Ram bank switch reg, 4 banks, 4*32K=128k bytes7 f0 x- E; g0 F" e1 Q
    signal FlashRomBankReg: STD_LOGIC_VECTOR (2 downto 0);--Flash Rom bank switch reg, 8 banks, 8*16K=128k bytes
    & `; r) g& v+ ]6 Z; W7 u--Rd Sample* X$ P* a* B  n5 a6 W8 u& ]9 W
    signal RdSample:std_logic; --for Rd Sample
      M; i& ?7 ]# P1 r* g--WR Sample # s; q0 |5 h" T" S$ ]
    signal WrSample0:std_logic; --Wr for Sample ( l9 N* `6 K2 t' D$ J& j+ o8 T
    signal WrSample1:std_logic;
    + b1 z/ l0 F1 O3 ?$ \$ z2 s0 Wsignal WrSample2:std_logic;
    " i, ?" `  f5 I4 F7 a( B/ }signal WrSample3:std_logic;
    ! ?0 t! X2 p4 g: osignal WrSample4:std_logic; ) S2 g% p: ~# f9 i' a5 E
    signal WrSample5:std_logic;
    * k( Q3 s. a2 Q--Wr Sample output' \, A* [; T: W0 r% E4 r' b! W
    signal Wr_en:std_logic; 0 |6 U$ |( f6 d# J8 F5 ~
    --Clr Sample ( c9 p  z6 h! ?0 @) d9 \
    signal ClrSample0:std_logic; -- for Clr Sample
    4 Z0 c/ I- b* T) {' msignal ClrSample1:std_logic;
    6 }& }$ f0 |, G, K' n. Rsignal ClrSample2:std_logic; 4 _8 k) Z# L1 l  U. g* K
    signal ClrSample3:std_logic;( a2 t6 L1 w; @- y3 d9 K
    signal ClrSample4:std_logic; 0 s+ U- q% U3 e
    signal ClrSample5:std_logic;+ c8 R- ?* z0 J: h
    signal ClrSample6:std_logic;
    2 \9 c* Z5 B9 ysignal ClrSample7:std_logic;
    , a: K* }5 s9 `2 m" l; A4 q7 Rsignal ClrSample8:std_logic;
    - `! c0 Z# ]8 N, {; G7 p2 psignal ClrSample9:std_logic;
    - h, b. _/ w/ m8 @. V--Clr Sample output
    3 A8 V0 A3 r+ \* Usignal Clr_en:std_logic;% C  e. L9 Q; q! F; O
    ------------------------------------------------------------------------------
    # @& Y4 i% m) J! e3 [" o& R5 |--output Reg
    8 J( G* l& N+ i- t! `9 S2 K9 |signal PinaReg:std_logic;
    # S# U1 @( \' G: F8 B( k0 fbegin  , J: M1 o# E7 ~! r
    --------------------------------------------
    4 K/ _) F% E  Y2 X* a--Sample Clr signal  & n% h$ \' b- q2 [
    ClrSample_p:process(Clk)
    $ B, w8 \0 {* j9 T8 Q5 bbegin* _6 N- Q0 \% l- I; h& m# ?+ H7 r) F& q
    if Clk'event and Clk='1' then
    6 N+ J: S3 ^$ P7 _) B9 L, o6 k  ClrSample0<=Clr;
    ' Y5 y2 [- ?' w2 G$ |" l, D' y+ m  ClrSample1<=ClrSample0;9 y  _$ l0 v8 J8 a* ?7 i0 y+ x: d
      ClrSample2<=ClrSample1;( H0 n0 q) J3 M: {# @+ l# u
      ClrSample3<=ClrSample2;
    4 M$ X3 o0 n1 k" {2 e% u  ClrSample4<=ClrSample3;; q& @+ c* b  s9 c/ V: p" c4 i! i
      ClrSample5<=ClrSample4;6 r8 i9 l0 J6 ]) r6 {& g/ m6 d
      ClrSample6<=ClrSample5;
    2 a- A9 x& k; ~6 z  ClrSample7<=ClrSample6;3 c  M+ K: P' g/ t/ J7 W5 \0 Q
      ClrSample8<=ClrSample7;
    % K" r! R# ^4 M, W# m6 w  ClrSample9<=ClrSample8;
    / H; m6 U/ z9 Fend if;* u9 V* p8 X5 K( K
    end process;      
    - N, D$ E6 ?. ?: A" A- J---------------------------------------* Z, `) `8 t: s8 q8 m
    --Clr Enable Signal7 }% B- A8 Y3 t. w6 e% [
    Clr_en_p:process(Clk)
    : V; Q0 e2 F  S! @$ r# y: U( X8 Ebegin    - W$ [( m; {* A5 p5 u0 G
    if Clk'event and Clk='1' then
    3 S- Y0 d& f3 e" a: w6 W9 ~( \2 E  if      ClrSample0='1' and ClrSample1='1'
      Z0 ~' n/ j; `4 U% l   and ClrSample2='1' and ClrSample3='1'
    8 ?9 j, t5 e$ h   and ClrSample4='1' and ClrSample5='1'7 ]& O+ |' ~( u! I( Z2 j
       and ClrSample6='1' and ClrSample7='1'2 D3 Y$ k( M1 G; C4 C
       and ClrSample8='1' and ClrSample9='1' then
    7 S6 E: x% v! I   Clr_en<='1';4 L, x2 P7 S9 w4 B" z6 {
      else+ x  d% N. {' G
       Clr_en<='0';
    - M( K: `1 t* ~# ?. s  end if;  u1 F1 Z9 ~" T& ~9 }
    end if;
    - G& u: |4 E* @8 j: H0 l1 [end process;       + q9 b  O5 l9 v- k8 \/ K0 u1 g
    ------------------------------------------------
    % _! G0 _7 a2 p3 p% F5 E--sample ALE signal % P: w$ k8 Z$ D9 a  I9 F
    ALE_p:process(Clk)8 {5 O9 I3 }% V( B+ T$ \
    begin
    ; @. s+ J2 [8 e  if Clk'event and Clk='1' then' p1 j+ F) E7 ^, m9 C1 G
       if Clr_en='1' then- ?# [% y( [1 N, u- e
        ALE_Sample<='0';5 g0 O* U5 Y& T/ f' {
       else
    4 s# J) r, s. H1 \. B) S8 O    ALE_Sample<=ALE;2 c0 d5 d0 d  H0 T
       end if;
    8 n& b2 {1 i7 n0 L! v  end if;
    5 ?% R  o! E% D/ F* a9 X8 Yend process;, M; ?& ^% k  O/ y$ x* h% j
    -------------------------------------------------      $ c" k7 l* ~% Q8 i% X0 v" Y
    --Address Latch
    ( D9 G3 B$ c1 VAddress_p:process(Clk)1 j1 g0 N3 A" _# c' y1 H+ I
    begin
    3 I- q! j- r5 Y; y* @1 f* w5 ~  if Clk'event and Clk='1' then. c$ I1 e  \. n! [; V1 }: |
       if Clr_en='1' then- e0 p/ f- R" o" j6 T, X0 G5 X
         Addr<="0000000000000000";* B' [/ F1 X6 c* z) i+ q
       elsif ALE_Sample='1' then
    , U; W! I" \* ]+ P: a9 Q* q, v    Addr<=P2&0;) [9 N+ V% Z( M: Z8 J, e) q/ W
       end if;
    0 U$ b: f6 ]/ o5 x9 s5 N  U9 l8 Y1 k, }  end if;
    3 r" i  D, y: i% W6 t5 @. X! Mend process;            % Q. _% a- Z- E3 f
    -------------------------------------
    ; z: y" w+ Z- A, \! X3 w- }--Sample Wr/ c+ J* c8 K, B5 c8 i- K
    WrSample_p:process(Clk)! b/ E$ I6 u8 x- Q$ Z; @( m1 s8 D
    begin, |& U& k2 x1 i9 P
    if Clk'event and Clk='1' then9 W8 A5 [: O: n& O* B  O9 d
      if Clr_en='1' then
    ! }* K4 ?6 D* G9 |   WrSample0<='1';
    ( x  t$ G) x7 {& C   WrSample1<='1';
    , E/ m. f# R8 ?( F& j" D   WrSample2<='1';
    " V$ w5 m# d+ @5 p9 o   WrSample3<='1';
    2 ]( E5 e5 }5 P$ h$ w9 R& c5 |   WrSample4<='1';
    3 |: |9 [& K7 F   WrSample5<='1';' \* g+ Y# ~& g) Q, e; g; Q) {
      else
    / Q# b9 V0 @6 ~& w6 j5 j! @   WrSample0<=Wr;
    - u. r9 K" Q( B+ V0 o' z% s6 z. \" E   WrSample1<=WrSample0;4 m! D% Y3 }2 p" ~
       WrSample2<=WrSample1;
    # `: `8 X3 Z2 d! |. V, m. c5 w   WrSample3<=WrSample2;. k1 n# V  o( Q- q" h1 v
       WrSample4<=WrSample3;" O- G  d& H7 ?4 U9 e( B
       WrSample5<=WrSample4;6 T- r% t9 {% ]3 h4 Q
      end if;8 u. T0 B/ y, h5 O( i
    end if;+ z) P2 ~3 Y; [1 \/ U0 [) {. Y
    end process; / G+ m( a9 V# e0 U) Q
    ---------------------------------------9 `2 V+ D3 g* j
    --internal Wr enable signal
    9 k% X7 D8 t) iWrEn_p:process(WrSample0,WrSample1,WrSample2,WrSample3,WrSample4,WrSample5)0 p) x$ q6 V7 ^. {8 ]
    begin* P* o8 b! W5 X( H$ Y
    if (WrSample0='0' and  WrSample1='0'
    ! B) O# D8 u6 H/ I8 P- X7 V- H$ L  and WrSample2='0' and WrSample3='0'5 Q2 p8 t$ W1 E" u& ?) |0 @
      and WrSample4='1'and WrSample5='1')then' ~; o% `; B( ]5 N& @
      Wr_en<='1';
      L3 {2 `" g. o2 ~+ o- r9 n' Oelse
    ) S! }) ~% X6 ?) |  Wr_en<='0';/ g  E3 s$ y" K' p; R; N
    end if;* N1 [1 A3 s5 f/ M- Z0 F* y
    end process;       5 m( ]) j. Z! e3 x
    ----------------------------------------- K/ E. ?) e- k) B; r4 J# I& `
    --Rd Sample: V. a0 I, W# ]
    RdSample_p:process(Clk)2 X( y6 p. x! W: a( B
    begin
    $ t/ t  U/ x; P0 |if Clk'event and Clk='1' then
    + L4 E$ j4 {' Z- V& y% |  if Clr_en='1' then# b8 G3 ~- r+ |' R- D& W% A0 m
       RdSample<='1';- P! x! g+ p. q! ?0 Z0 o/ H/ u$ X8 x
      else
    2 B8 K7 T$ @0 W   RdSample<=Rd;, t0 k& J5 I; w* ^
      end if;7 l! H, ]8 y) Q
    end if;6 K. s4 |' N5 h, [
    end process;2 b* Q6 [7 ]. O# \

    * X: d0 ^; ?8 Y& d4 N-----------------------------------# ?' C1 w& O+ c$ x2 c
    --Flash Rom Chip select signal: ]8 S% V" C, D$ ^* A! `) D
    CS_Flash_p:process(Addr)
    ! t; @: N; O& V1 `# Y% ebegin  y* a, \1 U- e( Q2 _3 W
    if Addr(15 downto 14)="10" then            --Address:8000h--BFFFh- C$ A% c3 r0 w2 u
         nCsFlashRam<='0';
    ' {4 o, }. ?* C1 eelse) y5 g- ~$ a  K0 W! L0 [( K2 n
      nCsFlashRam<='1';
    $ h6 f; o0 g4 c1 k+ dend if;
    ( ~! V* {& Z" n4 W5 jend process;
    : a0 [$ @3 T! _+ |% c: i-----------------------------------5 l& T7 x3 o1 K7 x: f' Q" [! ?
    -- 8255 Chip select signal
    - {1 \; D0 m! k  K+ r# s# q# ecs8255_p:process(Addr)
      ^# M# i  l5 Ubegin  A3 Q# l* w! p  d3 @0 P- f* G* X" i
      if Addr(15 downto 2)="11000000000000" then  --C000h--C003h & q$ a, E6 r8 [+ x% H, i# q
       nCS8255<='0';
    + F( O  F9 {/ v$ X+ e  else8 R6 W: Y( S6 j6 g% s$ k
       nCS8255<='1';* V2 z3 d3 o. _6 B8 I- P
      end if;
    ; E: V4 F' s1 f5 S" }" c# r( Wend process;      
    3 B% a8 y' e  i8 y8 z# X& H9 S-----------------------------------8 Y4 y  ]# Y; S$ C, v7 p$ r
    -----------------------------------
    ( X) D7 O7 {6 K-- Ram Bank Switch Reg
    1 ]" O/ m& ?5 C! |/ vRam_bank_p:process(Clk), J  y5 {. m% M+ p$ V
    begin      
    ) b; u! N5 ]( s. vif Clk'event and Clk='1' then1 d3 T+ _6 n5 v5 W8 b( Q* C  {, K
      if Clr_en='1' then
      c, L/ \  |" O) y5 f      RamBankReg<="00";  7 j$ b" B# A" ~3 ~! Y7 M$ a& i
      elsif Addr="1100000000000100" and Wr_en='1' then    --Address:C004h. ?& u  z% u0 H
             RamBankReg<=P0(1 downto 0);
    & L( m7 E* L: N( e; j: P  end if;
    $ b! f' l% t6 R/ Cend if;( M: `. ^  i- u4 P  O) r- }
    end process;
    $ R$ Z( k* v# O$ m2 dRamBank<=RamBankReg;      
    0 r% U, V0 d  B8 r- n----------------------------------. E( V! h$ i$ ?2 d! _4 ~7 |+ {
    ----------------------------------
    . z+ d! r; U+ y8 {--Flash Rom Switch Reg( y- _. d8 X/ T
    Flash_bank_p:process(Clk)3 y6 b% p6 _" ~" x6 N* ]: Y. B
    begin      
    $ j7 P8 b3 W2 g, }  s) vif Clk'event and Clk='1' then
    6 G# i% S# T: j5 _/ u# |2 n  if Clr_en='1' then
    0 z8 O8 |* L5 v/ R3 g   FlashRomBankReg<="000";$ y, ^8 i% J2 s' r* H" Y
      elsif Addr="1100000000000101"  and Wr_en='1' then      --Address:C005h6 p) v/ n6 d( d# X1 U
       FlashRomBankReg<=P0(2 downto 0);
    3 U# ?' |1 c8 N: ~9 X8 G7 v  end if;3 G/ J5 U2 i% W1 E& q
    end if;: _  D, {2 H/ p4 u- \1 V
    end process;
    1 f: W' @$ W7 z  T& y! rFlashRomBank<=FlashRomBankReg;   0 r% k3 E. z+ l* k4 o, b- H
    --------------------------------
    ; p8 k+ a' Y# L" ^7 M+ S# }--------------------------------
    6 P- C6 v/ ~; U--Rd process
    ' h/ \$ }5 U( I-- now just two in-builde register& L5 n" B9 Q) o* o3 Y9 E4 I- c
    Rd_p:process(RdSample,Addr,RamBankReg,FlashRomBankReg)
    ' u. `. b" J' gbegin
    : x& I% d, U6 X1 Q: dif    Addr="1100000000000100"  and RdSample='0' then    --C004h5 b" Y  B9 k4 U2 g, G+ c+ Y
         P0<="000000"&RamBankReg;. d. O8 C) ~5 M7 B" S# }# D
    elsif Addr="1100000000000101"  and RdSample='0' then    --C005h
    6 y4 S& y/ K8 w4 U  P0<="00000"&FlashRomBankReg;  a( G  G9 A+ T. p1 M
    else 3 c. o; z, a4 h  I
      P0<="ZZZZZZZZ";
    3 P4 K3 ?2 m/ W. e5 yend if;) a$ g  b2 d. @; t
    end process;    7 Z- a% ?" h4 g4 ^
    -------------------------------   
    3 x, [( U. M' D; K( O9 U$ L* xPina_p:process(Clk)4 m( s7 }. s8 P
    begin
      ]' G; j% c$ t) x0 U0 Xif Clk'event and Clk='1' then8 U' T" F" z% b% I" t3 K
      if Clr_en='1' then
    ' x3 P' E) w; E8 t   PinaReg<='0';% z7 }1 o  o6 b
      elsif Addr="1100000000000110"  and Wr_en='1' then      --C006h
      {+ u( v, t* ^$ c0 T8 L   PinaReg<=P0(0);
    + B8 y: e6 s' y2 n  end if;
    & c5 e: G& U7 O/ J# `. A4 @end if;$ k1 k% m! Q& U1 |
    end process;   
    6 R3 }9 T3 b6 S& ?' {# NPina<=PinaReg;   
      }# G( E+ q2 L0 b& @end cpldbus51;( X; S% {  |# z
    - e# w4 q7 Y* H  |
    ) `- @1 ]1 b" b! x9 M! v

    ' v  u5 }& w+ X: S: o3 B! S; U% b# Q$ \3 c* Z

    : |8 @9 G6 h: Q/ Z: t* N

    $ X* V: V2 s" O5 r$ g* z

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

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

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

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

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