文章目錄
- 一、通過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
流水燈效果