基于XILINX-FPGA数字系统设计-实验五.doc_第1页
基于XILINX-FPGA数字系统设计-实验五.doc_第2页
基于XILINX-FPGA数字系统设计-实验五.doc_第3页
基于XILINX-FPGA数字系统设计-实验五.doc_第4页
基于XILINX-FPGA数字系统设计-实验五.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XILINX第五次上机报告班级: 学号: 姓名: 实验内容1、 VHDL状态机实验2、 SDK实验3、 实验作业l VHDL状态机实验一、 实验介绍本实验将完成下图中的状态机CNTR_FSM的RTL描述二、 实验目标 1) 学习状态机的VHDL语言描述方法 2) 学习状态机的单进程和多进程描述方法 CNTRL_FSM的状态机如图所示:三、 实验步骤1. 创建一个新的工程1) 打开ISE,选择菜单栏中分fileNew Project,注意工程路径不能有中文或空格;2) 单击next,填入器件参数;3) 一直Next直到完成工程创建,点击Finish;2. 创建ALU模块的实体1) 选择菜单栏中的ProjectNew Source2) 选择左侧VHDL Module右侧file Name栏中填入文件名CNTRL_FSM3) 在define module窗口中输入端口的定义3. 导入实验三中定义的包集合CALC1_PAK。1) 由于MEM和FSM有相同的MY_RECORD类型信号的互联,导入CALC1_PAK可以保持两个模块之间数据的一致性。选择Project Add Copy of Source,选中实验三中的CALC1_PACKAGE.vhd,单击open;如果没有实验三中的包文件,也可以选择New SourceVHDL Package 重新编写2) 在FSM中用use语句声明使用CLAC1_PAK3) 在关键字architecture和begin之间,定义一个枚举类型STATE_TYPE,枚举的值为图 6. 21中的状态值。4) 定义两个STATE_TYPE类型的信号CURR_STATE和NEXT_STATE5) 添加描述FSM的状态转换代码4. 语法检查双击Check Syntax,如果代码出现语法错误,请修正错误后再进行下面的步骤;5. 创建测试平台文件创建一个测试平台文件,并验证ALU模块的功能是否正确;1) 选择菜单栏的 ProjectNew Source;2) 在 Select Source Type 窗口中,左侧选择VHDL Test Bench,右侧 File Name栏中填入文件名CNTRL_FSM_TB;3) 点击Next,软件弹出一个界面,询问测试平台文件与哪个设计文件关联,选择CNTRL_FSM 在ISE默认的仿真情况下,仿真平台中使用的下层元件信号是无法在波形窗口中看到的。读者需要手动将下层的信号加入到仿真波形中 在Sources窗口中选中CNTRL_FSM_TB,在Processes窗口中双击Simulate Behavioral VHDL Module,在弹出的仿真波形窗口中,可以看到仿真的波形 在Sources中选择CNTRL_FSM_TB的下层模CNTRL_FSM,在Processes中即可看到下层模块的内部信号,选中CURRENT_STATE信号,并将其拖动到仿真波形窗口中实验代码CALC1_PACKAGE.VHD ibrary IEEE; use IEEE.STD_LOGIC_1164.all; package CALC1_PAK is type MY_RECORD is record A_IN : std_logic_vector ( 3 downto 0 ); B_IN : std_logic_vector ( 3 downto 0 ); OP_CODE : std_logic_vector ( 3 downto 0 ); C_IN : std_logic; EXP_OUT : std_logic_vector ( 3 downto 0 ); end record MY_RECORD; end package CALC1_PAK;CNTRL_FSM.VHD library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use work.CALC1_PAK.all; entity CNTRL_FSM is Port ( DATA_FRAME : in MY_RECORD; CLK : in STD_LOGIC; RESET : in STD_LOGIC; A_IN : out STD_LOGIC_VECTOR (3 downto 0); B_IN : out STD_LOGIC_VECTOR (3 downto 0); C_IN : out STD_LOGIC; OP_CODE : out STD_LOGIC_VECTOR (3 downto 0); EXP : out STD_LOGIC_VECTOR (3 downto 0); ADDR : out STD_LOGIC_VECTOR (2 downto 0); COMP_EN : out STD_LOGIC; ALU_EN : out STD_LOGIC; MEM_EN : out STD_LOGIC);end CNTRL_FSM; architecture Behavioral of CNTRL_FSM is type CNTRL_STATE is ( S0_INIT, S1_FETCH, S2_ALU, S3_COMP, S4_DONE ); signal CURR_STATE, NEXT_STATE : CNTRL_STATE; signal ADDR_I, ADDR_Q : std_logic_vector ( 2 downto 0 ); begin ADDR = ADDR_Q; - update output port from synchronous internal signal SYNC : process ( CLK, RESET ) begin if ( RESET = 1 ) then CURR_STATE = S0_INIT; ADDR_Q 0 ); elsif rising_edge (CLK) then CURR_STATE = NEXT_STATE; ADDR_Q = ADDR_I; end if; end process SYNC;l SDK实验一、 实验介绍本实验将指导大家向嵌入式系统中添加一个定时器,并利用该定时器编写应用程序。我们将会使用Software Developers Kit (SDK)来编写和调试程序。二、 实验目标1. 通过中断控制器来利用定时器2. 向定时器添加一个中断处理程序3. 编写中断处理函数4. 生成比特流5. 使用SDK来设置断点调试程序,并观察内存中的变量值三、 实验过程本实验将会扩展实验四中的硬件设计,添加一个XPS中断控制器和XPS定时器,并编写一个中断处理程序来统计时钟产生的中断个数。注:本次实验需要用到开发板上的LED,因此在新建工程时,要将LEDs_8Bit设备选中四、 实验步骤1) 继续实验三的内容,创建一个lab5文件夹,将lab4中的内容复制到新文件夹中。2) 从IP目录下添加以下IP到硬件设计中。从DMA and Timer 中添加XPS Timer/Counter从Clock, Reset, and Interrupt中添加XPS Interrupt Controller3) 修改实例名,将timer和interrupt controller作为PLB总线上的从设备。4) 在Addresses标签中,将中断控制器和定时器的地址空间都设为64K,并点击Generate Addresses5) 在Ports标签下,将delay实例的Interrupt端口的net列改名为Timer16) 展开microblaze0实例,在Interrupt端口的Net列上选择New Connection。这将生成一个名为microblaze_0_INTERRUPT的连接7) 通过以下步骤,将中断控制器和定时器连接起来将xps_intc_0实例的Irq输出端口连接到microblaze0的microblaze_0_INTERRUPT输入端口;单击xps_intc_0的intr域,打开Interrupt Connection对话框,单击左边的Timer1,点击将其添加到右边的Connected Interrupts域,然后点击OK;将delay实例的CaptureTrig0端口的net列改名为net_gnd8) 双击delay实例,打开配置对话框,将Only One Timer is Present选中9) 点击Hardware Generate Bitstream 运行SDK,创建一个新的工程1) 选择Software Launch Platform Studio SDK2) 选择Import XPS Application Projects并点击next3) 选中TestApp_Memory,点击Finish这将会生成SDK_Projects/TestApp_Memory目录,其中的内容是Base System Builder所创建的软件项目的拷贝4) 右击lab4.c,选择delete5) 选择File Import,在向导中,双击File System,将lab5.c复制到工程目录下,选择工程所在目录,选中lab5.c,在Into Folder栏内选中TestApp_Memory,选择Finish6) 双击lab5.c打开编辑器,屏幕下方控制台中将会显示出代码中存在的错误。7) 双击击第二个错误,将会定位到代码出错的位置8) 声明一个unsigned int 类型的全局变量,初始化为1,保存文件之后,这个错误将会消失9) 继续修改其他的错误.增加一个int类型的全局变量,并初始化为0,这样,第二个错误将会消失。 为XPS定时器创建重点控制器1) 在lab5.c中,找到中断处理函数timer_int_handler2) 创建一个局部变量unsigned int csr; 创建中断处理函数的第一步是检验定时器是否产生了中断。可以通过查看XPS Timer的控制状态寄存器来确定。打开API文档,查看控制状态寄存器是如何工作的。 移除TestApp_Memory_linker_script.ld文件,添加lab5_LinkScr.ld文件作为本工程的连接脚本。a、 右击TestApp_Memory,选择Properties,打开属性对话框。(也可从菜单栏选择Project Properties)b、 在对话框左边选中C/C+ Build,选择Linker Script选项,点击删除按钮删除TestApp_Memory_linker_script.ld文件c、 点击添加按钮添加lab5_LinkScr.ld文件 生成比特流并下载至FPGAa、 连接并启动开发板b、 选择Device Configuration Program FPGAc、 选择TestApp_Memory.elf文件d、 点击Save and Programe五、 实验结果本次实验指导大家向系统中添加了一个XPS定时器和中断控制器,并为中断设备添加了一个中断处理函数,然后在硬件上进行了验证。最后,使用了SDK的调试器观察了变量的值和内存中的内容。实验结果分析Lab5.c代码分析:全局变量: count:中断计数器timer_count:终端频率函数:timer_int_handler:首先通过cs

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论