首页 频率计课程设计

频率计课程设计

举报
开通vip

频率计课程设计频率计课程设计 频 率 计 一、设计目的: 、进一步了解EDA语言功能 1 2、了解EDA在高频工作下的优势,这是单片机无法比拟的 二、频率计原理: 采用一个标准的基准时钟,在单位时间如(1s)里对被测信号的脉冲数进行计数,即为信号的频率。 8位数字频率计的顶层框图(endfreq.gdf)如图7.1所示,整个系统可分为四个模块:控制模块、计数测量模块、锁存器模块和显示模块。 1、控制模块(testctl.vhd): 控制模块的作用是产生测频所需要的各种控制信号。控制信号的标准输入时钟为1HZ,每两个...

频率计课程设计
频率计课程设计 频 率 计 一、设计目的: 、进一步了解EDA语言功能 1 2、了解EDA在高频工作下的优势,这是单片机无法比拟的 二、频率计原理: 采用一个标准的基准时钟,在单位时间如(1s)里对被测信号的脉冲数进行计数,即为信号的频率。 8位数字频率计的顶层框图(endfreq.gdf)如图7.1所示,整个系统可分为四个模块:控制模块、计数测量模块、锁存器模块和显示模块。 1、控制模块(testctl.vhd): 控制模块的作用是产生测频所需要的各种控制信号。控制信号的标准输入时钟为1HZ,每两个时钟周期进行一次频率测量。该模块产生的3个控制信号,分别为teten,load,clr_cnt。Clr_cnt信号用于在每次测量开始时,对计数器进行复位,以清除上次测量的结果,该复位信号高电平有效,持续半个时钟周期的时间。Teten为计数允许信号,在teten信号的上升沿时刻计数模块开始对输入信号的频率进行测量,测量时间恰为一个时钟周期(正好为单位时间1s),在此时间里对被测信号的脉冲数进行计数,即为信号的频率。然后将值锁存,并送到数码管显示出来。设置锁存器的好处是使显示的数据稳定,不会由于周期性的清零信号而不断闪烁。在每一次测量开始时,都必须重新对计数器清0。 待测信号 teten 锁存 锁存器 控制 计数 显示 标准时钟 load 模块 模块 模块 .. clr_cnt 图7.1 8位数字频率计的原理框图 控制模块的几个控制信号的时序关系如图7.2所示。从图中可看出,计数使能信号tsten在1s的高电平后,利用其反相值的上跳沿产生一个锁存信号load,随后产生清0信号上跳沿clr_cnt。 clk teten load clr_cnt 图7.2 控制信号时序关系 2、计数模块(count10.vhd): 计数器模块是由8个带有异步清零端,进位信号输出的模为10的计数模块级连而成 3、锁存器模块(reg32b.vhd): 锁存器模块也是必不可少的,测频模块测量完成后,在load信号的上升沿时刻将测量值锁存到寄存器中,然后输出到显示模块。 4、显示模块(display.gdf): 该模块在单片机实验已经详细阐述,这里就不再讲述。 三、连线: 1、实验板右下方频率源 CLK1接任意频率作为扫描频率。 2、CLK5接1HZ作为门控信号。 3、从实验板中部管脚接线区第60脚引出线,另一头接到实验板右上方的CLK1、CLK2、CLK3、CLK4、 CLK5的任意一个管脚。 四、程序烧录:(程序:1K30\freq\endfreq.sof) 1、在MAX+plus?软件中,按如下顺序点击“File?project?name”出现如下对话框(图7.3),打开e:\ 1k30\freq文件夹,在对话框左端选择项目 。 endfreq,点击OK 图7.3 2、点“MAX+PLUS??programmer”后在点”JTAG?multi-device jtag chain setup”出现如下对话框(图7.4),将e:\ 1k30\freq\endfreq.sof项目添加到 “multi-device jtag chain setup”, 点 ADD回到“Programmer”对话框 , 点 “Configure”即下载。 图7.4 现将原程序如下说明: ---打开count10.vhd 原文件 --带清零和进位输出的十进制同步计数器 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity count10 is port( cp: in std_logic; --系统时钟输入 (12M) clr: in std_logic; --清零信号输入 db: out std_logic_vector( 3 downto 0); --计数信号输出 a: in std_logic; --计数脉冲输入 s: out std_logic; --微分信号输出 CY: out std_logic --进位信号输出 ); end count10; architecture beha of count10 is signal q: std_logic_vector( 3 downto 0); signal q1,q2: std_logic; signal EC: std_logic; begin process(cp,clr) begin IF CLR='1' THEN q<= ( others=>'0'); -- 计数器清零 elsif (cp'event and cp='1') then q2<=q1; q1<=a; -- 延时2个系统时钟周期 if EC='1' then if q<9 then -- 计数器加一 q<=q+1; else q<=( others=>'0'); --等于9计数器清零 end if; end if; end if; end process; EC<=not q2 and q1; --微分电路 cy<='1' when q=9 and ec='1' else --进位信号输出 '0'; db<=q; --计数值输出 s<=EC; --微分信号输出 end beha; ---打开endfreq.vhd 原文件 --频率计 (测量范围 1Hz,6M) library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity endfreq is port ( clk: in std_logic; -- 系统时钟(12M)输入 f2: in std_logic; -- 待测信号输入 sel: out std_logic_vector(2 downto 0); -- 显示位选信号输出 outa: out std_logic_vector( 6 downto 0) -- 显示数据输出 ); end endfreq; architecture behave of endfreq is component count10 -- 十进制同步计数器组件 port ( cp: in std_logic; clr: in std_logic; a: in std_logic; s: out std_logic; db: out std_logic_vector(3 downto 0); cy: out std_logic ); end component; signal hex: std_logic_vector( 3 downto 0); signal data: std_logic_vector(31 downto 0); signal data1: std_logic_vector(31 downto 0); signal clr1: std_logic; signal c0,c1,c2,c3,c4,c5,c6:std_logic; signal cy1: std_logic; signal count: std_logic_vector( 2 downto 0); signal ms: std_logic; signal sec: std_logic; begin free_count: block -- 产生 400Hz 时钟信号 signal q: std_logic_vector( 14 downto 0); signal rst1,dly: std_logic; begin process( clk) begin if rst1='1' then q<=( others=>'0'); elsif ( clk'event and clk='1') then q<=q+1; dly<=q(14); end if; end process; rst1<='1' when q=30000 else '0'; ms<= dly and not q(14); end block free_count; process( ms) begin if( ms'event and ms='1') then count<=count+1; end if; end process; --8 个十进制同步计数器 u1: count10 port map (cp=>clk,clr=>clr1,a=>f2,s=> open, db=>data(3 downto 0),cy=>c0); u2: count10 port map (cp=>clk,clr=>clr1,a=>c0,s=> open, db=>data(7 downto 4),cy=>c1); u3: count10 port map (cp=>clk,clr=>clr1,a=>c1,s=> open, db=>data(11 downto 8),cy=>c2); u4: count10 port map (cp=>clk,clr=>clr1,a=>c2,s=> open, db=>data(15 downto 12),cy=>c3); u5: count10 port map (cp=>clk,clr=>clr1,a=>c3,s=> open, db=>data(19 downto 16),cy=>c4); u6: count10 port map (cp=>clk,clr=>clr1,a=>c4,s=> open, db=>data(23 downto 20),cy=>c5); u7: count10 port map (cp=>clk,clr=>clr1,a=>c5,s=> open, db=>data(27 downto 24),cy=>c6); u8: count10 port map (cp=>clk,clr=>clr1,a=>c6,s=> open, db=>data(31 downto 28),cy=>open); --8选1数据选择器 hex <= data1(3 downto 0) when count=0 else data1(7 downto 4) when count=1 else data1( 11 downto 8) when count=2 else data1(15 downto 12) when count=3 else data1(19 downto 16) when count=4 else data1( 23 downto 20) when count=5 else data1(27 downto 24 ) when count=6 else data1(31 downto 28) when count=7 else "0000"; sel<=count; --显示位选信号输出 process( hex) -- 七段译码器 begin case hex is -- 7 segment encoder when "0000" => outa<="0111111" ; when "0001" => outa<="0000110" ; when "0010" => outa<="1011011"; when "0011" => outa<="1001111"; when "0100" => outa<="1100110"; when "0101" => outa<="1101101"; when "0110" => outa<="1111101"; when "0111" => outa<="0000111"; when "1000" => outa<="1111111"; when "1001" => outa<="1101111"; when "1010" => outa<="1110111"; when "1011" => outa<="1111100"; when "1100" => outa<="0111001"; when "1101" => outa<="1011110"; when "1110" => outa<="1111001"; when "1111" => outa<="1110001"; when others => outa<="0000000"; end case; end process; second: block -- 产生 1 Hz 时钟信号 signal qq: std_logic_vector(23 downto 0); signal rst2,dly: std_logic; begin process( clk) begin if rst2='1' then qq<=(others=>'0'); elsif ( clk'event and clk='1') then qq<=qq+1; dly<=qq(23); end if; end process; rst2<='1' when qq=12000000 else '0'; sec<=dly and not qq(23); end block second; process( sec) begin if( sec'event and sec='1') then —秒信号上升沿时刻读计数值,并存储 data1<=data; end if; end process; clr1<= sec; --秒信号高电平时,清除全部计数器 end behave; 引脚分配(ACEX EP1K30TC144-3): out0-P144、out1-P8、out2-P9、out3-P10 、out4-P12、 out5-P13、 out6-P17 sel0-P101、sel1-P102、sel2-P117、clk-P125、f2-P88 管脚标号dout0到dout6分别接到LED的8位段码中的7位上;sel0到sel2接到实验箱中74ls138的输入端;clk1HZ为1HZ标准时钟输入,接到频率源上的clk5;sysclk为LED显示时钟输入,接到频率源上的clk1;freq接入待测信号。管脚标号对应的I/O如下图所示: User Assignments Node Name Clk1@125 CLK1HZ endfreq@144 DOUT0 endfreq@8 DOUT1 endfreq@9 DOUT2 endfreq@10 DOUT3 endfreq@12 DOUT4 endfreq@13 DOUT5 endfreq@17 DOUT6 endfreq@88 FREQ endfreq@101 SEL0 endfreq@102 SEL1 endfreq@117 SEL2 sysclk@119 SYSCLK 五、实验现象:显示器上显示实验所测信号的频率值。 六、精度说明:精确:误差小于0.1% 。 正弦波形发生器 一、设计目的:了解EDA在数模变换中的应用,学会用EDA控制DAC0832. 二、原理:DAC0832有三种连接方式:直通方式、单缓冲方式和双缓冲方式。在本实验中,DAC0832工作在直通方式下。当SW1,SW2上拨时,ACEX1K30将与DAC0832的CS,WR1相连的I/O口置成低电平,即启动DAC0832工作;数据产生模块不停地将8bit的变化数据输入到DAC0832的8位数字量输入线上,DAC0832输出相应的变化的模拟量;数据产生模块不停地将8bit的变化数据输入到LED显示模块,由于数据变化太快将看到LED上显示88。其系统原理框图如图8.1所示: 显示数据 输出数据 输出模拟量 LED DAC 显示模块 显示 数据 0832工作时钟 D/A控制信号 模块 产生 (直通 模块 方式) 系统控制信号 数据产生模块的工作时钟 图8.1 系统原理框图 三、连线: 1、将适配板上的JC03用二十芯排线与实验板正中下方JC103 IDE-AD/DA相连接。 2、将频率选择区CLK2(即JP156)用短路帽接上65536HZ,CLK3(即JP155)接2929HZ。 3、将实验板左端的JP103全部用短路帽接上(共八个),并将开关区的SW1、SW2上拨。 4、将示波器的探头与实验板右下端的模拟输出座相连。 四、程序烧录步骤:(程序:1K30\dac0832\enddac0832.sof) 1、在MAX+plus?软件中,如下顺序点击 “File?project?name”出现如下对话框(图8.2),选中对话框左下方的选项,点击对话框中的enddac0832文件, 再点击OK。 图8.2 2、依次点击“MAX+plus??Programmer”后再点击菜单栏中的JTAG?Multi-Device JTAG Chain Setup”出现如下对话框(图8.3),点击Select Programming File...,出现图8.4对话框,将1k30\ Dac0832\enddac0832.sof 项目选中后点击OK,回到图8.3的对话框,点击ADD把此项目添加到“Multi-Device JTAG Chain Setup”对话框中,点击OK回到Programmer对话框。 按实验连线要求,把实验板上需要连接的导线或短路帽插好,最后打开电源,点击”Configure”即进行下载。下载成功后会出现成功的提示,反之会给出失败的提示。 图8.3 图8.4 3、打开顶层文件enddac0832.gdf如下: 现将原程序如下说明: ---打开dac0832.vhd library ieee; use ieee.std_logic_1164.all; entity dac0832 is std_logic; ----D/A 转换控制时钟 port(clk: in integer range 255 downto 0; -- 待转换数据 dd: out dispdata: out integer range 255 downto 0);-- 待转换数据输出显示 end dac0832; architecture behv of dac0832 is signal q: integer range 63 downto 0; signal d: integer range 255 downto 0; begin process(clk) begin if (clk'event and clk ='1' ) then q<=q+1; ---建立转换计数器 end if; end process; process(q) begin case q is ---64点正弦波波形数据输 when 00=> d<=255; when 01=> d<=254; when 02=> d<=252; when 03=> d<=249; when 04=> d<=245; when 05=> d<=239; when 06=> d<=233; when 07=> d<=225; when 08=> d<=217; when 09=> d<=207; when 10=> d<=197; when 11=> d<=186; when 12=> d<=174; when 13=> d<=162; when 14=> d<=150; when 15=> d<=137; when 16=> d<=124; when 17=> d<=112; when 18=> d<=99; when 19=> d<=87; when 20=> d<=75; when 21=> d<=64; when 22=> d<=53; when 23=> d<=43; when 24=> d<=34; when 25=> d<=26; when 26=> d<=19; when 27=> d<=13; when 28=> d<=8; when 29=> d<=4; when 30=> d<=1; when 31=> d<=0; when 32=> d<=0; when 33=> d<=1; when 34=> d<=4; when 35=> d<=8; when 36=> d<=13; when 37=> d<=19; when 38=> d<=26; when 39=> d<=34; when 40=> d<=43; when 41=> d<=53; when 42=> d<=64; when 43=> d<=75; when 44=> d<=87; when 45=> d<=99; when 46=> d<=112; when 47=> d<=124; when 48=> d<=137; when 49=> d<=150; when 50=> d<=162; when 51=> d<=174; when 52=> d<=186; when 53=> d<=197; when 54=> d<=207; when 55=> d<=217; when 56=> d<=225; when 57=> d<=233; when 58=> d<=239; when 59=> d<=245; when 60=> d<=249; when 61=> d<=252; when 62=> d<=254; when 63=> d<=255; when others=>NUll; end case; end process; dd<=d; ----D/A转换数据输出 dispdata<=d; ----D/A转换数据显示 end behv; 引脚分配(ACEX EP1K30TC144-3): dout0-P5、dout1-P6、dout2-P7、dout3-P8、dout4-P9、dout5-P10、dout6-P11、 sel0-P78、sel1-P79、sel2-P80、writeout-P72 csdaout P60、db0-P48、 db1-P49、db2-P50、db3-P51、db4-P52、db5-P53、db6-P54、db7-P58、csda-P35、 write-P30 管脚标号write、csda分别接开关sw1、sw2;csdaout、writeout分别接DAC0832 的CS,WR1;dd0到dd7接DAC0832的8位数字量输入线;dout0到dout6分别接LED 的8位段码中的7位;sel0到sel2接到实验箱中74ls138的输入端;sysclk为LED 显示的时钟输入,接到频率源clk3;daclk为数据发生模块的系统时钟,接到频率源 clk2。 User Assignments Node Name enddac0832@33 csda enddac0832@88 csdaout enddac0832@56 daclk enddac0832@44 dd0 enddac0832@46 dd1 enddac0832@47 dd2 enddac0832@48 dd3 enddac0832@49 dd4 enddac0832@51 dd5 enddac0832@59 dd6 enddac0832@60 dd7 enddac0832@144 dout0 enddac0832@8 dout1 enddac0832@9 dout2 enddac0832@10 dout3 enddac0832@12 dout4 enddac0832@13 dout5 enddac0832@17 dout6 enddac0832@101 sel0 enddac0832@102 sel1 nddac0832@117 sel2 e enddac0832@119 sysclk enddac0832@32 write enddac0832@99 writeout 五、现象: 1、数码右端两个显示88,其余显示零。 2、示波器上显示正弦波信号。
本文档为【频率计课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_215732
暂无简介~
格式:doc
大小:247KB
软件:Word
页数:20
分类:生活休闲
上传时间:2017-10-14
浏览量:23