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

流水灯效果

相关推荐
kite01214 小时前
TraeCode 与 TraeWork 合并:AI 时代 IDE 的三种形态与未来开发工具
ide·ade·traework·traecode
weixin_461769405 小时前
VS Code 中创建 Jupyter 文件(.ipynb)
ide·python·jupyter
浪潮IT馆5 小时前
Android Studio 非最新版本下载安装教程
android·ide·android studio
初雪云11 小时前
UniApp 云打包拿到 IPA 后,真正的发布工作才刚开始
ios·自动化·编辑器·产品经理·iphone
慧都小项12 小时前
组件改名,引用同步更新:WebStorm的重构能力用在哪里?
ide·重构·webstorm
幸运小圣1 天前
Buffer 新手入门【Node.js】
node.js·编辑器·vim
*wait for?1 天前
VScode使用uv-创建python虚拟环境
ide·vscode·编辑器
lzx_0022 天前
Linux 开发工具(二) 简单认识一下编辑器 —— vim
linux·编辑器·vim
意法半导体STM322 天前
【官方原创】LAT1724 STM32CubeIDE for VSCode 修改链接文件中的起始地址无效?
vscode·stm32·单片机·嵌入式硬件·mcu·stm32cube
超级大福宝3 天前
VS Code Remote-SSH 因 RemoteForward 端口冲突导致连接失败的排查与解决
运维·服务器·windows·vscode·ssh