带异步复位、使能及装载功能的计数器

带异步复位、使能及装载功能的计数器

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)
);

你可能感兴趣的:(verilog学习,fpga开发,verilog)