最近做了一块国产FPGA试验板(当前状态:MCU测试成功)

2020-01-27 12:39发布

本帖最后由 不爱说话 于 2019-9-26 14:40 编辑

很久以前就想尝试国产FPGA了,但是一直没有动力去做,毕竟Xilinx、Altera都很好,价格也不贵(仅限低端型号)。但是贸易战升级美国断供芯片,让人们意识到了这种关系的不可靠。于是这促使我产生了做一块全国产芯片的FPGA实验板的想法,说干就干,经过前期的选型对比,最终选了以下这些国产芯片
1. FPGA: AG16KDDF256, 有16k逻辑单元兼容Altera Cyclone IV(EP4CE15),另外内置一颗Cortex-M3 MCU(最高频率200MHz),还有128Mb DDR SDRAM(最高频率200MHz);
2. DCDC电源:EA3036, 3路Buck Converter每路最大输出电流2A,转换效率大于85%,QFN20小尺寸封装;
3. USB转串口:CH340E,广泛使用的CH340的最新型号,小封装MSOP-10,内置晶振;
4. SPI Flash:Pm25L32,32Mb SPI NOR Flash;

然后就是画板,我使用的是KiCAD,这是一个开源EDA软件,在很多时候都可以代替Altium Designer。
板子打板回来,经过焊接调试目前电源,USB都OK。今天先写到这里。
IMG_20190819_220117.jpg     IMG_20190819_220140.jpg

------------------------------------------------ 分割线 --------------------------------------------------

板子焊好后,下一步就是验证FPGA了,我准备分三步走,首先写Verilog代码测试FPGA的逻辑功能,然后测试内置的Cortex-M3 MCU,最后写一个DDR控制器测试片内的16MB DDR内存。
这两天开始写简单的Verilog代码,测试一下FPGA的逻辑单元。最简单的当然是LED点灯了,我的程序功能大致是这样的:在FPGA内建立一个32位计数器,通过50MHz有源晶振提供计数时钟,两个LED连接计数器的某两位(bit14,bit16),LED会根据计数器值的变化而闪烁。
前面已经说了这个芯片兼容EP4CE15,开发工具自然是用Quartus II了,在QuartusII里面建立上述led测试工程,编译通过后需要使用AGM的Supra工具转换一下生成AG16K的烧写文件,接下来就可以使用USB-Blaster(没错就是Altera的下载线)连接JTAG就可以烧到板子上的SPI Flash或者直接下载到AG16K直接执行了。

下载成功后,我等待着LED的变化,但是一直没有亮,又试了几次下载成功(config pin接的LED亮了)但是就是没变化好像FPGA没有工作。最后没办法在线问了AGM的技术支持,发现可能是pin脚指定的问题,又反复改了几次,最后LED终于闪了。AGM FPGA点灯成功!

------------------------------------------------ 分割线 --------------------------------------------------

最近测试了AG16K的PLL和ROM功能,用Quartus II建立工程例化这些module全部可以工作。应该说AGM和Altera的兼容性还是很好的。
下面准备试试AG16K内置的MCU和DDR,这两部分就没有参考了,估计会花一些时间。

------------------------------------------------ 分割线 --------------------------------------------------

好久没更新状态了,因为我被卡住了。一直在测试这个FPGA的MCU,按照官方的文档和例程在FPGA工程里例化了Cortex-M3硬核,MCU点灯程序也编译成功,最后把程序烧到板子上,但是LED没亮,说明MCU没有运行。在这种状态下卡了2-3周,一度我都怀疑买来的芯片没有内置MCU。前两天仔细检查配置文件,发现一个管脚配置有问题,修改之后再测试,久违的led又闪起来了,MCU工作了!
下面我准备在MCU程序方面做点东西。我准备先做一个串口控制台功能,先试着在串口中断里对一个全局变量n自加1,每进一次串口中断就加1,可是打印出来确是n=0。这可是我在STM32上用了7年的code啊!刚有点进展,又搞的我很郁闷。

----------------------------------------------- 2019-9-26 -----------------------------------------------
现在我的MCU程序在这个FPGA上调好了,是一个串口命令行控制台,可以执行预先设置好的命令(比如控制LED,读写AHB总线寄存器,读写SPI Flash等等)。
下一步准备用Verilog写一个简单的AHB Slave register模块,用MCU命令读写试试。

1.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
17条回答
不爱说话
2020-01-28 02:29
淘宝还是能找到的,不过这个芯片太新,搜老的型号能找到,比如AG16KSDE176。
DCDC那里是手头找的电感随便焊的,不是太合适再加上飞焊了一个电容所以看着有点别扭。另外,EA3036这颗芯片太棒了,刚一开始焊上了通电没反应,后来又反复焊了几次都不行,最后实在没辙了热风枪加热的时候用镊子往下按了按,再通电一次通过,三路DCDC全部工作正常电压正常,之前的问题应该是这颗芯片太小了以至于焊锡融化时都不会下沉一下:)

一周热门 更多>