跳到内容
去文件
代码

最新提交

Git统计数据

文件

永久链接
加载最新提交信息失败。
类型
的名字
最新提交消息
提交时
img

README.md

dadamachines -多普勒

多普勒

该多普勒是Cortex M4F单片机+ FPGA开发板。它的形状和a一样小很小的并且是开源的。

特性

  • 120Mhz ARM Cortex M4F MCU 512KB Flash (Microchip ATSAMD51G19A) with FPU
  • FPGA 5000 LUT, 1MBit RAM, 6 DSP Cores,OSC, PLL (Lattice ICE40UP5K)
  • Arduino IDE兼容
  • 案板友好(DIL48)
  • 微型USB
  • 电源USB或外部通过引脚头
  • 3.5 v电源电压……5.5 v
  • 所有GPIO管脚均为3.3V
  • 1个LED连接SAMD51
  • 4 x 4 LED Matrix(连接到FPGA)
  • 2用户按键(连接FPGA)
  • 基诺焊料跳投
  • I2C(需要外部上拉),SPI, QSPI, USART引脚
  • 2个DAC引脚,10个ADC引脚
  • 引出线:https://github.com/dadamachines/doppler/blob/master/hardware/doppler-quickstart_print.pdf
  • 完全开放源码的工具链
  • SWD编程针头
  • 双击reset进入引导加载程序
  • UF2引导装载程序通过简单的u盘模式上传固件(大容量存储设备)

开始用多普勒

我们对FPGA感到非常兴奋,但开始使用它们是令人生畏的,特别是因为专有工具链和昂贵的硬件生态系统。多普勒通过提供所有工具让你启动和运行,带走了大部分这些痛苦。

主板上有两个芯片:SAMD51 ARM微控制器和ICE40 FPGA。微控制器很容易编程,例如,初学者友好的Arduino环境。它还需要用于将配置作为位流上传到FPGA。本指南详细介绍了如何为SAMD51和ICE40设置开发环境。

通过Arduino IDE设置编程

请在我们的存储库中找到有关dadamachines板支持包的说明亚搏国际网址Arduinohttps://github.com/dadamachines/arduino-board-index

为FPGA构建位流

1.1安装码头工人二:

如果你在上班的话macOS使用家酿你可以通过跑步来轻松做到这一点:

酿酒桶安装docker
  1. 打开码头工人应用程序。给它想要的特权。

  2. 下载zip或者git克隆doppler-FPGA-firmware

git克隆https://github.com/dadamachines/doppler-FPGA-firmware
  1. 进入您刚刚下载的目录。
cd doppler-FPGA-firmware /
  1. 构建icestorm工具链与码头工人
    这需要一段时间……(您只需要这样做一次,或者在更新工具链时)
Docker build -t icestorm icestorm/
  1. 设置挂载点为码头工人
export MOUNTPOINT= ' pwd ' docker运行-it -v $MOUNTPOINT:/PRJ icestorbash
  1. 现在我们在容器中,可以构建位流了。为我们的doppler_simple_io示例:Makefile从bitstream生成头文件,并将其包含在arduino草图中。
cd PRJ/doppler_simple_io/ make ls

在FPGA上加载位流

#include  #include "[PATHTO]/top.bin.h" //设置doppler_simple_io或自定义固件ICEClass ice40的路径;//子类ICEClass实现自定义spi协议void setup() {ice40.upload(top_bin,sizeof(top_bin));//上传BitStream固件到FPGA ->参见variant.h ice40.upload();//上传BitStream固件到FPGA ->参见variant.h ice40.initSPI();//启动SPI运行时链接到FPGA} void loop() {static uint16_t x = 0;ice40.sendSPI16 (x + +);延迟(50);}

FPGA编程

我们为FPGA选择的语言是Verilog

我们推荐这个Youtube频道来学习Verilog

https://www.youtube.com/watch?v=-bIeiMmqaZE

单板布局和引脚

/ * DOPPLER-Board-Layout:* ---------------- FPGA针  ------------------ * DAC1 SCK莫西人DAC0 LedR LedG LedB CT1 CP0 *迪勒销48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 30 31日29日28日27日26日25 * | - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O, | | *名字VIN 5 v 3.3 v A10 A9 A8 A7 A6 A5 A4 A3 A2A1 A0接地R2 R1 R0 F14 F13 F12 F11 F10 F9 | * alt | VIN 5 v 3.3 v PA11 PA10 PA09 PA08 PA07 PA06 PA05 PA04 PB09 PB08 PA02接地41 40 39 38 37 36 35 34 32 | * * | | | o o o o o o o o | BTN: S1 | | * | USB多普勒:SamD51 < - SPI - > icE40 | BTN:重置| o o o o | * | o o o o | BTN: S2 | | * | | * alt |接地PA13 PA12 PB11 PA14三PB10 PA31 PA30 RES PA19 PA20有PA22 3.3 v 11 12 13 18 19 20 21 23 25 | *名称|接地0 1 2 3 4 5 6 7 8 9 3.3 v F0 F1 F2 F3 F4 F5 F6 F7 F8 | *L - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - O - | *迪勒销1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24 * sci SDA味噌党卫军门限SWC RES CT0 CP0 *——I2C——门限  --- ----- 共享  ----- ---------------- FPGA针  ------------------ */

例子

Arduino -在板上闪烁LED

void setup(){//初始化数字引脚作为输出。pinMode (LED_BUILTIN、输出);} //循环例程不断运行:void loop() {digitalWrite(LED_BUILTIN, HIGH);//打开LED (HIGH是电压级)延时(1000);//等待第二个数字写入(LED_BUILTIN, LOW);//使电压低延迟(1000)关闭LED;//等待第二秒}

Arduino -快速写入2 DAC通道A0和A4 (PA02+PA05)

void setup(){//把你的setup代码放在这里,运行一次:pinMode (PIN_DAC1、输出);dacInit ();} void loop(){//把你的主代码放在这里,重复运行:static uint16_t left = 0;Static uint16_t right = 0;+ = 256;正确的- = 256;dacWrite(左、右);}

Arduino -创建第二个I2C总线作为A7+A8引脚上的1线,并扫描总线

看到https://learn.adafruit.com/using-atsamd21-sercom-to-add-more-spi-i2c-serial-ports/creating-a-new-wire如何处理服务

#include  #include " wiiring_private .h" // pinPeripheral()函数TwoWire Wire1(&sercom0, A7, A8);// create new Wire Port void setup(){//把你的setup代码放在这里,运行一次://在这行后面设置pinPeripheral !!pinPeripheral (A7、PIO_SERCOM);//分配SDA pinPeripheral(A8, PIO_SERCOM);//分配SDC串行。begin(9600);系列。println(“\ nI2C扫描仪”);} void loop(){//把你的主代码放在这里,重复运行:字节错误,地址;int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { // The i2c_scanner uses the return value of // the Write.endTransmisstion to see if // a device did acknowledge to the address. Wire1.beginTransmission(address); error = Wire1.endTransmission(); Wire1.requestFrom(address,2); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done, if find on each addr -> check pullups! \n"); delay(5000); // wait 5 seconds for next scan }

Arduino -创建UART RX,TX Serial2引脚A7+A8

学习如何在SAMD微控制器上使用SERCOMShttps://learn.adafruit.com/using-atsamd21-sercom-to-add-more-spi-i2c-serial-ports/creating-a-new-serial

//创建Serial2实例#include "wiring_private.h" // pinPeripheral()函数Uart Serial2 (&sercom0, A7, A8, SERCOM_RX_PAD_1, UART_TX_PAD_0);void SERCOM0_0_Handler() {Serial2.IrqHandler();} void SERCOM0_1_Handler() {Serial2.IrqHandler();} void SERCOM0_2_Handler() {Serial2.IrqHandler();} void SERCOM0_3_Handler() {Serial2.IrqHandler();} void setup(){//把你的安装代码放在这里,运行一次:Serial.begin(115200);Serial2.begin (9600);pinPeripheral (A7、PIO_SERCOM);// TX pinPeripheral(A8, PIO_SERCOM);// RX} uint8_t i=0; void loop() { Serial.print(i); Serial2.write(i++); if (Serial2.available()) { Serial.print(" -> 0x"); Serial.print(Serial2.read(), HEX); } Serial.println(); delay(500); }

FPGA演示>设置4x4 LED矩阵

看到https://github.com/dadamachines/doppler-FPGA-firmware学习如何从Verilog制作位流。

#include  ICEClass ice40;Uint16_t leds = 1;Void setup(){//把你的setup代码放在这里,运行一次:ice40.upload();//上传BitStream固件到FPGA ->参见variant.h delay(100);//启动SPI运行时链接到FPGA ice40.initSPI();} void loop(){//把你的主代码放在这里,重复运行:sendSPI16 (led);led = led << 1;如果(led = = 0) {led = 1;}延迟(100);}

FPGA -演示>显示4x4矩阵的十六进制字符

#include  ICEClass ice40;uint16_t hexmapFont[16] = {0xF99F,0xF22F,0xF42F,0xF17F,0x1F99,0x7F8F,0xF9F8,0x111F, 0x7DBE,0x1F9F,0x9F9F,0xADAC,0xF88F,0xE99E,0xF8EF,0x8E8F};Void setup(){//把你的setup代码放在这里,运行一次:ice40.upload();//上传BitStream固件到FPGA ->参见variant.h delay(100);ice40.initSPI ();void loop(){//把你的主代码放在这里,重复运行:我< 16;我+ +){ice40。sendSPI16 (hexmapFont[我]);延迟(800); } }

贡献

要报告错误、贡献、讨论使用情况,或者只是请求支持,请亚搏国际网址这就产生了一个问题

学分

意念和软件:斯文布劳恩
设计与硬件:约翰内斯·伊莱亚斯Lohbihler
销售和分销:dadamachines
生产:Watterott电子

Arduino & Arduino IDE:arduino.cc
SAMD51 Arduino核心:Adafruit Industries
Icestorm:https://github.com/cliffordwolf/icestorm
Yosys:https://github.com/YosysHQ/yosys

关于

Arduino兼容Cortex M4F和FPGA开发板

主题

资源

释放

没有发表的版本

没有包发布
此时您不能执行该操作。