❀工信工实验参考——《VHDL实验2——数码管及分频器》
一般来说,我贴上来的代码都是能直接跑的,如果不行可以邮箱交流1902946954@qq.com
仅供参考,微机的老师讲的很好,所以请还是要先自己完成咯。
免责声明,本人菜只因一只,内容仅供参考,错了不负责哈
该实验和报告部分参考了ZhouzhouFighting的报告(链接华南理工大学VHDL实验数码管与分频器_vhdl数码管扫描频率-讲义代码类资源-CSDN下载),但是因为我们EDA实验室换成了正点原子新起点V2开发板,因此在数码管输出和前面的输入等部分做了一定的修改与调整。
实验二 数据管及分频器
地 点: |
31 楼 |
312房; |
实验台号: |
|
实验日期与时间: |
评 分: |
|||
预习检查纪录: |
批改教师: |
报告内容:
一,实验要求:
(1)利用硬件描述语言设计分频器模块和七段显示码模块;
(2)学习数码管驱动芯片74HC595的时序,请同学根据时序写出VHDL代码;
(3)设计数据产生模块,每秒输出数字加1;
- 设计顶层文件,驱动数码管模块,使(3)产生数据显示在数码管上。
二、实验内容:
预期顶层逻辑图
(因为更换了开发板,因此最后输出应该改为输出seg_duan 和seg_wei)
三、实验设计原理
本次实验一共分为三个模块,分别为divider,data_gen, seg。Divider负责把开版本的时钟频率变为我们计时需要用的1HZ频率;data_gen负责计数;seg负责与数码管显示连接的接口,输出位码与段码。
接下来一一分析实现的逻辑与代码:
- 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。当复位信号为低电平时,设计的模块中的输出和计时信号全部复位。设置复位信号是为了异步复位,达到重新计数的目的。
- 实例化
将上述代码设为顶层实体,并且create symbol files for current file来创立元件,在新建的bpf文件中可直接使用。下图为三个实例化元件:
图1 分频器
图2 计数器data_gen
图3 seg数码管接口模块
并且最后按照对应线路将其连接完整,如图4所示:
图4 完整接线图
- 烧录至开发板
我们将bpf文件设为顶层文件并且编译,编译成功后,按照图5分配引脚后再次编译,并将文件烧录至正点原子新起点V2开发板。
图5 实验2 引脚分配图(这个老师会给的)
四、实验结果和分析
图6 计数初始化
图7 计数实物图
由图6我们可以看到按下reset键数码管开始从0计时,由图7可以看到数码管能够正常计数,残留未能完全消影但是不影响使用。
❀工信工实验参考——《VHDL实验2——数码管及分频器》相关推荐
- ❀工信工实验参考——《VHDL实验4—— 多功能秒表》
一般来说,我贴上来的代码都是能直接跑的,如果不行可以邮箱交流1902946954@qq.com 仅供参考,微机的老师讲的很好,所以请还是要先自己完成咯. 免责声明,本人菜只因一只,内容仅供参考,错了不 ...
- ❀工信工实验参考——《模电课设人体感应LED灯》
仅供参考,模电实验老师人很好,所以请还是要先自己完成咯. 免责声明,本人菜只因一只,内容仅供参考,错了不负责哈 这份报告中有相当多的口水话,请自动跳过.元件参数推导很多是倒推的dddd,但参数设置应该 ...
- ❀工信工实验参考——《大物7.7光栅常量及光波波长的测定》
大物实验个人做的比较随便,仅供参考 免责声明,本人菜只因一只,内容仅供参考,错了不负责哈 一二三节都是无情的抄书机器参考不大,如果觉得自己数据做的有问题想参考对照的请直接跳到第四部分.
- ❀工信工实验参考——《大物10.4迈克尔逊的干涉仪》
大物实验个人做的比较随便,仅供参考 免责声明,本人菜只因一只,内容仅供参考,错了不负责哈 一二三节都是无情的抄书机器参考不大,如果觉得自己数据做的有问题想参考对照的请直接跳到第四部分.
- ❀工信工实验参考——《大物5.8A声波反射衍射干涉》
大物实验个人做的比较随便,仅供参考 免责声明,本人菜只因一只,内容仅供参考,错了不负责哈 一二三节都是无情的抄书机器参考不大,如果觉得自己数据做的有问题想参考对照的请直接跳到第四部分.
- 查找雇员表中姓王的员工JAVA_SQLSERVER2008实用教程实验参考答案(实验4)
实验4 数据库的查询和视图 一.SELECT语句的基本使用 1. 查询Employees表中所有数据 2. 查询Employees表中指定字段数据 3. 查询Employees表中的部门号和性别,要求 ...
- 广工信工无人机课程设计一
文章目录 任务一:使用STM32F401CCU6实现LED闪烁 1.必备软硬件 2.软件部分 任务二:串口打印hello 任务三:实现NRF24L01的通信 任务一:使用STM32F401CCU6实现 ...
- c语言上机实验第五章答案,安徽大学C语言上机实验参考答案
安徽大学C语言上机实验参考答案 C语言实验参考答案 实验一 5.输入并运行自已编写的程序(教材第一章P14 三编程题). 实验二 1.编写一个程序,从键盘接收3个实数(分别为10.0.20.0.5.0 ...
- 【备份】信工apache中有关http.conf的虚拟目录相关配置参考
参考信工服务器的 在http.conf文件的后面设置是这样(#为注释) #打开虚拟端口 NameVirtualHost *:80 #设置虚拟端口80的目录 #ServerName 是访问的域名或IP ...
最新文章
- 工作流编程循序渐进(9:使用本地服务在宿主和工作流之间通信)
- 清华构建新一代数据集NICO,定义图像分类新标准
- 在嵌入式学习过程中,很多人都有这样的困惑!——为什么要学习嵌入式技术?...
- Python接口测试之requests
- chrome友好显示json字符串
- boost::geometry::topological_dimension用法的测试程序
- platform驱动开发套路、DM9000的一些分析
- 阿里影业宣布新战略:“新基础设施”赋能电影产业
- 突发!百度张亚勤退休
- 动态规划(四)--最长公共子序列
- 大数据应用存在哪些安全隐患
- [原]用好注册表,加固系统和发现病毒
- 关于c++初始化原理与性能的讨论
- javascript常用编辑器推荐
- c语言写木马程序,用c语言写的木马(详细)
- 百度未授权使用地图API,可能是因为您提供的密钥不是有效的百度LBS开放平台密钥.
- 拓嘉启远:拼多多购物运输中的商品能拒收吗
- 近地天体撞击地球原理的设想
- redis之数据倾斜如何处理
- Apache Zeppelin安装及介绍
热门文章
- 00023.11 TCP协议编程:群聊(TCP通信原理,多线程、线程阻塞)
- PKCS12 not found 的一种解决方案
- 求一个矩形的质心c语言,c – 从.stl(立体光刻)文件计算质心的方法?
- C/C++通过WMI和系统API函数获取获取系统硬件(cpu,内存,显卡,网卡)配置信息
- 1981年的五块钱相当于现在多少钱的购买力?
- 2021-09-14 uboot移植开发
- css符集图标显示不出来,CSS3 icon font完全指南(CSS3 font 会取代icon图标)
- matlab中rastrigin图形绘制,matlab函数function
- Vim 常用操作、查找和替换
- unity微信小游戏开发【含源码】