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

测试结果:

posted @ 2021-02-17 00:52  Epiapoq  阅读(339)  评论(0)    收藏  举报