基于FPGA的定时器实验.doc_第1页
基于FPGA的定时器实验.doc_第2页
基于FPGA的定时器实验.doc_第3页
基于FPGA的定时器实验.doc_第4页
基于FPGA的定时器实验.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

基于FPGA的定时器实验学 院 专 业 班 级 学 号 学生姓名 指导教师 完成日期 目 录一、实验目的二、实验内容三、实验原理四、实验步骤(一)创建工程(二)编译文本文件(三)SOPC硬件设计(四)软件设计五、实验总结定 时 器 实 验l 一、实验目的(1)熟悉NiosII处理器定时器的相关设置。(2)了解定时中各寄存器的作用。(3)在NiosII IDE开发环境中对定时器进行编程。l 二、实验内容编写程序,利用定时器功能设计秒表。l 三、实验原理在SOPC Builder中添加的定时器是一个32位递减计数器,在软件开发中需要配置几个相关的寄存器来控制该定时器的工作。定时器主要包含6个寄存器,分别是状态寄存器status、控制寄存器control、周期寄存器periodl和periodh、快照寄存器snapl了和snaph。表3.3.1 定时器寄存器定义偏移名称R/W说明/位描述15。32100statusRWrunto1controlRWstopstartcontito2periodlRW定时器周期低16位3periodhRW定时器周期高16位4SnaplRW定时器内部计数器低16位快照5snaphRW定时器内部计数器高16位快照控制定时器工作需要执行以下几个步骤:(1) 设置定时器的定时周期,主要是分别向寄存器periodl和periodh中写入32位周期值得低16位和高16位数值;(2) 配置定时器控制寄存器向start位或stop位写1来开启或停止定时器工作;向ito定时中断使能位写1或0来使能和禁止定时器中断;向cont位写1或0来设置定时器连续工作或单次工作模式;(3) 读写定时器快照寄存器快照寄存器中的值是定时器内部的当前计数值,对其进行写操作可以重置计数器当前计数值。l 四、实验步骤(一)创建工程在计算机上安装好Quartus II后,直接双击桌面上的快捷方式或在程序菜单中运行Altera下的Quartus II 6.0,即出现Quartus II 6.0用户界面,如图1所示。图1 Quartus II 6.0用户界面在Quartus II用户界面的File菜单下,选择New Project Wizard,出现创建工程向导界面,如图2所示。单击Naxt按钮进入下一界面。图2 Quartus II创建过程向导界面(1)在指定位置输入设计中使用的工作目录、工程名称、顶层设计实体名称,如图3所示。图3 (2)单击Nxet按钮,进入下一步,如果需要也可以在Flie name处添加设计文件。(3)选择可编程器件为Cyclone II EP2C35F672C6N,如图4所示,此设计过程可以在以后完成。图4(二)编译文本文件(1)启动Verilog HDL文本编辑器在Quartus II 6.0用户界面的File菜单下,选择New,在弹出的新建设计文件选择窗口的Design File中选择Verilog HDL File,如图5所示。单击OK按钮即可启动Verilog HDL文本编辑器。图5(三)SOPC硬件设计(1)利用“实验一”的方法,添加Nios II处理器、led_pio(8位、方向输出)和Jtag Uart。(2)在上述模块的基础上再添加两个模块:SDRAM模块和定时器模块。添加SDRAM模块:A. 在SOPC Builder窗口中,选择Memory-SDRAM Controller,弹出对话框如图3.3.1,在Data Width中选择16;Chip Select选1;Banks选4,Row选12,Column选8;图3.3.1 设置SDRAM控制器参数B单击Next,在出现的对话框中设置SDRAM时序参数如图3.3.2所示。点击Finish,将其命名为“sdram”。图3.3.2 设置SDRAM控制器时序参数添加定时器模块:A 在SOPC Builder窗口中,选择Other-Interval Timer,弹出对话框如图3.3.3所示。图3.3.3 系统时钟定时器设置B定时器的时间设置为20ms,寄存器的三个选项“Writable period、Readable snapshot和Start/Stop control bits”全部选中。再把定时器重命名为“sys_clock_timer”,作为系统的系统时钟定时器。C用同样的方法再添加一个定时器,其设置如图3.3.4所示。时间设置为10s,而硬件设置选择“Watchdog”预设值。再把该定时器重命名为“watchdog”,作为系统的看门狗定时器。图3.3.4 看门狗定时器的设置(3)修改系统设置。选择More “CPU” Settings属性页,设置CPU的Reset Address和ExceptionAddress为sdram。(4)生成系统。在图形文件中添加Nios系统和锁相环模块。打开锁相环属性窗口,选择output clocks选项页的clk c0和clk c1,都选中use this clock,由此产生两个输出时钟“c0”和“c1”。锁相环的输入时钟是50MHz,输出时钟c0和c1的值也是50MHz。c0作为Nios系统的工作时钟,c1作为SDRAM的时钟。输入时钟和c0的设置与“实验一”相同,c1的设置如图3.3.5所示。图3.3.5 锁相环的设置(4) 引脚连接。保持原来的引脚连接不变,再增加SDRAM的相关引脚,最后的原理图如图3.3.6所示。图3.3.6 原理图与SDRAM有关的引脚连接关系如图3.3.7所示,引脚的命名必须严格按照图中所标示的。注意: 1) DRAM_DQ15.0为双向引脚,选择引脚时需选择“bidir”,而不是“output”。2)DRAM_CLK与锁相环的c1输出口相接,见图3.3.6。3) SOPC生成的端口“zs_ba_from_the_sdram1.0”是2位的矢量,而DE2的引脚配置文件“DE2 pin assignments.csv”中,却把2位的DRAM_BA分为两个独立的1位引脚分别是DRAM_BA_0和DRAM_BA_1。这就无法像其他引脚那样直接连接,而需要使用中转线,做法如下:首先从系统端口“zs_ba_from_the_sdram1.0”处画一根总线,右键单击选择属性“Properties”,在其属性页的“name”处设置为“DRAM_BA1.0”;其次在原理图的空白处添加两个“output”引脚,分别命名为“DRAM_BA_0”和“DRAM_BA_1”;最后从这两个引脚处画两根线,并在其属性窗口中把两根线的“name”分别设置为“DRAM_BA0”和“DRAM_BA1”即可。最后结果如图3.3.7所示。4) 端口“zs_dqm_from_the_sdram1.0”的情况与3)中所描述的相同,其做法一样,引脚的命名见图3.3.7。图3.3.7 sdram引脚连接图5)项目编译、下载,硬件设计完成。(四)软件设计(1)打开NiosII IDE建立基于刚刚生成的CPU的新工程,选择Hello World模板。(2)右键单击项目文件夹,在弹出的快捷菜单中选择System Library Properties,打开工程属性设置页,如图3.3.8所示;设置stdout、stderr和stdin为jtag_uart,设置system clock timer为sys_clock_timer,设置几项memory为sdram。图3.3.8 系统库属性设置(3)编写程序。1、译码器模块YMQ的VHDL程序:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY YMQ IS PORT(AIN4: IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT7: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); END YMQ; ARCHITECTURE ART OF YMQ ISBEGIN PROCESS(AIN4) BEGIN CASE AIN4 IS when 0000 =DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7=1111111; END CASE; END PROCESS; END ARCHITECTURE ART;2、显示模块的VHDL程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity seg is Port (clk : in std_logic; A1:in std_logic_vector(6 downto 0); B1:in std_logic_vector(6 downto 0); C1:in std_logic_vector(6 downto 0); D1:in std_logic_vector(6 downto 0); ZBXS:in std_logic_vector(6 downto 0); JSXS1:in std_logic_vector(6 downto 0); JSXS2:in std_logic_vector(6 downto 0); seg : out std_logic_vector(6 downto 0); segcs : out std_logic_vector(7 downto 0); end seg;architecture rtl of seg issignal clk_fresh : std_logic;beginprocess(clk) variable cnt : integer range 0 to 20000;begin if clkevent and clk=1 then cnt:=cnt+1; if cnt10000 then clk_fresh=1; elsif cnt20000 then clk_fresh=0; else cnt:=0;clk_fresh=0; end if; end if;end process;process(clk_fresh) variable cnt : std_logic_vector(2 downto 0);begin if (clk_freshevent and clk_fresh=1) then cnt:=cnt+1; if cnt=000 then segcs=01111111; seg=ZBXS; elsif cnt=001 then segcs=11011111; seg=A1; elsif cnt=010 then segcs=11101111; seg=B1; elsif cnt=011 then segcs=11110111; seg=C1; elsif cnt=100 then segcs=11111011; seg=D1; elsif cnt=101 then segcs=11111101; seg=JSXS1; elsif cnt=110 then segcs=11111110; seg=JSXS2; elsif cnt=111 then segcs=11111111; seg=0000000; end if; end if;end process;end rtl;3、定时模块的VHDL程序:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JSQ IS PORT(CLR,EN,CLK: IN STD_LOGIC; QA: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); QB: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END ENTITY JSQ; ARCHITECTURE ART OF JSQ IS signal tempcounter: integer range 0 to 5000000; signal clock:std_logic; BEGINprocess(clk)beginif(clkevent and clk=1)thentempcounter=tempcounter+1;if tempcounter2500000 then clock=0;elsif tempcounter5000000 then clock=1;else tempcounter=0;clock=1;end if;end if;-end if;end process; PROCESS(clock) IS VARIABLE TMPA: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE TMPB: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR=0 THEN TMPA:=0100;TMPB:=0010; ELSIF clockEVENT AND clock=1 THEN IF EN=1 THEN IF TMPA=0000 THEN if TMPB=0000 then TMPA:=0000;TMPB:=0000; else TMPA:=1001; end if; IF TMPB=0000 then if TMPA=0000 then TMPA:=0000;TMPB:=0000; else TMPB:=1001; end if; ELSE TMPB:=TMPB-1; END IF; ELSE TMPA:=TMPA-1; END IF; END IF; END IF; QA=TMPA; QB=TMPB; END PROCESS; END ARCHITECTURE ART; 看门狗实际是个定时器,看门狗定时器从复位

温馨提示

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

评论

0/150

提交评论