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

本文转自小桥流水的新浪博客,原文地址:http://blog.sina.com.cn/s/blog_52e8baa40100t52i.html

首先声明:本文是在我的技术指导员的指导下由本人根据实践摸索而得的经验所原创,如有转载请注明作者及出处。

     并且也敢大胆的说一句这也许是网络上最完整的最清晰最详细的在FPGA中嵌入51单片机内核的中文教程。不信你网上搜搜,反正当初我摸索的时候是每找到一篇具有实用价值的文章。我就非常不理解,这不是一项很少人掌握的技术,为什么就几乎没有人将此分享出来呢。

    好了,废话不多说了,上正文。此教程我使用的是http://www.oreganosystems.at/网站提供的开源8051内核。Altera自带的8051内核并不是免费的,我也曾跟altera的客服发邮件申请过8051内核(英文的邮件交流。。我也不太说),反正用邮件对话了几次大致意思是他们不免费给,说网上有免费的51IP核可以自己去下载。可以自己去那个网上下载或者下载我上传的

 

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

该源码请:点击下载(请使用“右键->目标另存为”)

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

 

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

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

 

51IP核的源码全部在都在vhdl 这个文件夹中,打开是一大堆的源文件。

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

 

对于这么多的文件该怎么用,该如何使用,这是本文的重点。

首先用QuartusII建立一个工程,这这里先提醒下,文件目录最好不要包含中文,空格,不然会有些无法理解的错误。

然后将 vhdl 整个文件夹复制到工程目录下(个人习惯,等下添加进工程里面的时候方便点)。下面是添加8051核文件的步骤。

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

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

 

 

选择文件添加进工程。这里注意下

后面拖着_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 这个文件。

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

 

这样就可以生成mc8051核的原理图模块了。

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

 

当然光有这个核,它还不是完整的51核,还需要给它添加ram和rom

Ram是必须的,ramx是扩展的,rom也是必须的,是用来放所需运行的51单片机程序的,大小可以根据需要定制。但是推荐ram的大小用固定的以下配置。

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

 

三个存储单元都有一点需要注意,就是不能寄存输出。

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

 

就是在ram和rom配置的时候都要把 ‘q‘output port 前面的勾去掉!这点也很重要。

rom配置的时候需要加入.hex文件,就是keilc51 编译好的平时下载到单片机实验板上的那个程序文件,初始的时候可以随便添加一个就可以了,待程序写好后,就重新把它添加要rom里面,注意,如果改变了rom的程序文件,那么要重新完整编译一次下载到板子上才是更新后的程序噢。

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

 

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

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

 

这里面我添加了锁相环,这个最好加上,因为我在测试的时候发现同样的时钟频率下,加了锁相环才能工作,不加就不工作。

Ok 编译下载就成功了。不过从编译报告来看,这个东西的确占逻辑单元比较多,我的板子是EP2C8Q208C8的芯片,用了一半的逻辑单元去。。。电脑CPU差,编译时间又挺漫长的。。

嗯,总结一下嵌入51核要注意的点

1、添加文件进工程时,有些是必要的,有些是不能加的。

2、有个文件要进行一下修改

3、配置ram和rom的时候,不要寄存器输出。

如有错误,欢迎指正。


在此要说明一下,上面的文章是在新浪博客上看到的一篇文章,但原文作者给的链接是有错误的,对于51的IP核,我也找到了一份,下面给出链接http://download.csdn.net/detail/huangshizeng/4406760





  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
8051单片机内IP源码cyclone2 fpga quartu工程文件+文档说明, 可以做为你的FPGA设计学习参考。 该部分的8051的顶层信号引脚在8051的顶层便可查看到各个引脚模块的定 义。引脚的定义和普通的 8051 单片机相似,区别在于 P3 口的定义,普通的 8051 单片机的 P3 口有双重功能,在对普通的 8051 单片机编程时,特别是用 C 进行编程时所面向的是寄存 器层面的,但在硬件层面上,在定义 P3 口的两种功能时是不一致的,原因是用 C 编程时, 编译软件已经将 C 代码转变成机器代码,让机器能够辨别要用哪一个硬件模块,也就是 8051 的内已经“解码”了机器码。普通的 8051 芯片的引脚框图和 P3 口的定义如下如下: 8051IP 心本身是由定时器/计数器,ALU,串行接口,和控制单元组成。 8015 内的原理图: Clk:时钟输入 Reset:复位输入引脚 rom_data_i:ROM 数据输入 ram_data_i :RAM 数据输入 int0_i 外部断 0 int1_i:外部断 1 all_t0_i:定时计数 0 all_t1_i:定时计数 1 all_rxd_i:串口接收 p0_i:IO-port0 input p1_i:IO-port1 input p2_i :IO-port2 input p3_i:IO-port3 input p0_o:IO-port0 output p1_o:IO-port1 output p2_o :IO-port2 output p3_o :IO-port3 output all_rxd_o:内部接收后直接输出,可以进入 all_rxd_i all_txd_o:串口发送 all_rxdwr_o:接收方向信号 rom_adr_o: 输出到 ROM 地址信号 ram_data_o:输出到 RAM 数据信号 ram_adr_o :输出到 RAM 地址信号 ram_wr_o :数据输出到 RAM 的使能信号 ram_en_o:RAM 的时钟使能信号 datax_i:从 RAM 的数据输入到单片机的信号 datax_o:从单片机输出数据到 RAM 的信号 adrx_o:RAM 的地址信号 wrx_o:RAM 的写使能信号
要使用FPGA内的8051心控制ADC0809芯片,需要以下步骤: 1. 配置FPGA:根据所选的FPGA型号和设计工具,创建一个新的项目。在项目添加8051并配置其外部引脚与ADC0809芯片进行连接。 2. 设计8051程序:使用汇编或高级语言编写8051的程序代码,实现与ADC0809通信和控制。代码需要包括初始化ADC0809芯片、配置输入输出端口和通道选择。 3. 连接ADC0809芯片:根据ADC0809的管脚图和芯片规格书,将其引脚与FPGA内的引脚进行正确的连接。确保数据线、控制线和时钟线等按照要求连接。 4. 配置ADC0809:使用8051程序代码初始化ADC0809芯片,完成其配置。配置包括选择输入通道、设置采样速率和时钟频率等。 5. 读取ADC0809数据:在8051程序代码,使用读取引脚和脉冲信号读取ADC0809芯片的转换结果。将读取到的数据存储在FPGA内部的寄存器。 6. 处理ADC数据:根据实际应用需求,对ADC芯片读取到的数据进行处理。可能需要进行数据转换、滤波或者数据分析等操作。 7. 输出结果:将处理后的数据输出到所需的外部设备或接口,如显示屏、存储器或其他外部芯片。 8. 调试和验证:通过仿真和实际硬件测试,确保8051程序和FPGA与ADC0809的连接和功能正常。调试可能需要对代码进行修改和优化。 使用FPGA内的8051心控制ADC0809芯片可实现数据采集和处理功能,适用于各种应用领域,如仪器仪表、工业自动化、物联网等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值