本文共 5606 字,大约阅读时间需要 18 分钟。
Primace 软件是CME(京微雅格)公司的FPGA芯片开发专用软件。CME 的FPGA,如M5、M7等内嵌有8051 核心,因此可以与MCU联合在线仿真。虽然FPGA内部的程序不可控,无法一步步仿真,但由于MCU程序是可控的,因此可以利用MCU对FPGA发送命令,进而控制FPGA的运行与操作。因此,这一FPGA开发板也可以充当8051单片机开发板。
本文将介绍FPGA与keil联合仿真的相关设置,主要以简单的仿真案例为例。
在京微雅格官网上可以下载8051的专用驱动程序。安装完成后,在keil软件界面下拉菜单中可以找到对应的选项,选择后即可开始配置项目。
M5.h是M5系列FPGA开发板的8051驱动文件,包含所有相关寄存器的定义。文件内容如下:
#ifndef __M5_H__#define __M5_H__/* Byte Register */sfr P0 = 0x80; // Port 0sfr P1 = 0x90; // Port 1sfr P2 = 0xA0; // Port 2sfr P3 = 0xB0; // Port 3sfr PSW = 0xD0; // Program Status Wordsfr ACC = 0xE0; // Accumulatorsfr B = 0xF0; // B Registersfr SP = 0x81; // Stack Pointersfr DPL = 0x82; // Data Pointer Lowsfr DPH = 0x83; // Data Pointer Highsfr DPL1 = 0x84; // Data Pointer 1 Lowsfr DPH1 = 0x85; // Data Pointer 1 Highsfr WDTREL = 0x86; // Watchdog Timer Reloadsfr PCON = 0x87; // Power Controlsfr TCON = 0x88; // Timer/Counter Controlsfr TMOD = 0x89; // Timer Modesfr TL0 = 0x8A; // Timer 0 Lowsfr TL1 = 0x8B; // Timer 1 Lowsfr TH0 = 0x8C; // Timer 0 Highsfr TH1 = 0x8D; // Timer 1 Highsfr CKCON = 0x8E; // Clock Controlsfr DPSEL = 0x92; // Data Pointer Selectsfr DPC = 0x93; // Data Pointer Controlsfr PAGESEL = 0x94; // Program Memory Page Selectsfr D_PAGESEL = 0x95; // External Data Memory Page Selectsfr S0CON = 0x98; // Serial Port 0 Controlsfr S0BUF = 0x99; // Serial Port 0 Data Buffersfr IEN2 = 0x9A; // Interrupt Enable 2sfr S1CON = 0x9B; // Serial Port 1 Controlsfr S1BUF = 0x9C; // Serial Port 1 Data Buffersfr S1RELL = 0x9D; // Serial Port 1 Reload Lowsfr DMAS0 = 0xA1; // DMA Source Address 0sfr DMAS1 = 0xA2; // DMA Source Address 1sfr DMAS2 = 0xA3; // DMA Source Address 2sfr DMAT0 = 0xA4; // DMA Target Address 0sfr DMAT1 = 0xA5; // DMA Target Address 1sfr DMAT2 = 0xA6; // DMA Target Address 2sfr IEN0 = 0xA8; // Interrupt Enable 0sfr IP0 = 0xA9; // Interrupt Priority 0sfr S0RELL = 0xAA; // Serial Port 0 Reload Lowsfr I2CSPISEL = 0xAB; // I2C Source Selectsfr ISCDATA0 = 0xAC; // I2C Configuration Data 0sfr ISCDATA1 = 0xAD; // I2C Configuration Data 1sfr ISCDATA2 = 0xAE; // I2C Configuration Data 2sfr ISCDATA3 = 0xAF; // I2C Configuration Data 3sfr DMAC0 = 0xB1; // DMA Byte Counter 0sfr DMAC1 = 0xB2; // DMA Byte Counter 1sfr DMAC2 = 0xB3; // DMA Byte Counter 2sfr DMASEL = 0xB4; // DMA Channel Selectsfr DMAM0 = 0xB5; // DMA Mode 0sfr DMAM1 = 0xB6; // DMA Mode 1sfr IEN1 = 0xB8; // Interrupt Enable 1sfr IP1 = 0xB9; // Interrupt Priority 1sfr S0RELH = 0xBA; // Serial Port 0 Reload Highsfr S1RELH = 0xBB; // Serial Port 1 Reload Highsfr IRCON2 = 0xBF; // Interrupt Request Control 2sfr IRCON = 0xC0; // Interrupt Request Controlsfr CCEN = 0xC1; // Compare/Capture Enablesfr CCL1 = 0xC2; // Compare/Capture 1 Lowsfr CCH1 = 0xC3; // Compare/Capture 1 Highsfr CCL2 = 0xC4; // Compare/Capture 2 Lowsfr CCH2 = 0xC5; // Compare/Capture 2 Highsfr CCL3 = 0xC6; // Compare/Capture 3 Lowsfr CCH3 = 0xC7; // Compare/Capture 3 Highsfr T2CON = 0xC8; // Timer 2 Controlsfr CRCL = 0xCA; // Compare/Reload/Capture Lowsfr CRCH = 0xCB; // Compare/Reload/Capture Highsfr TL2 = 0xCC; // Timer 2 Lowsfr TH2 = 0xCD; // Timer 2 Highsfr IEN4 = 0xD1; // Interrupt Enable 4sfr ADCON = 0xD8; // Serial Port 0 Baud Ratesfr I2CDAT = 0xDA; // I2C Datasfr I2CADR = 0xDB; // I2C Addresssfr I2CCON = 0xDC; // I2C Controlsfr I2CSTA = 0xDD; // I2C Statussfr SPSTA = 0xE1; // Serial Peripheral Statussfr SPCON = 0xE2; // Serial Peripheral Controlsfr SPDAT = 0xE3; // Serial Peripheral Datasfr SPSSN = 0xE4; // Serial Peripheral Slave Selectsfr RTCCMD = 0xE5; // RTC Commandsfr RTCSEL = 0xE6; // RTC Selectsfr RTCDATA = 0xE7; // RTC Datasfr MD0 = 0xE9; // Multiplication/Division 0sfr MD1 = 0xEA; // Multiplication/Division 1sfr MD2 = 0xEB; // Multiplication/Division 2sfr MD3 = 0xEC; // Multiplication/Division 3sfr MD4 = 0xED; // Multiplication/Division 4sfr MD5 = 0xEE; // Multiplication/Division 5sfr ARCON = 0xEF; // Arithmetic Controlsfr ISCCMD = 0xF2; // In System Configuration Commandsfr ISCHEADER0 = 0xF3; // In System Configuration Header 0sfr ISCHEADER1 = 0xF4; // In System Configuration Header 1sfr ISCHEADER2 = 0xF5; // In System Configuration Header 2sfr ISCHEADER3 = 0xF6; // In System Configuration Header 3sfr SRST = 0xF7; // Software Resetsfr GCLKCMD = 0xF8; // Global Clock Commandsfr GCLKADDR = 0xF9; // Global Clock Addresssfr GCLKDATA = 0xFA; // Global Clock Datasfr ISMDIRCTRL = 0xFB; // In System Management Control#endif
#include "M5.H"#include#include #define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit GPIO_RST_N = P1^0;sbit GPIO_wr_en = P1^1;sbit GPIO_rd_en = P1^2;sbit GPIO_SRAM_CS = P1^3;sbit GPIO_dir = P1^4;#define GPIO_addr_L P0#define GPIO_data_H P2#define GPIO_data_L P3#define RST_EN GPIO_RST_N = 0#define RST_DISEN GPIO_RST_N = 1#define WR_EN GPIO_wr_en = 0#define WR_DISEN GPIO_wr_en = 1#define RD_EN GPIO_rd_en = 0#define RD_DISEN GPIO_rd_en = 1#define CS_EN GPIO_SRAM_CS = 0#define CS_DISEN GPIO_SRAM_CS = 1#define DATA_OUT GPIO_dir = 1#define DATA_IN GPIO_dir = 0
通过以上步骤,可以实现FPGA与MCU的联合仿真,利用MCU对FPGA的控制,完成复杂的FPGA程序开发和测试。
转载地址:http://emxfk.baihongyu.com/