一、设计目标
设计一个以1s频率闪烁的LED灯,亮灭各500ms
(设计一个计数器,系统时钟CLK:50M—>一个周期20ns)
二、设计文件
- 打开Verilog,新建项目,create new source
- 编写模块
module counter(
input clk,
input rst_n,
output led
);
reg[24:0];
//***设计的计数器有两千五百万个点,换算成25位***//
reg led;
always@(posedge clk or negedge rst_n)
//***每当时钟的上升沿或者复位的下降沿到来时(设计的为低电平有效所以是下降沿)触发always块里的文件***//
begin
if(!rst_n) //复位键被按下时
counter <= 1’b0; //计数器置零
else if (counter == 24999999)
counter <= 1’b0;
else //否则计数器加一
counter <= counter + 1’b1;
end
always@(posedge clk or negedge rst_n)
begin
if (!rst_n)
led <= 1’b0;
else if(counter == 24999999)
led <= !led //计数器计满25000000时,led灯的状态翻转
end
endmodule
三、testbench仿真
- 在Add Source里面选择【Add or create simulation sources】
- 打开创立的仿真文件,进行模块的实例化
module counter_tb; reg clk; //输入一般是寄存器类型,输出一般是线型 reg rst_n; wire led; counter counter_tb( //***后面的counter_tb是自定义的模块的名字,可以任意编写,前面的是模块名,和之前的代码中写的一样***// .clk(clk), .rst_n(rst_n), .led(led) ); initial clk = 1; //初始化clk=1 always #10 clk = !clk; //每隔10纳秒clk翻转一次 initial begin //这段代码用来初始化复位键,延时201ns后,复位键正 rst_n = 0; //常工作 #201; rst_n = 1; end endmodule
- 在SIMULATION处选择【Run Behavioral Simulation】开始功能仿真
*点击Zoom fit按钮可以使仿真结果便于观察