有時候在復雜系統(tǒng)設計的時候會用遇到讓“計數(shù)器在某個區(qū)間內(nèi)來回不停遞增遞減”的問題。
話不多說,我們直接上代碼。
以0-10的循環(huán)計數(shù)為例。
工具:Modelsim, VScode
1.準備工作
首先在電腦上新建三個文件夾,SRC、TB以及SIM,用來放置源代碼、仿真文件以及仿真工程文件。
一定不要怕麻煩,特別是新手一定要注意代碼的分類工作!良好的分類能夠大大的提高工作效率。
剛接觸代碼量小,幾十行代碼一個文件就搞定了。但是隨著從業(yè)時間的增加,工作復雜度的提升,代碼的難度也會隨之提升,如果不做好分類管理,面對幾十個源代碼,十幾個仿真文件……崩潰是必然的。
請注意:一定不能有中文路徑??!
這樣是錯誤的應該這樣修改
2.工程建立
- 在src文件中添加一個.v文件,名字自擬,最好能夠體現(xiàn)出文件的特性。
module test (
input sys_clk,
input rst_n,
);
reg flag;
reg [7:0] adc_data;
always @(posedge sys_clk or negedge rst_n) begin
if (~rst_n)
flag <= 1'd0;
else
case (flag)
1'd0:
if (adc_data == 8'd9) // -1
flag <= 1'd1;
else
flag <= 1'd0;
1'd1:
if (adc_data == 8'd1) // +1
flag <= 1'd0;
else
flag <= 1'd1;
default: flag <= flag;
endcase
end
always @(posedge sys_clk or negedge rst_n) begin
if (~rst_n) begin
adc_data <= 8'd0;
end
else if (flag == 1'd0)
adc_data <= adc_data + 8'd1;
else if (flag == 1'd1)
adc_data <= adc_data - 8'd1;
else
adc_data <= adc_data;
end
endmodule
- 在tb文件夾中新建文件,給出仿真所需要的激勵。我們此次所需的只有時鐘和復位。時鐘設置為50Mhz,復位1000ns。
`timescale 1 ns /1 ps
module tb_test;
reg sys_clk;
reg rst_n;
test u_tb_test(
.sys_clk (sys_clk),
.rst_n (rst_n)
);
initial begin
sys_clk = 0;
rst_n = 0;
#1000;
rst_n = 1;
#20000;
end
always #10 sys_clk = ~ sys_clk;
endmodule
- 在sim文件夾中新建一個Modelsim仿真工程,添加src,tb中的文件,此過程不再展示。
3.仿真驗證
仿真1us,觀察波形。實現(xiàn)了0-10直接的循環(huán)計數(shù),設計成功。
審核編輯:符乾江
-
FPGA
+關注
關注
1629文章
21754瀏覽量
604222 -
仿真分析
+關注
關注
3文章
105瀏覽量
33674
發(fā)布評論請先 登錄
相關推薦
評論