1、实验目的
熟悉 Verilog HDL 语言并能用其建立基本的逻辑部件,在 Xilinx ISE 平台进行输入、编辑、调试、行为与仿真与综合后功 能仿真
熟悉掌握 SWORD FPGA 开发平台,同时在 ISE 平台上进行时序 约束、引脚约束及映射布线后时序仿真
运用 Xilinx ISE 具将设计验证后的代码下载到实验板上,并 在实验板上验证
2、实验内容
问题 1:某三层楼房的楼梯通道共用一盏灯,每层楼都安装了一 只开关并能独立控制该灯,请设计楼道灯的控制电路。
问题 2:增加控制要求,灯打开后,延时若干秒自动关闭,请重 新设计楼道灯的控制电路。
3、实验过程
问题 1:图形方式输入逻辑功能描述
1、创建工程并绘制原理图
建立楼道控制的工程 LampCtrl_sch.ise,Top-Level Source Type 选择 Schematic。属性页选择 Family:Kintex7,Device:XC7K160T, Package:FFG676,Speed:-1
然后创建 Schematic 类型的 LampCtrl 文件,按照 ppt 上的原理 图进行绘制
绘制完成后可在 Processes 窗口中的 Design Utilities 的 Check Design Rules 自动检测绘制出的原理图是否正确(不能检查出设计 上的错误),于是可以得到没有绘制错误的原理图。
可以在 Processes 窗口中打开 Design Utilities 中的 View HDL Functional Model 查看输入电路的硬件描述代码
2、进行仿真
创建 Verilog Test Fixture 类型的文件,命名为 LampCtrl_sim,然后 将仿真激励输入代码写入。
其中代码的含义是,先初始化 S1、S2、S3 为 0,然后经过 50nsS1 变为 1,再过 50ns 变回 0,然后将 S2 调为 1,S1 再经过 50ns 后 S1 变为 1,再过 50ns 变回 0,S2 调回 0,S3 调到 1,S1 继续重复 上面的过程,然后是 S2 调到 1(此时 S3 仍为 1),S1 继续重复 上面的过程,之后 S2 和 S3 都调到 0,结束模拟。
之后 View 选择为 Simulation,选择 LampCtrl_sch_tb 文件,在 Process 窗口中选择 Simulate Behavioral Model 即可进行模拟
3.给模块的端口指定引脚分配并进行最终检验
绘制一条总线,用以点亮实验板上的 7 个 LED 灯,之前在绘制原 理图时已绘制完毕,不再赘述。
直接建立 Implementation Constraints File 文件,命名为 K7, 自行为输入、输出和灯泡分配引脚。
最后可以在 Implementation 下的 Process 窗口中进行自动检测是否 正确,检测通过后即可在 Design Summary 中查看结果
4.下载验证
选择 Implementation,在 Process 窗口中点击 Config Target Device,点击 Manage Configuration Project,打开下载编辑窗口, 右键菜单中选择 Initialize Chain,自动查找已连接在电脑上的开 发平台 JTAG 下载链
之后选择对应项目的 bit 文件,然后右键菜单中点击 Program 即 可在硬件设备上下载编程。
之后在设备上进行验证。
实验板最右边的三个开关分别是(从左向右)S3、S2、S1,之后 的结果默认这个顺序,如 001 表示 S3 关,S2 关,S1 开,接下来是所 有实验结果的截图,预期结果为奇数个开关为开,则灯泡亮。偶数个 开关为开,则灯泡灭
附几张截图
问题 2:Verilog 代码输入逻辑功能描述
1、创建工程并编写 Verilog 代码
建立楼道控制的工程 LampCtrl_HDL.ise,Top-Level Source Type 选择 HDL。属性页问题一一样设置即可。
然后创建 Verilog Module 类型的 LampCtrl 文件,按照 ppt 上的 代码进行编写
编写完成后可在 Process 窗口中的 Check Syntax 检查代码的语法 规则是否正确(无法检测出设计上的问题)
可在 Synthesis XST 中选择 View RTL Schematic 观察电路结构, 右键点击模块,选择 Open Source of Selected Instance 即可查看 其对应的代码
2、进行仿真
创建 Verilog Test Fixture 类型的文件,命名为 LampCtrl_sim,然后 将仿真激励输入代码写入
之后和问题一一样,打开仿真,需要注意的是仿真时长改为 21μs
3.给模块的端口指定引脚分配并进行最终检验
建立引脚约束文件 K7.ucf,自行分配引脚
再进行一些调整,将 LampCtrl.v 代码中计数器位数改成 28 位, 修改或增加一部分代码,并进行最终检测,检测步骤和问题一一样, 最终结果如下:
4.下载验证 选择 Implementation,在 Process 窗口中点击 Config Target Device,点击 Manage Configuration Project,打开下载编辑窗口, 右键菜单中选择 Initialize Chain,自动查找已连接在电脑上的开 发平台 JTAG 下载链
之后选择对应项目的 bit 文件,然后右键菜单中点击 Program 即 可在硬件设备上下载编程。
之后在设备上进行验证。
这里的实验结果是用了视频的形式交的,我就不放了
4、实验结果
基本按照ppt上做就行了
原理图比较麻烦,也比较简单,说几个技巧吧
1、导线可以通过左侧的按钮选择单个导线或是一整根线
2、总线分支的时候要先点一下总线,再往外点一下,最好是点远一点,因为外面其实有两个节点,一个是连接的导线,一个是外接的导线
Verilog是课程的重点要好好学
首先分为wire和reg类型
wire是导线,reg是寄存器,基本别用reg,容易出问题,reg的值不会随着连接变量的变化而变化,基本需要手动调整,像是开关一类就是这样,分到的值基本上是0,1这种,wire的话就类似于一个函数,给了输入就给出对应的输出,assign就是指定函数的类型,给出函数的表达式,输入基本是另一根wire,或是直接指定值,像是1'b0(这个意思是1位二进制数0)
然后是硬件描述代码,这个是能把原理图和Verilog结合起来的关键,如果要在Verilog中用原理图画出来的东西,就需要看看这个,之后再说
仿真的代码基本类似,其实仿真很简单,基本的思路就是给出所有情况的输入,看看输出是不是符合设计预期
#50;指的是持续50ns,放到不同的位置有不同的意思,可能是这行持续50ns,也可能是前几行输入改变后保持50ns。。。基本不用太管,看着仿真图调就行
begin一定要有对应的end,一个begin一个end
always begin end指的是一个循环,也还要另一种形式forever,之后会用到,效果一样