# 借助 Vivado 和 Ego1 实验平台设计的密码锁
## 一.引言
移动通信网络实验课程以软硬件结合的方式进行实践教学。完成 FPGA 基础实验后并要求自主设计一个完整的程序,并在硬件平台上实现逻辑功能。本次课程报告的设计以“密码锁”展开,在 Ego1 硬件平台上实现可操作的逻辑。具体将包括到基本的时钟及复位按钮,调节按钮及相应的 LED 灯来改变当前模式,一组 LED 流水灯倒计时设计,七段数码管分段显示及实时修改数字密码并显示当前锁的状态等。
实验需要预先学习的知识包括 VerilogHD 语法学习,Vivado 软件使用学习,Ego1 板卡相关端口学习。
通过本次课程的学习,下面将对“密码锁”逻辑程序的具体设计流程展开说明。具体包括实验环境,设计原理,设计方案,实验测试与结果分析,设计总结几个部分。
## 二.实验环境
操作系统:Window10;设计软件:Vivado2017.4;硬件平台:Ego1;
## 三.设计原理
### 1.Verilog 基础
硬件描述语言(HDL)是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言。它可以使数字逻辑电路设计者利用这种语言来描述自己的设计思想,然后利用电子设计自动化(EDA)工具进行仿真,再自动综合到门级电路,再用 ASIC 或 FPGA 实现其功能。
HD 设计流程:如图 1 所示
![](https://www.writebug.com/myres/static/uploads/2021/12/4/b4ab52bdb384ca33da227274759b0d8c.writebug)
图 1HD 设计流程图
Verilog 基本语法:一个复杂电路系统的完整 VerilogHD 模型是由若干个 VerilogHD 模块构成的,每一个模块又可以由若干个子模块构成。其中有些模块需要综合成具体电路,而有些模块只是与用户所设计的模块交互的现存电路或激励信号源。利用 VerilogHD 语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计,并对所作设计的逻辑电路进行严格的验证。VerilogHD 行为描述语言作为一种结构化和过程性的语言,其语法结构非常适合于算法级和 RT 级的模型设计。这种行为描述语言具有以下功能:
可描述顺序执行或并行执行的程序结构。
用延迟表达式或事件表达式来明确地控制过程的启动时间。
通过命名的事件来触发其它过程里的激活行为或停止行为。
提供了条件、if-else、case、循环程序结构。
提供了可带参数且非零延续时间的任务(task)程序结构。
提供了可定义新的操作符的函数结构(function)。
提供了用于建立表达式的算术运算符、逻辑运算符、位运算符。
VerilogHD 语言作为一种结构化的语言也非常适合于门级和开关级的模型设计。
### 2.Vivado 软件设计平台
概述:Vivado 设计分为 ProjectMode 和 Non-projectMode 两种模式,一般简单设计中,我们常用的是 ProjectMode。
使用 Vivado 设计的基本流程:如图 2 所示
![](https://www.writebug.com/myres/static/uploads/2021/12/4/54bec8f21edcd29dea77f65368fd7f87.writebug)
图 2Vivado 设计流程
### 3.Ego1 硬件实验平台
EGO1 是依元素科技基于 XilinxArtix-7FPGA 研发的便携式数模混合基础教学平台。EGO1 配备的 FPGA(XC7A35T-1CSG324C)具有大容量高性能等特点,能实现较复杂的数字逻辑设计;在 FPGA 内可以构建 MicroBlaze 处理器系统,可进行 SoC 设计。该平台拥有丰富的外设,以及灵活的通用扩展接口。
系统时钟:EGO1 搭载一个 100MHz 的时钟芯片,输出的时钟信号直接与 FPGA 全局时钟输入引脚(P17)相连。若设计中还需要其他频率的时钟,可以采用 FPGA 内部的 MMCM 生成。
按键:两个专用按键分别用于逻辑复位 RST(S6)和擦除 FPGA 配置 PROG(S5),当设计中不需要外部触发复位时,RST 按键可以用作其他逻辑触发功能。开关:开关包括 8 个拨码开关和一个 8 位 DIP 开关,管脚约束如图 3 所示
![](https://www.writebug.com/myres/static/uploads/2021/12/4/8db821aa459cea425ed334a07a009fa6.writebug)
图 3 开关管脚约束
LED 灯:LED 在 FPGA 输出高电平时被点亮。管脚约束如图 4 所示
![](https://www.writebug.com/myres/static/uploads/2021/12/4/112ae6dcfb95e73cfe02bf4ef554d73f.writebug)
图 4LED 管脚约束
七段数码管:数码管为共阴极数码管,即公共极输入低电平。共阴极由三极管驱动,FPGA 需要提供正向信号。同时段选端连接高电平,数码管上的对应位置才可以被点亮。因此,FPGA 输出有效的片选信号和段选信号都应该是高电平。管脚约束如图 5 所示
![](https://www.writebug.com/myres/static/uploads/2021/12/4/48f983bd95aa4fdedc608d458a1f641a.writebug)
图 5 七段数码管管脚约束
## 四.设计方案
### 1.密码锁端口预设
对模块管脚定义与预设:
| 管脚 | 类型 | 位宽 | 功能 |
| ------------- | ------ | ---- | ---------------------- |
| number1[3:0] | input | 4 | 前四位数码管数字信息 |
| number2[3:0] | input | 4 | 后四位数码管数字信息 |
| numbit[7:0] | input | 8 | 数字显示位信息 |
| ledbit[7:0] | output | 8 | 数码管显示位信息 |
| ledshow[6:0] | output | 7 | 前四位数码管每段信息 |
| ledshow2[6:0] | output | 7 | 后四位数码管每段信息 |
| sys_clk | input | 1 | 总时钟 |
| rst_n | input | 1 | 重置清零信号 |
| left_button | input | 1 | 左键选中情况 |
| right_button | input | 1 | 右键选中情况 |
| up_button | input | 1 | 上键选中情况 |
| down_button | input | 1 | 下键选中情况 |
| middle_button | input | 1 | 中键选中情况 |
| lock_status | input | 1 | 是否为锁住状态 |
| read_status | input | 1 | 是否为检验密码状态 |
| load_status | input | 1 | 是否为修改密码状态 |
| is_jmp[7:0] | input | 8 | 当前选中位(实现闪烁) |
创建 lock.v 的 source 文件,创建 lock 模块初始化硬件输入输出需要的端口:
![](https://www.writebug.com/myres/static/uploads/2021/12/4/59ea2b6b5ad2f4932c4281fdf8ecde1d.writebug)
定义状态端口等逻辑端口:
![](https://www.writebug.com/myres/static/uploads/2021/12/4/788dbc94d9e2c414845c577817bdce3f.writebug)
定义密码与显示变量:
![](https://www.writebug.com/myres/static/uploads/2021/12/4/ce597d8d11e7ebdd94fc17279eb5c290.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/12/4/95576880e9d0f3f4e377c5cc04d045ea.writebug)
### 2.密码锁状态分类
建立模式与状态联系:
![](https://www.writebug.com/myres/static/uploads/2021/12/4/5e31f98dbbc50db88a65e74e78594499.writebug)
密码锁状态分为待解锁,解锁超时失败和解锁成功三个状态,分别用字符 CALL,FAI 和-HCC(个人姓名缩写,胡成成)三个字符在数码管上展示。其中字符代号在后面可视化设计中给出。
![](https://www.writebug.com/myres/static/uploads/2021/12/4/f53a0ff968dede0ff28ce0dfdf072306.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/12/4/17551f7cbb2f5050a3979031febfb106.writebug)
### 3.密码锁开锁逻辑
左右选择相应的数码管位置
```
class Person
attr_reader :name, :age
def initialize(name, age)
@name, @age = name, age
end
def <=>(person) # Comparison operator for sorting
@age <=> person.age
end
def to_s
"#@name (#@age)"
end
end
group = [
Person.new("Bob", 33),
Person.new("Chris", 16),
Person.new("Ash", 23)
]
puts group.sort.reverse
```
上下调节数码管对应位置的数字(0~9),�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
移动通信网络实验课程以软硬件结合的方式进行实践教学。完成 FPGA 基础实验后并要求自主设计一个完整的程序,并在硬件平台上实现逻辑功能。本次课程报告的设计以“密码锁”展开,在 Ego1 硬件平台上实现可操作的逻辑。具体将包括到基本的时钟及复位按钮,调节按钮及相应的 LED 灯来改变当前模式,一组 LED 流水灯倒计时设计,七段数码管分段显示及实时修改数字密码并显示当前锁的状态等。 实验需要预先学习的知识包括 VerilogHD 语法学习,Vivado 软件使用学习,Ego1 板卡相关端口学习。 通过本次课程的学习,下面将对“密码锁”逻辑程序的具体设计流程展开说明。具体包括实验环境,设计原理,设计方案,实验测试与结果分析,设计总结几个部分。
资源推荐
资源详情
资源评论
收起资源包目录
基于Vivado+Ego1设计的密码锁(移动通信网络实验)【100012703】 (217个子文件)
__synthesis_is_complete__ 0B
runme.bat 219B
runme.bat 219B
lock.bit 2.09MB
lock_routed.dcp 2.6MB
lock_placed.dcp 2.03MB
clock_make_opt.dcp 1.82MB
lock_opt.dcp 1.05MB
lock.dcp 990KB
.gitattributes 99B
usage_statistics_webtalk.html 30KB
vivado_11748.backup.jou 698B
vivado_15580.backup.jou 698B
vivado_14036.backup.jou 698B
vivado_10380.backup.jou 698B
vivado_15612.backup.jou 698B
vivado.jou 674B
vivado.jou 669B
ISEWrap.js 7KB
ISEWrap.js 7KB
rundef.js 1KB
rundef.js 1KB
LICENSE 1KB
runme.log 32KB
runme.log 29KB
lock.lpr 335B
README.md 14KB
vivado.pb 55KB
place_design.pb 17KB
route_design.pb 14KB
opt_design.pb 11KB
write_bitstream.pb 4KB
init_design.pb 3KB
lock_power_summary_routed.pb 723B
lock_utilization_placed.pb 242B
lock_utilization_synth.pb 242B
vivado.pb 149B
lock_timing_summary_routed.pb 109B
lock_methodology_drc_routed.pb 52B
lock_route_status.pb 44B
clock_make_drc_opted.pb 37B
lock_drc_opted.pb 37B
lock_drc_routed.pb 37B
lock_bus_skew_routed.pb 30B
移动通信网络实验报告.pdf 1.42MB
lock_timing_summary_routed.rpt 168KB
lock_io_placed.rpt 97KB
lock_clock_utilization_routed.rpt 13KB
lock_utilization_placed.rpt 9KB
lock_power_routed.rpt 7KB
lock_methodology_drc_routed.rpt 7KB
lock_utilization_synth.rpt 7KB
clock_make_drc_opted.rpt 6KB
lock_control_sets_placed.rpt 5KB
lock_drc_routed.rpt 2KB
lock_drc_opted.rpt 2KB
lock_bus_skew_routed.rpt 819B
lock_route_status.rpt 588B
lock_power_routed.rpx 1.83MB
lock_timing_summary_routed.rpx 164KB
lock_methodology_drc_routed.rpx 9KB
clock_make_drc_opted.rpx 8KB
lock_drc_routed.rpx 2KB
lock_drc_opted.rpx 2KB
lock_bus_skew_routed.rpx 992B
.route_design.begin.rst 177B
.write_bitstream.begin.rst 177B
.opt_design.begin.rst 177B
.place_design.begin.rst 177B
.init_design.begin.rst 177B
.vivado.begin.rst 175B
.vivado.begin.rst 175B
.init_design.end.rst 0B
.vivado.end.rst 0B
.write_bitstream.end.rst 0B
.Vivado_Implementation.queue.rst 0B
.opt_design.end.rst 0B
.route_design.end.rst 0B
.place_design.end.rst 0B
.vivado.end.rst 0B
.Vivado_Synthesis.queue.rst 0B
ISEWrap.sh 2KB
ISEWrap.sh 2KB
runme.sh 1KB
runme.sh 1KB
clock_make.tcl 6KB
lock.tcl 6KB
lock.tcl 3KB
htr.txt 384B
htr.txt 376B
README.txt 129B
lock.v 13KB
clock_make.v 5KB
digital_put.v 2KB
lock.vdi 29KB
clock_make.vdi 892B
lock.vds 32KB
gui_handlers.wdf 9KB
synthesis.wdf 5KB
project.wdf 4KB
共 217 条
- 1
- 2
- 3
资源评论
- m0_634358802024-01-05资源很不错,内容和描述一致,值得借鉴,赶紧学起来!
- Jin_sT2023-12-30感谢大佬分享的资源给了我灵感,果断支持!感谢分享~
- chunhan022023-12-14资源是宝藏资源,实用也是真的实用,感谢大佬分享~
- 2301_802927422024-12-03感谢大佬,让我及时解决了当下的问题,解燃眉之急,必须支持!
- 2301_768893672024-11-25资源内容详细全面,与描述一致,对我很有用,有一定的使用价值。
神仙别闹
- 粉丝: 4399
- 资源: 7532
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MATLAB仿真bp神经网络预测电力负荷 形式:程序 实现功能:使用前几日负荷数据预测未来负荷数据 使用bp神经网络 得到误差分析图
- MATLAB仿真QPSK调制信号通过AWGN信道的误符号率和误比特率分析 形式:程序 程序实现功能: 仿真正交相移键控QPSK信号调制的基带数字通信系统通过AWGN信道的误符号率(SER)和误比特率(
- VMware-workstation-17.5.2下载
- (2025)高级电工证考试题及答案.doc
- (2025)工会知识竞赛题库(含参考答案.pptx
- (2025)工业机器人考试题库及答案.doc
- (2025)公务员考试必考知识点总结.doc
- (2025)公务员考试常识必考知识点总结.doc
- (2025)公共卫生基本知识考试题库及答案.doc
- (2025)公务员廉政知识考试题库及答案.doc
- (2025)公务员面试万能模板(完美版).doc
- (2025)管理人员安全质量培训考试题库及答案.doc
- (2025)焊工理论知识考试题及答案.doc
- (2025)护理三基考试题库(含答案).doc
- (2025)计算机网络技术考试题(含答案).doc
- (2025)基本公共卫生服务项目考试题库(含答案).doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功