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

附源代码,一定能实现!

目录

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.mfbz.cn/a/403612.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【打工日常】使用docker部署StackEdit编辑器-Markdown之利器

一、StackEdit介绍 StackEdit一款强大的在线Markdown编辑器&#xff0c;不仅具备卓越的写作功能&#xff0c;还支持实时预览、多设备同步等特性。 很多时候基于安全和信息保密的关系&#xff0c;建议放在自己的服务器或者本地linux去运行&#xff0c;这样会比较省心。 二、本次…

使用k-近邻算法改进约会网站的配对效果(kNN)

目录 谷歌笔记本&#xff08;可选&#xff09; 准备数据&#xff1a;从文本文件中解析数据 编写算法&#xff1a;编写kNN算法 分析数据&#xff1a;使用Matplotlib创建散点图 准备数据&#xff1a;归一化数值 测试算法&#xff1a;作为完整程序验证分类器 使用算法&…

MybatisPlus基础入门以及入门案例

目录 一、MyBatisPlus简介 二、MyBatisPlus特性 三、MyBatisPlus支持的数据库 四、框架结构 五、入门案例 1.开发环境 2.创建数据库及表 3.创建Spring Boot工程 4.导入依赖 5.项目结构 6.配置application.yml 7.配置SpringBoot启动类 8.添加实体类 9.添加mapper接口 10.测试…

vue后台管理添加水印简单方式watermark-package

详情参考:https://www.npmjs.com/package/watermark-package 示例方法 <el-button type"primary" click"AddWatermark">添加水印</el-button><el-button type"primary" click"RemoveWatermark">清除水印</el-but…

MKdocs添加顶部公告栏

效果如图&#xff1a; docs/overrides下新建main.html &#xff0c;针对main.html文件 树状结构如下: $ tree -a . ├── .github │ ├── .DS_Store │ └── workflows │ └── PublishMySite.yml ├── docs │ └── index.md │ └──overrides │…

领域驱动设计在互联网业务开发中的实践

至少30年以前&#xff0c;一些软件设计人员就已经意识到领域建模和设计的重要性&#xff0c;并形成一种思潮&#xff0c;Eric Evans将其定义为领域驱动设计&#xff08;Domain-Driven Design&#xff0c;简称DDD&#xff09;。在互联网开发“小步快跑&#xff0c;迭代试错”的大…

数字孪生城市及其他应用场景应用

数字孪生的“虚拟副本”让城市治理不再盲人摸象。 从城市治理的角度来看&#xff0c;数字孪生城市相当于真实世界的“操作系统”&#xff0c;有了它就可以远程对城市的每一个角落进行监测、智慧调度&#xff0c;无论是街道、社区&#xff0c;还是商场、变电站乃至城市排水系统…

使用 JMeter 生成测试数据对 MySQL 进行压力测试

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

【C语言基础教程】getline函数与临时文件

文章目录 前言一、getline函数1.1 为什么需要这个函数1.2 getline函数的使用1.3 使用示例 二、临时文件2.1 临时文件的使用2.2 示例代码 总结 前言 在C语言编程中&#xff0c;处理文本文件是一个常见的任务。然而&#xff0c;有时候我们需要处理那些我们不想在磁盘上创建的临时…

Qwen-VL本地化部署及微调实践

Qwen-VL本地化部署及微调实践 创建虚拟环境模型部署下载模型文件下载项目代码安装python依赖环境修改web_demo_mm.py及openai_api.py的部分代码启动测试 模型微调环境部署数据准备微调 问题 创建虚拟环境 conda create -name vl python3.10.8模型部署 下载模型文件 https://…

React学习——快速上手

文章目录 初步模块思维 初步 https://php.cn/faq/400956.html 1、可以手动使用npm来安装各种插件&#xff0c;来从头到尾自己搭建环境。 如&#xff1a; npm install react react-dom --save npm install babel babel-loader babel-core babel-preset-es2015 babel-preset-rea…

从MATLAB到MWORKS,科学计算与系统建模仿真平台的中国选项

“中国需要自主的科学计算与系统建模仿真平台。” 工业软件是所有复杂系统研发设计、仿真验证和数字制造的必备工具&#xff0c;已经成为衡量一个国家工业竞争力的核心指标。在传统工业软件领域&#xff0c;我们一直处于落后状态&#xff0c;尤其是研发设计类工业软件&#xff…

uniapp开发微信小程序跳转到另一个小程序中

注意&#xff1a;一开始我的云上务工模块是单独的tabbar界面&#xff0c;但是小程序跳转好像不能直接点击tabbar进行&#xff0c;所以我将这里改成了点击首页中的按钮进行跳转 点击这里进行小程序跳转 目录 基础讲解 uniapp小程序跳转的两个方法 调用说明&#xff08;半屏跳转…

助力国产BMS管理芯片品牌发展,世强硬创获迈巨微电子授权代理

作为电池的核心半导体器件&#xff0c;BMS电池管理芯片在电动化时代的需求持续旺盛&#xff0c;并迎来了快速迭代的时期。 为满足电动自行车、AGV等市场对BMS电池管理芯片的需求&#xff0c;世强先进&#xff08;深圳&#xff09;科技股份有限公司&#xff08;下称“世强先进”…

记阿里云mysql丢表丢数据的实践记录

第一时间挂工单&#xff0c;联系工程师指引&#xff0c;现在回过来想&#xff0c;第一时间要确认发生时间。 1.通过性能视图&#xff08;马后炮的总结&#xff0c;实际凭记忆恢复了三四次才找到数据&#xff09; 2.先恢复数据 通过Navicat工具&#xff0c;结构同步&#xff0…

动态绑定样式,uniapp,用三元运算动态绑定多个class类样式,动态绑定的样式可以和原始样式共存

介绍 | uni-app官网 vue、uniapp中动态添加绑定style、class 9种方法实现_vue style动态绑定-CSDN博客 uniapp使用三元运算符动态绑定元素的style样式_uniapp style动态绑定-CSDN博客 对象写法,可以写多个class类 class类的名字&#xff1a;判断条件&#xff0c;最后结果只有…

元宵佳节到,互动礼品,该怎么邮寄最便宜呢?

家人们&#xff0c;一年一度的元宵佳节就要到了&#xff0c;大家吃汤圆了没&#xff0c;朋友之间是不是可以相互寄送点礼物啊&#xff0c;但是该怎么邮寄呢&#xff1f;用什么方式寄快递最便宜呢&#xff1f;客官别着急&#xff0c;听我慢慢说给你听。 首先&#xff0c;先说说各…

NPS配置内网穿透-Windows,PVE

Windows和PVE的区别就是下载客户端的时候一个选windows-amd64(64位的电脑)另一个选 linux-amd64(64位电脑),386对应的是32位的电脑. Releases ehang-io/nps (github.com) PVE的安装参考的是以下视频安装.利用PVE虚拟机&#xff0c;来打造属于自己的All In One系统吧&#xf…

谷歌掀桌子!开源Gemma:可商用,性能超过Llama 2!

2月22日&#xff0c;谷歌在官网宣布&#xff0c;开源大语言模型Gemma。 Gemma与谷歌最新发布的Gemini 使用了同一架构&#xff0c;有20亿、70亿两种参数&#xff0c;每种参数都有预训练和指令调优两个版本。 根据谷歌公布的测试显示&#xff0c;在MMLU、BBH、GSM8K等主流测试…

大型语言模型的语义搜索(一):关键词搜索

关键词搜索(Keyword Search)是文本搜索种一种常用的技术&#xff0c;很多知名的应用app比如Spotify、YouTube 或 Google map等都会使用关键词搜索的算法来实现用户的搜索任务&#xff0c;关键词搜索是构建搜索系统最常用的方法&#xff0c;最常用的搜索算法是Okapi BM25&#x…