数字电路与系统课程设计
大连理工大学城市学院数字电路与系统课程设计设计
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目:数字频率计
学院:电子与自动化学院业:生:组人:完成日期:2012年3月21日
1
数字电路与系统课程设计
目录
第一章设计任务
1.1项目名称——数字频率计
1.2频率计设计说明
1.2.1设计任务和
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
1.2.2进度安排
1.3频率计总体功能模块图
第二章需求分析
2.1问题基本描述
(要求分析得出整个系统流程图)
2.2系统模块分解
2.3系统各模块功能的基本要求
第三章设计原理
3.1数字频率计设计原理
3.2MAX-PLUSII介绍
第四章系统功能模块设计
4.1FEN模块(时基电路)
4.1.1FEN模块流程图
4.1.2输入输出引脚及其功能说明
4.1.3程序代码实现
4.2SM模块(计数电路)
4.2.1SM模块流程图
4.2.2输入输出引脚及其功能说明
4.2.3程序代码实现
4.3choose模块(片选信号电路)
4.3.1choose模块流程图
4.3.2输入输出引脚及其功能说明
4.3.3程序代码实现
4.4cun模块(数据锁存电路)
4.4.1cun模块流程图
4.3.2输入输出引脚及其功能说明
4.3.3程序代码实现
2
数字电路与系统课程设计
4.5center模块(数据处理电路)
4.5.1center模块流程图
4.5.2输入输出引脚及其功能说明
4.5.3程序代码实现
4.6show模块(七段译码器电路)
4.6.1show模块流程图
4.6.2输入输出引脚及其功能说明
4.6.3程序代码实现
第五章调试并分析结果
5.1输入说明
5.2预计输出
5.3测试结果记录
5.4测试结果分析
第六章结论(最终实现哪些功能、未实现功能)心得体会
参考文献
3
数字电路与系统课程设计
第一章设计任务
1.1项目名称:数字频率计
本项目的主要内容是设计并实现数字频率计。该电路将所学的数字电路与系统大部分知识和VHDL语言结合。
1.2.项目设计说明
本项目主要用来实现单位时间内对时钟脉冲个数的计数,并将计数结果用数码管显示出来,模拟数字频率计。
1.2.1设计任务和要求
1.频率计共分四档:一档:0——9999Hz;
二档:10K——99.99KHz;
三档:100.0K——999.9KHz;
四档:1.000M——999MHz;
2.根据输出数据实现自动换挡。
3.设计后采用VHDL语言编写程序,在maxpusⅡ上进行仿真。
4.将所编程序下载与芯片中,并且在实验箱上连线,验证所设计器件的功能。
5.实验中应适当添加创新点及功能拓展部分。
1.2.2进度安排
第一步:分析总体电路功能,找出输入、输出和中间变量,再将功能具体化,分成几个功能模块,并明确该实验的设计难点;
第二步:根据每个模块所要实现的功能,画出流程图;构图好后,进行流程修整,使过程尽可能的简便;
第三步:根据最终确定的流程图,编写出各个模块的VHDL语言,在maxpusⅡ上进行仿真;
第四步:建立好各个模块后,将电路整体联系起来,在maxpusⅡ上建立整体电路的顶层文件(即电路原理图),并对整体进行仿真,观察所出现的波形是否满足预想的效果,若不满足,则检查各个模块,进行电路的调整;若满足,则将程序下载到实验箱上。
第五步:程序下载后,动手连接电路,验证所设计电路是否满足实验要求,通过实验现象判断是否设计正确;不满足,则检查设备,程序等所存在的问题,进行修整直至电路正确;若满足,分析实验现象,进一步理解设计原理,争取设计创新点。
4
数字电路与系统课程设计
1.3项目总体功能模块图
图1-1系统功能模块图
第二章需求分析
2.1问题基本描述
频率计数电路从电路结构上看,由于电路中既包含储存器件(计数器)又包含组合电路,故频率计数电路是时序逻辑电路。因此该电路也具有时序电路的“记忆”功能。其基本工作是:1S钟内对被测信号的时钟脉冲进行计数。测量频率大致可分为以下两种方法:
直接测量法——在单位时间内测量被测信号的脉冲个数,测试指标为单位时间内的脉冲个数,所得的脉冲个数即为频率值;
间接测量法——例如周期测量法,测量经过N个周期的时间T,测试指标为时间,既f=N/T,该方法适用于低频信号;
该频率计电路可大致由6部分电路组成。
系统流程图如下:
5
数字电路与系统课程设计
2.2系统模块分解
6
数字电路与系统课程设计
2.3系统各模块功能的基本要求
时基电路(fen模块):把已知频率的脉冲信号clk进行分频,分T=2s,处于高低电平时间各为一秒,高电平(door=1)时计数电路(SM模块)开始测量被测信号SIG的个数,低电平(door=0)时计数电路停止计数,且时基电路向锁存器(cun模块)发出锁存信号,命令其将数据锁存。
由此初步设定时基电路的输入,输出为:
In=CLK;out=Q;
计数电路(SM模块):接收fen模块提供的测量信号door和被测信号时,停止计数,并把计数结果给锁存模块(cun)。此外,模块应具有清零功能,则应设定一低电平有效地输入端CLR,根据功能要求,可参考74LS系列中的加法器进行编程,由于计数模块测量范围较大,且为整体电路的核心功能模块,则该为SM模块设置一辅助模块,帮助其实现自动换挡功能。
由此,设定计数模块的输入,输出为:
IN=SIG,CLK,CLROUT=Q0,Q1,Q2,Q3,dang;
锁存电路(CUN模块)则该模块输入,输出为:
IN=Q0,Q1,Q2,Q3,ru;OUT=Q0,Q1,Q2,Q3,Q4;
7
数字电路与系统课程设计
数据处理电路(center):显示电路上。
输入,输出为:
in=Q0,Q1,Q2,Q3,dang;out=Q[3..0];
七段译码器显示电路(show):将数据进行转换并显示到显示器上;片选信号电路(choose):通过查资料知道,显示电路要有一个三输入的信号进行档位调节和显示;
第三章设计分析
3.1数字频率计设计原理
整体原理:直接测量法——在单位时间内测量被测信号的脉冲个数,测试指标为单位时间内的脉冲个数,所得的脉冲个数即为频率值。
时基电路原理:利用加法累加的分频原理,把已知的频率的脉冲,分成0.5HZ的时钟脉冲。
计数电路原理:仿照已有的计数器VHDL语言进行计数设计,并编写出自动换程序。
锁存电路:高电平时不接收也不发送数字信号,当低电平时,接受数字信号,并把值进行输出。
数据处理电路:主要对应于数码管的片选信号,将所得片选信号进行处理,并将相应的数据送出,其中档位也通过数码管显示。
译码显示电路:将电路中的电信号转化为数字显示出来。
片选信号电路:对应于七段译码器的片选信号,配合计数电路实现自动换挡。
3.2MAX-PLUSII介绍
8
数字电路与系统课程设计该设计以VHDL语言为基础,程序中运用了大量的并发进程语句"process"和顺序语句"elsif""when""if...else..."语句(),使各个模块在保证功能的情况下,尽量减少程序中结构体的语句,使程序执行起来更为高效和准确。
通过资料的收集,我们决定效仿参考资料上方法将电路的核心程序——计数模块主体采用了大量的"if...else..."语句进行编写,虽然这样使主体程序增长,会造成一些芯片无法进行下载仿真,但是我们认为使用该语句可提高程序的可读性,便于往后电路的修整。
第四章系统功能模块设计
4.1FEN模块(时基电路)
4.1.1FEN模块流程图
是
CLK=1butcc≥999clk≠1
9
数字电路与系统课程设计
4.1.2
输入输出引脚及其功能说明
时基电路模块:
clk:已知信号输入管脚
Q:0.5hz的时基信号输出
管脚;
4.1.3程序代码实现
libraryieee;
useieee.std_logic_1164.all;entityfenis
port(clk:instd_logic;
q:outstd_logic);
endfen;
architectureufenoffenis
begin
process(clk)
variablecc:integerrange0to99999;variablex:std_logic;
begin
ifclk'eventandclk='1'then
ifcc<99999then
cc:=cc+1;
else
cc:=0;
x:=notx;
endif;
endif;
q<=x;
endprocess;
endufen;
10
数字电路与系统课程设计
4.2SM模块(计数电路)
4.2.1SM模块流程图
11
数字电路与系统课程设计4.2.2输入输出引脚及其功能说明clr是清除警报按钮,低电平有效;
sing是被测信号输入管脚;door是f=0.5HZ的时钟脉冲,时基信号的引入管脚;
ALM报警输出;
Q0~Q3:计数结果输出;dang位输出;
12
数字电路与系统课程设计
4.2.3程序代码实现
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitysmis
port(clr,sig,door:instd_logic;
alm:outstd_logic;
q3,q2,q1,q0,dang:outstd_logic_vector(3downto0));endsm;
architecturesnofsmis
begin
process(door,sig)
variablec0,c1,c2,c3,c4,c5,c6:std_logic_vector(3downto0);
variablex:std_logic;
begin
Ⅰ.ifsig'eventandsig='1'then
㈠ifdoor='1'then1ifc0<"1001"then
c0:=c0+1;1else
c0:="0000";2ifc1<"1001"then
c1:=c1+1;2else
c1:="0000";3ifc2<"1001"then
c2:=c2+1;3else
c2:="0000";4ifc3<"1001"then
c3:=c3+1;4else
c3:="0000";5ifc4<"1001"then
c4:=c4+1;5else
c4:="0000";
13
数字电路与系统课程设计
ifc5<"1001"thenc5:=c5+1;6else
c5:="0000";7ifc6<"1001"then6c6:=c6+1;7else
c6:="0000";
alm<='1';
⑦endif;
⑥endif;
⑤endif;
④endif;
③endif;
②endif;
①endif;
㈠else
⑧ifclr='0'then
alm<='0';
⑧endif;
c6:="0000";
c5:="0000";
c4:="0000";
c3:="0000";
c2:="0000";
c1:="0000";
c0:="0000";
㈠endif;
㈡ifc6/="0000"thenq3<=c6;
q2<=c5;
q1<=c4;
q0<=c3;
dang<="0100";
elsifc5/="0000"thenq3<=c5;
q2<=c4;——自动选档
14
数字电路与系统课程设计
q1<=c3;
q0<=c2;
dang<="0011";
elsifc4/="0000"then
q3<=c4;
q2<=c3;
q1<=c2;
q0<=c1;
dang<="0010";
else——当以上条件结不成立,则执行以下语句;q3<=c3;
q2<=c2;
q1<=c1;
q0<=c0;
dang<="0001";
㈡endif;
Ⅰ.endif;
endprocess;
end
sn;
4.3choose模块(片选信号电路)
4.3.1choose模块流程图
15
数字电路与系统课程设计
4.3.2
输入输出引脚及其功能说明
片选信号模块;
clk为已知时钟脉冲的输
入管脚;
Q[2..0]:实质是三个输出
分别为Q1,Q2,Q3的输
出管脚,对应于数码管选
档位的接口A,B,C;4.3.3程序代码实现
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitychooseis
port(clk:instd_logic;
q:outstd_logic_vector(2downto0));endchoose;
architecturewuofchooseis
begin
process(clk)
variablexinhao:std_logic_vector(2downto0);begin
ifclk'eventandclk='1'thenxinhao:=xinhao+1;
16
数字电路与系统课程设计endif;
q<=xinhao;endprocess;
endwu;
4.4cun模块(数据锁存电路)
4.4.1cun模块流程图
是
4.4.2输入输出引脚及其功能说明
17
数字电路与系统课程设计
锁存模块:
RU是接收door=0的输入
控制管脚,当其位低电平
时将数据锁存;
A0~A4对应着计数模块的
五个输出,为数据输入管
脚;
4.4.3程序代码实现
libraryieee;
useieee.std_logic_1164.all;
entitycunis——实体名为“cun”port(ru:instd_logic;——定义信号输入端“ru”a4,a3,a2,a1,a0:instd_logic_vector(3downto0);
q4,q3,q2,q1,q0:outstd_logic_vector(3downto0));endcun;
architecturecuofcunis——结构体名为“cu”begin
process(ru)——敏感信号是“ru”variabler4,r3,r2,r1,r0:std_logic_vector(3downto0);——定义变量rx(4位二进制向量组)
begin
ifru'eventandru='0'then——当“ru”脉冲处于下降沿时r4:=a4;
r3:=a3;
r2:=a2;——将ax的值赋给rx(赋值立即生效)r1:=a1;
r0:=a0;
endif;
q4<=r4;
q3<=r3;
q2<=r2;——将rx赋值给qx(有延迟)
q1<=r1;
q0<=r0;
endprocess;
endcu;
18
数字电路与系统课程设计
4.5center模块(数据处理电路)
4.5.1center
模块流程图
19
数字电路与系统课程设计
4.5.2
输入输出引脚及其功能说明
数据输出处理模块:
SEL:是片选信号的输入管
脚,用于控制档位输出;
A0~A3:是对应于锁存模
块的Q0~Q3的输入管脚;
DANG:是接收档位信号的
输入管脚;
Q:与显示器相连的输出;
4.5.3程序代码实现
libraryieee;
useieee.std_logic_1164.all;
entitycenteris
port(sel:instd_logic_vector(2downto0);
a3,a2,a1,a0,dang:instd_logic_vector(3downto0);
q:outstd_logic_vector(3downto0));
endcenter;
architecturecenofcenteris
begin
process(sel)
begin
caseselis
when"110"=>q<=a0;
when"010"=>q<=a1;
when"100"=>q<=a2;
when"000"=>q<=a3;
when"101"=>q<=dang;
whenothers=>q<="1111";
endcase;
endprocess;
20
数字电路与系统课程设计
4.6show模块(七段译码器电路)
4.6.1show
模块流程图
4.6.2输入输出引脚及其功能说明
21
数字电路与系统课程设计
七段译码显示模块:
D:接收数据处理电路的
信号的输入管脚;
Q:实质有七个输出,
Q0~Q6代表了显示电路
上显示数据的7段;
4.6.3程序代码实现
libraryieee;
useieee.std_logic_1164.all;
entityshowis
port(d:instd_logic_vector(3downto0);
q:outstd_logic_vector(6downto0));endshow;
architecturesooofshowis
begin
process(d)
begin
casedis
when"0000"=>q<="0111111";
when"0001"=>q<="0000110";
when"0010"=>q<="1011011";
when"0011"=>q<="1001111";
when"0100"=>q<="1100110";
when"0101"=>q<="1101101";
when"0110"=>q<="1111101";
when"0111"=>q<="0100111";
when"1000"=>q<="1111111";
when"1001"=>q<="1101111";
whenothers=>q<="0000000";
endcase;
endprocess;
endsoo;
22
数字电路与系统课程设计
附加:整体波形图
第五章调试并分析结果
5.1输入说明
数字频率计电路总体有三个输入量分别为清:除警报信号clr,被测信号sig,测量信号clk。
5.2预计输出
输出共有10个,其中3个对应七段译码器的片选信号,另七个对应着数码管显示器的A~G;当电路工作时,显示屏上显示出测量结果,预
计档位肯能会通过小数点的形式来体现。
23
数字电路与系统课程设计
5.3实际测试结果记录
1HZ5HZ10HZ100HZ1KHZ10KHZ100KHZ1MHZ
11111234
1
101
100101
5.4实际测试结果分析
电路连接完成后,试验箱上有六个显示屏幕,其中四个屏幕在
测量时启动并显示结果,启动的4个屏幕中前三个显示测量结果,最后一个则显示档位。实验箱上的脉冲信号分别有1HZ,5HZ,10HZ,100HZ,1KHZ,100KHZ,1MHz,在测量时,10HZ~1MHZ均能显示,但是,缩小了10倍,在测量1HZ至5HZ时,前三位没有显示,最后一位一直为1,经检查电路无误,由小组讨论认为应该是个位数字由于显示屏幕只能显示3位结果,则可能个位无法显示。此外其他测量又比实际缩小10倍,故1和5HZ无法显示,只能测量出档位。
第六章结论
实验结果
实验最终成功完成,该数字频率能测量实验要求中各频段脉冲的频率,并能正确显示档位;该设计不足之处是在测量低频时有误差,如,在测量1HZ与5hz时,无法显示最低位的档位。经小组讨论认为,可以通过更换显示位数更多的显示屏,进行实验改进。试验中的问题
此次试验中我们遇到的问题有:(1)在编写计数模块时,由于程序较为复杂,与以往程序相比,
结构比较长,使得芯片无法带动程序。
24