(一) 点亮LED灯,功能仿真

一、设计目标

设计一个以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按钮可以使仿真结果便于观察

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值