当前位置: 首页 > news >正文

Quartus + VScode 实现模块化流水灯

文章目录

  • 一、通过VScode编写Verilog代码
  • 二、模块化编程
  • 三、代码示例

一、通过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、只需要重复上述创建模块的流程即可完成多模块的创建

三、代码示例

//顶层模块
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) beginif (!rst_n) key_sync <= 3'b111;else key_sync <= {key_sync[1:0], key}; 
endassign key_negedge = (key_sync[2:1] == 2'b10);always @(posedge clk or negedge rst_n) beginif (!rst_n)pause_flag <= 0;else if (key_negedge)pause_flag <= ~pause_flag;
endalways @(posedge clk or negedge rst_n) beginif (!rst_n) beginstate <= 6'b000001; end else if (en && !pause_flag) beginstate <= {state[4:0], state[5]};  end
endalways @(posedge clk) beginled <= state;  
endendmodule//次要模块
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) beginif (!rst_n) begincnt <= 0;en  <= 0;end else beginif (cnt == CNT_MAX) begincnt <= 0;en  <= 1;    end else begincnt <= cnt + 1;en  <= 0;endend
end
endmodule

流水灯效果


http://www.mrgr.cn/news/95099.html

相关文章:

  • MySQL 入门大全:查询语言分类
  • 【免费网址/插件】视频和图片数据采集推荐~
  • Python散点图(Scatt Plot):数据探索的“第一张图表”
  • 数仓开发那些事(10)
  • YOLOv11 目标检测
  • 网络编程之客户端通过服务器与另外一个客户端交流
  • springCloud集成tdengine(原生和mapper方式) 其一
  • SpringBoot对接DeepSeek
  • dify+deepseek联网搜索:免费开源搜索引擎Searxng使用(让你的大模型也拥有联网的功能)
  • Python功能完美的宝库——内置的强大“武器库”builtins
  • 春天遇到了冬天的吻
  • 【Java】Mybatis学习笔记
  • 火星探测发展概述2025.3.20
  • 如何判断 MSF 的 Payload 是 Staged 还是 Stageless(含 Meterpreter 与普通 Shell 对比)
  • scrollIntoView 的behavior都有哪些属性
  • STM32HAL库,解决串口UART中断接收到的第一个字节数据丢失
  • 基于springboot的房屋租赁系统(008)
  • L2TP实验 作业
  • 数学之握手问题
  • 基于单片机控制的电动汽车双闭环调速系统(论文+源码)