FPGA——实现LED流水灯_quartus点灯
文章目录
- 一、Quartusll_18.1和VS Code软件的关联
- 二、DE2-115的时钟电路
- 三、流水灯的分层次设计
- 四、总结
一、Quartusll_18.1和VS Code软件的关联
1.先打开Quartus II 软件,然后选择菜单栏“Tools”下的“Options…”。
2.点击“Options…”,在弹出的对话框中,选择“General”选项卡下的“Preferred Text Editor”,默认使用的编 辑器是“QuartusII Test Editor”。
在“Text editor:”栏选择“Custom”选项并在“Command-line”栏通过路径浏览按钮选择 VS Code的路径。路径定位到“Code. exe”启动文件,再在后缀上加入-g %f:%l,路径根据自己的VS Code路径修改(就是-g前面冒号中的路径)。然后再点击“OK”完成 Quartus II 18.1 与VS Code的关联。
二、DE2-115的时钟电路
DE2-115 包含一个生成 50MHz 频率时钟信号的有源晶体振荡器,另有一个时钟缓冲器用来将缓冲后的低抖动 50MHz 时钟信号分配给 FPGA。这些时钟信号用来驱动 FPGA 内的用户逻辑电路。开发板还包含两个 SMA 连接头,用来接收外部时钟输入信号到 FPGA 或者将 FPGA的时钟信号输出到外部。另外,所有这些时钟输入都连接到 FPGA 内部的 PLL 模块上,用户可以将这些时钟信号作为 PLL 电路的时钟输入。
DE2-115 板子上的时钟分配信息和 FPGA 芯片相关的引脚配置信息如下图所示。
所以1秒所需的时钟周期数为50000000次。
三、流水灯的分层次设计
在DE2-115开发板上,用Verilog设计一个LED流水灯实验:用6个LED完成周期为1秒的跑马灯效果。
top顶层模块
module led_top( input clk, input reset_n, input pause, output [5:0] led);// 顶层模块:实例化各子模块wire clk_1hz; // 分频时钟信号clock_divider divider_inst( .clk(clk), .reset_n(reset_n), .clk_1hz(clk_1hz));led_display display_inst( .clk(clk), .reset_n(reset_n), .pause(pause), .clk_1hz_en(clk_1hz), .led(led));endmodule
分频模块
module clock_divider( input clk, input reset_n, output reg clk_1hz);// 分频模块:50MHz -> 1Hzparameter MAX_COUNT = 26\'d49_999_999; // 50MHz时钟分频always @(posedge clk or negedge reset_n) begin if (!reset_n) begin clk_1hz = MAX_COUNT) begin counter <= 26\'d0; clk_1hz <= ~clk_1hz; end else begin counter <= counter + 1; end endendreg [25:0] counter;endmodule
显示模块
module led_display( input clk, input reset_n, input pause, input clk_1hz_en, // 来自分频模块的使能信号 output reg [5:0] led);// 显示模块:包含状态机和输出控制reg [2:0] state;reg running;// 状态机控制always @(posedge clk or negedge reset_n) begin if (!reset_n) begin state <= 3\'d0; running <= 1\'b1; end else begin // 处理暂停按键 if (pause) running <= ~running; // 状态转移(使用分频后的时钟使能) if (running && clk_1hz_en) begin state <= (state == 3\'d5) ? 3\'d0 : state + 1; end endend// LED输出控制(保持不变)always @(*) begin case(state) 3\'d0: led = 6\'b000001; 3\'d1: led = 6\'b000010; 3\'d2: led = 6\'b000100; 3\'d3: led = 6\'b001000; 3\'d4: led = 6\'b010000; 3\'d5: led = 6\'b100000; 3\'d5: led = 6\'b100000; default: led = 6\'b000000; endcaseendendmodule
引脚连接配置图
烧录结果
FPGA——流水灯
四、总结
通过本次实验,初步了解到了计数器的思想,而且通过分层次化设计使实验更具有可视性。但是在本次实验中也存在不足,需要一直按着暂停键才能达到暂停的效果。所以,接下来我需要取研究如何实现按下一次实现暂停,再次按下又恢复流水灯效果。
参考资料
https://blog.csdn.net/Lee_tr/article/details/122487570
https://blog.csdn.net/crrrd/article/details/136227780
https://blog.csdn.net/LX567567/article/details/138727302