基于FPGA的数字时钟设计三峡大学电气与新能源学院_第1页
基于FPGA的数字时钟设计三峡大学电气与新能源学院_第2页
基于FPGA的数字时钟设计三峡大学电气与新能源学院_第3页
基于FPGA的数字时钟设计三峡大学电气与新能源学院_第4页
基于FPGA的数字时钟设计三峡大学电气与新能源学院_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、CPLD及电子CAD 同组同学:代磊一 EDA介绍EDA技术就是以计算机为工具,设计者在EDA软件(MAX+plus II 或Quartus II )平台上,用硬件描述语言VHDL或相关类似编程语言完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。二 VHDL语言(1)VHDL语言介绍:VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一

2、般的计算机高级语言。(2)VHDL语言的基本知识: (a)实体,构造体Entity(实体)用来说明模型的外部输入输出特征; Architecture(构造体)用来定义模型的内容和功能每一个构造体必须有一个实体与它相对应,所以两者一般成对出现 (b).顺序语句和并行语句顺序语句只能出现在进程(Process)和子程序中,其中子程序包括函数(Function)和过程(Procedure). 顺序语句种类有:进程语句,赋值语句,流程控制语句,等待语句,子程序调用语句,返回语句,空操作语句。(具体例子见后面设计的系统示例中)。并行语句是VHDL区别于传统软件描述语言最显著的一个方面.各种并行语句在结构

3、体中是同时并发执行的,也就是说,只要某个信号发生变化,都会引起相应语句被执行而产生相应的输出,其执行顺序与书写顺序没有任何关系。但在一个结构体内,各进程外部的语句是并发执行的,它们之间可以通过信号进行通信,而每个进程内部的语句是顺序执行的。(相关例子也在后面列的设计例子中有)在实际编程时,应将并行语句和顺序语句灵活运用才符合VHDL的设计要求和硬件特点。(c)进程两种进程设计方式:*【进程标号:】 process 【(敏感参数列表)】is 进程申明部分; begin 顺序语句end process*【进程标号:】 process is 进程申明部分; begin wait 语句; 顺序语句en

4、d process* (d)信号与变量信号与变量的区别见下面图表: (e)顺序语句IF_THEN_ELSE语句只能在进程内使用,至少应有一个条件句,条件句必须由布尔表达式构成。语句形式:IF 条件句 Then 顺序语句 ELSIF 条件句 Then 顺序语句 ELSE 顺序语句ENDIFCASE_WHEN语句表达式可以是一个整数类型或枚举类型的值,也可以是由这些数据类型的值构成的数组,条件句中的选择值必在表达式的取值范围内。除非所有条件句中的选择值能完整覆盖CASE语句中表达式的取值,否则最末一个条件句中的选择必须用“OTHERS”表示。CASE语句中每一条件句的选择值只能出现一次,不能有相同

5、选择值的条件语句出现。CASE语句执行中必须选中,且只能选中所列条件语句中的一条。LOOP语句基本格式:LOOP标号:重复模式 LOOP顺序语句;END LOOP LOOP标号FOR IN LOOP顺序语句END LOOP;WHILE LOOP顺序语句END LOOP;LOOP标号: LOOP顺序语句EXIT LOOP标号 ;END LOOP;NEXT LOOP标号 WHEN 语句2、并行语句VHDL语言与传统软件描述语言最大的不同,有多种语句格式,包括:并行信号赋值语句、进程语句、块语句、条件信号赋值语句、元件例化语句、生成语句、并行过程调用语句。各种并行语句在结构体中的执行是同步进行的,或

6、者说是并行运行的,其执行方式与书写的顺序无关。在执行中,并行语句之间可以有信息往来,也可以是互为独立、互不相关、异步运行的(如多时钟情况)。每一并行语句内部的语句运行方式可以有两种不同的方式,即并行执行方式(如块语句)和顺序执行方式(如进程语句)With_Select_Then选择信号语句所有的“WHEN”子句必须是互斥的。一般用 “When Others”来处理未考虑到的情况,只有一个参考信号和赋值符 (=),每一子句结尾是逗号,最后一句是分号When_Else选择信号语句根据指定条件对信号赋值,条件可以为任意表达式;根据条件的出现的先后次序隐含优先权;最后一个 ELSE子句隐含了所有未列出

7、的条件。每一子句的结尾没有标点,只有最后一句有分号3、进程语句进程语句是VHDL中最重要的语句,具有并行和顺序行为的双重性。进程和进程语句之间是并行关系,进程内部是一组连续执行的顺序语句,进程语句与构造体中的其余部分进行信息交流是靠信号完成的。基本格式:进程标号: PROCESS (信号敏感表) IS说明区BEGIN顺序语句END PROCESS 进程标号;信号敏感表进程赖以启动的是敏感表。对于表中列出的任何信号的改变,都将启动进程,执行进程内相应顺序语句。一些VHDL综合器,综合后,对应进程的硬件系统对进程中的所有输入的信号都是敏感的,不论在源程序的进程中是否把所有的信号都列人敏感表中。为了

8、使软件仿真与综合后的硬件仿真对应起来,应当将进程中的所有输人信号都列入敏感表中双向口双口RAM的输入和输出是相互独立的吧,他们的工作是分别由(输入始能,输入时钟,输入地址)和(输出始能,输出时钟,输出地址)控制了,只要注意,同时不对一个地址进行读写操作,就应该不会出问题。以下是课堂上双向口示例程序:ENTITY ldcnt IS PORT (clk, ld, oe: IN std_logic;count: INOUT std_logic_vector(7 DOWNTO 0);END ldcnt; ARCHITECTURE archldcnt OF ldcnt ISSIGNAL int_coun

9、t: std_logic_vector(7 DOWNTO 0); BEGINcnt: PROCESS (clk)BEGINIF rising_edge(clk) THENIF ld=1 THEN int_count = count; ELSE int_count = int_count + 1;END IF;END IF;END PROCESS cnt ;outen: PROCESS (oe, int_count) BEGINIF oe = 1 THEN count = int_count ; ELSE count Z) ; END IF ;END PROCESS outen;END arch

10、ldcnt; 状态机所谓状态机(FSM有限状态机),简单来讲,就是给个条件,由这个状态跳到下一个,或者保持不变。在此过程中有可能有某些值得输出。一个最简单的状态机例子:ABCA,每来一个时钟,状态改变一下。(a)状态机的优势: 1、状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。2、由于状态机的结构相对简单,设计方案相对固定。3、状态机容易构成性能良好的同步时序逻辑模块。4、高可靠性。5、在高速运算和控制方面,状态机更有其巨大的优势。6、状态机的VHDL表述丰富多样、有其独到的好处。(后面数字时钟设计中对数码管的显示切换就是用状态机的设计原理完成的)(b)状态机结构 说明部分:定义枚举型数

11、据类型,定义状态变量。主控时序进程:主控时序进程主要负责状态机运转和在时钟驱动下负责状态的转换。:主控组合进程: 也称为状态译码进程,其任务是根据外部输入的控制信号,或和当前状态的状态值确定下一状态的取向,以及确定相应的输出。辅助进程: 用于配合状态机工作的组合或时序进程。元件例化 元件例化即生成在新图形文件中能被应用到的图形设计文件。此次试验主要涉及到具体操作问题。下面就相关操作予以说明:1 选择工具按钮有效时,在图形编辑器窗口的空白处单击鼠标左键以确定输入位置,然后选择Enter Symbol,或双击鼠标左键。2 将出现一个Enter Symbol 对话框,在symbol Librarie

12、s框中 选择 “.maxplus2max2libprim” 。3 所有的Altera 图元以列表方式显示出来,选择您想输入的图元,然后选择 OK(后面数字时钟设计中的图形文件的制作主要就是用此法,并连线才构成一个最终的时钟系统)三.数字钟综合设计一 系统总体框图时间模块时间clk1或整点报时蜂鸣器位数码管显示秒表clkM秒表模块定时模块定时比较和显示切换个数码管以不同形式不同频率闪烁分频蜂鸣器clk分频闹钟分段二 系统文件截图三 各模块部分介绍() 时钟和调时部分,进制计数()模块截图:()程序进制:library ieee;use ieee.std_logic_1164.all;use ie

13、ee.std_logic_unsigned.all; entity ershisi_33_34 is port(clk,clr,en:in std_logic; carry :out std_logic; ge :out std_logic_vector( 3 downto 0); shi :out std_logic_vector( 3 downto 0); end ;architecture one of ershisi_33_34 issignal g,s :std_logic_vector(3 downto 0); beginprocess(clk,clr,en,g,s) begin

14、if clr=1then g=0000; s=0000; elsif clkevent and clk=1 then if en=0 then if g=0011 and s=0010 then g=0000; s=0000;carry=1; elsif g=1001 then g=0000;s=s+1; else g=g+1;carry=0; end if; end if; end if;end process;ge=g;shi=s;end;进制:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

15、 entity liushijinzhi_33_34 is port(clk,clr,en:in std_logic; carry :out std_logic; ge :out std_logic_vector( 3 downto 0); shi :out std_logic_vector( 3 downto 0); end ;architecture one of liushijinzhi_33_34 issignal g,s :std_logic_vector(3 downto 0); beginprocess(clk,clr,en,g,s) begin if clr=1then g=0

16、000; s=0000; elsif clkevent and clk=1 then if en=0 then if g=1001 and s=0101 then g=0000; s=0000;carry=1;elsif g=1001 then g=0000;s=s+1; else g=g+1;carry=0; end if; end if; end if;我们在秒表前面多加了两位进制,这样秒表更实用end process;ge=g;shi=s;end;() 秒表部分,进制计数()模块截图:()100进制计数程序部分和60进制的差不多,就不列举程序了闹钟分段模块:前低沉,中间较清脆急促,最后急

17、促() 定时比较和显示切换及闹钟分段基于状态机编程设计()模块截图:()程序定时比较和显示切换:LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY bijiaohexianshi IS PORT ( clk, clr: IN std_logic; turn: IN std_logic_vector(1 downto 0); mg,ms,fg,fs,sg,ss :in std_logic_vector(3 downto 0); ms_1g, ms_1s, ms_2g, ms_2s,ms_mg, ms_ms,ms_fg, ms_fs:in std_log

18、ic_vector(3 downto 0); d_fg,d_fs,d_sg,d_ss :in std_logic_vector(3 downto 0); g1,g2,g3,g4,g5,g6,g7,g8: out std_logic_vector(3 downto 0); speaker_dtime: out std_logic);END bijiaohexianshi;ARCHITECTURE arch_1 OF bijiaohexianshi ISTYPE clock_states IS (time, dtime,mtime,light); SIGNAL sm: clock_states;B

19、EGINfsm: PROCESS (clk, clr)BEGIN IF clr = 1 THEN sm IF turn=00 THEN sm IF turn=01 THEN sm IF turn=10 THEN sm sm = time; END CASE; END IF; END PROCESS fsm;g1= mg WHEN (sm = time) else ms_2g when (sm=mtime) ELSE d_fg when (sm=dtime);g2= ms WHEN (sm = time) else ms_2s when (sm=mtime) ELSE d_fs when (sm

20、=dtime);g3= fg WHEN (sm = time) else ms_1g when (sm=mtime) ELSE d_sg when (sm=dtime);g4= fs WHEN (sm = time) else ms_1s when (sm=mtime) ELSE d_ss when (sm=dtime); g5= sg WHEN (sm = time) else ms_mg when (sm=mtime) ELSE 0000;g6= ss WHEN (sm = time) else ms_ms when (sm=mtime) ELSE 0000; g7= 0000 WHEN

21、(sm = time) else ms_fg when (sm=mtime) ELSE 0000; g8= 0000 WHEN (sm = time) else ms_fg when (sm=mtime) ELSE 0000; speaker_dtime=1 when (ss=d_ss and sg=d_sg and fs=d_fs and fg=d_fg ) else 0;END arch_1;报时分段:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity baoshifenduan is port( clk1,clk2,clk3,speaker_dtime:in std_logic; ms:in std_logic_vector(3 downto 0); speaker :out std_logic);end ;architecture one of

温馨提示

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

最新文档

评论

0/150

提交评论