行为仿真目的:clk模拟产生T=1000ps(f=1GHZ)的周期信号,设计四位计数器进行计数,在clr为低电平时从0000开始计数,若达到1111(即15)则自动置零重新开始计数
//四位计数器
module prj0(clk,clr,out);
//定义输入输出端口,clk时钟信号
input clk,clr;
output[3:0] out;
//输出变量out定义为寄存器类型
reg[3:0] out;
always @(posedge clk or posedge clr) //等待clr的或者clk的上升沿
begin
if (clr) out<= 4'h0; //4'b0000若clr为上升沿则将out置零
else
begin out<= out+1; //若达到1111则自动置零
end
end
endmodule
`timescale 1 ps/ 1 ps
module prj0_vlg_tst();
reg clk;
reg clr;
wire [3:0] out;
prj0 i1 (
.clk(clk),
.clr(clr),
.out(out)
);
initial
begin
clk<=1'b0;
clr<=1'b1;
#1000 clr<=1'b0;
$display("Running testbench");
end
always #500 clk = ~clk;
endmodule
门级仿真
由于使用的开发板时钟频率为50MHZ(20ns),因此在门级仿真时需要升高时间单位`timescale 1 ns/ 1 ps,否则输出信号会不稳定,如下