FPGA作为一种非常底层的硬件可编程逻辑芯片,实现数字逻辑电路可谓非常灵活,但是对于习惯了C语言和MCU编程的同学来说,从底层电路写到上层应用还是要费一番工夫的。
我们知道在MCU(Microcontroller Unit)中运行的是CPU硬核,比如Intel的8051核,ARM的Cortex-M核,Arduino板上用的AVR核等,各大半导体厂商在CPU Core的基础上集成了各种各样的外设模块,以适用于不同的应用需求。用户需要关心的就是这款MCU有哪些资源,寄存器如何配置。如果我想根据自己的应用需求来定制一款MCU,但是半导体厂商又不理我怎么办呢?办法总是有的,那就回到MCU出生之前的状态。通过将处理器内核移植到FPGA中,使用FPGA内部的逻辑资源和存储资源来构建一个软MCU,再通过内部总线挂载需要的外设电路就构成了一个定制化的MCU,我们称之为软核。
软核中的野马战斗机—FP51-1T
目前,在FPGA中移植软核已经是一种常见的做法,但是大多数MCU软核都是FPGA厂商定制的,比如Altera的Nios II、Xilinx的MicroBlaze和Lattice的MICO32/MICO8,这些软核并不完全开源并且对用户做了诸多限制。
国外有一家名叫PulseRain Technology的公司开发并开源了一款高性能的MCU软核FP51-1T,该软核虽然基于8位的8051体系,但是它巧妙地实现了RISC架构,并且优化了指令集,大部分指令都可以单时钟周期实现,主频可以飙到100MHz以上,以二战时彪悍的野马战斗机P51来命名这款软核再合适不过了。
为方便调试,在软核内部集成了OCD(On Chip Debugger-片上调试)模块,PC主机只要通过RS232接口就可以实现程序下载、单步执行、断点调试等功能。这款软核最大的灵活性在于通过Wishbone总线挂载了Timer、SPI/I2C、UART、PWM、voice CODEC、microSD、 Serial SRAM等外设接口,为方便软件开发,PulseRain Technology提供了兼容Arduino的板卡支持包和软件开发库,将该软核移植到FPGA就可以使用Arduino来开发FPGA了。
FP51-1T结构图
FP51-1T软核采用最小资源配置及移植到Altera MAX10系列FPGA资源占用情况:
PulseRain FP51-1T 提供两种授权方式,一种开源授权(GPL v3),另一种商业授权,所有开源的代码已放在GitHub的仓库,但是如果要应用于商业目的的话还是要获得Commercial License FP51-1T MCU Core详细介绍☞FP51-1T MCU Core: A Mustang in FPGA PulseRain推出的M10开发板使用Arduino开发详细介绍
☞ PulseRain M10: Play FPGA like Arduino 现在FP51-1T已经成功移植到STEP-MAX10开发板并且提供了Arduino板卡支持包。
二进制(binary),发现者莱布尼茨,是在数学和数字电路中以2为基数的记数系统,是以2为基数代表系统的二进位制。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示 。
ESP32系列(包括ESP32-S3)搭载Xtensa双核处理器,默认情况下Arduino框架仅使用单核运行用户代码,通过多核编程,可以充分利用硬件资源来提升系统响应和性能。
在本文中,先解释 MSB(最高有效位)和 LSB(最低有效位)的概念,以及 MSBFIRST 和 LSBFIRST。然后展示了 MSBFIRST 和 LSBFIRST 的使用如何影响移位寄存器的输出。
TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速与方向,输入电压在3V~12V,因此在集成化、小型化的电机控制系统中,它可以作为理想的电机驱动器件。
Arduino-ESP32项目提供的Preferences库是一个专为ESP32设计的非易失性存储解决方案,它替代了传统的Arduino EEPROM库,提供了更强大、更可靠的数据存储功能。
在Arduino中,通过串行端口接收数字通常涉及使用Serial.read()、Serial.readString()、Serial.parseInt()等方法。
要生成随机数,可以使用Arduino随机数函数random()。
本文收集整理在Arduino环境下字符串的相关用法,供参考。
本文主要介绍8×8 共阳极LED点阵显示实验,分别是:介绍74HC595点阵模块、点阵显示指定行列LED、点阵显示汉字。