好文档 - 专业文书写作范文服务资料分享网站

论文 基于vhdl语言直接测频法频率计设计(原创) - 图文

天下 分享 时间: 加入收藏 我要投稿 点赞

5.结论

通过为期一周的课程设计,完成了本次设计的技术指标,刚开始设计的时候,由于VHDL语言编写程序这部分比较难懂, 所以参考了很多网上的程序,由于多个模块的使用较为混乱,所以我选择了将各个模块放在一个顶层文件里面,这样看起来更好理解,也方便修改。在硬件测试的过程中发现测量频率时,档位在1Hz~9999999Hz,最终得到的结果,测量结果非常接近测量值。

6.心得体会

本次课程设计让我体味到设计电路、调测电路过程中的辛苦和成功时的喜悦。这次课程设计给我们提供了一个应用自己所学知识的机会,尽管之前掌握这方面的知识较为贫乏,但是从到网上查找资料到对电路的设计对电路的调试再到最后电路的成型,我都是尽全力认真完成,并且虚心积极的向他人请教,过程中发现了自己有很多相关知识并不掌握。检查过程是一个考验人耐心的过程,不能有丝毫的急躁,马虎,对电路的调试要一步一步来,有时一个字眼的错误就可能让我找很久,如果没有耐心和细心,是很难找到的,在定义管脚时,又要求我们对管脚设置清楚。在整个课程设计完后,我觉得学以致用是学习的重要过程,以前上课都是理论的东西,只有将所学的知识运用到实际中去,才能体现其价值。在这个过程中,我学得到很多在书本上学不到的东西,如:对程序的整体把握提升了,对VHDL语言的理解更加深刻等。不管是在Quartus软件的应用,还是在VHDL编程语言的学习,或是硬件的操作我都有了一定的提高。通过紧张的设计实践,我觉得自己的动手能力有了很大的提高,在课程设计中自己动脑子解决遇到的问题,有不懂的地方向他人请教。书本上的知识有了用武之地,这又巩固和深化了自己的知识结构。

6

附录:

程序: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity plj is

port ( start:in std_logic; --复位信号 clk :in std_logic; --系统时钟 clk2: IN STD_LOGIC; --被测信号 key2 :in std_logic; --低四位显示控制 yy1:out std_logic_vector(7 downto 0); --八段码

w1 :out std_logic_vector(3 downto 0)); --数码管位选信号 end plj;

architecture behav of plj is signal clk1: std_logic; --被测信号输入端 signal b1,b2,b3,b4,b5,b6,b7:std_logic_vector(3 downto 0); --十进制计数器 signal bcd:std_logic_vector(3 downto 0); --数据锁存器 signal q :integer range 0 to 49999999; --秒分频系数

signal qq : integer range 0 to 499999; --动态扫描分频系数

signal en,bclk:std_logic; --使能信号,有效被测信号 signal sss : std_logic_vector(3 downto 0); --小数点 signal bcd0,bcd1,bcd2,bcd3: std_logic_vector(3 downto 0); --锁存7位十进制计数器中有效的高4位或低4位数据

begin

clk1<=clk2; --被测信号赋给被测信号输入端

second:process(clk) --此进程产生一个持续时间为一秒的的闸门信号 begin

if start='0' then q<=0;

elsif clk'event and clk='1' then if q<49999999 then q<=q+1; else q<=49999999; end if; end if;

if q<49999999 and start='1' then en<='1'; else en<='0'; end if; end process;

7

and2:process(en,clk1) --此进程得到7位十进制计数器的计数脉冲 begin

bclk<=clk1 and en; end process;

com:process(start,bclk) --此进程完成对被测信号计脉冲数 begin

if start='0' then --复位

b1<=\ elsif bclk'event and bclk='1' then

if b1=\ --此IF语句完成个位十进制计数 if b2=\ --此IF语句完成百位十进制计数 if b3=\ --此IF语句完成千位十进制计数 if b4=\ --此IF语句完成万位十进制计数 if b5=\ --此IF语句完成十万位十进制计数 if b6=\ --此IF语句完成百万位十进制计数 if b7=\此IF语句完成千万位十进制计数 else b7<=b7+1; end if;

else b6<=b6+1; end if;

else b5<=b5+1; end if;

else b4<=b4+1; end if;

else b3<=b3+1; end if;

else b2<=b2+1; end if;

else b1<=b1+1; end if; end if; end process;

process(clk) --此进程把7位十进制计数器有效数据送入bcd0~3,并得到小数点信息 begin

if rising_edge(clk) then if en='0' then

if key2='0' then bcd3<=b4; bcd2<=b3; bcd1<=b2; bcd0<=b1; sss<=\ else if b7>\ sss<=\ --小数点在第4位

8

elsif b6>\then bcd3<=b6; bcd2<=b5; bcd1<=b4; bcd0<=b3; sss<=\--小数点在第3位 elsif b5>\then bcd3<=b5; bcd2<=b4; bcd1<=b3; bcd0<=b2; sss<=\小数点在第2位 else bcd3<=b4; bcd2<=b3; bcd1<=b2; bcd0<=b1; sss<=\ --当小于10kHz时,小数点去掉,单位变为Hz end if; end if; end if; end if; end process;

weixuan:process(clk) --此进程完成数据的动态显示 begin

if clk'event and clk='1' then

if qq< 99999 then qq<=qq+1;bcd<=bcd3; w1<=\ if sss=\ --显示第1位的数值和小数点 else yy1(0)<='1'; end if;

elsif qq<199999 then qq<=qq+1;bcd<=bcd2; w1<=\ if sss=\ --显示第2位的数值和小数点 else yy1(0)<='1'; end if;

elsif qq<299999 then qq<=qq+1;bcd<=bcd1; w1<=\ if sss=\ --显示第3位的数值和小数点 else yy1(0)<='1'; end if;

elsif qq<399999 then qq<=qq+1;bcd<=bcd0; w1<=\ if sss=\ --显示第4位的数值和小数点 else yy1(0)<='1'; end if; else qq<=0; end if; end if; end process;

m0: process (bcd) --译码 begin

case bcd is

when \ when \

9

when \ when \ when \ when \ when \ when \ when \ when \ when others=>yy1(7 downto 1)<=\ end case; end process; end behav;

10

4qkkr5jv5062a898ee6k
领取福利

微信扫码领取福利

微信扫码分享