带异步复位、使能及装载功能的计数器
module CNT10(clk,rst_n,EN,data,count,load);
input[3:0] data;
input clk;
input rst_n;
input EN;//使能端
input load;//装载
output count;//输出
reg [3:0] Q ;//寄存器类型
always@(posedge clk or negedge rst_n) begin //异步复位
if(!rst_n)
Q <= 0;
else if(EN) begin //使能端
if(load)
Q <= data;//装载键按下时,将数据传送给寄存器
else if(Q<9)
Q <= Q+1;
else
Q <= 0;
end
end
always@(Q)
begin
if(Q==4’d9) //如果为9
count = 1;
else
count = 0;
end
endmodule
顺手练习下tb文件的编写
ps:仿真是根据你所想模拟的情况编写,每个人情况不一定一样
`timescale 1ns/1ps
module CNT10_tb()
reg clk,rst_n,EN,count,load;
reg[3:0] data;
wire count;
initial begin
clk = 0;
rst_n = 0;
data = 4'b0000;
EN = 1;
load = 1;
#100 rst_n = 0;
end
forever clock = #20~ clock
end
CNT10 CNT10_tb(
.clk(clk),
.rst_n(rst_n),
.EN(EN),
.data(data),
.count(count),
.load(load)
);
3697

被折叠的 条评论
为什么被折叠?



