一般来说,我贴上来的代码都是能直接跑的,如果不行可以邮箱交流1902946954@qq.com

仅供参考,微机的老师讲的很好,所以请还是要先自己完成咯。
免责声明,本人菜只因一只,内容仅供参考,错了不负责哈

该实验和报告部分参考了ZhouzhouFighting的报告(链接华南理工大学VHDL实验数码管与分频器_vhdl数码管扫描频率-讲义代码类资源-CSDN下载),但是因为我们EDA实验室换成了正点原子新起点V2开发板,因此在数码管输出和前面的输入等部分做了一定的修改与调整。

实验二  数据管及分频器

地          点:

31    楼

312房;

实验台号:

实验日期与时间:

评    分:

预习检查纪录:

批改教师:

报告内容:

一,实验要求:

(1)利用硬件描述语言设计分频器模块和七段显示码模块;

(2)学习数码管驱动芯片74HC595的时序,请同学根据时序写出VHDL代码;

(3)设计数据产生模块,每秒输出数字加1;

  1. 设计顶层文件,驱动数码管模块,使(3)产生数据显示在数码管上。

二、实验内容:

预期顶层逻辑图

(因为更换了开发板,因此最后输出应该改为输出seg_duan 和seg_wei)

三、实验设计原理

本次实验一共分为三个模块,分别为divider,data_gen, seg。Divider负责把开版本的时钟频率变为我们计时需要用的1HZ频率;data_gen负责计数;seg负责与数码管显示连接的接口,输出位码与段码。

接下来一一分析实现的逻辑与代码:

  1. Divider模块
Library IEEE;
Use IEEE.std_logic_1164.ALL;
ENTITY class2_driver IS
PORT(clk,rst:IN std_logic;q:OUT std_logic);
END ENTITY;
ARCHITECTURE behav of class2_driver IS
SIGNAL time:integer :=1;
BEGIN
PROCESS(clk,rst)
BEGIN
IF rst='0' THEN time<=1;
ELSIF rising_edge(clk) THENtime<=time+1;
IF time=50000000 THEN
q<='1';
time<=1;
ELSE q<='0';
END IF;
END IF;
END PROCESS;
END behav;

开发板的时钟频率为50MHZ,查阅文献可知,人眼能够分辨的最高频率为24HZ。开发板的时钟频率远远超出人眼分辨范围,因此需要对时钟信号进行分频处理,以便后续计时模块产生的输出到数码管上可被人眼分辨。题目要求分频器模块时钟周期为1HZ,在代码实体中设置一个范围为1-50M的信号count,当count≥25M时分频器输出为‘1’,反之输出为’0’,当count=50M时,count=1。以此编程得到的输出时钟信号频率为1HZ,每1s产生一个上升沿。

2.data_gen模块

Library IEEE;
Use IEEE.std_logic_1164.ALL;
use ieee.std_logic_signed.all;
ENTITY class2_counter IS
PORT(rst,en,clk,clk_1HZ: IN std_logic;data:OUT std_logic_vector(15 DOWNTO 0)
);
END entity;
ARCHITECTURE behav of class2_counter IS
SIGNAL temp:std_logic_vector(15 DOWNTO 0):=(others=>'0');
SIGNAL TEST:std_logic:='0';
BEGIN
PROCESS(clk,rst)
BEGIN
IF en='0' THEN TEST<='1';END IF;
IF TEST='0' THEN temp<=(others=>'0');
elsif rst='0' THEN  TEST<='0';temp<=(others=>'0');
ELSIF rising_edge(clk) THEN
IF clk_1HZ='1' THEN temp<=(temp+1);
END IF;
END IF;
data<=temp;
END PROCESS;
END behav;

题目要求数据产生模块,每秒输出数字加1,且数码管可显示16进制数,故data-gen模块的输出为一个16位二进制信号。该模块以divider模块输出的1HZ信号为时钟,模块内部有一信号q,当时钟上升沿到来时q=q+1。当q为’FFFF’时,q复位。最后将q值赋给data_gen模块的输出data。

3.seg模块(这是老师提供的verilog写的,我改的VHDL找不到了,凑合凑合吧能用)

module Verilog1(clk,rst_n,idis_data,seg_duan,seg_wei);input clk;
input rst_n;
input [15:0] idis_data ;output     reg[7:0] seg_duan;
output  reg[5:0] seg_wei;parameter  SEG_NUM0    = 8'hc0,SEG_NUM1  = 8'hf9,SEG_NUM2  = 8'ha4,SEG_NUM3  = 8'hb0,SEG_NUM4  = 8'h99,SEG_NUM5  = 8'h92,SEG_NUM6  = 8'h82,SEG_NUM7  = 8'hF8,SEG_NUM8  = 8'h80,SEG_NUM9  = 8'h90,SEG_NUMA  = 8'h88,SEG_NUMB  = 8'h83,SEG_NUMC  = 8'hc6,SEG_NUMD  = 8'ha1,SEG_NUME  = 8'h86,SEG_NUMF  = 8'h8e;parameter SEG_WE0     = 6'b11_1110,SEG_WE1      = 6'b11_1101,SEG_WE2      = 6'b11_1011,SEG_WE3      = 6'b11_0111,
SEG_WE4     = 6'b10_1111,SEG_WE5      = 6'b01_1111;reg[3:0] seg_num;
reg[7:0] cnt_4;
always @(posedge clk or negedge rst_n)if(!rst_n) cnt_4 <= 8'd0;else cnt_4 <= cnt_4+1'b1;
always @(posedge clk or negedge rst_n)if(!rst_n) seg_num <= 8'h00;else case(cnt_4[7:6])2'b00: seg_num <= idis_data[3:0];2'b01: seg_num <= idis_data[7:4];2'b10: seg_num <= idis_data[11:8];2'b11: seg_num <= idis_data[15:12];default:  ;endcasealways @(posedge clk or negedge rst_n)if(!rst_n)seg_duan <= 8'hff;elsecase(seg_num) 4'h0: seg_duan <= SEG_NUM0;4'h1: seg_duan <= SEG_NUM1;4'h2: seg_duan <= SEG_NUM2;4'h3: seg_duan <= SEG_NUM3;4'h4: seg_duan <= SEG_NUM4;4'h5: seg_duan <= SEG_NUM5;4'h6: seg_duan <= SEG_NUM6;4'h7: seg_duan <= SEG_NUM7;4'h8: seg_duan <= SEG_NUM8;4'h9: seg_duan <= SEG_NUM9;4'ha: seg_duan <= SEG_NUMA;4'hb: seg_duan <= SEG_NUMB;4'hc: seg_duan <= SEG_NUMC;4'hd: seg_duan <= SEG_NUMD;4'he: seg_duan <= SEG_NUME;4'hf: seg_duan <= SEG_NUMF;default:     ;endcasealways @(cnt_4[7:6])case(cnt_4[7:6])2'b00: seg_wei <= SEG_WE0;2'b01: seg_wei <= SEG_WE1;2'b10: seg_wei <= SEG_WE2;2'b11: seg_wei <= SEG_WE3;default:  seg_wei <= 6'b0000_00;endcase
endmodule

首先对于数码管显示,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的。

因此我们应该用不断扫描的方法来点亮数码管。

输出的段码和位码分别控制数码管在第几位显示和显示什么数字。在每次时钟上升沿时会重新读入扫描来重新显示。具体实现方法为:

Data_gen会将数字的二进制传入seg,seg会将其按每四位拆分开,将最低4位的位码设为0,即在最低位的数码管显示,具体显示的数字遍历七段码列表匹配后,按七段码输出段码。其他位以此类推。

此外,设置复位信号rst_n。当复位信号为低电平时,设计的模块中的输出和计时信号全部复位。设置复位信号是为了异步复位,达到重新计数的目的。

  1. 实例化

将上述代码设为顶层实体,并且create symbol files for current file来创立元件,在新建的bpf文件中可直接使用。下图为三个实例化元件:

图1 分频器

图2 计数器data_gen

图3 seg数码管接口模块

并且最后按照对应线路将其连接完整,如图4所示:

图4 完整接线图

  1. 烧录至开发板

我们将bpf文件设为顶层文件并且编译,编译成功后,按照图5分配引脚后再次编译,并将文件烧录至正点原子新起点V2开发板。

图5 实验2 引脚分配图(这个老师会给的)

四、实验结果和分析

图6 计数初始化

图7 计数实物图

由图6我们可以看到按下reset键数码管开始从0计时,由图7可以看到数码管能够正常计数,残留未能完全消影但是不影响使用。

❀工信工实验参考——《VHDL实验2——数码管及分频器》相关推荐

  1. ❀工信工实验参考——《VHDL实验4—— 多功能秒表》

    一般来说,我贴上来的代码都是能直接跑的,如果不行可以邮箱交流1902946954@qq.com 仅供参考,微机的老师讲的很好,所以请还是要先自己完成咯. 免责声明,本人菜只因一只,内容仅供参考,错了不 ...

  2. ❀工信工实验参考——《模电课设人体感应LED灯》

    仅供参考,模电实验老师人很好,所以请还是要先自己完成咯. 免责声明,本人菜只因一只,内容仅供参考,错了不负责哈 这份报告中有相当多的口水话,请自动跳过.元件参数推导很多是倒推的dddd,但参数设置应该 ...

  3. ❀工信工实验参考——《大物7.7光栅常量及光波波长的测定》

    大物实验个人做的比较随便,仅供参考 免责声明,本人菜只因一只,内容仅供参考,错了不负责哈 一二三节都是无情的抄书机器参考不大,如果觉得自己数据做的有问题想参考对照的请直接跳到第四部分.

  4. ❀工信工实验参考——《大物10.4迈克尔逊的干涉仪》

    大物实验个人做的比较随便,仅供参考 免责声明,本人菜只因一只,内容仅供参考,错了不负责哈 一二三节都是无情的抄书机器参考不大,如果觉得自己数据做的有问题想参考对照的请直接跳到第四部分.

  5. ❀工信工实验参考——《大物5.8A声波反射衍射干涉》

    大物实验个人做的比较随便,仅供参考 免责声明,本人菜只因一只,内容仅供参考,错了不负责哈 一二三节都是无情的抄书机器参考不大,如果觉得自己数据做的有问题想参考对照的请直接跳到第四部分.

  6. 查找雇员表中姓王的员工JAVA_SQLSERVER2008实用教程实验参考答案(实验4)

    实验4 数据库的查询和视图 一.SELECT语句的基本使用 1. 查询Employees表中所有数据 2. 查询Employees表中指定字段数据 3. 查询Employees表中的部门号和性别,要求 ...

  7. 广工信工无人机课程设计一

    文章目录 任务一:使用STM32F401CCU6实现LED闪烁 1.必备软硬件 2.软件部分 任务二:串口打印hello 任务三:实现NRF24L01的通信 任务一:使用STM32F401CCU6实现 ...

  8. c语言上机实验第五章答案,安徽大学C语言上机实验参考答案

    安徽大学C语言上机实验参考答案 C语言实验参考答案 实验一 5.输入并运行自已编写的程序(教材第一章P14 三编程题). 实验二 1.编写一个程序,从键盘接收3个实数(分别为10.0.20.0.5.0 ...

  9. 【备份】信工apache中有关http.conf的虚拟目录相关配置参考

    参考信工服务器的 在http.conf文件的后面设置是这样(#为注释) #打开虚拟端口 NameVirtualHost *:80 #设置虚拟端口80的目录 #ServerName 是访问的域名或IP ...

最新文章

  1. 工作流编程循序渐进(9:使用本地服务在宿主和工作流之间通信)
  2. 清华构建新一代数据集NICO,定义图像分类新标准
  3. 在嵌入式学习过程中,很多人都有这样的困惑!——为什么要学习嵌入式技术?...
  4. Python接口测试之requests
  5. chrome友好显示json字符串
  6. boost::geometry::topological_dimension用法的测试程序
  7. platform驱动开发套路、DM9000的一些分析
  8. 阿里影业宣布新战略:“新基础设施”赋能电影产业
  9. 突发!百度张亚勤退休
  10. 动态规划(四)--最长公共子序列
  11. 大数据应用存在哪些安全隐患
  12. [原]用好注册表,加固系统和发现病毒
  13. 关于c++初始化原理与性能的讨论
  14. javascript常用编辑器推荐
  15. c语言写木马程序,用c语言写的木马(详细)
  16. 百度未授权使用地图API,可能是因为您提供的密钥不是有效的百度LBS开放平台密钥.
  17. 拓嘉启远:拼多多购物运输中的商品能拒收吗
  18. 近地天体撞击地球原理的设想
  19. redis之数据倾斜如何处理
  20. Apache Zeppelin安装及介绍

热门文章

  1. 00023.11 TCP协议编程:群聊(TCP通信原理,多线程、线程阻塞)
  2. PKCS12 not found 的一种解决方案
  3. 求一个矩形的质心c语言,c – 从.stl(立体光刻)文件计算质心的方法?
  4. C/C++通过WMI和系统API函数获取获取系统硬件(cpu,内存,显卡,网卡)配置信息
  5. 1981年的五块钱相当于现在多少钱的购买力?
  6. 2021-09-14 uboot移植开发
  7. css符集图标显示不出来,CSS3 icon font完全指南(CSS3 font 会取代icon图标)
  8. matlab中rastrigin图形绘制,matlab函数function
  9. Vim 常用操作、查找和替换
  10. unity微信小游戏开发【含源码】