版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
分频器实验卓越工程师培养系列FPGA开发实用教程——基于Xilinx和VerilogHDL第二章01实验内容设计分频器,对50MHz的系统时钟进行分频,输出一个占空比为50%、频率为1Hz的方波信号,并且将该方波信号约束到FPGA高级开发系统编号为LED。的发光二极管上,使发光二极管每500ms更改一次状态。另外,该分频器还可以通过编号为RESET的按键进行低电平复位。实验内容02实验原理分频器实验涉及的硬件电路包括一个位于FPGA高级开发系统上的LED。及与LED。串联的限流电阻R513,LED。通过470。电阻连接XC6SLX16芯片的G14引脚。另外,硬件电路还包括系统时钟引脚和系统复位引脚。其中,系统时钟引脚连接50MHz时钟模块,是XC6SLX16芯片的时钟源,系统复位引脚连接RESET按键,低电平复位,分频器LED电路原理图如图所示。实验原理分频器LED电路原理图时钟信号的处理是FPGA的特色之一,因此分频器也是FPGA设计中使用频率非常高的基本部件之一。FPGA中通常集成了锁相环,可以满足各种时钟的分频和倍频设计,但是通过VerilogHDL或VHDL进行时钟分频是最基本的,在对时钟要求不高的设计场合也能节省珍贵的锁相环资源。顾名思义,分频即对较高频率的信号进行划分,得到较低频率的信号。若一个高频信号的频率降低为原来的1/M则称其为N分频。实验原理时钟分频原理在本实验中,LED。每500ms更改一次状态,即LED0的闪烁频率为1Hz,50MHz的时钟周期为20ns。因此,基于50MHz的时钟,需要计数的次数为1s/20ns=1x109ns/20ns=50000000次。实验原理分频器实验电路有3个引脚,引脚的名称、类型、约束及描述如表所示。实验原理引脚名称引脚类型引脚约束引脚描述clk_iinV10时钟输入,50MHzrst_ji_iinN7复位输入,低电平复位clkooutG14时钟输出,1Hz分频器模块内部电路图分频器模块内部电路图如图所示。实验原理03实验步骤步骤1:ISE软件标准化设置在进行程序设计前,建议对ISE软件进行标准化设置,如将Tab键设置为2个空格,这样可以避免在使用不同的编辑器阅读代码时出现代码布局不整齐的现象。针对ISE软件,下面介绍设置Tab键和显示行号的具体方法。实验步骤打开ISEDesignSuite14.7软件,执行菜单命令“Edit”—“Preferences”,如图所示。在如图所示的对话框中,打开“ISETextEditor”标签页,单击选择“Insertspaces”单选按钮,并且在“Tabwidth”输入框中输入2,勾选“Showlinenumbersw”复选框。最后,单击“OK”按钮。实验步骤步骤2:创建FPGAI程首先,在计算机的D盘新建一个名为Spartan6FPGATest的文件夹,将本书配套资料包中的“04.例程资料\Material”文件夹复制到新建的文件夹中,然后在Spartan6FPGATest文件夹中新建一个名为Product的文件夹。实验步骤在“D:\Spartan6FPGATest\Product”目录中新建一个名为expO1_clk_gen_1hz的文件夹,将“D:\Spartan6FPGATest\Material\exp01_clk_gen_lhz”目录中的所有文件(包括code、project)复制到“D:\Spartan6FPGATest\Product\exp01_clk_gen_lhz”目录中。其中,code文件夹用于存放VerilogHDL源代码或仿真激励文件,project文件夹用于存放工程文件。步骤2:创建FPGA工程下面开始新建工程,打开ISEDesignSuite14.7软件,执行菜单命令“File”-“NewProject如图所示。实验步骤在弹出的对话框中,在“Name”文本框中输入clk_gen_lhz,在“Location”和“WorkingDirectory”文本框中选择如图所示的路径,然后单击“Next”按钮。实验步骤在弹出的对话框中,分别在“Family”“Device”“Package”“Speed”“SynthesisTool”“Simulator”“PreferredLanguage”下拉列表中,选择如图所示的选项,然后单击“Next”按钮。确认工程名、工程路径、器件、仿真综合工具等工程信息是否正确,如果有问题,则单击“Back”按钮返回到相应的对话框中进行更改,否则直接单击“Finish”按钮结束,如图所示。实验步骤实验步骤步骤3:新建Verilog文件完成工程创建后还需要新建Verilog文件,执行菜单命令“Project”-“NewSource”,如图所示。在弹出的对话框中,文件类型选择“VerilogModule”选项,在“Filename”文本框中输入clk_gen_lhz,在“Location”文本框中选择如图所示的路径,并勾选“Addtoproject”复选框,最后单击“Next”按钮。实验步骤实验步骤在弹出的对话框中,直接单击“Next”按钮,该对话框用于设置端口等信息,建议在Verilog文件中自定义,如图所示。确认Verilog文件路径、类型、名称等信息是否正确,无误后单击“Finish”按钮,如图所示。实验步骤在如图所示的软件界面中,删除clk_gen_lhz.v文件中由ISE自动生成的所有代码。步骤4:完善clk_gen_1hz.v文件将程序清单2-1中的代码输入clk_gen_lhz.v文件中,下面对关键语句进行解释。实验步骤第1行代码:'timescale是Verilog中的预编译指令,用来定义模块在仿真时的时间单位和时间精度,这里的时间单位为Ins,时间精度为Ips。注意,时间精度必须小于或等于时间单位,并且时间单位和时间精度只能是1、10和100这3个整数,单位有s、ms、μs、ns、ps和fs。第6至8行代码:输入/输出端口的定义。第13至14行代码:定义了实现分频功能时要用到的两个常量参数CNT_MAX和CNT_HALF。实验步骤第18至19行代码:定义了实现分频功能时使用到的两个reg型信号。第23至33行代码:实现时钟计数功能。当复位时,将计数器s_cnt清零;在clk_50mhz_i的上升沿,如果s_cnt大于或等于CNT_MAX,则s_cnt清零,否则s_cnt执行加1操作。第35至45行代码:实现分频时钟输出功能。当复位时,将分频后的时钟s_clk清零;在clk_50mhz_i的上升沿,如果s_cnt在0和24999999之间(包含0和24999999),则s_clk为低电平,如果s_cnt在25000000和49999999之间(包含25000000和49999999),则s_clk为高电平。第47行代码:用assign语句将时钟信号s_clk赋给输出信号clk_o,clk_o输出一个占空比为50%、频率为1Hz的方波信号。实验步骤实验步骤实验步骤步骤5:检查VerilogX件语法在如图所示的软件界面中,首先单击工具栏中的保存按钮保存文件,然后在“Hierarchy”栏中单击“clk_gen_lhz”选项,接着在“Processes:clk_gen_lhz”栏中右击“CheckSyntax”选项,选择“Run”命令,当“Console”窗口中出现“Process“CheckSyntax”completedsuccessfully”时,表示检查语法成功。注意,如果在“Console”窗口中出现错误提示信息,则以该提示信息为线索对Verilog源代码进行修改,直到没有错误为止。实验步骤步骤6:通过Synplify综合工程Synplify综合是对整个系统的数学模型描述,在系统设计的初始阶段,通过对系统行为描述的仿真来发现系统设计中存在的问题,以此考虑系统结构和工作过程能否达到设计要求。确认Verilog文件语法正确后,在如图所示的软件界面中,右击“xc6slxl6-2csg324”选项,选择“DesignProperties,命令,打开“DesignProperties对话框,或者双击“xc6slxl6-2csg324”选项直接打开“DesignProperties”对话框。在该对话框中,将“SynthesisTool”下拉列表设置为“SynplifyPro(VHDL/Verilog)”,如图所示,然后单击“OK”按钮。实验步骤在如图所示的界面中,单击“clk_gen_lhz”选项,然后右击“ViewRTLSchematic”选项,在弹出的菜单中选择“Run”命令。实验步骤综合成功后会自动弹出Synplify软件界面,Synplify综合工程硬件逻辑电路如图所示。注意,当一个综合电路打开后,在未关闭的情况下再次综合,会出现综合失败的情况。实验步骤步骤7:新建Verilog测试文件进行仿真将工程下载到FPGA高级开发系统之前,为了检验电路的正确性,需要对电路进行仿真测试,确保无误后再将电路下载到系统中。首先新建一个测试文件,执行菜单命令“Project”-“NewSource”。在弹出的对话框中,文件类型选择“VerilogTestFixture”选项,在“Filename”文本框中输入clk_gen_lhz_tf,在“Location”文本框中选择如图所示的路径,并勾选“Addtoproject”复选框。最后,单击“Next”按钮。实验步骤在弹岀的对话框中选择仿真目标文件,通常选择顶层文件,由于本实验只有一个Verilog文件,所以直接单击“Next”按钮进行关联,如图2-22所示。确认文件路径、文件类型、文件名等信息是否正确,无误后单击“Finish”按钮,如图2-23所示。实验步骤如程序清单2-2所示,在ISE软件自动生成的测试文件clk_gen_lhz_tf.v中添加第19行和第30行代码,下面对程序清单2-2中的关键语句进行解释。实验步骤第19行代码:#10表示延迟10个时间单位,因为第1行代码定义的时间单位为Ins,所以延迟10ns,即每10ns电平发生一次变化,用于产生周期为20ns的时钟,因为FPGA高级开发系统的时钟频率为50MHz,周期为20ns,故仿真也采用20ns的周期。第21至24行代码:将时钟信号clk_50mhz_i和复位信号rst_n_i初始化赋值为0。第26至30行代码:延迟100ns后将复位信号rst
n
i电平拉高。在如图2-24所示的软件界面中,单击选择“Simulation”单选按钮,单击“clk_gen_lhz_tf”选项,然后双击“BehavioralCheckSyntax”对仿真文件clk_gen_lhz_tf-v进行语法检查,当“Console”窗口出现“Process“BehavioralCheckSyntax”completedsuccessfully”时,表示检查语法成功。最后,右击“SimulateBehavioralModel”选项,在弹出的对话框中选择“Run”命令运行仿真。实验步骤在弹出的如图2-25所示的ISim软件界面中,执行以下操作查看仿真结果:①单击工具栏的按钮;②单击*按钮,运行仿真;③运行大约2500ms;④单击H按钮,中止仿真,显示界面会切换到clk_gen_lhz_tf.v文件;⑤单击“Default.wcfg"标签页,显示界面切换回仿真文件;⑥单击用按钮,查看完整的仿真波形,单击按钮,或者按Ctrl键且同时滚动鼠标滚轮可以对仿真波形进行放大、缩小操作。实验步骤在默认情况下,ISim的仿真文件中仅显示实体中的输入和输出等端口,不会显示内部定义的信号,但在仿真过程中出现错误时,常常需要查看内部信号等信息,因此还要掌握如何将信号添加到波形窗口中。下面以s_cnt信号为例进行介绍。实验步骤①在ISim软件界面的“InstancesandProcesses”面板上,单击“clk_gen_lhz_tf”节点下的“uut”选项;②在“Objects”面板上右击“s_cnt[25:0]”信号,在弹出的快捷菜单中选择“AddToWaveWindow”命令,完成添加s_cnt[25:0]信号到波形窗口后,依次单击按钮重新运行仿真。可以看到,s_cnt[25:0]信号已经成功添加到波形窗口的最后一行并显示出仿真值了。分频器实验是一个简单的实验,只有两个信号。但绝大多数工程都有非常丰富的内部信号,如果在仿真中出现错误,就需要重新更改Verilog源代码或Verilog测试文件,重新仿真,这样就需要重新添加信号。为节省时间,可以先保存当前仿真文件:①执行菜单命令“File”-“Save”;②输入文件名,并选择保存路径,如文件名为clk_gen_lhz,文件路径为D:\Spartan6FPGATest\Product\exp01_clk_gen_lhz\project;③关闭该仿真文件。完成仿真文件的存储后,可以在软件界面中,右击“SimulateBehavioralModel”选项,在弹出的快捷菜单中选择“ProcessProperties”命令。实验步骤在弹出的如图2-28所示的对话框中,勾选“UseCustomWaveformConfigurationFile”复选框,并在“Cu-stomWavefbrmConfigurationFile”文本后输入仿真文件的路径和文件名,最后单击“OK”。重新进行仿真,这样就可以在仿真波形窗口中同时看到实体的输入和输出端口,以及s_cnt[25:0]信号了,可以通过反复仿真确保仿真正确。实验步骤实验步骤步骤8:新建引脚约束文件在板级调试之前,还需要进行引脚约束。将窗口从Simulation切换到Implementation,然后执行菜单命令“Project”—“NewSource”,在弹出的对话框中,文件类型选择“ImplementationConstraintsFilew”选项,在“Filename”文本框中输入clk_gen_lhz,在“Location”文本框中选择如图2-29所示的路径,并勾选“Addtoproject”复选框。最后,单击“Next”按钮。实验步骤确认文件路径、文件类型、文件名等信息是否正确,无误后单击“Finish”按钮,如图2-30所示。在ISE软件界面中,将程序清单2-3中的代码输入clk_gen_lhz.ucf文件,下面对关键语句进行解释。实验步骤第1至3行代码:时钟输入引脚约束,将时钟输入clk_i分配到FPGA芯片的V10引脚;建立以clk_i驱动的约束组sys_clk_pin;对约束组sys_clk_pin进行周期约束TS_sys_clk_pin(格式为“TS_约束组名”),时钟频率为50MHz。实验步骤第5至7行代码:复位输入引脚约束,将复位输入rst_n_i分配到FPGA芯片的N7引脚。在ISE软件中,rst_n_i常被识别为时钟信号,但该信号并没有在专用时钟引脚上,这样,在布局布线时会报错,加上第7行代码会让ISE软件忽略这个错误。第9至10行代码:时钟输出引脚约束,将时钟输出clk_o分配到FPGA芯片的G14引脚。另外,IOSTANDARD=“LVCMOS33”语句表示使用3.3V电平标准。XC6SLX16芯片可以适配1.2V、3.3V等多个标准,同时还可以调整引脚输入/输出电流
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论