Menu Close

RISC-V实验课_数码管显示系列简介

本系列课程基于RISC-V V2.03 CPU,使用RISC-V汇编语言,在Freedom Studio IDE下设计了8个人机接口实验,总计21个视频。本系列实训以按键和数码管为例进行详细讲解。看看专家如何带领我们从底层开发一步步走向应用程序设计的。

学习本实训的过程中要注意体会以下几点:

(1)通过本实验加强RISC-V CPU汇编语言的练习,做到复习,巩固,提高并逐步掌握汇编语言的目的。

(2)体验汇编语言的编程技巧,如何巧妙使用“宏”, 如何调用函数,如何对已开发的代码进行封装。

(3)掌握开发脉络,如何从原理图到XDC约束文件,再到Verilog顶层文件,GPIO, LSU单元等一级级映射,做到硬件,FPGA,软件各个层次的相互关联。做到知其然,知其所以然,举一反三,融汇贯通。

(4)学会项目开发的需求分析,学会程序架构设计,做的分组、分模块的子程序的封装与接口定义。

(5)学会如何将底层驱动与应用程序分离的设计技巧,做到自觉使用自顶向下的设计方法,开发出简洁、易于维护的嵌入式软件。

(6)通过学习本实训内容,拓展已有的知识面,比如,数码管扫描与显示器扫描的区别与联系。数码管扫描与数码管亮度之间的关系,数码管扫描与PWM调制之间的关系。

(7)通过学习,掌握如何充分利用软、硬件的各种资源,做到软硬件的合理调配。如延时扫描是否可以用定时器实现,按键去抖延时是否可以利用中断与定时器延时实现。是否可以给数码管添加协处理器,类似计算机显卡的功能等。

(8)学会调试,对于已出现的问题如何通过实验现象分析定位,并通过单步运行,断点等手段找出原因并加以解决。

(9)做好学习后的总结,画出程序设计脉络,为将来更复杂程序设计打下良好基础。

本实训分为预备、设计、优化、封装、架构以及应用程序开发等六个方面的内容并将上面的知识点穿插其中。按照功能分为8个实验,逐步把设计、实现推向高潮。

 

在进行本实验之前我们首先讲解了数码管的原理,以及在动态扫描时的”视觉暂留效应”作为本实验的预备知识,如果在知识库的课程中学过”Verilog编程与FPGA应用”的课程,可以略过预备课部分内容,预备课的连接如下:

1.  知识的文章:

(1) 数码管原理与显示译码

(2) 数码管显示译码及Verilog 代码实现

2. 视频

(1)数码管原理与显示译码(上)

(2)数码管原理与显示译码(下)

    实验实训内容如下:

实验一:对第0位数码管显示“0”,

本实验设计到内容如下:

(1)在熟悉数码管驱动原理的基础上如何将外设与CPU的地址相关联,

(2)从数码管硬件驱动的原理图的设计–>数码管段,位引脚与FPGA 对应管脚的映射–>Vivado XDC 约束–> Verilog的顶层文件的映射–>GPIO (B,C 组)的映射–>CPU LSU单元的映射–>汇编语言编程。

实验二:对第0位数码管显示“0” , 暂停 500ms 左右, 显示 “1”……..暂停 500ms 左右, 显示 “f” 后 ,暂停 500ms 左右 重新显示“0”

                             给数码管赋显示内容,驱动与延时的开发,让数码动起来!

实验三:根据实验二的结果,对代码进行优化,学习使用宏定义来编程

宏的原理,宏的使用技巧。什么是编译?什么是预编译?如何利用宏优化代码设计。比较Verilog, C 语言,汇编语言的宏各有什么不同?

实验四:根据实验三的结果,对代码进行优化,学习使用函数编程

什么是函数?函数与宏有什么不同?函数参数在汇编语言程序编程中参数是如何传递的。什么情况下使用函数,什么情况下使用宏?

实验五:数码管扫描显示原理及实现

1)数码管在第0位显示“0”,延迟大约1秒,
2)数码管在第1位显示“0”,延迟大约1秒,
。。。
6)数码管在第5位显示“0”,延迟大约1秒,
7)跳转到step 1,循环左移,进行跑马显示

                    掌握分时显示的原理与技巧。如何将程序架构优化。

实验六:在6位数码管上同时显示“123456”

视觉暂留与延时时间计算,数码管亮度与占空比的关系,数码管扫描原理与PWM的关系。如何处理应用程序与驱动的关系。

实验七:

1)在6位数码管上同时显示十六进制计数器 “000000” – “ffffff” ,计数延时为1秒
2)扩展:使用自顶向下的设计方案

真正意义上的第一个应用程序开发。如何实现应用程序与驱动分离?驱动程序如何很好的包装?如何实现代码重用?什么是自顶向下的开发流程?自顶向下的开发有什么优点?本实验是如何实现的?如何利用本实验的开发思想推广到其它程序开发?

实验八:

1)增加3个按键:

1)menu 键定义为 计数器 减一
2)up 键定义为 计数器清零
3)return 键定义为 计数器 加一

2)在6位数码管上初始值为 “000000”

人机接口的另一个重要的组成部分。如何组织主程序的架构?应用程序是哪一部分?为什么按键驱动与按键应用分离?如何扩展已有的应用?

思考:

(1)按键与菜单的关系,按键与电机的正、反转,停止的控制关系,如何将应用程序再次封装。思考主程序调度与操作系统调度的关系。

(2)在主流嵌入式开发中以C语言为主,为什么还要学习汇编语言的开发,掌握汇编语言开发可以带来什么?

      总结:

通过数码管,按键以及按键的应用为例讲解了如何利用硬件原理图,XDC,Verilog,GPIO等相互映射为我们打开了SoC开发的一扇大门,同时利用汇编语言编程的不断优化,将软件开发的理论不断穿插在各个环节中,做的理论与实践高度结合。不求多,但求精,小项目大理论。希望能一以点带面的方式为我们的IC,SoC的开发做出应尽的贡献。

     请关注:C语言编程在SoC 开发中的应用技巧,协处理器如何加速CPU处理过程等文章与视频。

 

 

Posted in RISC-V, 文章

发表评论

相关链接