[X]关闭

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-05 FPGA流水灯实验

文档创建者:FPGA课程
浏览次数:435
最后更新:2024-07-28
文档课程分类-安路-DR1
安路-DR1: FPSOC-DR1-FPGA部分 » 2_FPGA实验篇(仅旗舰) » 1-FPGA基础入门实验
本帖最后由 FPGA课程 于 2024-7-28 20:42 编辑

软件版本:Anlogic -TD5.9.1-DR1_ES1.1
操作系统:WIN10 64bit
硬件平台:适用安路(Anlogic)
FPGA实验平台:米联客-MLK-L1-CZ06-DR1M90G
开发板板卡获取平台:https://milianke.tmall.com/

1概述
流水灯以及Helloworld实验是我们首次接触编程必做的实验。我们这里就要完成经典的流水灯实验。通才来说,能够独立完成本实验代表了编程者初步掌握了编程共计的使用和基本的编程能力,已经站在了编程世界的大门口了。
在完成本实验前,请确保已经完成前面的实验,包括已经掌握以下能力:
1:完成了TD软件安装
2:完成了modelsim安装以及TD库的编译
3:掌握了TD仿真环境的设置
4:掌握了modesim通过do文件启动仿真

实验目的:
1:掌握流水灯入门实验的代码编写
2:掌握仿真测文件tb的编写
3:掌握modelsim仿真
4:编译并且固化程序到FPGA验证
1.1 LED灯简介
发光二极管,简称为LED,是一种常用的发光器件,通过电子与空穴复合释放能量发光,它在照明领域应用广泛。相比其它灯光源,LED效率高、寿命较长、功耗小、低碳环保、材料不易受到环境影响而相对稳定。
发光二极管与普通二极管一样具有单向导电性,在LED当中只有正极接入正极,负极接入负极它才会有电流流通进去。电流从LED阳极流向阴极时,半导体晶体就发出从紫外到红外不同颜色的光线,光的强弱与电流有关。常用的是发红光、绿光或黄光的二极管。发光二极管的反向击穿电压大于5伏,使用时必须串联限流电阻以控制通过二极管的电流。
2504661-20240723194803601-1446389767.jpg
直插型发光二极管
2504661-20240723194804065-1176170066.jpg
贴片型发光二极管
1.2 硬件电路分析
L1_DR1开发板共有8路LED,其中1路PS端的LED,7路PL端LED。当FPGA输出为高电平时,LED点亮;当FPGA输出为低电平时,LED灯熄灭。
2504661-20240723194804481-183192928.jpg
1.3 程序设计
本次实验目的为7个LED实现流水灯的效果,LED变换间隔时间需要基于系统时钟来计数,实现间隔时间的计时,除此之外,添加系统复位使程序恢复至默认状态,输出结果由7个LED灯亮灭显示。命名模块名为run_led,此模块需要两个输入的端口,分别为系统时钟和系统复位,输出为7位的LED 端口
2504661-20240723194804968-1886077173.jpg
2 FPGA工程
fpga工程的创建过程不再重复,如有不清楚的请看前面实验。
2504661-20240723194805541-592155836.jpg
米联客的代码管理规范,在对应的FPGA工程路径下创建uisrc路径,并且创建以下文件夹
01_rtl:放用户编写的rtl代码
02_sim:仿真文件或者工程
03_ip:放使用到的ip文件
04_pin:放fpga的pin脚约束文件或者时序约束文件
05_boot:放编译好的bit或者bin文件(一般为空)
06_doc:放本一些相关文档(一般为空)
2504661-20240723194806029-489709322.jpg
3 Modelsim仿真3.1准备工作
再次提醒,在进行modelsim仿真前,请提前完成,如果有不清楚的,以下3步请看前面课程内容:
1:完成了modelsim安装以及TD库的编译
2:掌握了TD仿真环境的设置
3:掌握了modesim通过do文件启动仿真

对于向执行什么级别的仿真,就执行对应的HDL2Bit Flow
当 HDL2Bit Flow 运行至Read Design 这一步时,可执行Behavioral Simulation;
当 HDL2Bit Flow 运行至Optimize RTL 这一步时,可执行Post-RTL Simulation;
当 HDL2Bit Flow 运行至Optimize Gate 这一步时,可执行Post-Gate Simulation;
当 HDL2Bit Flow 运行至Optimize Routing 这一步时,可执行Post-Route Simulation。
以执行Behavioral Simulation仿真来说,只要执行Read Design 这一步,如下图
右击FPGA Flow中Read Design,Rerun
2504661-20240723194806457-1254789414.jpg
3.2产生do文件
在tool菜单中选择simulation
2504661-20240723194806881-201054693.jpg
我们这里也是选择已经编写好的仿真测试文件
2504661-20240723194807366-179493624.jpg
仿真测试文件源码如下,对于led这种低速仿真,仿真精度可以设置为1ns,另外仿真阶段可以把间隔时间设置小一些,这样仿真速度就快了:

  1. `timescale 1ns / 1ns

  2. module sim_top_tb();

  3. reg I_sysclk,I_rstn;      //时钟信号以及复位信号
  4. wire [6:0]  O_led;        //仿真的LED 信号

  5. run_led#
  6. (
  7. .T_INR_CNT_SET(1000)       //设置一个较小的时钟计数参数,可以大大缩小我们仿真需要的时间
  8. )
  9. run_led_inst(
  10. .I_sysclk(I_sysclk),      //例化时钟接口
  11. .I_rstn(I_rstn),          //例化复位接口
  12. .O_led(O_led)             //例化led接口
  13. );

  14. initial begin
  15.    I_sysclk  <= 1'b0;     //时钟信号的寄存器设置初值
  16.    I_rstn        <= 1'b0;     //复位信号的寄存器设置初值
  17.    #100;                  //延时100个时间单位
  18.    I_rstn        <= 1'b1;     //复位恢复高点平,模拟复位完成
  19. end

  20. always #20 I_sysclk=~I_sysclk;    //每过20个时钟周期,模拟的系统时钟信号进行一次翻转

  21. endmodule
复制代码

可以看到产生的do文件中,自动添加了仿真文件tb_run_led.v以及run_led.v程序路径
2504661-20240723194807777-1982920438.jpg
3.3启动modelsim仿真
启动后,右击需要观察的信号,添加到波形窗口
2504661-20240723194808177-756583652.jpg
设置restart
2504661-20240723194808549-2028074797.jpg
设置运行100ms(如果运行时间太长可以修改小一些)
2504661-20240723194808901-1119064805.jpg
2504661-20240723194809297-1361567092.jpg
4下载演示
下载程序前,先确保FPGA工程已经编译。
4.1硬件连接
(该教程为通用型教程,教程中仅展示一款示例开发板的连接方式,具体连接方式以所购买的开发板型号以及结合配套代码管脚约束为准。)
请确保下载器和开发板已经正确连接,并且开发板已经上电(注意JTAG端子不支持热插拔,而USB接口支持,所以在不通电的情况下接通好JTAG后,再插入USB到电脑,之后再上电,以免造成JTAG IO损坏)

2504661-20240723194809709-1059964212.jpg
4.2程序下载
单击下载按钮
2504661-20240723194810139-1598314220.jpg
可以看到已经识别到芯片
2504661-20240723194810524-320808962.jpg
4.2.1下载bit
选择bit文件
2504661-20240723194811016-1413462113.jpg
选中后单击Run
2504661-20240723194811459-334991998.jpg
下载成功
2504661-20240723194811859-1315604521.jpg
可以看到流水灯开始运行。

4.3运行结果
(该教程为通用型教程,教程中仅展示一款示例开发板的上板现象,具体现象以所购买的开发板型号以及配套代码上板现象为准。)
2504661-20240723194812437-1118669526.jpg

copycode.gif
copycode.gif
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则