FPGA/Arduino/Matlab/Simulink一体化(四)——实例一则
目标:在Step-MachXO2上实现7-Segment(该板含两个,择一即可)8段LED交替亮灭的简单功能
要求:
1. 交替亮灭是由Arduino Uno控制,Arduino定时输出3-bit周期性数字信号,作为待译码的数据,输入FPGA;
2. FPGA需要对输入的3-bit数据进行8421BCD-to-7-Segment译码,用以驱动数码管,逻辑如下:
![]()
3. Arduino程序在Matlab中编写:(Arduino Uno数字输出分别是pin8, 9, 10)
a = arduino('COM4');
a.pinMode(8,'output');
a.pinMode(9,'output');
a.pinMode(10,'output');
for i = 1:10
digitalWrite(a, 8, 0);
digitalWrite(a, 9, 0);
digitalWrite(a, 10, 0);
pause(0.5);
digitalWrite(a, 8, 1);
digitalWrite(a, 9, 0);
digitalWrite(a, 10, 0);
pause(0.5);
digitalWrite(a, 8, 0);
digitalWrite(a, 9, 1);
digitalWrite(a, 10, 0);
pause(0.5);
digitalWrite(a, 8, 1);
digitalWrite(a, 9, 1);
digitalWrite(a, 10, 0);
pause(0.5);
digitalWrite(a, 8, 0);
digitalWrite(a, 9, 0);
digitalWrite(a, 10, 1);
pause(0.5);
digitalWrite(a, 8, 1);
digitalWrite(a, 9, 0);
digitalWrite(a, 10, 1);
pause(0.5);
digitalWrite(a, 8, 0);
digitalWrite(a, 9, 1);
digitalWrite(a, 10, 1);
pause(0.5);
digitalWrite(a, 8, 1);
digitalWrite(a, 9, 1);
digitalWrite(a, 10, 1);
pause(0.5);
end
4. FPGA译码器功能通过Simulink原理图设计实现,并生成Verilog HDL(还可生成testbench),交由Diamond综合、仿真、下载;

5. 注意Arduino数字输出和FPGA输入之间电平变换(5V-3.3V),本例采用简易的电阻变换,考虑性能影响,未来可考虑采用74HC4050。
测试结果:


浙公网安备 33010602011771号