Quartus + VScode 实现模块化流水灯

文章目录

一、通过VScode编写Verilog代码

1、下载Vscode

2、下载相关插件

搜索Verilog就会弹出有如图所示的插件,下载并安装

3、创建Quartus项目

4、创建完成后点击Tools,选择Options

然后在如图所示中,选择VScode.exe所在路径,并在后面添加-r -g %f:%l

5、创建新的Verilog文件,然后会自动跳转VScode

6、在你项目路径下右键新建txt文件(文件名自己命名,不必要跟我一样),再把后缀改为.v

7、在VScode中点击FIle,然后点击openfIle,然后找到这个文件,打开

8、在这个文件里面编写Verilog代码,编写完成后ctrl+s保存,然后回到Quartus

9、右键点击Files,点击三个点,然后找到刚才的文件,添加,添加的文件会显示在下面,至于这里的文件为啥突然变名字了,后文会讲到

然后就可以在Quartus里面点击

到此为止,将VScode与Quartus结合就结束了

二、模块化编程

1、如图所示,分别有三个.v文件,就是分别三个模块

看着是不是有一种熟悉感,我的理解即是类似c语言那种函数调用,又类似C++的类封装,需要用的时候就拿出来用。

2、这里的m_design就是刚才的top,代表顶层模块,就是最主要的模块,另外两个模块就是分别实现其他功能的模块,当然可以有很多个次要模块。

3、需要注意的是顶层模块的模块名需要与工程名相同 ,但其他模块就没有要求

4、只需要重复上述创建模块的流程即可完成多模块的创建

三、代码示例

bash 复制代码
//顶层模块
module m_design(
    input  wire       clk,     
    input  wire       rst_n,   
    input  wire       key,     
    output wire [5:0] led      
);

wire en_1hz;  

clk_divider(
    .clk   (clk),
    .rst_n (rst_n),
    .en    (en_1hz)
);

led_controller(
    .clk   (clk),
    .rst_n (rst_n),
    .en    (en_1hz),
    .key   (key),
    .led   (led)
);


endmodule

//次要模块
module led_controller(
    input  wire       clk,
    input  wire       rst_n,
    input  wire       en,      
    input  wire       key,    
    output reg  [5:0] led
);

reg [5:0] state;      
reg pause_flag;       
reg [2:0] key_sync;   
wire key_negedge;    

always @(posedge clk or negedge rst_n) begin
    if (!rst_n) 
        key_sync <= 3'b111;
    else 
        key_sync <= {key_sync[1:0], key}; 
end


assign key_negedge = (key_sync[2:1] == 2'b10);

always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        pause_flag <= 0;
    else if (key_negedge)
        pause_flag <= ~pause_flag;
end

always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        state <= 6'b000001; 
    end else if (en && !pause_flag) begin
        state <= {state[4:0], state[5]};  
    end
end

always @(posedge clk) begin
    led <= state;  
end

endmodule

//次要模块
module clk_divider(
    input  wire clk,   
    input  wire rst_n,
    output reg  en     
);

parameter CLK_FREQ = 50_000_000; 
localparam CNT_MAX = CLK_FREQ - 1; 

reg [25:0] cnt; 

always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        cnt <= 0;
        en  <= 0;
    end else begin
        if (cnt == CNT_MAX) begin
            cnt <= 0;
            en  <= 1;    
        end else begin
            cnt <= cnt + 1;
            en  <= 0;
        end
    end
end
endmodule

流水灯效果

相关推荐
dz小伟12 分钟前
vim的配置
linux·编辑器·vim
阿运河2 小时前
如何配置 VScode 断点调试Linux 工程代码
linux·ide·vscode
cocogogogo3 小时前
Jupyter Notebook / Lab 疑难杂症记:从命令找不到到环境冲突与网络阻塞的排查实录
网络·ide·jupyter
帮帮志5 小时前
【2025年】基于电脑的jdk1.8通过idea创建springboot2.x版本(非常简洁快速)
java·ide·intellij-idea
zhang23839061548 小时前
idea如何快速生成测试类
java·ide·intellij-idea
ykjhr_3d9 小时前
结构可视化:利用数据编辑器剖析数据内在架构
编辑器
懒惰的橘猫10 小时前
配置Hadoop集群-测试使用
java·ide·eclipse
LXL_2410 小时前
如何安装不同版本的ESP-IDF,并配置Vscode插件,以及在Vscode中切换版本
ide·vscode·编辑器
fengyehongWorld12 小时前
对日开发 TeraTerm ttl脚本开发环境配置
编辑器·tera term
kaiyuanheshang13 小时前
关于VScode的调试
ide·vscode·编辑器·debug·调试