使用Quartus提供的计数器IP核,仿真正常但上板无现象的问题

如有朋友能解决此问题,希望留言告知,感激不尽~
当前状态:部分解决(实况更新)

问题

写的顶层模块如下,主要实现将系统时钟转化为周期为500ms的时钟作为计数器的计数基准时钟:

module CounterIP(
	CLK,
	nRST,
	Count
);

	input CLK;
	input nRST;
	output wire [3:0]Count;
	
	reg clk;
	reg [23:0]cnt;
	parameter Time500MS = 25'd25_000_000;
	
	Counter u1(
		.clock(clk),
		.q(Count)
	);
	
	always @(posedge CLK or negedge nRST)
		if(!nRST)
			begin
				clk <= 1;
				cnt <= 24'd0;
			end
		else if(cnt == Time500MS/2 - 1)
			begin
				cnt <= 24'd0;
				clk <= ~clk;
			end
		else
			cnt <= cnt+1;	
endmodule

写的TestBench文件如下:

`timescale 1ns/1ns
`define clock_period 20 //定义时钟周期20ns

module CounterIP_tb;
	reg clk;
	reg n_rst;
	wire [3:0]count;
	
	parameter endTime = 33'd7_000_000_000;
	CounterIP u1(
		.CLK(clk),
		.nRST(n_rst),
		.Count(count)
	);
	
	initial clk = 0;
	always #(`clock_period/2) clk = ~clk;
	
	initial begin
		n_rst = 0;
		#(`clock_period*200);
		n_rst = 1;
		#endTime;
		$stop;
	end
endmodule

仿真效果如图,可以看出计数值每500ms(500000000ns)计数值+1,一切正常。
在这里插入图片描述
然后我将Counter的四位输出接到板子的四位LED上,结果它始终全亮,对应Count值为 0000 ,令人费解。

问题解决

  1. 感觉自己有点弱智了。如下图,因为创建计数器的时候进位输入进位输出是可选项,同时存在一个时钟输入;我就顺势理解为来一个clock记一个数,单级的计数器不需要进位输入和输出,但实际上clock就是单纯的驱动时钟,进位输入才是计数来源。(这就引发了一个新疑惑,上面没有进位输入的时候,仿真为什么是按clock来计数)
    在这里插入图片描述
    所以我们重新创建计数器如下:
    在这里插入图片描述
    并调整程序代码如下:
module CounterIP(
	CLK,
	Count,
	Cout
);

	input CLK;
	
	output wire Cout;
	output wire [3:0]Count;
	
	wire cin;
	reg [24:0]cnt = 25'd0;
	parameter Time500MS = 25'd25_000_000;
	
	Counter u1(
		.cin(cin),
		.clock(CLK),
		.q(Count),
		.cout(count)
	);
	
	always @(posedge CLK)
		if(cnt == Time500MS-1)
			cnt <= 25'd0;
		else
			cnt <= cnt+1;	
	
	assign cin = (cnt==Time500MS-1) ? 1:0; //每0.5s产生一个进位输入脉冲
endmodule

如此,功能仿真和班级调试均能通过~
但还是前面提到的,为什么问题中没有进位输入的情况下仿真能够顺利进行?
对于新的疑惑,还希望有经验的朋友能够不吝赐教。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值