有時(shí)候在復(fù)雜系統(tǒng)設(shè)計(jì)的時(shí)候會(huì)用遇到讓“計(jì)數(shù)器在某個(gè)區(qū)間內(nèi)來回不停遞增遞減”的問題。
話不多說,我們直接上代碼。
以0-10的循環(huán)計(jì)數(shù)為例。
工具:Modelsim, VScode
1.準(zhǔn)備工作
首先在電腦上新建三個(gè)文件夾,SRC、TB以及SIM,用來放置源代碼、仿真文件以及仿真工程文件。
一定不要怕麻煩,特別是新手一定要注意代碼的分類工作!良好的分類能夠大大的提高工作效率。
剛接觸代碼量小,幾十行代碼一個(gè)文件就搞定了。但是隨著從業(yè)時(shí)間的增加,工作復(fù)雜度的提升,代碼的難度也會(huì)隨之提升,如果不做好分類管理,面對(duì)幾十個(gè)源代碼,十幾個(gè)仿真文件……崩潰是必然的。
請(qǐng)注意:一定不能有中文路徑?。?/p>
這樣是錯(cuò)誤的

2.工程建立
- 在src文件中添加一個(gè).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文件夾中新建文件,給出仿真所需要的激勵(lì)。我們此次所需的只有時(shí)鐘和復(fù)位。時(shí)鐘設(shè)置為50Mhz,復(fù)位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文件夾中新建一個(gè)Modelsim仿真工程,添加src,tb中的文件,此過程不再展示。
3.仿真驗(yàn)證
仿真1us,觀察波形。實(shí)現(xiàn)了0-10直接的循環(huán)計(jì)數(shù),設(shè)計(jì)成功。

審核編輯:符乾江
-
FPGA
+關(guān)注
關(guān)注
1643文章
21974瀏覽量
614349 -
仿真分析
+關(guān)注
關(guān)注
3文章
106瀏覽量
33883
發(fā)布評(píng)論請(qǐng)先 登錄
AN-831: 使用ADuC702x系列實(shí)現(xiàn)計(jì)數(shù)器

智能雷擊計(jì)數(shù)器的綜合行業(yè)解決方案

獲取通信事件計(jì)數(shù)器與獲取通信事件記錄
雷擊計(jì)數(shù)器的概述與應(yīng)用分析

頻率計(jì)數(shù)器的技術(shù)原理和應(yīng)用場(chǎng)景
74ls163是幾進(jìn)制同步計(jì)數(shù)器
臺(tái)式塵埃粒子計(jì)數(shù)器的功能優(yōu)勢(shì)與應(yīng)用
智能防雷計(jì)數(shù)器行業(yè)應(yīng)用解決方案

評(píng)論