<在FPGA中嵌入8051核的详细方法与步骤 - FPGA应用 ISOE论坛
请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4896|回复: 80

在FPGA中嵌入8051核的详细方法与步骤

  [复制链接]

24

主题

43

帖子

214748万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2147483647
发表于 2016-3-13 15:54:38 | 显示全部楼层 |阅读模式
  这也许是网络上最完整的最清晰最详细的在FPGA中嵌入51单片机内核的中文教程。
  此教程使用的是http://www.oreganosystems.at/网站提供的开源8051内核。Altera自带的8051内核并不是免费的,我也曾跟altera的客服发邮件申请过8051内核,反正用邮件对话了几次大致意思是他们不免费给,说网上有免费的51IP核可以自己去下载。可以自己去那个网上下载或者下载我上传的。

52e8baa4g77a07ee6ca42&amp;690.jpg

如果你无法在官网下载,文章末尾我会提供下载好的文件。
52e8baa4gac44f69819ab&amp;690.jpg


打开后的文件有上面这些文件夹。其中就一个最重要的就是8051核的源码,全部放在vhdl这个文件夹里面。那个pdf文档是这个IP核的使用教程,是官方标配的使用文档,也是纯英文的,对于英语四级没过的我下定决心花了大力气看最后只是一场空。。这问文档写的是用Synplify Pro这个综合软件综合的,虽然据说用这个软件进行综合可以节约FPGA的很多逻辑单元,但是对于我们这些初学者来讲,真的又麻烦又不适用,我们还是直接用QuartusII 来进行综合好了。
52e8baa4gac44f9b17e2b&amp;690.jpg


51IP核的源码全部在都在vhdl 这个文件夹中,打开是一大堆的源文件。
52e8baa4gac44fd1117b1&amp;690.jpg


对于这么多的文件该怎么用,该如何使用,这是本文的重点。
首先用QuartusII建立一个工程,这这里先提醒下,文件目录最好不要包含中文,空格,不然会有些无法理解的错误。
然后将 vhdl 整个文件夹复制到工程目录下(个人习惯,等下添加进工程里面的时候方便点)。下面是添加8051核文件的步骤。
52e8baa4gac44ff060cad&amp;690.jpg

52e8baa4gac44fff3de4a&amp;690.jpg



选择文件添加进工程。这里注意下
后面拖着_cfg 的这种文件不要添加进工程里面,还有就是含有_top_的文件也不要添加到里面。
然后双击打开mc8051_p.vhd 这个文件。把下面这些模块的例化语句全部删掉,这点非常重要!!
  component mc8051_top
    port (clk         : in  std_logic;
          reset       : in  std_logic;
          int0_i      : in  std_logic_vector(C_IMPL_N_EXT-1 downto 0);
          int1_i      : in  std_logic_vector(C_IMPL_N_EXT-1 downto 0);
          all_t0_i    : in  std_logic_vector(C_IMPL_N_TMR-1 downto 0);
          all_t1_i    : in  std_logic_vector(C_IMPL_N_TMR-1 downto 0);
          all_rxd_i   : in  std_logic_vector(C_IMPL_N_SIU-1 downto 0);
          p0_i        : in  std_logic_vector(7 downto 0);
          p1_i        : in  std_logic_vector(7 downto 0);
          p2_i        : in  std_logic_vector(7 downto 0);
          p3_i        : in  std_logic_vector(7 downto 0);
          p0_o        : out std_logic_vector(7 downto 0);
          p1_o        : out std_logic_vector(7 downto 0);
          p2_o        : out std_logic_vector(7 downto 0);
          p3_o        : out std_logic_vector(7 downto 0);
          all_rxd_o   : out std_logic_vector(C_IMPL_N_SIU-1 downto 0);
          all_txd_o   : out std_logic_vector(C_IMPL_N_SIU-1 downto 0);
          all_rxdwr_o : out std_logic_vector(C_IMPL_N_SIU-1 downto 0));

  end component;

  -----------------------------------------------------------------------------
  -- START: Component declarations for simulation models
  -----------------------------------------------------------------------------
  component mc8051_ram
    port (clk        : in  std_logic;
      reset      : in  std_logic;
      ram_data_i : in  std_logic_vector(7 downto 0);
          ram_data_o : out std_logic_vector(7 downto 0);
          ram_adr_i  : in  std_logic_vector(6 downto 0);
          ram_wr_i   : in  std_logic;
          ram_en_i   : in  std_logic);

  end component;

  component mc8051_ramx
    port (clk        : in  std_logic;
      reset      : in  std_logic;
      ram_data_i : in  std_logic_vector(7 downto 0);
          ram_data_o : out std_logic_vector(7 downto 0);
          ram_adr_i  : in  std_logic_vector(15 downto 0);
          ram_wr_i   : in  std_logic);

  end component;

  component mc8051_rom
    port (clk        : in  std_logic;
      reset      : in  std_logic;
      rom_data_o : out std_logic_vector(7 downto 0);
          rom_adr_i  : in  std_logic_vector(15 downto 0));

  end component;
  -----------------------------------------------------------------------------
  -- END: Component declarations for simulation models
  -----------------------------------------------------------------------------

然后双击打开mc8051_core.vhd 这个文件。
52e8baa4gac4501ba541c&amp;690.jpg


这样就可以生成mc8051核的原理图模块了。
52e8baa4gac450338ec4c&amp;690.jpg


当然光有这个核,它还不是完整的51核,还需要给它添加ram和rom
Ram是必须的,ramx是扩展的,rom也是必须的,是用来放所需运行的51单片机程序的,大小可以根据需要定制。但是推荐ram的大小用固定的以下配置。
52e8baa4gac45040e9020&amp;690.jpg


三个存储单元都有一点需要注意,就是不能寄存输出。
52e8baa4gac4509cffd0c&amp;690.jpg


就是在ram和rom配置的时候都要把 ‘q‘output port 前面的勾去掉!这点也很重要。
rom配置的时候需要加入.hex文件,就是keilc51 编译好的平时下载到单片机实验板上的那个程序文件,初始的时候可以随便添加一个就可以了,待程序写好后,就重新把它添加要rom里面,注意,如果改变了rom的程序文件,那么要重新完整编译一次下载到板子上才是更新后的程序噢。
52e8baa4gac4506ab396c&amp;690.jpg


然后就按照固定的格式将他们连接起来就可以了。可以发现,有些线是断开的通过标号来连接的,跟protel里的网络标号差不多。一般的数据宽度不匹配的时候就用这种方式来连接,如果直接连接,编译会报错的。
52e8baa4gac450885c586&amp;690.jpg


这里面我添加了锁相环,这个最好加上,因为我在测试的时候发现同样的时钟频率下,加了锁相环才能工作,不加就不工作。
Ok 编译下载就成功了。不过从编译报告来看,这个东西的确占逻辑单元比较多,我的板子是EP2C8Q208C8的芯片,用了一半的逻辑单元去。。。电脑CPU差,编译时间又挺漫长的。。
嗯,总结一下嵌入51核要注意的点
1、添加文件进工程时,有些是必要的,有些是不能加的。
2、有个文件要进行一下修改
3、配置ram和rom的时候,不要寄存器输出。


8051内核的源文件提供在此处供下载:
游客,如果您要查看本帖隐藏内容请回复



回复

使用道具 举报

0

主题

1

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2016-3-14 23:30:00 | 显示全部楼层
可以的可以的可以的可以的
回复 支持 反对

使用道具 举报

0

主题

1

帖子

114

积分

注册会员

Rank: 2

积分
114
发表于 2016-3-24 15:41:03 | 显示全部楼层
6666666666666666666666666666
回复 支持 反对

使用道具 举报

0

主题

1

帖子

126

积分

注册会员

Rank: 2

积分
126
发表于 2016-3-30 21:00:32 | 显示全部楼层
很好的视频教程
回复 支持 反对

使用道具 举报

0

主题

2

帖子

137

积分

注册会员

Rank: 2

积分
137
发表于 2016-3-30 21:25:29 | 显示全部楼层
太帅了,正需要
回复 支持 反对

使用道具 举报

0

主题

1

帖子

136

积分

注册会员

Rank: 2

积分
136
发表于 2016-3-31 12:33:11 | 显示全部楼层
1234
回复

使用道具 举报

0

主题

1

帖子

151

积分

注册会员

Rank: 2

积分
151
发表于 2016-3-31 21:11:30 | 显示全部楼层
学习一下
回复

使用道具 举报

0

主题

1

帖子

136

积分

注册会员

Rank: 2

积分
136
发表于 2016-4-5 14:56:32 | 显示全部楼层
感谢,
回复

使用道具 举报

0

主题

1

帖子

136

积分

注册会员

Rank: 2

积分
136
发表于 2016-4-8 14:12:55 | 显示全部楼层
学习学习
回复

使用道具 举报

0

主题

2

帖子

147

积分

注册会员

Rank: 2

积分
147
发表于 2016-4-12 13:02:06 | 显示全部楼层
hh哈哈哈哈哈
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|ISOE论坛  

GMT+8, 2017-12-11 21:05 , Processed in 0.199017 second(s), 54 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.