本帖最后由 拾光333 于 2020-1-11 12:14 编辑
设计内容
将4个LED每隔1s从左往右分别依次点亮熄灭,形成流水状。按复位键时进行复位,重新开始流水。
流程
FPGA的时钟频率为50MHz,所以要设置一个计数器就够,该计数器经历50 000 000个时钟周期,一个时钟周期20ns,共1s。设置一个Flag寄存器,计数达到要求数时产生一个高电压脉冲信号,LED检测到Flag信号进行流水操作。Flag信号目的在于
仿真和下板的时候便于调试,代码书写良好规范。
循环过程led寄存器位拼接过程
原理图
led有共阴和共阳的,这里是共阴,高电平有效。
管脚led0: D11
led1:C11
led2: E10
led3:F9
仿真文件
- `timescale 1 ns/ 1 ns
- module light_water_vlg_tst();
- // constants
- // general purpose registers
- // test vector input registers
- reg sys_clk;
- reg sys_rst;
- // wires
- wire [3:0] led;
- // assign statements (if any)
- light_water i1 (
- .led(led),
- .sys_clk(sys_clk),
- .sys_rst(sys_rst)
- );
- initial
- begin
- sys_clk = 1'd0;
- sys_rst = 1'd0;
- #100 sys_rst = 1'd1;
- #1000 $stop;
- end
-
- always
- begin
- #10 sys_clk = ~sys_clk;
-
- end
- endmodule
在仿真时将led变化缩短为6个时钟周期,也就是0~5计数,一个时钟周期为20ns,共120ns,便于观察