FPGA实验---跑马灯实验

该博客详细介绍了使用FPGA实现跑马灯实验的逻辑设计,包括时钟和复位模块light_flow_clk_rst、主逻辑模块light_flow以及顶层模块light_flow_top。设计中使用了8个LED,每秒点亮一个,并通过按键SW7启动和SW4停止。时钟频率为10MHz,采用24位计数器实现秒计数,利用左移寄存器控制LED的循环点亮。同时,博客还包含了约束文件light_flow_mytest.xdc,用于配置引脚分配。

逻辑设计

共八个LED灯,每隔一秒亮一个。时钟为10MHz,0~9999999为1秒,表示到9999999需要2进制24位。8位LED灯用一个8位数组表示,24位数组来计数,依次点亮使用左移寄存器来实现;按键按下SW7开始工作,按下SW4停止工作,且寄存器不变
**TIPS:**兆赫只是一定义上的名词,在量度单位上作100万解。

模块设计

整体分为三个模块:

  1. light_flow_clk_rst:负责系统的时钟和复位;
  2. light_flow_top:顶层模块:
  3. light_flow:主模块,负责整体的控制程序

1.light_flow_clk_rst

`timescale  1ns/1ps  
module light_flow_clk_rst(
//clk&rst
input I_sys_clk_50M,   //外部时钟晶振为50MHz
input I_sys_rst_50M,   //复位,按键控制,按下之后复位有效
output O_row0_en,       //
output O_clk,           //输出的10MHz时钟
output O_rst            //输出复位信号
);
wire sys_rst_50M;       //PLL的复位信号,高有效
wire clk;
wire rst;
wire pll_locked;        //pll的输出有效信号,类似一个使能信号
reg rst_d1;             // 这里的解释是为了防止复位信号亚稳态,将rst寄存
reg rst_d2;             //两拍
assign sys_rst_50M=~I_sys_rst_50M;//因为按键按下去才为低信号,取反
assign rst=sys_rst_50M|~pll_locked;//在复位信号有效或者pll输出无效时进行复位

//防止亚稳态将复位信号进行寄存
always@(posedge clk,posedge sys_rst_50M)
begin
  if(sys_rst_50M)
     begin
	   rst_d1<=1'b1;
	   rst_d2<=1'b1;
	 end
else
     begin
	 rst_d1<=rst;
	 rst_d2<=rst_d1;
	 end
end

assign O_rst=rst_d2;
assign O_clk=clk;
assign O_row0_en = 1'b0;
//例化PLL ip核
pll pll_inst(
.clk_in1(I_sys_clk_50M),
.reset(sys_rst_50M),
.clk_out1(clk),      //输出10MHz
.locked(pll_locked)
);
endmodule

2.light_flow_mytest

`timescale  1ns/1ps  
module light_flow(
input I_clk,              //10M的时钟
input I_rst,              //复位信号
input I_start,            //按键SW7开始按键
input I_stop,             //按键SW4停止按键
output 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值