zl程序教程

您现在的位置是:首页 >  工具

当前栏目

野火A7学习第六次(计数器相关)

学习 相关 计数器
2023-09-14 09:09:12 时间

1 基础概念在这里插入图片描述

2 实战指南

2.1 设计规划

1 设计要求
在这里插入图片描述

2 基础规划
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.2 波形绘制

计算
在这里插入图片描述

方法1:计数器位宽26在这里插入图片描述
方法二:计数器位宽25
在这里插入图片描述

2.3 代码编写和调试

module counter
(
	input wire sys_clk,
	input wire sys_rst_n,

	output wire led_out
);

parameter CNT_MAX = 25'd 24_999_999;  // localparam 只能用于 模块内部使用。parameter 可以从module中入口修改参数,使用#(CNT=1000)counter 例化

reg [24:0] cnt;

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n == 1'b0)
		cnt <= 25'd0;
	else if(cnt == CNT_MAX)
		cnt <= 25'd0;
	else
		cnt <= cnt + 1;


always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n == 1'b0)
		led_out <= 1'b0;
	else if(cnt == CNT_MAX)
		led_out <= ~ led_out;
	else  // 如果无效 保持原来的电平
		led_out <= led_out;




endmodule

`timescale 1ns/1ns

module tb_counter();

reg sys_clk;
reg sys_rst_n;

wire led_out;

initial begin
	sys_clk = 1'b1;
	sys_rst_n <= 1'b0;
	#20
	sys_rst_n <= 1'b1;
end

always #10 sys_clk =~sys_clk;

counter
#(
	.CNT_MAX(24)
) counter_inst
(
	.sys_clk(sys_clk),
	.sys_rst_n(sys_rst_n),
	.led_out(led_out)
);

 
endmodule

2.4 逻辑仿真和波形对比

在这里插入图片描述

2.5 锁定管脚和上板测试

在这里插入图片描述
在这里插入图片描述

2.6 修改一下,添加一个合理的 脉冲标志信号

在这里插入图片描述