那在数字
电路中的时钟信号也是有固定的节奏的,这种节奏的开始到结束的时间,我们通常称之为周期(T)。
适用于板卡型号:
紫光同创PGC7KD-6IMBG256开发平台(盘古PGX-Lite 7K)
仅需一根TypcC线,插上即用,轻松操作。兼容下载器的一体版,配套资料丰富, 快速掌握国产FPGA!
PGX-Lite 7K 开发板是一套基于紫光同创 compa 系列 PGC7KD-6IMBG256 芯片为核心的开 发套件,支持主自加载双启动功能,集成板载 jtag 调试接口,支持 Type-C 转串口通信,同 时预留非常丰富的扩展 IO、数码管、按键、led 灯等硬件资源,在提供用户基础的硬件环境 基础上,满足用户更加灵活的需求。
二:实验目的
实现对多 LED 灯的控制;
三:实验要求
控制 8 个 LED 以 1s 的周期闪烁(0.5s 亮,0.5s 灭)
四:实验原理
通常的时,分,秒的计时进位大家应该不陌生;
1 小时=60 分钟=3600 秒,当时针转动 1 小时,秒针跳动 3600 次;
那在数字电路中的时钟信号也是有固定的节奏的,这种节奏的开始到结束的时间,我们通常称之为周期(T)。
在数字系统中通常关注到时钟的频率,那频率与周期的关系如下:
PGX-Lite 7K 板卡上有一个 50MHz 的晶振提供时钟给到 PGC7KD;
实验分析:
控制 LED 亮灭需要控制 IO 输出的高低电平即可(高电平点亮,低电平熄灭), 原理图如下:
控制 LED 周期性的维持 0.5s 亮,0.5s 灭,需要控制 IO 输出 0.5s 高电平,0.5s 低电平周期变化,如下图波形:
外部输入时钟为 50MHz 时钟周期为 20n(s 在 verilog 设计中的计数器的计时原理基本上是一致的,确认输入时钟周期,目标计时时间后可得到计数器的计数值到达多少后可得到计时宽度);
0.5s = 25000000*20ns = 25000000 × T50MHz;
IO 输出状态只有两种:1 或 0;我们可以使用一个计数器,计数满 25000000个时钟周期时将 IO 状态进行翻转,即可完成每 0.5S 输出状态跳转,即 LED 灯会以 0.5S 的间隔亮灭变化;
五:实验源码设计(完整源码查看 demo 源文件)
文件头设计
在 module 之前添加文件头,文件头中包含信息有:公司,作者,时间,设计名,工程名,模块名,目标器件,EDA 工具(版本),模块描述,版本描述(修
改描述)等信息;以及
仿真时间单位定义;
`
timescale 1ns / 1ps 表示仿真精度是 1ns,显示精度是 1ps;
`define UD #1 定义 UD 表示#1;#1 仅仿真有效,表示延时一个仿真精度,结合上一条语句表示延时 1ns;
设计 module
创建 module,确定输入输出信号
此段代码是标准的 module 创建的模型,module 创建时需要确认输入输出信号并定义好位宽,之后在对 module 进行具体的逻辑设计;管脚与管脚之间间隔用“,”,最后一个管脚不用间隔符号;
创建 module 时需要定义输入输出信号;本实验输入时钟和复位即可,输出是控制 LED 的亮灭,PGX-Lite 7K 板卡上共有 8 个 LED,故而输出 8bit 位宽的信号;
设计一个计数器;
单个状态计数 25000000,1 个亮灭周期的计数即为 50000000 = 26’h2FAF080;所以计数器的位宽为 26 位即可,此处请结合数字电路中的同步计数器的工作原理分析;
当计数器计数到 26’d24999999 时,计数周期包含了从 0~26’d24999999 的时钟周期,故而总时长时 26’d25000000 × ;硬件输入时钟为 50MHz,所以此计数器的威廉希尔官方网站
周期是 0.5s;
led 显示状态控制
在指定的时间刻度上对 LED 的状态进行变更,以达到控制 LED 规律的亮灭的目的;
led_light_cnt 的计时周期为 0.5s,故在 led_light_cnt 上取一个点来变更 LED的显示状态即可完成每隔 0.5s LED 显示发生变化;由于 LED 亮和灭只有两个状态,在赋值处理上将寄存器取反即可得到对应的从亮到灭变化(或从灭到亮的变化);
完整的 Module(不含注释)
硬件管脚分配
PGX-Lite 7K 的 LED 和 CLK 与 FPGA 的 IO 连接部分的原理图如下(在工程中做物理约束时需要结合原理图的 FPGA 管脚分配进行约束):
复位设计是低电平有效,而 PGX-Lite 7K 板卡上的按键按下时为低电平,松开为高电平,可用按键输入来做复位信号;
六:实验步骤
打开 PDS 软件,创建工程
Step1:打开 PDS 软件,单击 New Project
Step2:单击 NEXT
Step3:创建名为 led_light 的工程到对应的文件目录,之后单击 Next
Step4:选择 RTL project,单击 Next
Step5:单击 Next(也可添加.v 文件)
Step6:单击 Next
Step7:单击 Next
Step8:选择器件系列、型号、封装、速率、综合工具,之后单击 Next
Step9:单击 Finish,完成工程创建
添加设计文件
PDS 软件界面如下图:
双击 Designs,将前面设计的 module 新建到文件中,或者将前面编辑好的verilog 文件添加到工程中:
添加文件到工程:
在窗口中点击 Add Files,选择添加文件到工程;
新建文件到工程:
1)在窗口中点击 Create File;
2)选择 Verilog Design File,文件名和 module 名一致,默认路径,点击 OK;
3)点击 OK;
3)点击 Cancel;
4)默认打开新建文件,将前面设计的 module 复制进去,
5)点击保存,新建文件完成
编译
双击 Compile 或右击选择 Run,编译完成后如下;
工程约束
点击 Tools 选择 User Constraint Editor(Timing and Logic)或者点击工具栏图标User Constraint Editor(Timing and Logic) 选择 Pre Synthesize UCE,如下图所示。
Tools 下的 User Constraint Editor(Timing and Logic)
工具栏 User Constraint Editor(Timing and Logic)图标
时钟约束
打开 UCE 后,选择 Timing Constraints 后选择 Create Clock 添加基准时钟,基准时钟一般是通过输入 port 输入用户涉及的板上时钟。
在弹窗中对时钟命名,关联时钟管脚,添加时钟参数,点击 OK 会创建一条时钟约束,Reset 重置该页面。创建完成如下图所示:
物理约束
打开 UCE 后,选择 Device 后选择 I/O,根据原理图编辑 IO 的分配。
编辑好 IO 分配后,点击保存,完成约束。
七:生成位流文件并下载
双击 Generate Bitstream 或右击选择 Run,生成二进制位流文件。
下载位流文件请参考《PDS 快速使用手册》2.8 下载位流文件
八:实验现象
8 个 LED 灯同时亮和灭,亮和灭之间间隔时间为 0.5s;