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

流水灯效果

相关推荐
佛系彭哥1 天前
Win11下VSCode与MSYS2配置全攻略
c++·vscode·wxwidgets·msys2
她说..1 天前
通过git拉取前端项目
java·前端·git·vscode·拉取代码
徐归阳1 天前
DevEco Studio安装
编辑器·harmonyos
HBR666_1 天前
AI编辑器(FIM补全,AI扩写)简介
前端·ai·编辑器·fim·tiptap
进击中的小龙1 天前
在vscode下的cmake项目里传参调试c++命令行程序
c++·vscode
夫唯不争,故无尤也2 天前
安装好vscode后,缺少vscode打开文件或文件夹选项
ide·vscode·编辑器
‍。。。2 天前
vscode 一键导出导入所有插件
ide·vscode·编辑器
-水火-2 天前
【IDE】Linux下使用openocd烧录bin文件
linux·ide·openocd·bin
省四收割者2 天前
Go语言入门(22)-goroutine
开发语言·vscode·后端·golang
雨夜的星光2 天前
PyCharm 核心快捷键大全 (Windows版)
ide·python·pycharm