verilog 10位学号滚动显示 5按键 按键消抖 ego1

verilog 学号输入并滚动显示 verilog学号输入并滚动显示 阅读详情

介绍

  1. 通过按键输入学号,并滚动显示:

电路功能描述:通过Ego1上的按键输入自己的学号(10位11进制数,包括U),并存储在32位的寄存器中;10位10进制数输入完成后,实现类似实验3.1中的滚动显示效果。

除了要求实现上述功能外,还包括如下具体实现上的要求:

  1. 整个电路具有复位功能;
  2. 8个数码管中,4个数码管用于输入数据后的循环显示,另外4个用于显示当前正在输入的数据。
  3. 输入过程可控、实时可视:
    1. 用按键或者开关控制输入开始和结束,输入开始后用于循环显示的4个数码管停止循环显示,用于显示输入数据的4个数码管开始显示输入数据;输入结束后用于循环显示的4个数码管开始循环显示输入的学号,用于显示输入数据的4个数码管停止显示输入数据。
    2. 用按键切换当前要输入的数据位,切换结果通过用于显示输入数据的4个数码管展示出来,即用户能够通过显示输入数据的4个数码管看出来当前正在输入的是哪一位10进制数。
  4. 输入数字的时候进行按键消抖(关于按键防抖的原理,请参考本实验手册的“5.1 实验3.2 相关说明”部分);
  5. 设计具有开放性,下图仅仅为参考的一种实现效果,不作强求实现一样的效果。

4、实验系统设计

(1)系统输入输出信号定义

module top(
    input clk100mhz,//系统时钟
    input clr,//清零
    input right,//右键
    input left,//左键
    input up,//上键
    input down,//下键
    input enter,//确认键
    output [3:0] pos1,//输入数码管选择
    output [3:0] pos2,//输出数码管选择
    output [7:0] seg1,//输入数码管显示
    output [7:0] seg2//输出数码管显示
    );

(2)系统行为描述

//共有4个模块,对应4个文件:
// clkDiv.v
// GPU.v
// segMsg.v
// top.v
// GPU通过dataBus1和dataBus2与segMsg1和segMsg2连接,用于传输显示的数据
// 传输速度为6hz,而数码管显示的速度为190hz,所以需要一个分频模块
// segMsg1和segMsg2通过pos1和pos2与top连接,用于选择数码管并显示
// top通过clk100mhz与clkDiv连接,用于提供系统时钟,转换为190hz和6hz的时钟
// top通过clr与GPU和segMsg1连接,用于清零
// top通过right、left、up、down、enter与Pushin连接,按键消抖
// 并排除多个按键一起按的情况
// 再将数据right、left、up、down、enter传给GPU

(3)系统级电路结构设计图

10372380a34a4ca5b0e39a89b13eddbc.png

5、实现

(1)顶层模块RTL电路结构图及说明

c86353ab6f924f0d8eafd0871ac28503.png

(2)clkDiv RTL电路

3fa2277582eb443e8d96692c5eb18a9a.png

(3)Pushin RTL电路结构

3ad0d1ed88a74deaa98590d152cafe5d.png

(4)segMsg RTL电路结构

050e24962ceb4900888c62801dc0cd03.png

(5)GPU RTL电路结构

ca7112ba5a29433093ee9bea0bef22be.png6、仿真验证

(1)顶层模块测试方案设计说明

//由于直接模拟的话,时间太长,所以将时间缩短
//具体可以看clkDiv.v中的注释
//模拟了多个按键的情况
//模拟了按键消抖

顶层模块仿真结果及说明

231d0c6a1f4946ac87898dbe30685306.png

模拟了众多情况,包括按键防抖,边界情况,保证了模块的正常使用,具体可以看top_tb.vcd文件

代码

top模块:top.v

// 这是顶层模块

//共有4个模块,对应4个文件:
// clkDiv.v
// GPU.v
// segMsg.v
// top.v
// GPU通过dataBus1和dataBus2与segMsg1和segMsg2连接,用于传输显示的数据
// 传输速度为6hz,而数码管显示的速度为190hz,所以需要一个分频模块
// segMsg1和segMsg2通过pos1和po
数码管--实现学号移位动态显示 八段数码管实现十位学号的移位显示,涉及到GPIO端口的控制,延时闪烁消除以及动态循环移位的的问题 立即下载

相关推荐

verilogHDL 八位数码管10hz频率显示学号代码

verilogHDL 八位数码管10hz频率显示学号代码,顶层也是代码写的

verilog 编写数码管循环显示器

采用DE2核心FPGA 开发板,设计一个数码管循环显示程序。通过编程在数码管上显示八位英文字符和数字

VerilogHDL哈工大数电大作业(血型匹配-学号显示-学号计数-状态转换四合一程序)

目录 1 数字电路技术——HDL设计 3 概述 3 作业要求 3 第一题 3 第二题 4 第三题 4 第四题 4 准备工作——部分模块的驱动设计 4 引脚约束文件 4 时钟切换模块的设计 5 四位七段数码管驱动模块 7 输出引脚控制切换模块 10 任务一 —— 血型匹配 13 分析任务 13 编写任务一子模块程序 14 程序解读 16 编写顶层模块程序 17 RTL原理图检查 19 效果检查 19 任务二 —— 显示译码电路 20 分析任务 20 编写任务二子模块程序 20 编写顶层模块程序 21 RTL原理图检查 22 效果检查 22 任务三 —— 计数器 23 分析任务 23 编写任务三子模块程序 23 编写顶层模块程序 24 RTL原理图检查 25 效果检查 26 任务四 —— 状态转换 26 分析任务 26 编写任务四子模块程序 27 编写顶层模块程序 28 RTL原理图检查 29 效果检查 29 附录一 RTL原理图综合版 30 附录二 源程序 31 顶层模块 31 任务一子模块 33 任务二子模块 34 任务三子模块 34 任务四子模块 35 数码管驱动子模块 35 拨码开关暂存子模块 36 输出引脚控制切换子模块 37 时钟切换子模块 37

数码管动态显示(显示学号后四位)方案2

数码管动态显示(显示学号后四位)方案2 动态显示学号后四位 通过拨码开关可以调节学号数字大小

基于知识图谱的旅游推荐系统

这一系统整合了当今先进的数据技术:采集携程等大型平台的景点数据,通过爬虫技术源源不断地获取最新的旅游信息。此外,我们采用Neo4j图数据库来存储和处理这些数据,结合自然语言处理技术,为你提供精准的旅游建议。:通过直观的知识图谱展示,了解各个景点之间微妙的联系,无论是文化背景还是地理方位,你都能从中发现新的旅行灵感。准备毕业设计的同学,关注我们,这是一个集成了多种前沿技术的项目,为你的学术成果锦上添花。:不再浪费时间,系统根据你的偏好和历史评分,利用协同过滤技术推荐适合的旅游目的地。

qalangtao的博客-qalangtao.com 774

STM32—时钟树(结合系统时钟函数理解)

时钟树的概念: 我们可以把MCU的运行比作人体的运行一样,人最重要的是什么?是心跳! 心脏的周期性收缩将血液泵向身体各处。心脏对于人体好比时钟对于MCU,微控制器(MCU)的运行要靠周期性的时钟脉冲来驱动,而这个脉冲的始源往往是由外部晶体振荡器提供时钟输入,最终转换为多个外部设备的周期性运作。这种时钟“能量”的传递路径犹如大树的养分由主干流向个分支,因此称为时钟树。 STM32时钟: 在STM32...

肥宅快乐博客 1万+

SDRAM控制器——添加读写FIFO

用FIFO实现数据缓存

H19981118的博客 2627

c语言:读取文件中的指定内容

项目中要求从wifi的状态文件中提取出rssi字段的值,还有一个前提条件:必须与hwaddr(手机的MAC地址)一一对应。 wifi状态文件sta_info如下: # cat /proc/wlan0-vap0/sta_info -- STA info table -- (active: 1) 1: stat_info... state: 405 AuthAlgrthm: 0

u013485792的专栏 1万+

Realsense D435i运行ORB-SLAM3

【代码】Realsense D435i运行ORB-SLAM3。

MAX_Hope的博客 2563

【网络原理】HTTP 请求 (Request)详解

【网络原理】HTTP 请求 (Request)详解,认识URLquery string关于 URL encode, GET方法,POST 方法,GET 和 POST 的区别,User-Agent (简称 UA),Referer,Cookie

ZXT的博客 1万+

运放+三极管构建LED恒流驱动电路:原理、设计与调试全解析

在电子工程领域,恒流源是一种能够提供稳定输出电流的电路,其核心原理基于负反馈控制机制。通过将输出电流采样转化为电压信号,并与一个稳定的参考电压进行比较,系统自动调节功率器件的导通状态,从而抵消输入电压波动或负载变化带来的影响,实现电流恒定。这种技术对于驱动LED、激光二极管等电流敏感型器件具有重要价值,能确保亮度、色温的一致性,并延长器件寿命。本文以经典的运放结合三极管方案为例,深入剖析其如何实现精准的电流“钳位”。该方案利用通用运算放大器作为比较器,配合三极管构成调整管,通过采样电阻实时监测电流,形成了一

weixin_42525800的博客 496

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: Ventoy多系统盘日常使用,快速挂载任意VHD文件到主系统
下一篇: yowasp-yosys调用报错WasmtimeError: 系统找不到指定的路径
SGL23187
博客等级 码龄8年 36粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值