首页 > 其他分享 >基于EP4CE6E22C8N流水灯实验详解1

基于EP4CE6E22C8N流水灯实验详解1

时间:2023-01-15 19:34:37浏览次数:36  
标签:counter led 引脚 EP4CE6E22C8N sys 详解 流水 寄存器 rst

器材准备:

EP4CE6E22C8N板子,下载器。

电路图:
image

逻辑框架
因为这是一个流水灯,所以需要有一个时序逻辑关系,也就需要一个时钟信号。所以需要给模块设计一个时钟输入信号。此外,如何让机器上电的时候让流水灯在定义的最开始的状态开始执行,也是另外一个问题。因此,需要在输入端设计复位和时钟两个信号的输入。
image

类比C语言程序,这一个时序逻辑模块里面有两个功能模块。一个是定时计时功能的,一个是根据定时输出流水灯信号的模块。在FPGA里面,也就是硬件里面。不像程序那样按照顺序执行,一个电路里面所有元器件在上电瞬间就一起工作了(在不考虑电容延时、和门级电路延时的情况下),所以FPGA是并行工作的。
image

-----------------------------分界线----------------------------------
Verilog代码:

module flow_led(
input sys_clk ,
input sys_rst_n,
output reg [3:0] led );

reg [23:0] counter;

always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
counter <= 24'd0;
else if (counter < 24'd1000_0000)
counter <= counter + 1'b1;
else
counter <= 24'd0;
end

always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
led <= 4'b0001;
else if(counter == 24'd1000_0000)
led[3:0] <= {led[2:0],led[3]};
else
led <= led;
end

endmodule
------------------------------分界线---------------------------------
详解:
代码中,定义了sys_clk、sys_rst_n两个输入端口,输出是一个四位的寄存器。这里定时200ms改变一次led状态。与sys_clk连接的是外部50Mhz晶振,这个提供了稳定的时钟源。
由于50Mhz对应一个周期为:0.000000002s=0.000002ms。所以对应200ms需要24'd1000_0000(带宽为24的10进制数:10000000)个上升沿信号,当达到这个数量的计数时候,计数寄存器清零,并且更换一次led状态。

此外,寄存器数据位移的实现,根据寄存器数据拆分再组合的逻辑来表达。例如寄存器初值为:0001。{led[2:0],led[3]}表示为寄存器的0~2位和3位组合成新的数据并放进寄存器。在这个程序中,顺序为:
0001-》0010-》0100-》1000-》0001

------------------------------分界线---------------------------------

最后,生成代码之前,还需要对管脚进行安排。需要根据对应电路板的电路图进行引脚安排。例如:硬件电路上,时钟晶振的引脚接到了23引脚上,那就设置成对应的引脚即可。其他引脚如此类推。
引脚接口示意图如下:
image
image
设置引脚过程:
image
image
最后烧录进去板子,流水灯跑起来。

标签:counter,led,引脚,EP4CE6E22C8N,sys,详解,流水,寄存器,rst
From: https://www.cnblogs.com/chapman-fpga/p/17053651.html

相关文章

  • (转)Golang - new和make的使用和区别(示例详解)
    原文:https://www.cnblogs.com/beatleC/p/16081832.html前言:Go语言中new和make是内置函数,主要用来创建分配类型内存(相同点:堆上),其功能相似,却有本质区别。引入:变量的声明v......
  • QT学习之QMainWindow详解
    文章目录​​1、菜单栏​​​​2、工具栏​​​​3、状态栏​​​​4、铆接部件​​​​5、核心部件(中心部件)​​​​6、资源文件​​有关QT的学习我们会采取连载更新,传送门......
  • [disruptor详解]01-disruptor原理
    ​​disruptor详解​​​​disruptorCpp-IPC​​disruptor原理使用循环队列,且要求队列大小为2的N次方,以满足位运算快速计算索引的要求(比取模速度快)使用原子变量记录生产者......
  • win10 vmware虚拟机蓝屏怎么办 win10 vmware虚拟机蓝屏解决方法【详解】
    原文地址:https://product.pconline.com.cn/itbk/software/dnyw/1562/15626723.html注:按照第一种方法已解决蓝屏问题最近有朋友出现win10vmware虚拟机蓝屏的情况应该怎么......
  • upload-labs通关详解
    upload-labs通关详解一、Pass-01查看源码,发现变量前有var,可以代码语言是JSsubstring():裁剪字符串lastIndexOf():返回某个子字符串在字符串中最后出现的位置varext_name=......
  • git add 命令详解
    1.前言2.gitadd基本操作3.gitadd命令参数4.gitadd背后做了什么1.前言众所周知,git中有工作区、暂存区、版本库三大组成部分工作区:电脑中能看到的目录,也就是......
  • git checkout 命令详解
    1.前言2.创建分支3.切换分支4.撤销更改1.前言gitcheckout命令用于创建、切换分支或恢复工作树文件。最常用的两种用法​​#切换分支​​​​gitcheckout<bra......
  • git merge 命令详解
    1.前言2.合并场景之Fast-forward(快速合并)3.合并场景之threewaymerge(三路合并之正常合并)4.合并场景之threewaymerge(三路合并之冲突合并)5.中止合并1.前言将......
  • git stash 命令详解
    1.应用场景2.添加储藏3.查看储藏4.删除储藏5.使用储藏6.常见用法1.应用场景gitstash命令用于将工作区中的更改和暂存区中的内容储存起来日常开发中,会经常遇到......
  • git switch 命令详解
    1.前言2.switch创建分支3.switch切换分支1.前言checkout命令具有 ​​分支的管理​​​ 和 ​​文件的恢复​​ 两个核心功能,功能较多、不够准确。在git2.23......