EDA课程设计.docx

上传人:b****5 文档编号:3543938 上传时间:2022-11-23 格式:DOCX 页数:15 大小:132.53KB
下载 相关 举报
EDA课程设计.docx_第1页
第1页 / 共15页
EDA课程设计.docx_第2页
第2页 / 共15页
EDA课程设计.docx_第3页
第3页 / 共15页
EDA课程设计.docx_第4页
第4页 / 共15页
EDA课程设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

EDA课程设计.docx

《EDA课程设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计.docx(15页珍藏版)》请在冰豆网上搜索。

EDA课程设计.docx

EDA课程设计

《EDA技术使用教程》

课程设计报告

 

题目名称:

设计一个1HZ~9999HZ的频率计

学生姓名:

学号:

专业年级:

指导教师:

时间:

2014年12月28日

目录

一.设计任务与要求1

二.设计思路2

三.频率计设计原理3

四.频率计的各个设计模块4

4.1.频率产生器lpm_counter0:

4

4.2.测频控制信号发生器testpl:

6

4.3.十进制计数器cnt10:

7

4.4.16位锁存器reg16b:

9

4.5.数码管控制器ledcom:

10

4.6.译码器ymq:

12

4.7元件声明及例化14

五.仿真结果16

六.心得体会17

七.参考文献18

 

1.设计任务与要求

设计一个1HZ~9999HZ的频率计,需满足一下条件:

1)待测信号为方波信号,且已进行量化,1表示高电平,0表示低电平,占空比不定;

2)提供一个1HZ的信号,去控制打开被检测信号的与门,使计数器在一秒钟内计数;

3)数码管显示的就是被检测信号的频率,以十进制显示;

4)系统时钟10MHz

 

2.设计思路

数字频率计是一种用十进制数字显示被测信号频率的数字测量仪器.它的基本功能是测量方波信号及其他各种单位时间内变化的物理量。

本数字频率计采用自顶向下的设计思想,通过闸门提供的1s闸门时间对被测信号进行计数及测出的被测信号的频率,测出的频率再通过译码器译码后输出给显示器显示。

我分为以下的六个部分来完成这次的设计:

1)频率产生器lpm_counter0:

2)测频控制信号发生器testpl:

3)十进制计数器cnt10:

4)16位锁存器reg16b

5)数码管控制器ledcom:

6)译码器ymq:

在实验仿真电路中clk端口用实验箱的输出为标准时基信号,sig端口接入被测的信号,clr端口连接一个电平开关,将电平开关-置高电平,输出端接好LED显示器就可以观察被测信号的频率了。

 

3.频率计设计原理

在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。

测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。

数字式频率计的测量原理有两类:

一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法即测周期法,如周期测频法。

直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数器阀门的时间长短在达到不同的测量精度;间接测频法适用于低频信号的频率测量。

在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。

测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。

数字式频率计的测量原理有两类:

一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法即测周期法,如周期测频法。

直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数器阀门的时间长短在达到不同的测量精度;间接测频法适用于低频信号的频率测量。

本设计中使用的就是直接测频法,即用计数器在计算1s内输入信号周期的个数,其测频范围为1Hz~9999H。

 

4.频率计的各个设计模块

4.1.频率产生器lpm_counter0:

有一50MHz的时钟输入端clk,经过分频处理后从输出端q[26..0]输出27种频率信号,从中选出三个不同频率的信号:

q[25]为1Hz输入testpl的clk端,q[13]为测试信号输入低位计数器的cnt10的clk端,q[17]为数码管显示选择的扫描信号输入数码管控制器的clk端。

libraryieee;

useieee.std_logic_1164.all;

librarylpm;

uselpm.lpm_components.all;

entitylpm_counter0is

port(clock:

instd_logic;

q:

outstd_logic_vector(26downto0));

endlpm_counter0;

architecturesynoflpm_counter0is

signalsub_wire0:

std_logic_vector(26downto0);

componentlpm_counter

generic(

lpm_direction:

string;

lpm_port_updown:

string;

lpm_type:

string;

lpm_width:

natural

);

port(clock:

instd_logic;

q:

outstd_logic_vector(26downto0));

endcomponent;

begin

q<=sub_wire0(26downto0);

lpm_counter_component:

lpm_counter

genericmap(

lpm_direction=>"up",

lpm_port_updown=>"port_unused",

lpm_type=>"lpm_counter",

lpm_width=>27

portmap(

clock=>clock,

q=>sub_wire0

);

endsyn;

 

 

 

4.2.测频控制信号发生器testpl:

输入端clk收到1Hz信号后,其输出端testen控制各个cnt10的使能,clr_cnt控制各个cnt10的清零,load控制锁存器内数据的输出。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitytestplis

port(clk:

instd_logic;--1Hz信号

tsten:

outstd_logic;--计数器使能信号

clr_cnt:

outstd_logic;--计数器清零信号

load:

outstd_logic);--锁存器输出控制信号

endtestpl;

architectureartoftestplis

signaldiv2clk:

std_logic;

begin

process(clk)

begin

ifclk'eventandclk='1'then

div2clk<=notdiv2clk;--div2clk为2Hz

endif;

endprocess;

process(clk,div2clk)

begin

if(clk='0'anddiv2clk='0')then

clr_cnt<='1';--当div2clk与clk同时为零时计数器清零

elseclr_cnt<='0';--当div2clk处于的高电平时计数器计数

endif;

endprocess;

load<=notdiv2clk;--锁存器输出与计数器使能信号反相

tsten<=div2clk;

endart;

 

4.3.十进制计数器cnt10:

有一时钟使能输入端en,用于锁定计数值。

当高电平"1"时计数允许计数,低电平"0"时禁止计数。

多位十进制计数器时,最低位的计数器的clk端输入被测信号,各计数器的进位输出端c10将信号输到下一位十进制计数器cnt10的输入端clk,最高位十进制计数器cnt10的进位输出端c10不处理。

代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt10is

port(clk,clr,en:

instd_logic;

--clk:

计数器时钟,clr:

清零信号,en:

计数使能信号

q:

outstd_logic_vector(3downto0);--q:

4位计数结果输出

c10:

outstd_logic);--计数进位

endcnt10;

architectureartofcnt10is

signalcqi:

std_logic_vector(3downto0);

begin

process(clk,clr)

begin

ifclr='1'thencqi<="0000";

--当输入的clr_cnt为低电平0时清零

elsifclk'eventandclk='1'then

ifen='1'then

--当输入的tesen为高电平1时允许计数

if(cqi<9)thencqi<=cqi+1;

elsecqi<="0000";--等于9则计数器清零

endif;

--当输入的tesen为低电平0时禁止计数,锁定计数值

endif;

endif;

endprocess;

--产生进位

process(cqi)

begin

ifcqi="1001"thenc10<='1';--当加的9时产生进位输出

elsec10<='0';

endif;

endprocess;

q<=cqi;

endart;

 

 

4.4.16位锁存器reg16b:

将已有16位bcd码存在于此模块的输入口din[15..0],在信号load的上升沿后即被锁存到寄存器reg16b的内部,并由reg16b的输出端dout[15..0]输出,设置锁存器的好处是,数码管上显示的数据稳定,不会由于周期性的清零信号而不断闪烁。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityreg16bis

port(load:

instd_logic;--输出锁存控制信号

din:

instd_logic_vector(15downto0);

dout:

outstd_logic_vector(15downto0));

endreg16b;

architectureartofreg16bis

begin

process(load,din)

begin

ifload'eventandload='1'then

--load为高电平时teten为低电平,计数器禁止

dout<=din;--锁存输入的数据

endif;

endprocess;

endart;

4.5.数码管控制器ledcom:

两个输入端一个为datain[15..0],另一个为数码管显示选择的扫描频率输入端clk,输出端为数码管选择信号com[3..0]和对应显示的数码管的BCD码信号端dataout[3..0],数码管显示选择随扫描频率clk循环变化,实现稳定显示。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityledcomis

port(clk:

instd_logic;--数码管扫描频率

datain:

instd_logic_vector(15downto0);--锁存器输入的16位信号

dataout:

outstd_logic_vector(3downto0);--输出至译码器的4位信号

com:

outstd_logic_vector(3downto0));--输出数码管选择信号

endledcom;

architectureartofledcomis

signalcomclk:

std_logic_vector(1downto0);

begin

--comclk同扫描频率clk循环变化

process(clk)

begin

ifrising_edge(clk)then

ifcomclk>=3then

comclk<="00";

elsecomclk<=comclk+1;

endif;

endif;

endprocess;

--数码管选择

process(comclk)

begin

casecomclkis

when"00"=>com<="1000";

when"01"=>com<="0100";

when"10"=>com<="0010";

when"11"=>com<="0001";

whenothers=>NULL;

endcase;

endprocess;

--对应数码管的输出

process(comclk,datain)

begin

casecomclkis

when"11"=>dataout<=datain(3downto0);

when"10"=>dataout<=datain(7downto4);

when"01"=>dataout<=datain(11downto8);

when"00"=>dataout<=datain(15downto12);

whenothers=>NULL;

endcase;

endprocess;

endart;

 

4.6.译码器ymq:

输入端d_in[3..0]将接收BCD码信号,译码后输出端d_out[7..0]输出8为7段数码管信号,其中输出的第8位均为高电平"1"可以使四个数码管的小数点不显示。

经译码器的处理输出后数码管显示相应的数值。

libraryIEEE;

useIEEE.std_logic_1164.all;

entityymqis

port(

d_in:

instd_logic_vector(3downto0);

--数码管控制器输入四位信号

d_out:

outstd_logic_vector(7downto0));--输出8位信号

endymq;

--第8位d_out[7]为逗号

architectureartofymqis

begin

process(d_in)

begin

cased_inis--第8位为1高电平逗号不显示

when"0000"=>d_out<="11000000";--0

when"0001"=>d_out<="11111001";--1

when"0010"=>d_out<="10100100";--2

when"0011"=>d_out<="10110000";--3

when"0100"=>d_out<="10011001";--4

when"0101"=>d_out<="10010010";--5

when"0110"=>d_out<="10000010";--6

when"0111"=>d_out<="11111000";--7

when"1000"=>d_out<="10000000";--8

when"1001"=>d_out<="10010000";--9

whenothers=>NULL;

endcase;

endprocess;

endart;

 

 

4.7元件声明及例化:

libraryieee;

useieee.std_logic_1164.all;

entitylxis

port(clk:

instd_logic;

led:

outstd_logic_vector(7downto0);

ledc:

outstd_logic_vector(3downto0));

endlx;

architectureartoflxis

componentlpm_counter0--待调用的频率生成器端口定义

PORT

(clock:

INSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(26DOWNTO0));

endcomponent;

--十进制计数器

componentcnt10--待调用的有时钟使能的十进制计数器端口定义

port(clk,clr,en:

instd_logic;

q:

outstd_logic_vector(3downto0);

c10:

outstd_logic);

endcomponent;

--16位锁存器

componentreg16b--待调用的32位锁存器端口定义

port(load:

instd_logic;

din:

instd_logic_vector(15downto0);

dout:

outstd_logic_vector(15downto0));

endcomponent;

--测频控制器

componenttestpl--待调用的测频控制信号发生器端口定义

port(clk:

instd_logic;

tsten:

outstd_logic;

clr_cnt:

outstd_logic;

load:

outstd_logic);

endcomponent;

--数码管选择器

componentledcom--待调用的数码管选择器端口定义

port(clk:

instd_logic;

datain:

instd_logic_vector(15downto0);

dataout:

outstd_logic_vector(3downto0);

com:

outstd_logic_vector(3downto0));

endcomponent;

--译码器

componentymq--待调用的译码器端口定义

port(d_in:

instd_logic_vector(3downto0);

d_out:

outstd_logic_vector(7downto0));

endcomponent;

signalclk1,clk2,clk3:

std_logic;--clk1为1Hz信号,clk2为被测信号,clk3为数码管扫描信号

signaltsten,clr,load:

std_logic;

signalc1,c2,c3,c4:

std_logic;

signalqout,rout:

std_logic_vector(15downto0);

signaldatao:

std_logic_vector(3downto0);

begin

u0:

testplportmap(clk1,tsten,clr,load);

u1:

cnt10portmap(clk2,clr,tsten,qout(3downto0),c1);

u2:

cnt10portmap(c1,clr,tsten,qout(7downto4),c2);

u3:

cnt10portmap(c2,clr,tsten,qout(11downto8),c3);

u4:

cnt10portmap(c3,clr,tsten,qout(15downto12),c4);

u5:

reg16bportmap(load,qout(15downto0),rout);

u6:

ledcomportmap(clk3,rout,datao,ledc);

u8:

ymqportmap(datao,led);

u9:

lpm_counter0portmap(clk,q(25)=>clk1,q(15)=>clk2,q(17)=>clk3);

endart;

 

 

5.仿真结果

5.1.设计的原理框图如下所示:

5.2频率计原理图

5.3仿真结果

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 韩语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1