FPGA是实现高速并行数字逻辑的好方法. 在本次暑假一起练活动中, 我使用小脚丫FPGA训练板, 根据电子森林上的资料实现了一个数字电压表.
我使用的是小脚丫型号为STEP-MXO2-C(基于Lattice XO2-4000HC)的FPGA学习模块, 以下简称"核心板", 该核心板不用安装驱动程序, 使用USB模拟U盘的方式下载JED文件, 使用起来简单方便, 能够快速上手.
快速上手文档的地址是 https://www.stepfpga.com/doc/快速上手step-mxo2-c
介绍STEP-MX02-C的文档地址是 https://www.stepfpga.com/doc/step-mxo2-c
本次活动搭配了小脚丫训练版(Training V2.1), 以下简称"训练板"
介绍训练板的文档地址是 https://www.eetree.cn/wiki/stepfpga_training_board
在小脚丫核心板上使用verilog编程, 需要安装diamond软件, 安装过程可以参考 https://www.stepfpga.com/doc/软件安装及配置
搭建完成环境, 需要学习一下verilog语言, 可以参考这个文档 https://www.eetree.cn/wiki/verilog
以下为不带仿真和调试过程的最简单的开发流程:
- 建立工程项目
- 编写设计文件
- 综合
- 管脚分配
- 生成JEDEC文件
- 下载到开发板
顶层模块利用oled模块, adc模块和bcd
训练板上面有一个ADS7868单路串行ADC, 可以用来采集电压值, 使用方法可以参考这个文档 https://www.eetree.cn/wiki/voltage_meter_sadc_verilog
通过三线spi协议将采样数据串行读入, 然后通过bintobcd转码到10进制
module top
(
input clk,
input rst_n,
// oled spi
output oled_csn,
output oled_rst,
output oled_dcn,
output oled_clk,
output oled_dat,
// adc spi
output adc_cs,
output adc_clk,
input adc_dat
);
wire adc_done;
wire [7:0] adc_data;
ADS7868 adc
(
.clk (clk),
.rst_n (rst_n),
.adc_cs (adc_cs),
.adc_clk (adc_clk),
.adc_dat (adc_dat),
.adc_done (adc_done),
.adc_data (adc_data)
);
// 3.3v / 256 = 0.129
wire [15:0] bin_code = adc_data * 16'd129;
wire [19:0] bcd_code;
bin_to_bcd bcd
(
.rst_n (rst_n),
.bin_code (bin_code),
.bcd_code (bcd_code)
);
OLED12832 oled
(
.clk (clk),
.rst_n (rst_n),
.data (bcd_code[19:4]),
.oled_clk (oled_clk),
.oled_csn (oled_csn),
.oled_dat (oled_dat),
.oled_dcn (oled_dcn),
.oled_rst (oled_rst)
);
endmodule
- 虽然以前学过数电, 但是并没有使用过FPGA, 本次活动让我觉得FPGA使用起来不没有那么难
- diamond安装起来稍微比较麻烦, 但是并没有遇到无法解决得问题
- 如果有开源的合成工具可以免安装, 直接使用的话我觉得就更好了, stepfpga好像有网页版开发工具, 但是没时间试用了, 下回可以试试看
- 复制工程目录的方法新建工程 为了快速做一些实验, 直接复制已有工程, 有时候在diamond中修改lpf文件(通过spreadsheet工具)会crash. 解决方法是: 将lpf文件删掉, 再启动diamond然后重新配置即可.
- 设置top-level module 如果项目使用了多个文件, 没有自动识别出top-level module可以在Project->Property Page里面设置top-level module
https://github.com/picospuch/eetree-funpack-workshop/tree/phase-fpga
感谢硬禾学堂, 这个小脚丫FPGA训练套件设计得很好, 作为FPGA入门或者进行数电实验体验很好.