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

流水灯效果

相关推荐
selfsuer24 分钟前
统信UOS中使用Vscode编程
ide·vscode·编辑器
Q_w774231 分钟前
配置 VSCode 的 C# 开发环境
ide·vscode·c#
cpp加油站2 小时前
无需qt-creator,使用Trae从0到1生成qt的开发、构建、调试环境
开发语言·ide·qt
J不知道ava5 小时前
在idea里开发第一个Servlet
java·ide·intellij-idea
LuXi_foryou6 小时前
Android Studio运行错误:`Could not find method google() for arguments []` 解决方法
android·ide·android studio
一只天蝎的晋升之路10 小时前
练习利用Jupyter使用selenium【疑问未解决版】
ide·selenium·jupyter
实心儿儿10 小时前
Visual Studio调试的技巧
ide
隐藏用户y12 小时前
pycharm运行OpenCV项目踩坑记录
ide·opencv·pycharm
界面开发小八哥12 小时前
「Java EE开发指南」用MyEclipse开发EJB 3无状态会话Bean(一)
java·ide·java-ee·开发工具·myeclipse
太空1号13 小时前
Linux中vscode编程,小白入门喂饭级教程
linux·vscode