【FPGA】VHDL:小型出勤系统设计

news2024/11/15 14:00:35

附源代码,一定能实现!

目录

EDA设计练习题:

实验要求如下:

思路分析: 

代码

99进制计数器

码转换

顶层文件

特别注意

测试

编译通过

结果展示

RTL视图

技术映射视图


软件:Quartus II 13.0 (64-bit)

语言:VHDL


EDA设计练习题

采用EDA技术设计一个人数小于100的出勤统计电路,用于小型公司或部门工作、会议、培训等的出勤人数统计,统计对应每个人签到出勤的单个正脉冲信号,统计结果在两位共阳极数码管上显示。


实验要求如下:

1、程序设计:编写考勤电路的完整程序;注明端口名称及意义;

2、仿真验证:程序编辑、编译、仿真;要求展示全部程序、编译成功界面、功能仿真结果波形图;注意仿真图需能够看出来工作过程及实现的功能


思路分析: 

我们的任务是设计小型出勤系统,统计出勤人数,每个人签到都会产生一个正脉冲信号,我们只需要记录下来有多少个正脉冲信号即可,不需要考虑这个正脉冲怎么产生的~这地方是关键!

每个人签到产生一个正脉冲这种情况,我想的是可以用单片机实现,比如说指纹或者人脸识别,对比系统已经存储的数据,如果对比通关,就产生一个多少ms的脉冲信号,然后这个信号交给我们来处理,做成芯片内部的电路,这个说法不一定正确,不要完全相信~~~小声BB……

设计人数小于100的出勤统计电路,那我们就根据输入的脉冲设计考勤电路,实际上就是一个99计数器,99计数器还可以拆分成两个十进制计数器;然后把99计数器的两份拆分开显示到数码管上,这里还需要一个码转换器(BCD到数码管八段码表)


代码

先看一下工程文件

上层文件是 ShiYan8.vhd,两个底层文件,分别是CNT99.vhd(99进制计数器)和code_switch.vhd(码转换器)

99进制计数器

--99进制计数器

library IEEE;
USE IEEE.STD_logic_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_logic_unsigned.ALL;

ENTITY CNT99 IS 
	PORT( clk		: IN		std_logic; 
			clear   	: IN     std_logic; 
			en		   : IN		std_logic; 
			cout    	: out 	std_logic; 
			qh			: buffer 	 std_logic_vector(3 downto 0); 
			ql	   	: buffer 	 std_logic_vector(3 downto 0) 
                 );	 
END CNT99;

ARCHITECTURE behave OF CNT99 IS
   BEGIN
      cout<='1' when (qh="1001" and ql="1001" and en='1') else '0';
      PROCESS (clk,clear)
			BEGIN
               IF(clear='0') THEN    --异步清零信号
                    qh<="0000";
                    ql<="0000";
                 ELSIF (clk'EVENT AND clk = '1') THEN
                    if(en='1') then
                      if (ql=9)  then			
                          ql<="0000";
                          if(qh=9) then
                              qh<="0000";
                            else
                              qh<=qh+1;
                          end if;
                        else
                          ql<=ql+1;
                      end if;
                  end if;  --end if(en)
            END IF; --end if clear	
      END PROCESS;
END behave; 

码转换

8421BCD码到八段码转换电路(以共阴极数码管为例)

CASE-WHEN语句编写码转换电路比较方便,对比C语言中switch-case语句

参考上一篇文章:【FPGA】VHDL:八段码到8421BCD码转换电路

-- 8421BCD码到八段码转换电路(以共阳极数码管为例)
library IEEE;
USE IEEE.STD_logic_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_logic_unsigned.ALL;

-- 实体声明
ENTITY code_switch IS 
	PORT( 
			Input_8421BCD : IN		STD_logic_vector(3 downto 0); 
			Output_Yang	 : OUT		STD_logic_vector(7 downto 0)
			);	 
END code_switch;

--结构体说明
ARCHITECTURE behave OF code_switch IS
	BEGIN
      PROCESS (Input_8421BCD)
         BEGIN
         --5、8421BCD码到八段码转换电路(以共阴极数码管为例)
			CASE Input_8421BCD IS
				WHEN "0000" => Output_Yang <= "11000000";
				WHEN "0001" => Output_Yang <= "11111001";
				WHEN "0010" => Output_Yang <= "10100100";			
				WHEN "0011" => Output_Yang <= "10110000";
				WHEN "0100" => Output_Yang <= "10011001"; 				
				WHEN "0101" => Output_Yang <= "10010010";
				WHEN "0110" => Output_Yang <= "10000010";
				WHEN "0111" => Output_Yang <= "11111000";
				WHEN "1000" => Output_Yang <= "10000000";
				WHEN "1001" => Output_Yang <= "10010000";
				when others => Output_Yang <= "10111111";	--slkdjfkalf
			END CASE;
      END PROCESS;
END behave; 


顶层文件

这里我采用元件例化的方式写这个代码,就把整体拆成了三个文件,也可以合并起来写,但是不好看,代码比较臃肿,不方便移植~

-- 实验8 2023年11月21日09:02:17
-- 小型出勤统计系统设计程序 
--ShiYan8.VHD
library IEEE;
USE IEEE.STD_logic_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_logic_unsigned.ALL;

ENTITY ShiYan8 IS
   PORT(CLR: IN STD_LOGIC;
        CLK: IN STD_LOGIC;
        ENA: IN STD_LOGIC;		  
        DOUT: OUT std_logic;
		  qh			: buffer 	 std_logic_vector(3 downto 0); 
        ql	   	: buffer 	 std_logic_vector(3 downto 0);
		  SEG_high, SEG_low: OUT STD_logic_vector(7 downto 0)
		  );
END ENTITY ShiYan8;
ARCHITECTURE ART OF ShiYan8 IS
	COMPONENT CNT99 IS
			PORT(
						clk		: IN		std_logic; 
						clear   	: IN     std_logic; 
						en		   : IN		std_logic; 
						cout    	: out 	std_logic; 
						qh			: buffer 	 std_logic_vector(3 downto 0); 
						ql	   	: buffer 	 std_logic_vector(3 downto 0) 
					);
	END COMPONENT CNT99;
	COMPONENT code_switch IS 
		PORT( 
				Input_8421BCD : IN		STD_logic_vector(3 downto 0); 
				Output_Yang	 : OUT		STD_logic_vector(7 downto 0)
				);	 
	END COMPONENT code_switch;
  BEGIN
		--元件例化
		U0:CNT99 PORT MAP (CLK, CLR, ENA, DOUT, qh, ql);
		U1:code_switch PORT MAP (qh(3 downto 0), SEG_high(7 downto 0));
		U2:code_switch PORT MAP (ql(3 downto 0),  SEG_low(7 downto 0));
END ARCHITECTURE ART; 



特别注意

工程名要和实体名相同


测试

编译通过

结果展示

看不太清,放大点 

再大点 

这里可以看到99之后变成了00,说明我们设计的99进制计数器是对的 

最下面是数码管8段码展示, 可以对照上面输出的数据,看一下,对比我们写入的码转换语句,数据能对应的上~~~这里也没有问题。

RTL视图

技术映射视图


本代码纯自己手敲,拒绝白嫖!

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

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

相关文章

软件测试需要学习什么?好就业吗?

目前来说的话&#xff0c;整个it 都不太好&#xff01;但是既然你问了&#xff0c;我也就告诉你吧&#xff01; 1功能测试 &#xff1a;前端和后端&#xff0c;前端就是简单的页面&#xff0c;你需要考虑的是&#xff1a;必填项&#xff0c;边界值&#xff0c;组合&#xff0c…

深度学习介绍与环境搭建

深度学习介绍与环境搭建 慕课大学人工智能学习笔记&#xff0c;自己学习记录用的。&#xff08;赋上连接&#xff09; https://www.icourse163.org/learn/ZUCC-1206146808?tid1471365447#/learn/content?typedetail&id1256424053&cid1289366515人工智能、机器学习与…

XG5032HAN (SAW)振荡器)(piezoman压电侠)

XG5032HAN晶体振荡器通过其卓越的低抖动特性&#xff0c;为需要高频率精度和稳定性的电子设备提供了理想的解决方案。无论是在高性能的数据通信、精密测量XG5032HAN都能提供高质量、可靠的性能。同时&#xff0c;宽广的频率范围其25 MHz到250 MHz&#xff0c;小巧的封装5.0 3.…

问题1-spring-boot版本和org.springframework的spring-web兼容的版本

报错问题如下&#xff1a; Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.createHandlerMethod(AbstractHandlerMeth…

IOT-Reaserch安装ghidra以及IDEA和ghidra的配置

Linux research 5.4.0-91-generic #102~18.04.1-Ubuntu SMP Thu Nov 11 14:46:36 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux java --version IOT自带的java是符合要求的&#xff0c;不需要额外下载 iotresearch:~/install-file$ java --version openjdk 11.0.13 2021-10-19 …

前后端分离vscode保险业务管理系统vue+Nodejs

本设计主要应用于完成对保险业务进行计算机化的管理。系统前台展示各种种类的保险&#xff0c;顾客可以选择登陆后买入。公司员工为管理员&#xff0c;由公司统一分配账号&#xff0c;员工用工号密码登陆。可以修改密码&#xff0c;查看、修改自己的信息。员工可处理顾客信息。…

java+selenium自动化测试

编写自动化测试代码的时候有时候会遇到修改代码但是仍然不起作用的情况 &#xff0c;例如 我将测试账号换成只有一个时&#xff0c;代码仍然会执行上面的7个测试账号 解决方法&#xff1a; File->setting->Build->Maven&#xff1a;选择idea自带的maven即可解决 之后…

聊聊mysql的七种日志

进入正题前,可以先简单介绍一下,MySQL的逻辑架构, MySQL的逻辑架构大致可以分为三层: 第一层:处理客户端连接、授权认证,安全校验等。第二层:服务器 server 层,负责对SQL解释、分析、优化、执行操作引擎等。第三层:存储引擎,负责MySQL中数据的存储和提取。我们要知道…

iPaaS生成数据库接口只要60秒?

“iPaaS生成数据库接口只要60秒&#xff1f;” 关于“iPaaS生成数据库接口只要60秒&#xff1f;”的说法&#xff0c;这实际上反映了iPaaS解决方案的一个重要优势&#xff1a;高效率。确实&#xff0c;借助iPaaS平台的现成集成工具和模板&#xff0c;用户可以迅速创建连接到特…

如何使用Douglas-042为威胁搜索和事件应急响应提速

关于Douglas-042 Douglas-042是一款功能强大的PowerShell脚本&#xff0c;该脚本可以提升数据分类的速度&#xff0c;并辅助广大研究人员迅速从取证数据中筛选和提取出关键数据。 该工具能够搜索和识别Windows生态系统中潜在的安全漏洞&#xff0c;Douglas-042会将注意力放在…

Java设计模式-结构型-适配器模式

Java设计模式-结构型-适配器模式 本文我们简单说下设计模式中的适配器模式。 一、概述 ​ 与电源适配器相似&#xff0c;在适配器模式中引入了一个被称为适配器(Adapter)的包装类&#xff0c;而它所包装的对象称为适配者(Adaptee)&#xff0c;即被适配的类。适配器的实现就是…

架构师技能9-深入mybatis:Creating a new SqlSession到查询语句耗时特别长

开篇语录&#xff1a;以架构师的能力标准去分析每个问题&#xff0c;过后由表及里分析问题的本质&#xff0c;复盘总结经验&#xff0c;并把总结内容记录下来。当你解决各种各样的问题&#xff0c;也就积累了丰富的解决问题的经验&#xff0c;解决问题的能力也将自然得到极大的…

【Python_Zebra斑马打印机编程学习笔记(一)】实现标贴预览的两种方式

实现标贴预览的两种方式 实现标贴预览的两种方式前言一、调用 Labelary Online ZPL Viewer API 方法实现标贴预览功能1、Labelary Online ZPL Viewer API 案例介绍2、生成 PNG 格式3、Parameters 二、通过 zpl 的 label.preview() 方法实现标贴预览功能1、实现步骤2、代码示例 …

每日五道java面试题之spring篇(三)

目录&#xff1a; 第一题 ApplicationContext和BeanFactory有什么区别&#xff1f;第二题 Spring中的事务是如何实现的&#xff1f;第三题 Spring中什么时候Transactional会失效&#xff1f;第四题 Spring容器启动流程是怎样的&#xff1f;第五题 Spring Boot、Spring MVC 和 S…

__proto__和protype的区别

概述&#xff1a; prototype 函数静态属性&#xff0c;非实例属性,所有实例都可以继承它 __proto__ 实例属性&#xff0c;指向实例的原型对象&#xff0c;原型对象包括构造函数和protype属性 替代 现代浏览器中可以使用Object.getPrototypeOf()来替代__proto__来获取原型对象 …

主流的开发语言和开发环境介绍

个人浅见&#xff0c;不喜勿喷&#xff0c;谢谢 软件开发是一个涉及多个方面的复杂过程&#xff0c;其中包括选择合适的编程语言和开发环境。编程语言是软件开发的核心&#xff0c;它定义了程序员用来编写指令的语法和规则。而开发环境则提供了编写、测试和调试代码的工具和平台…

SQL面试题及答案

介绍 在快节奏的数据管理和信息技术世界中,导航和操作结构化数据的能力是一项非常重要的技能。SQL,即结构化查询语言,是关系数据库的基石,掌握这种语言的专业人员的需求量很大。SQL 面试在科技行业很常见,潜在的候选人会接受测试以展示他们的知识和解决问题的能力。为了帮…

【Spring】常见问题总结

目录 1. 什么是 Spring 框架? 2. 列举一些重要的Spring模块&#xff1f; 3. RestController vs Controller 4. Spring IOC & AOP 4.1 谈谈自己对于 Spring IoC 和 AOP 的理解 IoC AOP 4.2 Spring AOP 和 AspectJ AOP 有什么区别&#xff1f; 5. Spring bean 5.1…

OceanMind海睿思助力企业“数据入表”之价值实现与成本计量

2023年8月21日&#xff0c;财政部印发《企业数据资源相关会计处理暂行规定》&#xff08;以下简称《暂行规定》&#xff09;&#xff0c;明确了数据资产会计处理适用的范围、准则、列示和披露要求。 《暂行规定》是规范企业数据资产会计处理指导性和引领性的制度文件&#xff…

微信小程序 --- wx.request网络请求封装

网络请求封装 网络请求模块难度较大&#xff0c;如果学习起来感觉吃力&#xff0c;可以直接学习 [请求封装-使用 npm 包发送请求] 以后的模块 01. 为什么要封装 wx.request 小程序大多数 API 都是异步 API&#xff0c;如 wx.request()&#xff0c;wx.login() 等。这类 API 接口…