北邮22级信通院数电:Verilog-FPGA(11)第十一周实验(1)用JK触发器实现8421码十进制计数器

news2024/11/16 7:53:56

北邮22信通一枚~

跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章

持续关注作者 迎接数电实验学习~

获取更多文章,请访问专栏:

北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客

目录

一.代码部分

1.1  JK_8421.v

1.2  JK_ff.v

1.3  debounce.v

二.管脚分配

三.实验效果


一.代码部分

1.1  JK_8421.v

module JK_8421
(
	input clk,rst,btn,set,
	output [3:0] Q,
	output [8:0] seg_led
);

	reg [8:0] seg [9:0];
	
	debounce debounce_1
	(
		.clk(clk),
		.rst(rst),
		.key(btn),
		.key_pulse(btn_dbs)
	);
	
	JK_ff JK1
	(
		.j(1),
		.k(1),
		.clk(btn_dbs),
		.rst(rst),
		.set(set),
		.q_out(Q[0])
	);
	
	JK_ff JK2
	(
		.j(~Q[3]),
		.k(~Q[3]),
		.clk(Q[0]),
		.rst(rst),
		.set(set),
		.q_out(Q[1])
	);
	
	JK_ff JK3
	(
		.j(1),
		.k(1),
		.clk(Q[1]),
		.rst(rst),
		.set(set),
		.q_out(Q[2])
	);
	
	JK_ff JK4
	(
		.j(Q[2]&Q[1]),
		.k(Q[3]),
		.clk(Q[0]),
		.rst(rst),
		.set(set),
		.q_out(Q[3])
	);
	initial
		begin 
			seg[0] = 9'h3f;
			seg[1] = 9'h06;
			seg[2] = 9'h5b;
			seg[3] = 9'h4f;
			seg[4] = 9'h66;
			seg[5] = 9'h6d;
			seg[6] = 9'h7d;
			seg[7] = 9'h07;
			seg[8] = 9'h7f;
			seg[9] = 9'h6f;
		end	
	assign seg_led = seg[Q];
	
endmodule	
	
	

1.2  JK_ff.v

module JK_ff
(
	input j,k,clk,rst,set,
	output reg q_out
);

	always @ (negedge clk or negedge rst or negedge set)
		begin 
			if(!rst)
				begin q_out <= 0; end
			else if(!set)
				begin q_out <= 1; end 
			else 
				begin 
					case({j,k})
						2'b00:q_out <= q_out;
						2'b01:q_out <= 0;
						2'b10:q_out <= 1;
						2'b11:q_out <= ~q_out;
					endcase
				end
		end
		
endmodule
						

1.3  debounce.v

module debounce (clk,rst,key,key_pulse);
 
        parameter       N  =  1;         //要消除的按键的数量
 
	input             clk;
        input             rst;
        input 	[N-1:0]   key;          //输入的按键					
	output  [N-1:0]   key_pulse;        //按键动作产生的脉冲	
 
        reg     [N-1:0]   key_rst_pre;  //定义一个寄存器型变量存储上一个触发时的按键值
        reg     [N-1:0]   key_rst;      //定义一个寄存器变量储存储当前时刻触发的按键值
 
        wire    [N-1:0]   key_edge;      //检测到按键由高到低变化是产生一个高脉冲
 
        //利用非阻塞赋值特点,将两个时钟触发时按键状态存储在两个寄存器变量中
        always @(posedge clk  or  negedge rst)
          begin
             if (!rst) begin
                 key_rst <= {N{1'b1}}; //初始化时给key_rst赋值全为1,{}中表示N个1
                 key_rst_pre <= {N{1'b1}};
             end
             else begin
                 key_rst <= key;       //第一个时钟上升沿触发之后key的值赋给key_rst,
                                       //同时key_rst的值赋给key_rst_pre
                 key_rst_pre <= key_rst;    //非阻塞赋值。
                                            //相当于经过两个时钟触发,
                                            //key_rst存储的是当前时刻key的值,
                                            //key_rst_pre存储的是前一个时钟的key的值
             end    
           end
 
        assign  key_edge = key_rst_pre & (~key_rst);//脉冲边沿检测。
                                                    //当key检测到下降沿时,
                                                    //key_edge产生一个时钟周期的高电平
 
        reg	[17:0]	  cnt;                       //产生延时所用的计数器,系统时钟12MHz,
                                                 //要延时20ms左右时间,至少需要18位计数器     
 
        //产生20ms延时,当检测到key_edge有效是计数器清零开始计数
        always @(posedge clk or negedge rst)
           begin
             if(!rst)
                cnt <= 18'h0;
             else if(key_edge)
                cnt <= 18'h0;
             else
                cnt <= cnt + 1'h1;
             end  
 
        reg     [N-1:0]   key_sec_pre;                //延时后检测电平寄存器变量
        reg     [N-1:0]   key_sec;                    
 
 
        //延时后检测key,如果按键状态变低产生一个时钟的高脉冲。如果按键状态是高的话说明按键无效
        always @(posedge clk  or  negedge rst)
          begin
             if (!rst) 
                 key_sec <= {N{1'b1}};                
             else if (cnt==18'h3ffff)
                 key_sec <= key;  
          end
       always @(posedge clk  or  negedge rst)
          begin
             if (!rst)
                 key_sec_pre <= {N{1'b1}};
             else                   
                 key_sec_pre <= key_sec;             
         end      
       assign  key_pulse = key_sec_pre & (~key_sec);     
 
endmodule

二.管脚分配

三.实验效果

前4位LED灯显示输入的二进制计数。4位二进制控制的LED中,低电平有效

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1246863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rt-Thread 移植8--定时器的实现(KF32)

1 思路 之前线程需要延时的时候&#xff0c;就初始化remaining_tick&#xff0c;只是将线程就绪优先级组中对应的位清0&#xff0c;并不会将线程从就绪列表中删除。每次systick中断&#xff0c;就remaining_tick递减&#xff0c;如果为0表示延时时间到&#xff0c;将该线程就绪…

SSM教材管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 教材管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开…

如何为你的味蕾选择最完美的白葡萄酒

每一种白葡萄酒都有独特的味道和气味&#xff0c;如何选择一款你喜欢的口味的葡萄酒呢&#xff1f;每一种独特的白葡萄酒产品都使用了非常不同的发酵过程和葡萄种类&#xff0c;以达到它们所熟知的独特味道和风味。 来自云仓酒庄品牌雷盛红酒分享长相思是最具绿色口感的白葡萄…

NX二次开发UF_CSYS_create_temp_csys 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_create_temp_csys Defined in: uf_csys.h int UF_CSYS_create_temp_csys(const double csys_origin [ 3 ] , tag_t matrix_id, tag_t * csys_id ) overview 概述 Creates …

VMware 虚拟机设置静态IP

1.桥接模式&#xff1a;无线网卡虚拟机可以桥接的&#xff0c;Vmware0是虚拟机默认进入的虚拟网络&#xff0c;打开虚拟网络编辑器把Vmware0桥接到具体的无线网卡上&#xff0c;再打开网卡设置选择桥接模式即可。 2、.NAT模式下 &#xff1a;window下VMnet8: IPv4 地址 . . . …

ArcMap针对正射影像图生成切片操作

1.导入图层jpg文件 2.添加地图坐标系 右键点击地图 --》数据框属性 坐标系选项设置地图的坐标系 地图应该有对应的坐标文件 3.地理配准选项 --》去除自动校正&#xff0c; 4.选择参考坐标 在图中选三个定位坐标保存 5.地理配准选项 --》更新地理位置配准 6.管理工具下 --》…

绿色能源守护者:光伏运维无人机

随着我国太阳能光伏产业被纳入战略性新兴产业&#xff0c;光伏发电成为实现“双碳”目标的关键之一。在政策支持下&#xff0c;光伏产业维持高速发展&#xff0c;为迎接“碳达峰、碳中和”大势注入了强大动力。在这一背景下&#xff0c;复亚智能与安徽一家光伏企业合作&#xf…

【周报2023-11-24】

周报2023-11-24 本周主要工作下周工作计划 本周主要工作 本周的话一个主要工作有&#xff1a; 前后端进行联调接口&#xff1a; 那么目前为止的话&#xff0c;已经调通的接口 可以使用的是个人中心 历史生成的接口 选择新模板 新模板详情 ps: 下周工作计划 主要的话就是将…

spark数据倾斜的解决思路

数据倾斜是&#xff1a;多个分区中&#xff0c;某个分区的数据比其他分区的数据多的多 数据倾斜导致的问题&#xff1a; 导致某个spark任务耗时较长&#xff0c;导致整个任务耗时增加&#xff0c;甚至出现OOM运行速度慢&#xff1a;主要发生在shuffle阶段&#xff0c;同样的k…

水厂桶装水订水小程序搭建,提高用户订水的便捷性。

桶装水订水小程序&#xff0c;轻松实现在线预订&#xff0c;统计数量&#xff0c;告别繁琐电话预订。微信水预订小程序&#xff0c;不仅方便用户在线预订&#xff0c;还助力水店提升互联网管理效率。 一、微信订水小程序的作用 1. 简化预订流程&#xff0c;提高服务效率&#…

金风玉露一相逢|实在智能联手浪潮信息合力致新生成式AI产业生态

近日&#xff0c;实在智能正式加入浪潮信息元脑生态AIStore。 实在智能是一家基于AGI大模型超自动化技术&#xff0c;领跑人机协同时代的人工智能科技公司&#xff0c;以其自研垂直的“TARS&#xff08;塔斯&#xff09;大语言模型”技术、实在RPA Agent智能体数字员工产品和超…

pytest-html测试报告这样写,某易测开都直呼:大哥受小弟一拜

在 pytest 中提供了生成html格式测试报告的插件 pytest-html 安装 安装命令如下&#xff1a; pip install pytest-html使用 我们已经知道执行用例的两种方式&#xff0c;pytest.main()执行和命令行执行&#xff0c;而要使用pytest-html生成报告&#xff0c;只需要在执行时加…

华大基因助力乌兹别克斯坦精准医学发展,共筑健康丝绸之路

今年上半年&#xff0c;中国与中亚五国元首齐聚陕西西安&#xff0c;举办中国&#xff0d;中亚峰会。过去的20年里&#xff0c;中国已经成为中亚国家的主要投资来源国&#xff0c;总投资额接近400亿美元。乌兹别克斯坦是中国&#xff0d;中亚合作机制的重要参与者&#xff0c;乌…

飞凌嵌入式受邀参加「2023年电子工程师大会」并做主旨演讲

11月23日&#xff0c;华秋电子发烧友在深圳总部举办了「2023年电子工程师大会暨第三届社区年度颁奖」活动&#xff0c;邀请到了高校教授、企业创始人及高管、行业技术专家、电子工程师等众多嘉宾到场&#xff0c;呈现并传播了电子产业动态、最新技术、应用案例及开源硬件项目。…

数据治理技术之数据清洗

数据清洗背景 数据质量一般由准确性、完整性、一致性、时效性、可信性以及可解释性等特征来描述&#xff0c;根据 Rahm 等人在 2000 年对数据质量基于单数据源还是多数据源以及问题出在模式层还是实例层的标准进行分类&#xff0c;将数据质量问题分为单数据源模式层问题、单数…

Vatee万腾科技新高峰:Vatee前瞻性创新的数字化之力

Vatee万腾科技&#xff0c;一家以前瞻性创新为核心驱动力的数字化引领者&#xff0c;正迈向新的高峰。其在科技领域的卓越表现不仅体现在技术实力上&#xff0c;更展现在对未来的深刻洞察和独到思考上。 在Vatee的科技舞台上&#xff0c;前瞻性创新如一道独特的光芒&#xff0c…

【Linux】make/Makefile 进度条小程序

目录 一&#xff0c;认识 make/makefile 二&#xff0c;实例代码 1&#xff0c;依赖关系 2&#xff0c;原理 3&#xff0c;项目清理 4&#xff0c;测试讲解 三&#xff0c;Linux第一个小程序&#xff0d;进度条 game.h game.c test.c 程序详解 一&#xff0c;认识 m…

管易云与金蝶云星空对接集成其他出库查询连通其他出库新增(其他出库单)

管易云与金蝶云星空对接集成其他出库查询连通其他出库新增(其他出库单) 数据源系统:管易云 管易云是上海管易云计算软件有限公司旗下的专注提供电商企业管理软件服务的品牌&#xff0c;总部位于中国上海张江高科技产业园区。管易云旗下拥有管易云C-ERP、EC-OMS、EC-WMS、B2C/B2…

【Vue】浏览器安装vue插件

首先看一下安装之后的效果&#xff0c;再考虑一下要不要安装 安装完之后&#xff0c;打开浏览器控制台&#xff08;ctrl shift j) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</t…

无人智能柜:经营成本低,运维智能化

在现代商业领域中&#xff0c;无人智能柜正逐渐崭露头角&#xff0c;成为一种具有前景的商业模式。其独特之处在于经营成本的低廉性和运维过程的智能化。相较于传统的便利店等实体店铺&#xff0c;无人智能柜在运营过程中不仅能够降低成本&#xff0c;还能够实现高效的运维管理…