原创 我与FPGA求交集之简易秒表计数实现

2016-5-19 15:28 3205 24 4 分类: FPGA/CPLD 文集: 我与FPGA求交集

关于时钟计数器模块,

实现功能时钟计数:

  1. 毫秒,秒,分钟.....计数满清零

  2. 使用BCD计数,进位加一

  3. 按键控制(消抖模块),分频(时钟基准10hz,数码管扫描时钟400hz),计时累加模块

  4. 使用同一按键表示(开始,停止,清零)三种功能.同样,可以使用不同的按键控制,个人实现

  5. 扩展:可加入定时功能,通过设定的时间蜂鸣器响

  6. 操作平台:小梅哥"芯航线"板卡

  7. 效果:

1000001733-6359926844375900003477779.jpg-g560

1000001733-6359926844369500005735209.jpg-g560

设计RTL视图如下

1000001733-6359926682245000006416009.bmp-g560

1000001733-6359926682198600001960586.bmp-g560

1000001733-6359926682266400005414476.bmp-g560

 

分开截图了  整体好像太大了图片.............

设计基本都是以前笔记实现的模块进行累加的,关于按键消逗,分频,BCD计数,数码管不了解的都可以查看以前的笔记......这里不废话了

部分代码:

同一按键控制3个功能:

    ctrl模块:
    reg [1:0]ctrl_state;
	always@(posedge sys_clk or negedge rst_n)
	if(!rst_n)begin
		clear <= 1'b0;
		count <= 1'b0;
		stop <= 1'b0;
		ctrl_state <= 2'd0;
	end
	else if(ButtonSig && ctrl_state == 2'd0)begin//清零
		clear <= 1'b1;
		ctrl_state <= 2'd1;
	end
	else if(ButtonSig && ctrl_state == 2'd1)begin//使能计数
		count <= 1'b1;
		ctrl_state <= 2'd2;
	end
	else if(ButtonSig && ctrl_state == 2'd2)begin//停止计数
		stop <= 1'b1;
		ctrl_state <= 2'd0;
	end
	else begin//无按键状态
		clear <= 1'b0;
		count <= 1'b0;
		stop <= 1'b0;
		ctrl_state <= ctrl_state;
	end
	
	timer模块:
	//计数器状态转换
	always@(posedge sys_clk or negedge rst_n)
	if(!rst_n)
		timer_state <= 2'b00;
	else if(count)	//使能计数
		timer_state <= 2'b01;
	else if(stop)	//停止计数
		timer_state <= 2'b10;
	else
		timer_state <= timer_state;
		
		
	计数累加模块:
	//根据计数器状态设置来选择是否输入计数使能信号
	assign cin_0_1 = (timer_state == 2'b01)?En:1'b0;
	BCD_Counter
	#(
		.Conuter_Top(4'd9)
	)
	BCD_Counter_0_1(
		.sys_clk(sys_clk),
		.rst_n(rst_n),
		.cin(cin_0_1),
		.clr(clr),
		.cout(cout_0_1),
		.q(q_0_1)
	);
	BCD_Counter
	#(
		.Conuter_Top(4'd9)
	)
	BCD_Counter_s_L(
		.sys_clk(sys_clk),
		.rst_n(rst_n),
		.cin(cout_0_1),
		.clr(clr),
		.cout(cout_s_L),
		.q(q_s_L)
	);
	BCD_Counter
	#(
		.Conuter_Top(4'd5)
	)
	BCD_Counter_s_H(
		.sys_clk(sys_clk),
		.rst_n(rst_n),
		.cin(cout_s_L),
		.clr(clr),
		.cout(cout_s_H),
		.q(q_s_H)
	);
	BCD_Counter
	#(
		.Conuter_Top(4'd9)
	)
	BCD_Counter_m_L(
		.sys_clk(sys_clk),
		.rst_n(rst_n),
		.cin(cout_s_H),
		.clr(clr),
		.cout(cout_m_L),
		.q(q_m_L)
	);
	BCD_Counter
	#(
		.Conuter_Top(4'd5)
	)
	BCD_Counter_m_H(
		.sys_clk(sys_clk),
		.rst_n(rst_n),
		.cin(cout_m_L),
		.clr(clr),
		.cout(cout_m_H),
		.q(q_m_H)
	);
	BCD_Counter
	#(
		.Conuter_Top(4'd9)
	)
	BCD_Counter_H(
		.sys_clk(sys_clk),
		.rst_n(rst_n),
		.cin(cout_m_H),
		.clr(clr),
		.cout(),
		.q(q_H)
	);	

 

1000001733-6359926759728900007377762.bmp-g560

 

1000001733-6359926759731000005905179.bmp-g560

1000001733-6359926759752200009605473.bmp-g560

文章评论4条评论)

登录后参与讨论

curton 2019-4-30 19:10

好资源 学习了

curton 2019-4-26 12:53

好资源 学习了

用户1867798 2016-5-25 17:29

think you ,fueling

西西在冰城 2016-5-25 11:33

hi~keep learning

用户1275447 2008-3-24 14:10

官员花钱,老百姓买单。

用户1275447 2008-3-24 13:31





用户1340791 2008-3-20 09:26

通货膨胀其实也绝对不单单是中国单方面的问题,在全球通胀的浪潮下,中国处在世界经济中的一环,想避免是不可能的。美国的次贷危机,让美国那么多的投行股价跌到谷底,其中一个投行的股价好像从100美元跌到2美元。金融业可是美国的命根子,他可不舍得让它垮了.所以美联储大肆减息,,加热美国消费.再美元贬值 ,转嫁自己的危机.美国这个巨无霸毫无疑问的影响着全球的市场 ,他的低迷正是全球其他国家需要安静的时候.偏偏中国又遇几十年不遇的灾害,谷物肉类价格大涨.一层通胀的阴影笼罩着中国人民.人们吃得都成问题了,房子自然就没那么火了, 所以最近房价又开始跌.中国也开始挑高银行利率,冷却国内经济...日子不好过哦!!!!
相关推荐阅读
用户1867798 2016-05-25 18:13
[我和FPGA第一次接触]+我喜欢的姑娘那么优秀
 想起自己第一次接触FPGA,我感觉我当时就是一脸懵圈的给自己挖了一个大坑,最后只能用自己填的坑!想到一句话形容...西湖的水都是我的泪(当然夸张了哈~~~) 说起我和FPGA...
用户1867798 2016-05-23 20:30
关于Testbench的使用和Quartus中的模板
在这里主要总结一下关于我对Testbench的应用和Quartus软件中自带的模板使用 1.Testbench         关于testbench,其实就是一种验证的手段。首先,任何设...
用户1867798 2016-05-12 20:11
我与FPGA求交集之状态机中各种"码"的选择使用
         了解一下状态机中"状态"的各种编码,我们都知道每一个状态需要一个二进制表示,但是状态之间的关系如何,到底该选用"原码""Gray码""独热码"还是好多好多别的码呢.....^^ ...
用户1867798 2016-05-07 21:53
【软件技巧】Quartus中使用notepad++的关联设置
       我们应该都遇到过这种情况"同一个工程由于在不同版本上的Quartus自带的文本编辑器打开时会遇到中文注释注释乱码现象",有时候自带的编辑器不如一些专业的文本编辑器好用,在这里介绍的是...
用户1867798 2016-04-30 10:31
2.深入理解fpga应用设计之验证if_else的不同使用方式
验证: if_else不同使用方式,出来避免不受欢迎的意外产生的锁存器,同时还可以有效的利用逻辑资源, 修改:关于case,default......         例程实现方式一: ...
我要评论
4
24
关闭 站长推荐上一条 /2 下一条