MCU软核 1. Altera FPGA上运行8051

这篇具有很好参考价值的文章主要介绍了MCU软核 1. Altera FPGA上运行8051。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0. 环境

- Quartus 13
- EP4CE6E22开发板
- keil c51 
- ag10kl144h(本工程兼容AGM)

下载8051源码:https://www.oreganosystems.at/products/ip-cores/8051-ip-core

1. Create Project

File --> New Project Wizard

位置:E:\Workspaces\Quartus\EP4CE6_Core\mc8051_hello
名字:mc8051_hello

next - next
选择芯片
EP4CE6E22C6

Simulation     None     None

2. 添加源码

2.1 顶层文件


mc8051顶层文件样例请参考 mc8051_hello.v

module mc8051_hello(
	input 	Clk50M,		//板级时钟源,50M
	input 	Rst_n,    	//复位端口
	input 	int0_i,   	//mc8051外部中断0输入
	input 	int1_i,   	//mc8051外部中断1输入
	input 	all_t0_i, 	//mc8051计数器0输入
	input 	all_t1_i, 	//mc8051计数器1输入 

	input 	[7:0]p0_i,  //mc8051端口0输入 
	input 	[7:0]p1_i,  //mc8051端口1输入 
	input 	[7:0]p2_i,  //mc8051端口2输入 
	input 	[7:0]p3_i,  //mc8051端口3输入 

	output 	[7:0]p0_o,  //mc8051端口0输出      
	output 	[7:0]p1_o,  //mc8051端口1输出      
	output 	[7:0]p2_o,  //mc8051端口2输出      
	output 	[7:0]p3_o,  //mc8051端口3输出

	input 	all_rxd_i, 	//mc8051串口接收端口     
	output 	all_rxd_o,  //mc8051串口方式0时输出端口
	output 	all_txd_o,  //mc8051串口发送端口 
	output 	all_rxdwr_o //rxd 输入/输出方向控制信号(高电平输出)
);

wire Clk18M;

//例化PLL模块   
pll pll(
	.inclk0(Clk50M),
	.c0(Clk18M)
);

//例化mc8051核   
mc8051_top mc8051_top_inst(
	.clk(Clk18M),       
	//.reset(~Rst_n), //mc8051为高电平复位,因此将复位按键状态取反接到reset上
	.reset(0),
	.int0_i(int0_i),
	.int1_i(int1_i),
	.all_t0_i(all_t0_i),
	.all_t1_i(all_t1_i),  

	.p0_i(p0_i),      
	.p1_i(p1_i),     
	.p2_i(p2_i),      
	.p3_i(p3_i),      

	.p0_o(p0_o),      
	.p1_o(p1_o),      
	.p2_o(p2_o),      
	.p3_o(p3_o),

	.all_rxd_i(all_rxd_i),      
	.all_rxd_o(all_rxd_o),
	.all_txd_o(all_txd_o),
	.all_rxdwr_o(all_rxdwr_o)
);

endmodule

2.2 ROM


创建一个ROM模块所需使用的初始化文件
File -> New -> Memory Files -> Hexadecimal (Intel-Format)File
-> Number of words:        4096
-> Word size:            8
File -> save as ... -> E:/Workspaces/Quartus/EP4CE6_Core/mc8051_hello/rtl/mc8051_hello.hex

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件

2.3 生成ROM模块

注意这部分的hex文件需要完成keil部分章节才会生成。
Tools -> MegaWizard Plug-In Manager… -> Create a new custom megafunction variation -> Next ->ROM: 1-PORT -> 语言选择VHDL
-> 地址:E:/Workspaces/Quartus/EP4CE6_Core/mc8051_hello/rtl/altera_ip/mc8051_rom -> Next
-> how wide: 8 bits -> how many: 4096
-> 取消勾选 'q' output port
-> file name: E:/Workspaces/Quartus/EP4CE6_Core/mc8051_hello/keil/mc8051_hello/Objects/mc8051_hello.hex
-> 勾选Allow In-System Memory Content Editor to capture and update content independently of the system clock
-> The Instance ID of this ROM is: ROM0
-> 勾选 mc8051_rom.cmp 和 mc8051_rom_inst.vhd

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件

2.4 生成RAM模块


Tools -> MegaWizard Plug-In Manager… -> Create a new custom megafunction variation -> Next ->RAM: 1-PORT -> 语言选择VHDL
-> 地址:E:/Workspaces/Quartus/EP4CE6_Core/mc8051_hello/rtl/altera_ip/mc8051_ram -> Next
-> how wide: 8 bits -> how many: 128
-> 取消勾选 'q' output port
-> 勾选 Create one clock enable signal for each clock signal.(clken)
-> 勾选 mc8051_ram.cmp 和 mc8051_ram_inst.vhd

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件 MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件

Tools -> MegaWizard Plug-In Manager… -> Create a new custom megafunction variation -> Next ->RAM: 1-PORT -> 语言选择VHDL
-> 地址:E:/Workspaces/Quartus/EP4CE6_Core/mc8051_hello/rtl/altera_ip/mc8051_ramx -> Next
-> how wide: 8 bits -> how many: 2048
-> 取消勾选 'q' output port
-> 勾选 mc8051_ramx.cmp 和 mc8051_ramx_inst.vhd

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件 

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件 

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件 

2.5 mc8051_core


mc8051_design_v1.6\Version1_6\vhdl
拷贝到
E:\Workspaces\Quartus\EP4CE6_Core\mc8051_hello\rtl\mc8051core打开 mc8051_p.vhd 文件

--------------------------------------------------------------------
  -- 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
  --------------------------------------------------------------------


  
替换为

--------------------------------------------------------------------
  -- START: Component declarations for simulation models
  --------------------------------------------------------------------
    component mc8051_ram 
    port ( 
        clock   : in  std_logic;      
        data    : in  std_logic_vector(7 downto 0);            
        q       : out std_logic_vector(7 downto 0);            
        address : in  std_logic_vector(6 downto 0);            
        wren    : in  std_logic;            
        clken   : in  std_logic);   
    end component; 

    component mc8051_ramx     
    port ( 
        clock   : in  std_logic;      
        data    : in  std_logic_vector(7 downto 0);            
        q       : out std_logic_vector(7 downto 0);            
        address : in  std_logic_vector(10 downto 0);            
        wren    : in  std_logic);   
    end component;
    
    component mc8051_rom     
    port ( 
        clock   : in  std_logic; 
        q       : out std_logic_vector(7 downto 0);  
        address : in  std_logic_vector(11 downto 0));   
    end component;

  --------------------------------------------------------------------
  -- END: Component declarations for simulation models
  --------------------------------------------------------------------


打开 mc8051_top_struc.vhd 文件
添加

  signal s_rom_adr_sml:   std_logic_vector(11 downto 0);  -- new
  signal s_ramx_adr_sml:   std_logic_vector(10 downto 0);  -- new


添加

    s_rom_adr_sml <= std_logic_vector(s_rom_adr(11 downto 0));  -- *** new    
    s_ramx_adr_sml <= std_logic_vector(s_ramx_adr(10 downto 0));  -- *** new  

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件
再修改

--------------------------------------------------------------------
  -- Hook up the general purpose 128x8 synchronous on-chip RAM. 
  i_mc8051_ram : mc8051_ram     
    port map ( 
        clock       => clk, 
        data        => s_ram_data_in,     
        q           => s_ram_data_out, 
        address     => s_ram_adr,
        wren        => s_ram_wr,
        clken       => s_ram_en);

  -- THIS RAM IS A MUST HAVE!!
  --------------------------------------------------------------------


  --------------------------------------------------------------------
  -- Hook up the (up to) 64kx8 synchronous on-chip ROM.
    i_mc8051_rom : mc8051_rom
        port map (
            clock   => clk,
            q       => s_rom_data,
            address => s_rom_adr_sml);
  -- THE ROM OF COURSE IS A MUST HAVE, ALTHOUGH THE SIZE CAN BE SMALLER!!
  --------------------------------------------------------------------
  
    
  --------------------------------------------------------------------
  -- Hook up the (up to) 64kx8 synchronous RAM.
    i_mc8051_ramx : mc8051_ramx
        port map ( 
            clock   => clk,
            data    => s_ramx_data_out,
            q       => s_ramx_data_in,
            address => s_ramx_adr_sml,
            wren    => s_ramx_wr);
  -- THIS RAM (IF USED) CAN BE ON OR OFF CHIP, THE SIZE IS ARBITRARY.
  --------------------------------------------------------------------


  
添加mc8051 Core相关文件到Quartus II工程中
对部分文件的文件名进行更改。原版的VHDL源码,部分文件的文件名末尾加了有“_”,而实际源码中的模块名没有加“_”,因此,如果将这些文件直接添加到Quartus II工程中,编译就会报错。
名字带CFG的文件不需要添加。

2.6 pll


Tools -> MegaWizard Plug-In Manager… -> Create a new custom megafunction variation -> Next ->ALTPLL -> 语言选择verilog hdl
-> 地址:E:/Workspaces/Quartus/EP4CE6_Core/mc8051_hello/rtl/altera_ip/pll -> Next
-> inclk0: 50MHz
-> 取消勾选Create an 'areset' input to asynchronously reset the PLL
-> 取消勾选Create 'locked' output
-> c0 output clock frequency: 18MHz

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件

2.7 设置工程顶层文件

在Files栏中,选中mc8051_top.vhd文件,点击右键,选择“Set as Top-Level Entity”,即可将mc8051_top.vhd设置为工程的顶层文件,(这里设置为顶层主要是为了封装IP核方便,临时性的,并不是最终作为工程顶层)。如图 2.23 所示:

3. 编译 

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件

4. 配置引脚


打开 mc8051_hello.qsf
添加

set_location_assignment PIN_23 -to Clk50M
set_location_assignment PIN_88 -to Rst_n        # 掌中宝1A 复位按钮
set_location_assignment PIN_87 -to p1_o[1]        # 掌中宝1A led2
set_location_assignment PIN_98 -to p1_o[0]        # 掌中宝1A led1
# set_location_assignment PIN_42 -to p1_o[0]        # zhybcjbk_v011 led1
# set_location_assignment PIN_129 -to p1_o[1]        # zhybcjbk_v011 led2

编辑完后再次编译工程。 

5. keil

创建工程
Project -> New uVision Project -> E:\Workspaces\Quartus\EP4CE6_Core\mc8051_hello\keil\mc8051_hello
-> at89c51

添加源码
E:\Workspaces\Quartus\EP4CE6_Core\mc8051_hello\keil\mc8051_hello\src\main.c

设置生成Hex 
右键Target 1 -> Options for Target 'Target 1' -> Output -> 勾选Create HEX File

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件

6. 验证与下载

重新编译再下载 sof

在Quartus中点击
Assignments—— Device——Device and Pin Options——Unused Pins
As input tri-stated

Assignments—— Device——Device and Pin Options——Dual-Purpose Pins
全部选择Use as regual I/O

Assignments—— Device——Device and Pin Options——Voltage
3.3-V LVTTL

6.1 FPGA程序

Open programmer --> 
add file --> output_files/add_sub_ip_test.sof

Hardware Setup:        USB-Blaster
Mode:                JTAG

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件 

6.2 FPGA程序-固化

File -> Convert Programming Files
    -> Programming file type -> JTAG Indirect Configuration File(.jic)
    -> Configuration device -> EPCS16
    -> File name -> output_files/mc8051_hello.jic
    -> Flash Loader -> Add Device -> EP4CE6
    -> SOF Data -> Add File -> mc8051_hello.sof
    -> Generate

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件 

打开Programmer,选择jlc文件,mc8051_hello.sof
勾选 output_files/mc8051_hello.sof 一行的Program/Configure

6.3 ROM

MCU软核 1. Altera FPGA上运行8051,FPGA,单片机,fpga开发,单片机,嵌入式硬件 

Tools -> In-System Memory Content Editor -> Hardware Setup: USB-Blaster
ROM0 -> 右键ROM0 -> Import Data From File -> E:\Workspaces\Quartus\EP4CE6_Core\mc8051_hello\keil\mc8051_hello\Objects\mc8051_hello.hex
-> Write Data to In-System Memory

但是这个ROM是在8051的IP核的,不是外部硬件ROM,因此掉电就要重新下载了。

7. Supre

这部分将EP4CE6工程转换为AGM工程。

D:\Supra-2023.02.b0-7773ca8a-win64-all\bin\Supra.exe

创建工程
Project -> New Project -> 
project directory:    E:\Workspaces\Supra\zhybcjbk\mc8051_hello
project name:        mc8051_hello

工程migrate
Tools -> Migrate
select migrate from directory:    E:\Workspaces\Quartus\EP4CE6_Core\mc8051_hello
input design name:                mc8051_hello
Select device:                    AG10KL144H
按Next转换

quartus
打开 E:\Workspaces\Supra\zhybcjbk\mc8051_hello\mc8051_hello.qpf

Tools -> TCL Scripts 
选择 af_quartus.td,点击Run

Supre编译工程
回到Supre界面,点击 Next -> Finish -> 稍后会弹出窗口提示Compile deisgn watch done.

文件说明
<design>_SRAM.prg 文件为片内 SRAM 写入,通过 JTAG 烧写,掉电即失效,可用于设计调试;
<design>_master.prg 文件为 Master(AS)配置方式下,通过 JTAG 烧写外部配置 FLASH的文件;
<design>_master.bin 为 Master(AS)配置方式下,配置 Flash 的标准烧写文件;
<design>_master_as.prg 调用此 bin 文件,通过 AS 口直接烧写 FLASH;
<design>.bin 为基本配置文件,可用来产生其它类型烧写文件,也可用于 Slave(PS)配置方式;rbf 文件为此 bin 文件的字节高低位反向的转换后文件。

参考:1. mc8051源码下载,https://www.oreganosystems.at/products/ip-cores/8051-ip-core
2. FPGA配置MC8051IP软核,https://blog.csdn.net/QuanSirX/article/details/105143773
3. 【小梅哥FPGA进阶教程】MC8051软核在FPGA上的使用,https://www.cnblogs.com/xiaomeige/p/6403094.html


 文章来源地址https://www.toymoban.com/news/detail-709586.html

到了这里,关于MCU软核 1. Altera FPGA上运行8051的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机汇编指令表--STC宏晶MCU

    51系列单片机汇编指令表非常庞大,包含了五大类指令,以下是各类指令的一个简要概述和部分示例: 一、数据传送类指令 这些指令用于在寄存器之间、寄存器与存储单元之间以及立即数与寄存器之间的数据传输。 MOV:通用数据传送指令 MOV A,Rn 将工作寄存器Rn的内容传送到

    2024年02月01日
    浏览(39)
  • 基于STC12C5A60S2系列1T 8051单片机可编程计数阵列CCP/PCA/PWM模块的PWM(脉冲宽度调制)应用

    STC12C5A60S2系列1T 8051单片机辅助寄存器AUXR PCA辅助寄存器AUXR1 作用:用来设置STC12C5A60S2系列1T 8051单片机可编程计数阵列CCP/PCA/PWM模块的单片机引脚 PCA工作模式寄存器CMOD 作用:用来设置STC12C5A60S2系列1T 8051单片机可编程计数阵列CCP/PCA/PWM模块以下功能 (1)、空闲情况下是否停止

    2024年02月08日
    浏览(45)
  • MCU-51:单片机蜂鸣器播放音乐和提示音

    蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号 蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定 无源蜂鸣器:内部不带振荡源,需要控制器提供振

    2024年02月02日
    浏览(45)
  • 嵌入式系统基础 单片机MCU 树莓派 飞控 cpu

    一些有趣的软硬件设计 嵌入式与linux shell 单片机 电机控制 基于树莓派和Arduino制作的多种移动机器人 Altium Designer 导出pcb制作文件 cpu 浮点峰值 先来谈一下ARM的发展史:1978年12月5日,物理学家赫尔曼·豪泽(Hermann Hauser)和工程师Chris Curry,在英国剑桥创办了CPU公司(Cambridg

    2024年02月11日
    浏览(60)
  • 02 嵌入式/单片机/MCU众包接单平台有哪些?

    作者 将狼才鲸 创建日期 2023-02-11 CSDN文章地址:嵌入式/单片机/MCU众包接单平台有哪些? 一直想找到靠谱的嵌入式、单片机接单平台,网上搜了几次没搜到靠谱的,好多威客网上都是一些假的内容,今天又心血来潮搜遍了全网,意外还找到几个。 网址名称 网址 描述 图示 我

    2024年02月12日
    浏览(54)
  • MCU-51:单片机之AD模数转换与DA数模转换

    AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号 DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号 AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理提供了

    2023年04月24日
    浏览(46)
  • MCU-51:单片机DS18B20温度报警器

    DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器,具有功能强大、硬件简单、易扩展、抗干扰性强等特点 测温范围:-55°C 到 +125°C 通信接口:1-Wire(单总线) 其它特征:可形成总线结构、内置温度报警功能、

    2024年02月02日
    浏览(51)
  • 瑞萨MCU入门教程(非常详细的瑞萨单片机入门教程)

    得益于瑞萨强大的MCU、强大的软件开发工具(e² studio),也得益于瑞萨和RA生态工作室提供的支持,我们团队编写了《ARM嵌入式系统中面向对象的模块编程方法》,全书37章,将近500页: 讲解面向对象编程在单片机开发中的使用 结合FSP软件包实例分析外设驱动 讲解如何使用RASC配

    2024年02月08日
    浏览(45)
  • 第1章_瑞萨MCU零基础入门系列教程之单片机程序的设计模式

    本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id=728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总 : https://blog.csdn.net/qq_35181236/article/details/132779862 本章目标 理解裸机程序设

    2024年02月09日
    浏览(48)
  • 国民技术 MCU N32单片机所有系列---JLink添加芯片,方便使用Keil和JFlash

    1.将下图JLink tool adds Nations chip V1.0.12文件中选中的文件复制到自己电脑的JLINK的目录下(JLINK默认的下载路径是C:Program FilesSEGGERJLink   或者  C:Program Files(x86)SEGGERJLink) 2.然后直接把JLink tool adds Nations chip V1.0.12文件中的JLinkDevices.xml复制替换到自己电脑的JLINK的目录下的JLin

    2024年02月03日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包