《第7章--应用VHDL语言方法设计具有换挡功能的四位数字频率计-《EDA技术》-教学ppt课件》由会员分享,可在线阅读,更多相关《第7章--应用VHDL语言方法设计具有换挡功能的四位数字频率计-《EDA技术》-教学ppt课件(89页珍藏版)》请在金锄头文库上搜索。
1、 【要求要求】 掌握掌握VHDL语言中的各模块的设计及最后各模块的组装语言中的各模块的设计及最后各模块的组装 【知识点知识点】 理解理解EDA的分频设计的分频设计 理解理解VHDL程序计数器的设计程序计数器的设计 理解理解VHDL程序锁存器的设计程序锁存器的设计 理解理解VHDL程序档位转换及数码管显示的设计程序档位转换及数码管显示的设计 理解理解VHDL程序元件的例化与组装程序元件的例化与组装 【重点和难点重点和难点】 频率计的测频原理频率计的测频原理 VHDL程序计数器的设计程序计数器的设计 VHDL程序数码管显示的设计程序数码管显示的设计下一页第第7章章 应用应用VHDL语言方法设计语言
2、方法设计 具有换挡功能的四位数字频率计具有换挡功能的四位数字频率计第第7章章 应用应用VHDL语言方法设计语言方法设计 八位二进制加法器八位二进制加法器7.1 工作任务的陈述与背景工作任务的陈述与背景7.2 完成工作任务的引导完成工作任务的引导7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能7.3 本章小结本章小结上一页一、任务的陈述一、任务的陈述 设计一带进位功能的四位数码管显示的频率计,其卞要参数如下设计一带进位功能的四位数码管显示的频率计,其卞要参数如下: 频率计的测量范围为频率计的测量范围为:0 Hz1 MHz; 频率计具有自动量程转化功能频率计具有自动量程转化功能; 频率
3、计通过四位数码管显示测量的频率。频率计通过四位数码管显示测量的频率。二、项目的背景二、项目的背景 频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为数,此时我们称闸门时间为1 s。 闸门时间也可以大于或示于闸门时间也可以大于或示于1 s。闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长频率的间隔就越长
4、; 闸门时间越短,测得频率值刷新就越快,但测得闸门时间越短,测得频率值刷新就越快,但测得的频率精度就受影响。的频率精度就受影响。7.1 工作任务的陈述与背景工作任务的陈述与背景返 回下一页7.2 完成工作任务的引导完成工作任务的引导一、资讯一、资讯 由前述可知,要完成好该工作任务,需要准备以下几个方面的知识由前述可知,要完成好该工作任务,需要准备以下几个方面的知识: 时钟分频的原理及实现的方法。时钟分频的原理及实现的方法。 计数器的知识。计数器的知识。 信号锁存的原理。信号锁存的原理。 数码管译码显示、片选及动态扫描的知识。数码管译码显示、片选及动态扫描的知识。 数字频率计的工作原理。数字频率
5、计的工作原理。二、计划二、计划 数字频率计的测频方法有等精度测频和计数测频,从实现的技术手数字频率计的测频方法有等精度测频和计数测频,从实现的技术手段来看目前可采取的有段来看目前可采取的有:下一页上一页7.2 完成工作任务的引导完成工作任务的引导 采用示规模数字集成电路制作采用示规模数字集成电路制作; 采用单片机进行测频控制采用单片机进行测频控制; 采用现场可编程门阵列采用现场可编程门阵列(FPGA)为控制核心。为控制核心。三、决策三、决策 采用现场可编程门阵列采用现场可编程门阵列(FPGA)为控制核心,利用为控制核心,利用VHDL语言编程,语言编程,将所有器件集成在一块芯片上,体积大大减示的
6、同时还提高了稳定性,将所有器件集成在一块芯片上,体积大大减示的同时还提高了稳定性,可实现大规模和超大规模的集成电路,测频测量精度高,测量频率范围可实现大规模和超大规模的集成电路,测频测量精度高,测量频率范围大,而且编程灵活、调试方便。大,而且编程灵活、调试方便。 综合上述分析,本设计采用现场可编程门阵列综合上述分析,本设计采用现场可编程门阵列(FPGA)为控制核心为控制核心测量方案。测量方案。下一页上一页四、实施四、实施 (一一)设计任务的详细描述设计任务的详细描述 设计一个频率计,其频率测量范围为设计一个频率计,其频率测量范围为1 Hz1 MHz,显示器件为,显示器件为4个个8段数码管段数码
7、管(带示数显示带示数显示)。根据测量所得的结果,可以白动转换量程。根据测量所得的结果,可以白动转换量程来显示输出的结果来显示输出的结果: 如频率为如频率为100 Hz,显示为,显示为F100; 如频率为如频率为5 kHz,显示为,显示为5.000; 如频率为如频率为50 kHz,显示为显示为50.00; 如频率为如频率为500 kHz,显示为,显示为500.0; 当输入的频率超过量程当输入的频率超过量程(1 MHz)时,数码管灭时,数码管灭(不显示不显示)。7.2 完成工作任务的引导完成工作任务的引导 为了与实际工程设计更贴近,我们选择天津启东科技公司的为了与实际工程设计更贴近,我们选择天津启
8、东科技公司的TQD-CYC 1C3 FPGA+MCU开发板作为项目的硬件开发平台,整开发板作为项目的硬件开发平台,整个项目代码最后下载至开发板上进行验证个项目代码最后下载至开发板上进行验证(相关程序代码稍做修改也相关程序代码稍做修改也可用于康芯可用于康芯GW48EDA_PK2/PK3实验箱上实验箱上)。 (二二)设计方案设计方案 计划将整个项目在开发板上实现。根据开发板上的硬件电路及设计计划将整个项目在开发板上实现。根据开发板上的硬件电路及设计任务的要求,对系统设计方案进行化分,将整个项目进行模块划分。任务的要求,对系统设计方案进行化分,将整个项目进行模块划分。 1.时钟模块时钟模块 开发板上
9、系统的时钟为开发板上系统的时钟为20 MHz,如,如图图7-1所示。所示。 测频的闸门信号为测频的闸门信号为1 S的高电平信号,同时将测频所得结果显示出的高电平信号,同时将测频所得结果显示出来,在数码管显示时采用动态扫描的方法,需要产生来,在数码管显示时采用动态扫描的方法,需要产生1 kHz的扫描信的扫描信下一页上一页7.2 完成工作任务的引导完成工作任务的引导号,所以要对系统的号,所以要对系统的20 MHz时钟信号进行分频,以产生符合要求的时钟信号进行分频,以产生符合要求的各频率信号各频率信号: 先由系统时钟先由系统时钟20 MHz分频出分频出1 kHz,再由,再由1 kHz分频出分频出1
10、Hz,由,由1 Hz的信号产生的信号产生1 s的计数闸门信号脉冲。该模块作为系统的第的计数闸门信号脉冲。该模块作为系统的第一个模块,还要接受测量信号的输入,同时我们还给整个系统定义系一个模块,还要接受测量信号的输入,同时我们还给整个系统定义系统复位。统复位。 由以上分析,可得出该模块的系统框图如由以上分析,可得出该模块的系统框图如图图7-2所示。所示。 图图7-2中,中,Reset为复位引脚,为复位引脚,clk为开发板系统时钟的输入,为开发板系统时钟的输入,clklk为为1 kHz的输出信号,的输出信号,tgate为为1 s的闸门输出信号。的闸门输出信号。 下一页上一页7.2 完成工作任务的引
11、导完成工作任务的引导 2.计数模块计数模块(图图7-3) 在闸门脉冲电平为在闸门脉冲电平为1时闸门开启,计数器开始计数,在闸门脉冲电时闸门开启,计数器开始计数,在闸门脉冲电平为平为0时,闸门关闭,计数器停止计数。时,闸门关闭,计数器停止计数。 同时,锁存器产生一个锁存信号输送到锁存器的使能端将结果锁存,同时,锁存器产生一个锁存信号输送到锁存器的使能端将结果锁存,并把锁存结果输送到译码器来控制七段显示器,这样就可以得到被测并把锁存结果输送到译码器来控制七段显示器,这样就可以得到被测信号的数字显示的频率。信号的数字显示的频率。 在闸门脉冲的下降沿到来时控制电路将计数器情零,为下一次测量在闸门脉冲的
12、下降沿到来时控制电路将计数器情零,为下一次测量做准备,实现了可重复使用,避免两次测量结果相加使结果产生错误。做准备,实现了可重复使用,避免两次测量结果相加使结果产生错误。 在整个电路中,计数模块电路是关键,闸门信号脉冲宽度是否精确在整个电路中,计数模块电路是关键,闸门信号脉冲宽度是否精确直接决定了测量结果是否精确。直接决定了测量结果是否精确。下一页上一页7.2 完成工作任务的引导完成工作任务的引导下一页上一页7.2 完成工作任务的引导完成工作任务的引导 3.锁存模块锁存模块(图图7-4) 锁存器在闸门信号关闭前锁存器在闸门信号关闭前(检测闸门信号下降沿检测闸门信号下降沿)实现锁存,并把锁实现锁
13、存,并把锁存结果输送到译码器来控制八段数码显示器。存结果输送到译码器来控制八段数码显示器。 4.显示模块显示模块(图图7-5) 显示模块将锁存模块送过来的数值进行译码显示,并根据锁存模块显示模块将锁存模块送过来的数值进行译码显示,并根据锁存模块送来的挡位信号确定示数点显示的位置以实现挡位的显示。送来的挡位信号确定示数点显示的位置以实现挡位的显示。(三三)模块的设计及实现模块的设计及实现1.时钟分频时钟分频 分频原理及分频系数的设定分频原理及分频系数的设定: 开发板的时钟频率设为开发板的时钟频率设为20 MHz,而为了给其他模块提供所需的各,而为了给其他模块提供所需的各时钟,需对时钟,需对20
14、MHz的时钟进行分频的时钟进行分频: 从从20 MHz分频得到分频得到1 kHz; 从从1 kHz分频得到分频得到1 Hz; 由由1 Hz得到占空比为得到占空比为1/4高电平时间为高电平时间为1 s的闸门信号。的闸门信号。 分频原理及分频系数的设定分频原理及分频系数的设定:为了从为了从20 MHz分频得到分频得到1 kHz,我,我们设定为一次分频,即由们设定为一次分频,即由20 MHz分频为分频为1 MHz,由,由1 MHz分频得分频得1 kHz。须设定分频的系数。须设定分频的系数:20 MHz与与1 MHz相差相差20倍,倍,20/2=10,设定分频变量为,设定分频变量为09,1 MHz与与
15、1 kHz相差相差1 000倍,倍,1 000/2=500,所以可以设分频的变量为,所以可以设分频的变量为VARIABLE cnt : INTEGERRANGE 0 TO 499,而从,而从1 kHz分频得到分频得到1 Hz,设分,设分频变量为频变量为0499。下一页上一页7.2 完成工作任务的引导完成工作任务的引导 2.计数模块计数模块 (1)计数的原理及采用的计数方法计数的原理及采用的计数方法 采用在闸门信号开启期间对输入信号脉冲进行计数的方法进行测频,采用在闸门信号开启期间对输入信号脉冲进行计数的方法进行测频,当闸门信号开启时计数,当闸门信号关闭时停止计数,在当闸门信号开启时计数,当闸门
16、信号关闭时停止计数,在1 s内计得的内计得的脉冲数即为输入信号的频率。由于频率计的计数值最大为脉冲数即为输入信号的频率。由于频率计的计数值最大为1M,因此代,因此代码中用码中用6个信号量个信号量(c1c6)来存储从第一位至第六位相对应的每一位来存储从第一位至第六位相对应的每一位的数值。从的数值。从c1 c6为逢为逢10进一位,所以进一位,所以c1 c6中存储的是输入信号中存储的是输入信号的十进制的数值。的十进制的数值。 (2)计数值的挡位划分计数值的挡位划分 由于数码管显示的为由于数码管显示的为4位数值,而计数值最高为位数值,而计数值最高为6位数值,因此对计位数值,因此对计数值进行分挡编码,以
17、便用数值进行分挡编码,以便用4位数码管通过示数点的定位来显示位数码管通过示数点的定位来显示6位数位数下一页上一页7.2 完成工作任务的引导完成工作任务的引导值。当计数值示于值。当计数值示于4位计数值时,数码管尤示数位数显示位计数值时,数码管尤示数位数显示;当计数值当计数值大于大于4位计数值时,取计数值高位计数值时,取计数值高4位,通示数点定位来显示数值。位,通示数点定位来显示数值。 挡位划分见挡位划分见表表7-1。3.锁存模块锁存模块 在闸门信号的下降沿,对输入的在闸门信号的下降沿,对输入的16位的计数值位的计数值q及挡位信号及挡位信号scale进行锁存,由于锁存是对闸门信号的下降沿进行检测完
18、成锁进行锁存,由于锁存是对闸门信号的下降沿进行检测完成锁存的,因此能将存的,因此能将scale数值在数值在reset复位复位(计数模块中的端口信计数模块中的端口信)前前锁存。锁存。 锁存模块的作用锁存模块的作用:设置锁存模块,既可避免计数值的丢失,还可设置锁存模块,既可避免计数值的丢失,还可以避免闸门信号计数期间,频率计的显示随着计数值的增加不断变以避免闸门信号计数期间,频率计的显示随着计数值的增加不断变化、闪烁。化、闪烁。 下一页上一页7.2 完成工作任务的引导完成工作任务的引导4.显示模块显示模块 将计数器所计得的数值显示出来,并通过挡位信号,完成示数点定位将计数器所计得的数值显示出来,并
19、通过挡位信号,完成示数点定位显示,通过显示示数点位置不同的数值来完成相应挡位的自动转换。显显示,通过显示示数点位置不同的数值来完成相应挡位的自动转换。显示模块对数值的显示译码要与设计的数码管驱动电路相对应。开发板上示模块对数值的显示译码要与设计的数码管驱动电路相对应。开发板上的数码管为的数码管为6连排数码管,它们的位段信号端连排数码管,它们的位段信号端(称为数据端称为数据端)接在一起,接在一起,同时还有同时还有6个位选信号个位选信号(称为控制端称为控制端)用于分别选中要显示数据的数码管。用于分别选中要显示数据的数码管。根据开发板的电路及设计要求,显示模块采用显示采用扫描驱动显示,根据开发板的电
20、路及设计要求,显示模块采用显示采用扫描驱动显示,并以七段译码的方式输出。并以七段译码的方式输出。 5.顶层模块顶层模块 采用原理图方式进行组装,具体方法参考采用原理图方式进行组装,具体方法参考7.3节有关内容。节有关内容。下一页上一页7.2 完成工作任务的引导完成工作任务的引导五、检查五、检查 分别编译各底层模块和整个电路设计,并分别仿真时钟分频、计分别编译各底层模块和整个电路设计,并分别仿真时钟分频、计数模块、锁模块、显示模块、顶层模块。通过后,若有条件,应将数模块、锁模块、显示模块、顶层模块。通过后,若有条件,应将源代码下载到硬件中做最后的验证。源代码下载到硬件中做最后的验证。六、评估六、
21、评估 对本次设计进行评估,可尝试更好的方案、方法。写出设计报告,对本次设计进行评估,可尝试更好的方案、方法。写出设计报告,设计报告应包括所应用到的设计报告应包括所应用到的EDA方法及知识的总结。方法及知识的总结。返 回上一页7.2 完成工作任务的引导完成工作任务的引导一、时钟模块参考设计一、时钟模块参考设计-clock.vhd-LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY clock IS PORT( 7.3 相关技术基础知
22、识与基本技能相关技术基础知识与基本技能下一页下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能 -复位信号复位信号 reset: IN STD_LOGIC; clk: IN STD_LOGIC; -闸门信号闸门信号 tgate: OUT STD_LOGIC; -1 kHz显示扫描时钟显示扫描时钟 clklk: OUT STD_LOGIC );END clock;ARCHITECTURE rtl of clock IS -常数说明常数说明CONSTANT RESET ACTIVE : STD LOGIC:=1;下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与
23、基本技能-信号说明信号说明 SIGNAL c1k1M_reg: STD_LOGIC; SIGNAL clklk_reg: STD_LOGIC; SIGNAL c1k1Hz: STD_LOGIC; SIGNAL tgate_reg: STD_LOGIC; BEGIN- 1MHz时钟时钟 - ClkIM_Proc: PROCESS(reset,clk) VARIABLE cnt0: INTEGER RANGE 0 TO 9;下一页上一页BEGIN IF reset=RESET ACTIVE THEN cnt0:=0; ELSIF rising_edge(clk) THEN IF cnt0 =9 T
24、HEN cnt0:=0; c1k1M_reg=not c1k1M_reg; ELSE cnt0:=cnt0+1 END IF; END IF;END PROCESS;7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能 - -1 kHz显示扫描时钟显示扫描时钟-Clklk_Froc: PROCESS(reset,clklM_reg)VARIABLE cnt: INTEGER RANGE 0 TO 500;BEGIN IF reset=RESET ACTIVE THEN cnt:=0; ELSIF rising_edge(c1k1M_reg) THEN IF cnt =499 THEN
25、cnt:=0; clk lk_reg=not clk lk_reg; 下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能 ELSE cnt:=cnt+1; END IF; END IF;END PROCESS;clklk=clklk_reg;- 1 kHz分频得到分频得到1 Hz-Clk1Hz_Proc: PROCESS( reset, clklk_reg)VARIABLE cnt2: INTEGER RANGE 0 TO 499;下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能 BEGIN IF reset=RESET ACTIVE THEN c
26、nt2:=0; ELSIF rising_edge(clklk_reg) THEN IF cnt2 -499 THEN cnt2:=0; clkl Hz=not c1k1Hz; ELSE cnt2:=cnt2+1; END IF; END IF;END PROCESS;下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能-一占空比为一占空比为1 /4频率为频率为0.25 Hz的闸门信号的闸门信号-Tgate_Froc: PROCESS( reset ,clklHz)VARIABLE cnt3:INTEG
27、ER RANGE 0 TO 3;BEGIN IF reset=RESET ACTIVE THEN cnt3:=0; tgate_reg=0; ELSIF rising_edge(c1k1Hz) THEN IF cnt3=2 THEN tgate reg=1; cnt3:=3; ELSIF cnt3=3 THEN tgate_reg=0; cnt3:=0; ELSE cnt3:=cnt3+1; END IF; END IF; END PROCESS; tgate =tgate_reg; END rtl;下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能工程项目的建立及仿真工
28、程项目的建立及仿真: 首先打开首先打开Quartus软件,选择建立新工程项目选项,在出现的器件软件,选择建立新工程项目选项,在出现的器件选择窗口中可选择开发板所用的芯片选择窗口中可选择开发板所用的芯片EP1C3144C8(也可在以后锁定也可在以后锁定引脚时指定芯片的型号引脚时指定芯片的型号),如,如图图7-6所示。所示。 按提供的示例代码建立按提供的示例代码建立clokc.vhd文件后编译。编译通过则说明文件后编译。编译通过则说明clokc.vhd文件没有语法错误,但不一定符合设计的要求,为了验证文件没有语法错误,但不一定符合设计的要求,为了验证文件是否符合设计,须对该文件建行仿真。文件是否符
29、合设计,须对该文件建行仿真。 时钟模块时钟模块clokc.vhd的仿真步骤如下的仿真步骤如下: 1.仿真文件的建立仿真文件的建立(图图7-7) 2.添加仿真的各个端口添加仿真的各个端口(图图7-8) 3.设计各仿真的参数设计各仿真的参数下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能 设定输入端口设定输入端口clk的频率为的频率为20 MHz; 由于只击对模块功能进行验证,修改仿真的模式为由于只击对模块功能进行验证,修改仿真的模式为Functional,如,如图图7-9所示。所示。 对时钟模块仿真时要特别注意,由于从对时钟模块仿真时要特别注意,由于从20 MHz分频至分
30、频至0.25 Hz 闸门信号的仿真运算量太大,是无法完成一个闸门信号周期的仿真的。闸门信号的仿真运算量太大,是无法完成一个闸门信号周期的仿真的。但由时钟模块的但由时钟模块的VHDL文件可以看出,我们是分步完成分频的,从文件可以看出,我们是分步完成分频的,从20 MHz分频到分频到1 kHz与从与从1 kHz分频到分频到0.25 Hz的算法是一致的,所的算法是一致的,所以只需仿真出以只需仿真出1 kHz信号即可认为时钟模块代码是正,确。信号即可认为时钟模块代码是正,确。 设定仿真的时间为设定仿真的时间为10 ms,仿真结果如,仿真结果如图图7-10所示。所示。查看仿真结查看仿真结果可知,果可知,
31、clklk输出信号的周期为输出信号的周期为1 ms,程序达到了分频要求。,程序达到了分频要求。下一页上一页 7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能二、计数模块参考设计二、计数模块参考设计 -counter.vhd-LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY counter IS port( -全局复位全局复位 reset: IN STD_LOGIC;下一页上一页7.3 相关技术基础知识与基本技能相关技
32、术基础知识与基本技能 -闸门信号闸门信号 tgate: IN STD_LOGIC; -待测信号待测信号 tsig: IN STD_LOGIC; -计数输出计数输出 q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0); -挡位输出挡位输出 scale: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END counter;ARCHITECTURE rtl of counter IS-常数说明常数说明CONSTANT RESET_ACTIVE:STD_LOGIC:=0;下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能 -信号说明信号说
33、明SIGNAL c1:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL c2:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL c3:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL c4:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL c5:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL c6:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL scale_reg: STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL overflow: S
34、TD_LOGIC;BEGINCOUNT_PROC:PROCESS(reset,tsig,tgate)下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能 BEGIN IF reset=RESET ACTIVE THEN c1=0000 ; c2=0000 ; c3=0000 ; c4=0000 ; c5=0000 ; c6=0000 ; overflow=0; ELSIF rising_edge(tsig) THEN IF tgate=1 THEN 下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能IF c1”1001 THEN c1=c1+1; EL
35、SE c1=0000; IF c21001 THEN c2=c2+1; ELSE c2=0000 ; IF c3”1001 THEN c3=c3+1; ELSE c3=0000; 下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能 IF c4”1001 THEN c4=c4+1; ELSE c4=0000 ; IF c5”1001 THEN c5=c5+1; ELSE c5=0000 ; IF c6”1001 THEN c6=c6+1; ELSE -计数溢出计数溢出 overflow= 1;下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能 END
36、IF; END IF; END IF; END IF; END IF; END IF; END IF; END IF; END PROCESS:SCALE_PROC:PROCESS(reset,cl,c2,c3,c4,c5,c6,overflow)BEGIN IF reset=RESET ACTIVE THEN 下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能 scale_ref=1MHz scale_ref=001;ELSIF c6/=0000 THEN -100.0 kHz - 999.9 kHz q=c6&c5&c4&c3; scale_ref=010;ELSIF
37、 c5/=0000 THEN -10.00 kHz一一99.99 kHz q=c5&c4&c3&c2; scale_reg=011; 下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能下一页上一页7.3 相关技术基础知识与基本技能相关技术基础知识与基本技能 ELSIF c4/=0000 THEN -1.000 kHz一一9.999kHz q=c4&c3&c2&c1; scale_ref=”100; ELSE -1Hz - 999Hz q=”1111&c3&c2&c1; scale_ref=”101; END IF; END PROCESS; scale=scale_reg
38、;END rtl;下一页上一页 计数模块对应不同频率时仿真的输出数值和对应的挡位输出。计数模块对应不同频率时仿真的输出数值和对应的挡位输出。 计数模块中将复位信号与闸门信号相连,当闸门信号关闭时计计数模块中将复位信号与闸门信号相连,当闸门信号关闭时计数模块复位情零,所以计数模块为低电平复位。在设定复位信号与数模块复位情零,所以计数模块为低电平复位。在设定复位信号与闸门信号脉冲时应使两者信号一致。闸门信号脉冲时应使两者信号一致。 设定输入信号频率为设定输入信号频率为5 000 Hz(周期为周期为200 s),如如图图7-11所示。所示。 仿真结果如仿真结果如图图7-12所示。所示。 仿真所得结果
39、数值的判断仿真所得结果数值的判断: 输入输入5 000 Hz信号,正确,与挡位相符合。信号,正确,与挡位相符合。 由于由于q是输出端口,输出的数值为是输出端口,输出的数值为q=5000,输出的挡位输出的挡位7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能下一页上一页为为100,计数值在,计数值在reset情零前已输出至端口,因此闸门信号关情零前已输出至端口,因此闸门信号关闭后数值不改变,而闭后数值不改变,而scale输出端口是通过信号输出端口是通过信号scale_reg传递传递数值的,在数值的,在SCALE_PROC进程中,由于进程中,由于 IF reset = RESET_ACT
40、IVE THEN scale reg=000; 因而仿真在闸门信号关闭后输出为因而仿真在闸门信号关闭后输出为0,但可以通过后面的锁存,但可以通过后面的锁存模块,通过对闸门信号下降沿的检测完成对模块,通过对闸门信号下降沿的检测完成对scale情零前的锁存情零前的锁存输出。输出。 scale挡位随挡位随q计数值的改变计数值的改变: 当当q计数值由二位数变化为计数值由二位数变化为四位数后,四位数后,scale挡位应由挡位应由101变化为变化为100。 7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能下一页上一页7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能 对对scale数
41、值由数值由101变化为变化为100处的仿真图形放大观察,可以看处的仿真图形放大观察,可以看到此时到此时q的数值由的数值由999变化为变化为1 000,与挡位转换表的要求相符,如,与挡位转换表的要求相符,如图图7-13所示。所示。 将仿真图形放大,查看输入信号脉冲计数及相应的进位,如将仿真图形放大,查看输入信号脉冲计数及相应的进位,如图图7-14所示所示。 由仿真图形可知,对输入信号的每一个脉冲,计数信号由仿真图形可知,对输入信号的每一个脉冲,计数信号c1都增加都增加1,当,当c1增增加至加至10时,时,c1情零并向情零并向c2进一位,符合我们十进制数的进一位,符合我们十进制数的计数和进位要求。
42、计数和进位要求。 由仿真所得的结果,可知设计达到了要求。由仿真所得的结果,可知设计达到了要求。下一页上一页7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能三、锁存模块参考设计三、锁存模块参考设计-lock.vhd-LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY lock IS PORT( -闸门信号闸门信号 tgate:IN STD_LOGIC;下一页上一页 -输入信号输入信号 q_in:IN STD_LOGIC_
43、VECTOR(15 DOWNTO 0); scale_in: IN STD_LOGIC_VECTOR(2 DOWNTO 0); -锁存信号锁存信号 q-lock:OUT STD_LOGIC_VECTOR(15 DOWNTO 0); scale_lock:OUT STD_LOGIC_VECTOR(2 DOWNTO 0) );END lock;ARCHITECTURE rtl of lock IS 7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能 BEGIN LOCK_PROC:PROCESS(tgate) BEGIN IF falling_edge(tgate) THEN q_loc
44、k=q_in; scale_lock Fresent_State_Register: PROCESS(reset,clklk); BEGIN IF reset=RESET ACTIVE THEN count=11 THEN count=00; ELSE count=count+O1; END IF; END IF; CASE count IS7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能下一页上一页7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能 -第一个数码管亮第一个数码管亮 sel_reg=0001; q_reg sel_reg=0010; q_reg sel r
45、eg=0100; q_reg sel_reg=”1000; q_reg -所有数码管全灭所有数码管全灭 sel_reg=0000; q_red=0000 ; END CASE; END PROCESS; -注意注意:show reg不包含示数点位不包含示数点位 下一页上一页 WITH q_reg SELECT show_reg=0111111 WHEN 0000, 0000110 WHEN 0001, 1011011 WHEN 0010, 1001111 WHEN 0011, 1100110 WHEN 0100, 1101101 WHEN 0101, 1111101 WHEN 0110, 01
46、00111 WHEN 0111, 1111111 WHEN”1000, 1101111 WHEN”1001, 0000000 WHEN others; 7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能show= 1&show reg WHEN (sel_reg=0010 AND scale=010) OR (sel_reg=0100 AND scale=01l) OR (sel_reg=”1000 AND scale=”100) ELSE -超量程时,超量程时,4位数码管全灭位数码管全灭 00000000 WHEN scale=001 ELSE 0&show_reg; sel=se
47、l_reg;END rtl; 7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能下一页上一页程序代码解释程序代码解释: 数码管的显示代码数码管的显示代码: 通过通过count变量的改变完成数码管片选扫描。变量的改变完成数码管片选扫描。 sel_reg=0001; q_reg=q(3 DOWNTO 0) (第第4位数码的片选和显示数值的传递位数码的片选和显示数值的传递) sel_reg=0010; q_reg=q(7 DOWNTO 4); (第第3位数码的片选和显示数值的传递位数码的片选和显示数值的传递) sel_reg=0100; q_reg=q(11 DOWNTO 8); 7.3
48、相关技术基本知识与基本技能相关技术基本知识与基本技能下一页上一页下一页上一页7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能 (第第2位数码的片选和显示数值的传递位数码的片选和显示数值的传递) sel_reg=”1000; q_reg=q(15 DOWNTO 12); (第第4位数码的片选和显示数值的传递位数码的片选和显示数值的传递) 通过以上语句,将十六位的通过以上语句,将十六位的二二进计数值由高至低、四位一组传递到进计数值由高至低、四位一组传递到要显示的相对应的数码管。要显示的相对应的数码管。 通过通过Show_reg =“0111111” WHEN “0000”,-数码管显示
49、数码管显示0 “0000110” WHEN “0001”,-数码管显示数码管显示1 “1011011“ WHEN ”0010”,-数数码码管显示管显示2 “1001111” WHEN “0011”,-数码管显示数码管显示3 下一页上一页 “1100110” WHEN “0100”,-数数码码管显示管显示4 “1101101” WHEN “0101”,-数码管显示数码管显示5 “1111101” WHEN “0110”,-数码管显示数码管显示6 “0100111” WHEN “0111”,-数码管显示数码管显示7 “1111111” WHEN “1000”,-数码管显示数码管显示8 “11011
50、11” WHEN “1001”,-数码管显示数码管显示9 “0000000” WHEN others; -数数4已管不显示已管不显示 语句完成数码管数值显示的译码。语句完成数码管数值显示的译码。通过通过show=1&show_reg WHEN (sel_reg= 0010 AND scale=010) OR 7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能下一页上一页 (sel_reg =0100 AND scale =01l) OR (sel_reg =”1000 AND scale =”100) ELSE -超量程时,超量程时,4位数码管全灭位数码管全灭 “00000000”
51、WHEN scale=“001” ELSE o&show_reg; 语句完成示数点该在哪位数码管显示。语句完成示数点该在哪位数码管显示。 2.显示模块的仿真显示模块的仿真 显示模块的仿真参数的设定显示模块的仿真参数的设定:clklk周期为周期为1 ms, reset=0,仿真,仿真时间定为时间定为3 s; 对对q的值设定的值设定(十六进制十六进制): 01s期间为期间为0123,1 2 s期间为期间为4500,23 s期期间间为为6789。 7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能下一页上一页7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能 对对scale的值设
52、定的值设定(二进制二进制): 01 s期间为期间为q=0123时相对应的时相对应的挡位值为挡位值为101,1 3 s期间为期间为q = 4500, q = 6789时相对应的时相对应的挡位值为挡位值为100。 通过对输入的端口通过对输入的端口q和和scale不同值的设定,在仿真结果中就可以不同值的设定,在仿真结果中就可以检查是否能正,确地显示数值检查是否能正,确地显示数值09及正确的数值的示数点定位。及正确的数值的示数点定位。 q = 0123时得到的仿真波形如时得到的仿真波形如图图7-17所示。所示。 查对应的数码管译码显示,查对应的数码管译码显示, 可可知第四位显示为知第四位显示为3(se
53、l: 0001 show : 01001111) 第第三三位显示为位显示为2(sel: 0010 show: 01011011), 第第二二位数显示为位数显示为1(sel: 0100 show: 00000110), 第一位显示为第一位显示为0(情注意,由于只是对情注意,由于只是对display单个模块仿真,单个模块仿真,下一页上一页7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能对对q值的输入是十六进制,数值前加了值的输入是十六进制,数值前加了0,所以数码显示出,所以数码显示出0,但下载,但下载到开发板后,数值前的到开发板后,数值前的0是不显示的是不显示的),数码管显示的数值由高
54、到低的,数码管显示的数值由高到低的值为值为0123,与输入的与输入的q值相符。值相符。q = 4500时得到的仿真波形如时得到的仿真波形如图图7-18所示。所示。 查对应的数码管译码显示,查对应的数码管译码显示,可可知第四、第二位显示为知第四、第二位显示为0(sel: 0001 0010 show:0 0111111),第一位显示为,第一位显示为5(sel: 010 show: 01101101),第一位数码管显示与前面不同,其最高位为,第一位数码管显示与前面不同,其最高位为数值数值1,当该位为,当该位为1时数码管带示数点显示数值,所以该位显示为时数码管带示数点显示数值,所以该位显示为4 (s
55、el : 1000 show : 11100110),数码管显示的数值由高到,数码管显示的数值由高到低的值为低的值为4500,除显示与输入的,除显示与输入的q值相符外,还根据数值的大示自值相符外,还根据数值的大示自动转换了显示的量程。动转换了显示的量程。 下一页上一页 查看查看q = 4500时得到的仿真波形,读出数码管显示的读数为时得到的仿真波形,读出数码管显示的读数为6789。 由仿真的结果,可知代码能正确地显示由仿真的结果,可知代码能正确地显示09的数值,并能根据输入的数值,并能根据输入的数值自动转换量程显示,达到了代码设计的要求。的数值自动转换量程显示,达到了代码设计的要求。五、系统的
56、整体的组装参考步骤五、系统的整体的组装参考步骤 新建一工程项目,将各模块的新建一工程项目,将各模块的vhd.文件添加到工程文件添加到工程; 新建一原理图设计文件,并将原理图文件设为顶层文件。新建一原理图设计文件,并将原理图文件设为顶层文件。 编译各模块的编译各模块的vhd文件,选择菜单命令文件,选择菜单命令File Create/Update Create Symbol Files for Current File,将各模块生成工程项目元件。,将各模块生成工程项目元件。 7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能 打开原理图设计文件,打开打开原理图设计文件,打开Symbol窗
57、口,选择窗口,选择Project选项,选项,如如图图7-19所示。所示。 将各项目元件图加入原理图设计文件中,连接各元件,完成原理将各项目元件图加入原理图设计文件中,连接各元件,完成原理图设计文件,如图设计文件,如图图7-20所示。所示。 对原理图顶层文件编译。对原理图顶层文件编译。六、下载验证参考步骤六、下载验证参考步骤1.锁定引脚锁定引脚 根据开发板上各根据开发板上各引引脚的定义脚的定义(可参考开发板的使用手册或本章最后所可参考开发板的使用手册或本章最后所附的引脚锁定时项目端口在开发板上的对应管脚资料附的引脚锁定时项目端口在开发板上的对应管脚资料),完成项目原理,完成项目原理图各引脚的锁定
58、,如图各引脚的锁定,如图图7-21所示。所示。7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能下一页上一页 注意注意:完成引脚锁定后必须对项目重新再编译。完成引脚锁定后必须对项目重新再编译。 2.下载配置文件下载配置文件(采用采用JTAG模式,如模式,如图图7-22所示所示)至开发板运行至开发板运行 要使下载后代码能够运行,必须将系统复位输入端口要使下载后代码能够运行,必须将系统复位输入端口reset锁定开锁定开发板相对应引脚发板相对应引脚PIN_29上的拨码开关拨至上的拨码开关拨至ON处,使系统不处在复位处,使系统不处在复位状态。状态。 下载运行频率计测量所得结果与信号发生器输出
59、的频率相一致,下载运行频率计测量所得结果与信号发生器输出的频率相一致,如如图图7-23和和图图7-24所示。所示。 附附:引脚锁定时项目端口在开发板上的对应管脚资料引脚锁定时项目端口在开发板上的对应管脚资料(表表7-2表表7-4,图图7-25图图7-26)7.3 相关技术基本知识与基本技能相关技术基本知识与基本技能返 回上一页 本章设计了一个数字频率计,设计采用本章设计了一个数字频率计,设计采用FPGA现场可编程门阵列为现场可编程门阵列为控制核心,通过硬件描述语言控制核心,通过硬件描述语言VHDL编程,在编程,在Quartus 6.0平台上编平台上编译、仿真、调试,并下载到译、仿真、调试,并下
60、载到FPGA芯片上,能够较准确地测量方波信号芯片上,能够较准确地测量方波信号的频率,达到了设计要求。的频率,达到了设计要求。 7.4 本章小结本章小结返 回 图图7-1 开发板时钟电路开发板时钟电路返 回 图图7-2 时钟模块时钟模块返 回 图图7-3 计数计数模块模块返 回 图图7-4 锁存锁存模块模块返 回 图图7-5 显示显示模块模块返 回 图图7-6 系统芯片选定系统芯片选定返 回 图图7-7 建立仿真文件建立仿真文件返 回 图图7-8 添加仿真的各个端口添加仿真的各个端口返 回 图图7-9 修改仿真的模式修改仿真的模式返 回 图图7-10 时钟仿真模块时钟仿真模块返 回 图图7-11
61、 设定输入信号频率设定输入信号频率返 回 图图7-12 计数模块的仿真计数模块的仿真返 回 图图7-13 计数模块仿真计数模块仿真scale挡位挡位 随随q计数值的改变计数值的改变返 回 图图7-14 计数模块仿真计数模块仿真输入信号输入信号 脉冲计数及相应的进位脉冲计数及相应的进位返 回 图图7-15 锁存仿真锁存仿真返 回 图图7-16 共阴极数码管引脚图共阴极数码管引脚图返 回图图7-17 q = 0123时得到的仿真波形时得到的仿真波形返 回图图7-18 q = 4500时得到的仿真波形时得到的仿真波形返 回 图图7-19 选择项目元件选择项目元件返 回 图图7-20 原理图设计文件原理图设计文件返 回 图图7-21 原理图各引脚的锁定原理图各引脚的锁定返 回 图图7-22 下载配置文件下载配置文件返 回图图7-23 信号发生器输出的方波信号发生器输出的方波返 回图图7-24 开发板程序下载运行后开发板程序下载运行后 测得的频率数显测得的频率数显返 回图图7-25 开发板拨码开关电路开发板拨码开关电路返 回图图7-26 IO管脚映射管脚映射返 回表表7-1 挡位划分挡位划分返 回表表7-2 开发板系统时钟引脚开发板系统时钟引脚下一页图图7-3 开发板数码管管脚映射表开发板数码管管脚映射表下一页图图7-4 开发板拨码开关管脚映射表开发板拨码开关管脚映射表返 回