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

MC8051 IP core

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
在网上寻找数字地与模拟地的英文材料;# E, N! k, T3 a( B) J5 Y% m
无意间浏览到一个国外的的cpld/FPGA论坛,点击进入0 g* Q# X  M$ `
发现了有人求51的IP CORE,在回帖里面看到这个,所以下载了。* N1 u7 B& B! ]) V! Q
% [& M- [; Q6 Y; B

. l$ h' A4 g0 n1 A$ T@: mc8051@oregano.at. [( O1 D* B0 \9 i2 X) J
W: http://oregano.at/ip/8051.htm9 C' W7 v. Q* Z
( h; j. \+ @, Y( a7 G$ C
************************************************************
) o* X9 R3 _9 M& j( @- TThis is version 1.4 of the MC8051 IP core.# h) y2 @- J) p; O6 i9 h: ?  ?
November 2004: Oregano Systems - Design & Consulting GesmbH/ h2 R6 {; [8 M5 X) k( B8 e5 F
============================================================
, v" i3 s1 Y1 I/ KChanges:
& K% `  U% M& @* \! g# a- corrected behaviour of RETI instruction handling
/ v$ ?  ]* \. a0 S! z3 H/ c3 M- added synchronization for interrupt signals& u0 R$ L- g- b7 q
- corrected timer problems- m; l# b; ^" B: t% _: }
& `5 L% U: r1 _- \/ \& ^
************************************************************8 N5 j" m4 @- Q# h
This is version 1.3 of the MC8051 IP core.
1 q9 b1 v% e% S  B1 @/ ~2 ?; lSeptember 2002: Oregano Systems - Design & Consulting GesmbH
" d" l" k" z7 V2 X============================================================
( ~6 h" x7 g! C( l, ]Change history:! r4 a: `- q. c* i; f
- Improved tb_mc8051_siu_sim.vhd to verify duplex operation.
+ o* P' l1 e$ Y- Corrected problem with duplex operation in file
3 y5 v% P/ ]4 x+ s  mc8051_siu_rtl.vhd6 b; t) ~- r/ y' W' a

* G. V& F7 O9 o************************************************************! E# B. Z# e9 j# B# b
This is version 1.2. of the MC8051 IP core.
& K6 ^: G1 d5 V8 Y6 ?6 U" VJune 2002 - Oregano Systems - Design & Consulting GesmbH
; n2 o& O0 M$ |============================================================) N) b2 M& n7 K& U1 x& @) [
Change history:' X9 m1 [/ e' j
- Eliminated the scr subdirectory form the distribution.; G% P: J: V/ R1 O. F) l
- Improved documentation.
# c6 T) k/ F9 G- r  ]- Corrected several bugs in the source code (see the
8 _) y. Q- b1 i  e; p9 M. G  website for more details).
3 T' W( J) w0 A; s) v/ F- Improved the testbench with respect to the I/O port
& }9 ^+ I- P0 ]) L  behavior.& k) G( A( `4 _) P( P' A: M
- Enriched the msim directory with the assembler source5 e+ K# p: c+ ]% V3 i5 C3 B; i
  code of an example program.
0 k* T3 `" a( U/ \0 `5 S- Provided the source code of a Intel hex to binary$ z/ N+ d5 ^3 c2 V
  textfile converter to ease simulation of the user's% D6 X8 P4 ^/ S3 v5 w
  assambler programs.- u! a7 A& b, S1 j

, j, _. o! M7 E3 I6 Q************************************************************: B3 A! j9 r% U" j; R
This is version 1.1. of the MC8051 IP core.3 i) m3 f& _2 ?
Jan 31st 2002 - Oregano Systems - Design & Consulting GesmbH! s) `2 x6 T: l( E4 h1 f4 U8 _8 u

. E/ v5 E( d8 u+ _5 x
  V; `% x5 Q. |- G7 i8 T
2 c8 @6 m: m& V' f' q- H. V0 p# C下面是里面的部分VHDL+ ~- U6 |- x, C' x) A

8 l1 u- X2 z; N- I& G  j: p  p* \

2 T% b7 M; i  @8 A' slibrary IEEE;
* _" I- U1 J8 Q( H( `use IEEE.std_logic_1164.all; . Y' f  X/ H: a( A5 w/ @
use IEEE.std_logic_arith.all;- w$ ~2 I) U9 S) J, q9 Q3 D3 |" w% N
library work;
) y$ B5 r- Q% S! k& f$ e0 ~use work.mc8051_p.all;: \0 N9 X7 N/ A& B
  
# [3 t; B0 [0 H& @5 U# G9 y( p-----------------------------ENTITY DECLARATION--------------------------------3 P/ l2 _$ h; i3 T2 z
entity addsub_core is
6 i6 Z% z* e6 n7 f) A9 M  8 {! W8 O* t" f. z; |4 u
  generic (DWIDTH : integer := 16);   -- Data width of the ALU
' W' Y* l2 G. {2 L+ a& [7 N1 {  port (opa_i    : in std_logic_vector(DWIDTH-1 downto 0);
& o9 w& [7 _0 @9 `1 I" v        opb_i    : in std_logic_vector(DWIDTH-1 downto 0);
8 M# c2 I6 p9 I9 C        addsub_i : in std_logic;
# |* X* D3 X% W+ q5 Y        cy_i     : in std_logic;
1 D+ F9 F; M# W0 F0 y6 t        cy_o   : out std_logic_vector((DWIDTH-1)/4 downto 0);
5 u: j3 y; a; }5 S, [8 s+ R        ov_o   : out std_logic;
& _: Y7 U" }+ J        rslt_o : out std_logic_vector(DWIDTH-1 downto 0));% m4 ]6 l6 i' K0 Z
* N  h" @/ X& z; [; G) ?
end addsub_core;/ t1 P% A5 L! S
. r3 y; T+ y1 }9 y( q

" w: v5 `2 ?$ s- [4 B# q
1 J0 n" y0 _% Z6 ?) Z1 oentity mc8051_alu is
5 o  U" X9 J% W' t1 E0 h: {  generic (DWIDTH : integer := 8);             -- Data width of the ALU7 W& P; b6 ]$ i$ {
  port (rom_data_i : in std_logic_vector(DWIDTH-1 downto 0);
, D0 v  D) d' K+ Z( L) ]        ram_data_i : in std_logic_vector(DWIDTH-1 downto 0);" b6 I8 O1 ~, G! M7 A6 v
        acc_i      : in std_logic_vector(DWIDTH-1 downto 0);0 v+ Y' n+ ~7 |5 t4 w
        cmd_i      : in std_logic_vector(5 downto 0);
5 R) y) w3 ^6 S4 l* {        cy_i       : in std_logic_vector((DWIDTH-1)/4 downto 0);- p" `8 S* g6 |  X  |
        ov_i       : in std_logic;
: _) |" Z2 Z- t$ G% R  5 A: a  M6 J& E* c- |% x1 f8 s- g
        new_cy_o   : out std_logic_vector((DWIDTH-1)/4 downto 0);1 K, X. s7 B% x) q$ I
        new_ov_o   : out std_logic;
) q8 ?3 ~5 r/ ^. f        result_a_o : out std_logic_vector(DWIDTH-1 downto 0);8 J, K8 X7 R$ _4 B4 Y  d( i
        result_b_o : out std_logic_vector(DWIDTH-1 downto 0));
/ z& T  j7 x* T; b9 I! E# {* B2 K  ; I  [% `/ m3 h8 T6 F
end mc8051_alu;
7 d% s, c* }1 y* t7 U$ }3 |$ @4 [- `--Inputs:4 y2 g$ p; R% ]) E
-- rom_data_i...... data input from ROM# Y; K8 }0 h5 {
-- ram_data_i...... data input from RAM* Y: l+ |4 [" `6 p+ Y$ j
-- acc_i........... the contents of the accumulator register1 |/ \- z3 L. R
-- cmd_i........... command from the control unit
+ i$ i4 n1 d9 A2 C* j' l8 [/ U: @-- cy_i............ CY-Flags of the SFR
" o$ o+ n3 G: ]9 P; R7 F-- ov_i............ OV-Flag of the SFR
  L! [$ f! b7 o--Outputs:
0 X( @8 S8 A% C, w5 l% _-- new_cy_o........ new CY-Flags for SFR
/ m/ Y  y3 ~+ |6 S$ \+ r-- new_ov_o........ new OV-Flag for SFR! d! U$ |7 J+ h* _2 n! V
-- result_a_o...... result
8 G: y3 }) p3 X' C+ x-- result_b_o...... result
4 }: n( o) a. I) U. T- v' i: v) i
- J1 [# }! B4 R2 W: w% b# R4 p9 r
! o6 F. e! K4 t! C/ e0 P
& c/ T3 {8 l$ e% h  K7 j
( j2 w7 B8 N9 I& Y" m* d1 karchitecture struc of mc8051_alu is
: o1 \/ Z- j1 X5 D( t  signal s_alu_result   : std_logic_vector(DWIDTH-1 downto 0);
5 b* O% V0 w& V) y( o2 H& M  ]  signal s_alu_new_cy   : std_logic_vector((DWIDTH-1)/4 downto 0);
# ]7 k( E5 q+ m- j  w  signal s_alu_op_a     : std_logic_vector(DWIDTH-1 downto 0);
/ M5 p" K; e9 ?+ ~' w  signal s_alu_op_b     : std_logic_vector(DWIDTH-1 downto 0);
: q6 ~7 a1 w1 e: T) t+ H+ x  signal s_alu_cmd      : std_logic_vector(3 downto 0);" y" b7 I7 G6 n' |9 M8 W
  signal s_dvdnd        : std_logic_vector(DWIDTH-1 downto 0);. _6 z: V- l2 X
  signal s_dvsor        : std_logic_vector(DWIDTH-1 downto 0);. i/ f; t$ K+ E% M' O
  signal s_qutnt        : std_logic_vector(DWIDTH-1 downto 0);
9 c, r5 h1 a! @$ k: K3 o  signal s_rmndr        : std_logic_vector(DWIDTH-1 downto 0);
2 W3 S/ `$ C% a( t0 F6 O3 h  P  signal s_mltplcnd     : std_logic_vector(DWIDTH-1 downto 0);+ b! D; ]* i/ }3 H
  signal s_mltplctr     : std_logic_vector(DWIDTH-1 downto 0);8 O: u# }- @, p6 N9 K6 ]
  signal s_product      : std_logic_vector((DWIDTH*2)-1 downto 0);- W( }6 f4 q9 V* d- b
  signal s_dcml_data    : std_logic_vector(DWIDTH-1 downto 0);0 ?+ C/ }8 S) U  U  H
  signal s_dcml_rslt    : std_logic_vector(DWIDTH-1 downto 0);
6 S6 i2 d0 J1 d4 ~1 T2 f0 q, |  signal s_dcml_cy      : std_logic;
* q. ~8 n- l* H/ R  signal s_addsub_rslt  : std_logic_vector(DWIDTH-1 downto 0);
$ c0 `/ a, \+ o5 E4 R  signal s_addsub_newcy : std_logic_vector((DWIDTH-1)/4 downto 0);
% t5 e! p6 o! V' o8 |  signal s_addsub_ov    : std_logic;. `) e5 c5 E2 K
  signal s_addsub_cy    : std_logic;
; Z9 ?2 O8 U! f, B# n  signal s_addsub       : std_logic;/ Q% \# n+ e% ~+ u& Y
  signal s_addsub_opa   : std_logic_vector(DWIDTH-1 downto 0);
( P  a+ m$ P2 k' O5 P  signal s_addsub_opb   : std_logic_vector(DWIDTH-1 downto 0);
/ R3 I5 F. ~' D6 X+ I7 B+ Z1 mbegin                 -- architecture structural3 k7 i7 N4 c/ p3 s$ `7 @+ k7 x
  i_alumux : alumux
7 W$ j& t$ M% q& a/ f0 U  `    generic map (' v) }8 @- ]9 ^
      DWIDTH => DWIDTH)& F+ t, d* D2 F/ W
    port map (
$ y  u1 g" p2 ~# [) S* S6 R      -- Primary I/Os of the ALU unit.
3 @8 C- j' \. f. A7 u      rom_data_i    => rom_data_i,
/ H! w, V3 }$ C- w9 J& p' P      ram_data_i    => ram_data_i,
5 Z* A, h$ b$ B' `6 {: Q0 `# [: ]* z      acc_i         => acc_i,
) B2 z& z2 ^8 ?+ @. Z) d      cmd_i         => cmd_i,* `; E( O, z" z# h: k! A
      cy_i          => cy_i,
& n6 P/ o3 R- ~+ H- h7 Y% Z7 ?9 f' T, M      ov_i          => ov_i,7 o$ P3 M) A- K7 D. }
      cy_o          => new_cy_o,
% [5 C6 n) W$ @9 e) j6 Y      ov_o          => new_ov_o,
# A( V# v% E7 v. m+ a  z! X$ x      result_a_o    => result_a_o,
( r' y: [' ?; X( |$ ~      result_b_o    => result_b_o,
1 a8 e- z; Z) v0 C! U9 T; v      -- I/Os connecting the submodules.
$ }2 |# C, `, W( C- i6 W. e      result_i      => s_alu_result,
) e7 O( z$ g1 M; w# B0 @      new_cy_i      => s_alu_new_cy,9 Y3 F$ ?/ F, v. t. C1 [
      addsub_rslt_i => s_addsub_rslt,
5 O( @* n4 {" N5 q& }9 O      addsub_cy_i   => s_addsub_newcy,4 U6 V- e. H: E3 D
      addsub_ov_i   => s_addsub_ov,
! r: X$ @& E( W3 z  d, D      op_a_o        => s_alu_op_a,1 O" g/ w0 D: i# T3 Z
      op_b_o        => s_alu_op_b,
  ~1 N0 \  C! J      alu_cmd_o     => s_alu_cmd,
5 S6 Y) r; l! m  T      opa_o         => s_addsub_opa,3 p6 ]1 z: S; i& M' Y, l; {% F
      opb_o         => s_addsub_opb,( b1 [9 t2 C+ k& e: a
      addsub_o      => s_addsub,) j8 J2 O  y. P- C8 R  z
      addsub_cy_o   => s_addsub_cy,
/ d, B/ b, f. M0 |, Z9 l      dvdnd_o       => s_dvdnd,& y% A+ g& ]) Q
      dvsor_o       => s_dvsor,
# ]2 @3 O5 J( d0 B' G      qutnt_i       => s_qutnt,
2 U9 k# ?- d1 g' c4 y      rmndr_i       => s_rmndr,# P. b, y' ]8 M' U8 I1 V
      mltplcnd_o    => s_mltplcnd,3 c: [. u- Z& w5 T
      mltplctr_o    => s_mltplctr,
4 u  s6 E. W% o      product_i     => s_product,  d' ~2 Y" r' {* `( `; y0 X
      dcml_data_o   => s_dcml_data,. U4 I9 T" @: Y6 a
      dcml_data_i   => s_dcml_rslt,
5 c$ \9 d( M/ j* I% s; O7 U1 b      dcml_cy_i     => s_dcml_cy);
6 J. Q5 `3 S( S3 |5 H  i_alucore : alucore
1 z7 c6 f, V: b' w' g    generic map (: O  `. W/ x5 B% k  h
      DWIDTH    => DWIDTH)! [: z( W! C+ o
    port map (: l" m% Y; N4 b
      op_a_i    => s_alu_op_a,. o( v& _* H8 |5 r" B- R7 C/ `
      op_b_i    => s_alu_op_b,
) v! t" ?  c+ k" \" A5 D      alu_cmd_i => s_alu_cmd,
" _4 r0 r! w* F1 w      cy_i      => cy_i,
, s! g- z8 L, p6 G# z      cy_o      => s_alu_new_cy,
9 g" t3 B$ [0 S- ?7 ^# F      result_o  => s_alu_result);6 m( q/ c6 x( y8 {7 f
  i_addsub_core : addsub_core
* D' t0 r/ M% \; }/ q; a    generic map (DWIDTH => DWIDTH)8 n" i" }4 W5 H
    port map (opa_i    => s_addsub_opa,
6 X' ~+ n8 Q$ V' L4 s              opb_i    => s_addsub_opb,5 S7 A# }9 a4 E! ^  G, }
              addsub_i => s_addsub,
7 y4 t8 L8 Z1 _2 [              cy_i     => s_addsub_cy,  R3 y; h  V! @0 L% z; m
              cy_o     => s_addsub_newcy,
$ t- P- z2 Q+ n8 v8 Q, L              ov_o     => s_addsub_ov,
: N: \9 v2 t# U  Y. }" V' Q" Q  I* R              rslt_o   => s_addsub_rslt);* q5 J5 v3 G; d" q
  gen_multiplier1 : if C_IMPL_MUL = 1 generate
" A) ?. X& g$ ?5 x    i_comb_mltplr : comb_mltplr
3 A- p* b4 r: H2 H      generic map (5 C- x% h' d6 o$ R, b, v3 Q
        DWIDTH     => DWIDTH)8 Z' [2 Y7 |1 B2 v) Q' ]
      port map (! f* r, U5 {9 f. A. L6 _8 g% h" J! \
        mltplcnd_i => s_mltplcnd,
5 X& X: V& p! T+ g  O* }$ F        mltplctr_i => s_mltplctr,5 \" T/ ?& Y3 E
        product_o  => s_product);
: b0 g4 N' H' a  end generate gen_multiplier1;
# I6 E$ g: s4 T: Q  gen_multiplier0 : if C_IMPL_MUL /= 1 generate
1 r% w9 n* r! {- `    s_product <= (others => '0');
. a4 a& n& t( V" y6 U1 \1 D  end generate gen_multiplier0;
" k( U4 q7 @. x+ z, u: m9 F  gen_divider1  : if C_IMPL_DIV = 1 generate% o6 g, p% q2 F
    i_comb_divider : comb_divider
$ G% s: }4 \% B  ~. i* L/ i8 Z# {      generic map (
: U9 t: d# u# t: v2 H+ S: X        DWIDTH  => DWIDTH)( x/ |% U2 ~3 u$ L: F: \1 A
      port map (
( |2 U; a& c/ ^' t/ p2 L) v4 N& E        dvdnd_i => s_dvdnd,
3 R: _! o2 [, m* T        dvsor_i => s_dvsor,
) i" }3 \( h/ t        qutnt_o => s_qutnt,
# C, W' f2 r2 {- W3 m+ e$ Q        rmndr_o => s_rmndr);9 Z' R1 @! ^, u& _6 b
  end generate gen_divider1;
0 ~9 V" I/ U8 b0 f  gen_divider0  : if C_IMPL_DIV /= 1 generate  K, ~* w* M' v$ C
    s_qutnt <= (others => '0');, |& V: i' E! a
    s_rmndr <= (others => '0');
( x0 q0 _/ n/ s8 i" M  end generate gen_divider0;: U; [& f" g' K( C; P- R
  gen_dcml_adj1  : if C_IMPL_DA = 1 generate: j) H$ h4 n& W3 a+ J9 O& }
    i_dcml_adjust : dcml_adjust4 |0 V% i% b5 g( r
      generic map (
' W! y  x% P4 J7 t7 w, P        DWIDTH => DWIDTH)
1 Y1 w9 _: s" k. @0 m      port map (" e' ]$ o: \6 x
        data_i => s_dcml_data,
6 k/ m; u1 C1 d& Y" [( j        cy_i   => cy_i,
8 ~% ^: y! j' m9 A8 x; y. z% b& |, F        data_o => s_dcml_rslt,) c7 ~2 N( X0 z5 t3 G4 d! M
        cy_o   => s_dcml_cy);
0 r/ V0 m' l" m+ V. n) i0 h0 p# k  end generate gen_dcml_adj1;
/ W6 m) q2 ^4 u7 ]" a1 C. _  gen_dcml_adj0  : if C_IMPL_DA /= 1 generate( s# Y/ ~& I) u# f! \* Z# a
    s_dcml_rslt <= (others => '0');
6 g0 }! w" |: V6 r6 Q6 A' Y* r    s_dcml_cy   <= '0';
; N3 H$ Y+ C& p5 t9 u  end generate gen_dcml_adj0;& f, I; ?2 S( `! }# t- f
end struc;

mc8051_design.rar

385.96 KB, 下载次数: 167, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2008-11-24 14:22 | 只看该作者
好东西,给顶顶!

该用户从未签到

3#
发表于 2009-3-17 11:30 | 只看该作者
学习一下
头像被屏蔽

该用户从未签到

4#
发表于 2009-4-20 20:08 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

该用户从未签到

5#
发表于 2010-2-13 20:37 | 只看该作者
黄金!!楼主真阔气!

该用户从未签到

6#
发表于 2011-3-16 20:50 | 只看该作者
牛逼啊,都逛到国外去了!

该用户从未签到

7#
发表于 2011-8-10 11:11 | 只看该作者
大感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-21 10:58 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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