欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

SOPC第三课---同时点亮4个LED灯闪烁

发布时间:2025/4/5 25 豆豆
生活随笔 收集整理的这篇文章主要介绍了 SOPC第三课---同时点亮4个LED灯闪烁 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

本栏目将会介绍Alteral的SOPC系列,整个过程不会沿袭教材,那样就成了抄教材了,而是将课程笔记汇总,并且把一些我实验过程中犯过的错误记录下来。
更新时间比较缓慢。
资源: 锆石A4开发板
小梅哥AC620开发板
----

  • 介绍
    SOPC是基于FPGA的SOC系统
  • 建立基于NIOS II处理器系统来控制一个LED灯闪烁
  • 创建工程

  • 打开QSYS

    nios的3种性能
    经济型,标准型,快速型
    硬件乘法器的类型默认使用嵌入式的硬件乘法
    exception vector(异常向量)
    出现异常后,从哪一个地址开始运行。
    MMU and MPU
    要在nios跑linux系统才勾选,
    细节在以后的应用中再不断补充

  • 建系统






我们建立好上面的系统。
指令总线就是加减乘除
数据总线就是数字。所以对于存储的设备,我们会进行加减乘除等运算。但是对于输出管脚等非存储设备,我们只用将CPU的数据送达即可,不需要将指令送达。指令在存储类设备or cpu中完成。
我们的pio需要导出,控制着我们的led亮or灭
地址,我们可以自动分配。如果我们要清醒ROM从0开始分配,用小锁锁住即可,再进行自动分配。
另外设置好nios里面的复位向量(指向ROM)和异常向量(指向RAM)
注意nios时钟要与实际的时钟一致
将HDL example拷贝到quartus顶层文件当中。

并记得把我们的qsys系统纳入我们的FPGA工程。


我们现在把PIO改为控制4个灯
注意只有在generate过后,才会生成正确的HDL模板


注意我们添加的QSYS系统是.qip
管脚分配,可在assignment edtor里面把之前的管脚名字删除,然后重新分配管脚

#include "system.h" #include "altera_avalon_pio_regs.h" #include "alt_types.h" int main(void) { alt_u8 led = 0; alt_u32 i; while(1) { led = 0X0; IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_0_BASE,0XF);//此寄存器控制PIO的方向 IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, led);//点亮LED灯 i = 0; while(i<500000) //延时功能,非精确延时,数值太小将无法看到灯的闪烁效果 { i++; } led = 0XF; IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, led);//熄灭LED灯 i = 0; while(i<500000) //延时功能,非精确延时,数值太小将无法看到灯的闪烁效果 { i++; } } return 0; }

另外记得一旦quartus编译过后,一定要重新生成bsp
一定要先保存,再编译,eclipse不会自动保存
下面是测试结果

总结

以上是生活随笔为你收集整理的SOPC第三课---同时点亮4个LED灯闪烁的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。