记录使用Spartan-6进行流水灯控制的实验

举报
李锐博恩 发表于 2021/07/15 06:23:36 2021/07/15
【摘要】 整个过程我没有记录,因为之前记录过了,都是一样的,这里只是记录了下思路。之前的博文:全过程实现一个最简单的FPGA项目之PWM蜂鸣器控制 这些LED的正极连接510欧姆限流电阻到3.3V电压,负极都连接到了FPGA的IO引脚上。因此,FPGA可以通过引脚的高或低电平控制LED的亮灭状态。 8个LED指示灯,我们依次给他们赋值,每次只有一个LED点亮,每次点亮某个LED...

整个过程我没有记录,因为之前记录过了,都是一样的,这里只是记录了下思路。之前的博文:全过程实现一个最简单的FPGA项目之PWM蜂鸣器控制

这些LED的正极连接510欧姆限流电阻到3.3V电压,负极都连接到了FPGAIO引脚上。因此,FPGA可以通过引脚的高或低电平控制LED的亮灭状态。

8LED指示灯,我们依次给他们赋值,每次只有一个LED点亮,每次点亮某个LED的时间一定(固定延时)。8LED依次被点亮一次,如此循环便成就了流水灯的效果。

Verilog HDL设计代码


  
  1. module sp6(
  2. input ext_clk_25m, //外部输入25MHz时钟信号
  3. input ext_rst_n, //外部输入复位信号,低电平有效
  4. output reg[7:0] led //8个LED指示灯接口
  5. );
  6. //-------------------------------------
  7. reg[19:0] cnt; //20位计数器
  8. //cnt计数器进行循环计数
  9. always @ (posedge ext_clk_25m or negedge ext_rst_n)
  10. if(!ext_rst_n) cnt <= 20'd0;
  11. else cnt <= cnt+1'b1;
  12. //-------------------------------------
  13. //计数器cnt计数到最大值时,切换点亮的指示灯
  14. always @ (posedge ext_clk_25m or negedge ext_rst_n)
  15. if(!ext_rst_n) led <= 8'b1111_1110; //默认只点亮一个指示灯D2
  16. else if(cnt == 20'hfffff) led <= {led[6:0],led[7]}; //循环移位操作
  17. else ;
  18. endmodule

找到输入输出对应的引脚在FPGA上的位置:

根据这些写引脚约束:


  
  1. # PlanAhead Generated physical constraints
  2. NET "led[7]" LOC = P81;
  3. NET "led[6]" LOC = P82;
  4. NET "led[5]" LOC = P83;
  5. NET "led[4]" LOC = P84;
  6. NET "led[3]" LOC = P85;
  7. NET "led[2]" LOC = P87;
  8. NET "led[1]" LOC = P88;
  9. NET "led[0]" LOC = P92;
  10. NET "ext_clk_25m" LOC = P55;
  11. NET "ext_rst_n" LOC = P62;

之后进行综合、实现、产生可配置文件,下载到FPGA上调试即可。

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/81712398

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。