简易频率计课程设计.docx
- 文档编号:13075749
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:32
- 大小:531.60KB
简易频率计课程设计.docx
《简易频率计课程设计.docx》由会员分享,可在线阅读,更多相关《简易频率计课程设计.docx(32页珍藏版)》请在冰点文库上搜索。
简易频率计课程设计
前言
伴随着集成电路(IC)技术的发展,电子设计自动化(EDA)逐渐成为重要的设计手段,已经广泛应用于模拟与数字电路系统等许多领域。
电子设计自动化是一种实现电系统或电子产品自动化设计的技术,它与电子技术、微电子技术的发展密切相关,它吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机作为工作平台,促进了工程发展。
数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。
它是一种用十进制数字,显示被测信号频率的数字测量仪器。
它的基本功能是测量正弦信号,方波信号以及其他各种单位时间变化的物理量。
在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制显示,测量迅速,精度高,显示直观,所以经常要用到数字频率计。
本文首先综述了EDA技术的发展概况和EDA软件平台QuartusⅡ;然后介绍了利用“自顶向下”的设计方法,采用VerilogHDL硬件描述语言和原理图描述相结合的方式,设计了简易数字频率计系统,并且在QuartusⅡ软件环境下对设计项目进行了编译和时序仿真。
仿真结果表明,该设计能根据输入信号频率进行量程自转换调整。
给出了测量结果并在实验板上4位七段数码管上进行正确显示。
1QuartusⅡ平台概述
QuartusII是Altera提供的FPGA/CPLD开发集成环境,Altera是世界上最大的可编程逻辑器件供应商之一。
QuartusII在21世纪初推出,是Altera前一代FPGA/CPLD集成开发环境MAX+PLUSII的更新换代产品,其界面友好,使用便捷。
它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输、快速处理和器件编程。
1.1QuartusⅡ软件介绍
Altera的QuartusII提供了完整的多平台设计环境,能满足各种特定设计的需要,也是单芯片可编程系统(SOPC)设计的综合性环境和SOPC开发的基本设计工具,并为AlteraDSP开发包进行系统模型设计提供了集成组合环境。
QuartusII设计工具完全支持VHDL、Verilog的设计流程,其内部嵌有VHDL、Verilog逻辑综合器。
QuartusII也可利用第三方的综合工具。
同样,QuartusII具备仿真功能,同时也支持第三方的仿真工具,如ModelSim。
此外,QuartusII与MATLAB和DSPBuilder结合,可以进行基于FPGA的DSP系统开发和数字通信模块的开发。
QuartusII包括模块化的编译器。
编译器包括的功能模块有分析/综合器(Analsis&Synthesis)、适配器(Fitter)、装配器(Assembler)、时序分析器(TimingAnalyzer)、设计辅助模块(DesignAssistant)、EDA网表文件生成器(EDANetlistWriter)、编辑数据接口(CompilerDatabaseInterface)等。
可以通过选择StartCompilation来运行所有的编译器模块,也可以通过选择Start单独运行各个模块。
还可以通过选择CompilerTool(Tools菜单),在CompilerTool窗口中运行该模块来启动编译器模块。
在CompilerTool窗口中,可以打开该模块的设置文件或报告文件,或打开其他相关窗口。
此外,QuartusII还包含许多十分有用的LPM(LibraryofParameterizedModules)模块,它们是复杂或高级系统构建的重要组成部分,在SOPC设计中被大量使用,也可以与QuartusII普通设计文件一起使用。
Altera提供的LPM函数均基于Altera器件的结构做了优化设计。
在许多实用情况中,必须使用宏功能模块才可以使用一些Altera特定器件的硬件功能,如各类片上存储器、DSP模块、LVDS驱动器、PLL以及SERDES和DDIO电路模块等。
QuartusII编译器支持的硬件描述语言有VHDL(支持VHDL’87及VHDL’97标准)、VerilogHDL及AHDL(AlteraHDL)。
QuartusII支持层次化设计,可以在一个新的编辑输入环境中对使用不同输入设计方式完成的模块(元件)进行调用,从而解决了原理图与HDL混合输入设计的问题。
在设计输入之后,QuartusII的编译器将给出设计输入的错误报告。
可以使用QuartusII带有的RTLViewer观察综合后的RTL图。
1.1.1QuartusII优良特性
1.继承了MAX+PLUSII的优点
图形输入依然形象,图形符号与MAX+PLUSII一样符合数字电路的特点,大量74系列器件符号使能初学者在较短的时间里利用图形编辑设计出需要的电路。
文本输入几乎和MAX+PLUSII相同,而且在文本的每一行都有行号,使用语言编写的电路清晰易读。
低层编辑仍然采用Chipview方式,引脚排列位置映射了实际器件引脚,只要简单地鼠标拖放即可完成低层编辑。
2.支持的器件更多
除了支持MAX3000、MAX7000、FLEX6000、FLEX10KE、ACEX1K等MAX+PLUSII已经支持的器件外,还支持PEX20K、APEX20KE、AREXII、EXCALIBUR-ARM、Mercury、Stratix等MAX+PLUSII下无法支持的大容量高性能的器件。
3.增加了网络编辑功能
QuartusII支持一个工作组环境下的设计要求,包括支持基于Internet的协作设计,与Cadence、ExemplarLogi、MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。
4.提升了调试能力
QuartusII增加了一个新的快速适配编译选项,可保留最佳性能的设置,加快了编译过程,可缩短50%的编译时间,对设计性能的影响小。
但QuartusII也有其不足之处,例如软件结构庞大,使用复杂,不如MAX+PLUSII简单、易学易用。
1.1.2QuartusⅡ界面介绍
1.软件打开界面如图1-1所示。
图1-1QuartusⅡ打开界面
2.代码输入界面如图1-2所示。
图1-2代码输入界面
3.功能仿真界面如图1-3所示。
图1-3功能仿真界面
4.波形仿真界面如图1-4所示。
图1-4波形仿真界面
1.2VerilogHDL的简介
VerilogHDL是一种硬件描述语言(hardwaredescriptionlanguage),为了制作数位电路(数字电路)而用来描述ASICs和FPGAs的设计之用。
Verilog的设计者想要以C程序语言(en:
Cprogramminglanguage)为基础设计一种语言,可以使工程师比较熟悉跟容易接受。
事实上,它产生与C程序语言类似的不严谨性质,并且大概与Pascal很相像。
这种语言跟传统的程序设计语言不同,在于它的程序叙述并非严格地线性(循序)执行。
Verilog模式包含不同模组(modules)的阶层关系。
模组(modules)是输出(inputs)和输入(outputs)所定义出来的一个集合。
在每个模组中,有一串的电线(wires)、暂存器(registers)和子模组(submodules)的定义。
并且在每个模组里面,语言叙述大部分都被群组成为各种的执行区块(blocks),用来定义该模组所产生的行为描述。
在每个区块(blocks)内,使用begin和end的关键字来区隔开来,其中的叙述是循序被执行。
但是同一个设计,不同的区块间的执行是平行的。
2频率计系统设计
2.1频率计基本原理
频率是单位时间(1秒)内方波信号发生周期变化的次数。
在给定的1秒时间内对方波信号波形计数,并将所计数值显示出来,就能读取被测信号的频率。
数字频率计首先必须获得相对稳定与准确的时间,然后通过计数器计算这一段时间间隔内的方波脉冲个数并显示出来。
这就是数字频率计的基本原理。
脉冲信号的频率就是在单位时间内所产生的脉冲个数,表达式为f=N/T,其中f为被测信号的频率,N为计数器所累计的脉冲个数,T为产生N个脉冲所需的时间。
在本次设计设置基准时钟的频率为20MHZ,需要分频设计产生脉宽为1秒的脉冲。
再利用这个脉宽为1秒的脉冲计数,计数器所记录的结果,就是被测信号的频率。
因为待测方波信号的频率在1HZ-10MHZ,所以仅用四位7段数码管无法完全正确显示,所以需要选择恰当的量程来显示待测风波信号的频率。
2.2频率计原理框图
根据系统设计要求,需要实现一个4位十进制数字频率计,其原理框图如图2-1所示。
主要由计数模块、门控模块、分频模块、寄存器模块、多路选择模块、动态为选择模块、BCD译码模块等模块组成。
图2-1频率计系统原理框图
(1)计数模块counter:
对包含被测信号频率信息的脉冲进行计数。
(2)门控模块gate_control:
根据量程,控制技术模块计数。
(3)分频模块fdiv:
将标准时钟分频,得到计数以及动态显示所需的时钟。
(4)寄存器模块flip_latch:
对计数模块的计数值进行寄存。
(5)多路选择模块data_mux:
根据动态选择信号,选择相应需要显示的计数值。
(6)动态为选择模块dispselevt:
输出动态显示中的位选信号。
(7)BCD译码模块dispdenoder:
将BCD码译成数码管的显示数据。
3基于VerilogHDL数字频率计程序设计
此设计运用元件例化的方法进行功能的实现,所以各个模块即使相互独立又是彼此联系的,7个模块共同完成方波信号的测量。
3.1计数模块
该模块主要完成对被测信号经过放大整形后输入到可编程逻辑器件的F_IN信号是现在一定的时间下的计数,采用四个异步BCD码十进制计数器来实现信号的频率的计数。
1.计数模块源程序代码如下。
modulejishu(EN,CLR,F_IN,F_OUT,Q0,Q1,Q2,Q3);
output[3:
0]Q3,Q2,Q1,Q0;
outputF_OUT;
inputEN,CLR,F_IN;
reg[3:
0]Q3,Q2,Q1,Q0;
regF_OUT,F_out0,F_out1,F_out2,F_out3;
initial
beginF_OUT<=1'b0;end
always@(posedgeF_IN)
begin
F_OUT<=1'b0;
if((EN==1'b1)&&(CLR==1'b0)&&(Q0!
=4'b1001))
beginQ0<=Q0+4'b0001;F_OUT<=1'b0;end
else
begin
Q0<=4'b0000;
if((EN==1'b1)&&(CLR==1'b0)&&(Q1!
=4'b1001))
beginQ1<=Q1+4'b0001;F_OUT<=1'b0;end
else
begin
Q1<=4'b0000;
if((EN==1'b1)&&(CLR==1'b0)&&(Q2!
=4'b1001))
beginQ2<=Q2+4'b0001;F_OUT<=1'b0;end
else
begin
Q2<=4'b0000;
if((EN==1'b1)&&(CLR==1'b0)&&(Q3!
=4'b1001))
beginQ3<=Q3+4'b0001;F_OUT<=1'b0;end
else
beginQ3<=4'b0000;F_OUT<=1'b1;end
endendendend
endmodule
2.将此程序模块进行元件例化,得到如图3-1所示的元件封装图。
图3-1计数模块元件封装图
3.计数模块波形仿真结果如图3-2所示。
3-2计数模块波形仿真结果
3.2门控模块
门控模块实现检测外界量程的选择,并且根据量程输出控制6位BCD码十进制计算器的计数时钟,以及在测量完一次信号频率后,计数器计数值清零。
计数器的清零要与后级寄存器的锁存时刻做很好的时序配合。
应该实在计数器测量完一次信号频率后,首先将数据锁存到寄存器,然后再将计数器值清零。
1.门控模块源程序代码如下。
modulegate(SW0,SW1,SW2,SW3,f1hz,f10hz,f100hz,f1khz,Latch_EN,
Counter_Clr,Counter_EN,dp_s1hz,dp_s10hz,dp_s100hz,dp_s1khz);
OutputLatch_EN,Counter_Clr,Counter_EN,
dp_s1hz,dp_s10hz,dp_s100hz,dp_s1khz;
inputSW0,SW1,SW2,SW3,f1hz,f10hz,f100hz,f1khz;
regdp_s1hz,dp_s10hz,dp_s100hz,dp_s1khz;
regfref,wire_1,wire_2;
initial
beginfref<=1'b0;wire_1<=1'b0;wire_2<=1'b0;end
always@(SW0orSW1orSW2orSW3orf1hzorf10hzorf100hzorf1khz)
begin
if(SW3==1'b1)
beginfref<=f1khz;
{dp_s1hz,dp_s10hz,dp_s100hz,dp_s1khz}<=3'b0001;end
elseif(SW2==1'b1)
beginfref<=f100hz;
{dp_s1hz,dp_s10hz,dp_s100hz,dp_s1khz}<=3'b0010;end
elseif(SW1==1'b1)
beginfref<=f10hz;
{dp_s1hz,dp_s10hz,dp_s100hz,dp_s1khz}<=3'b0100;end
elseif(SW0==1'b1)
beginfref<=f1hz;
{dp_s1hz,dp_s10hz,dp_s100hz,dp_s1khz}<=3'b1000;end
end
always@(posedgefref)
beginwire_1<=!
wire_1;end
always@(negedgefref)
beginwire_2<=wire_1;end
assignCounter_EN=wire_1;
assignLatch_EN=(!
Counter_EN)&wire_2;
assignCounter_Clr=(!
Counter_EN)&(!
Latch_EN)|(!
wire_2);
endmodule
2.将门控模块进行元件例化,得到如图3-3所示的元件封装图。
图3-3门控模块元件封装图
3.门控模块波形仿真图如图3-4所示。
图(a)
图(b)放大后门控模块波形仿真图
图3-4门控模块波形仿真图
3.3分频模块
分频模块在系统全局时钟的驱动下,经过分频得到系统中所需要的多种频率成分的时钟信号。
1.分频模块源程序代码如下。
modulefenpin(clk,f1hz,f10hz,f100hz,f1khz);
outputf1hz,f10hz,f100hz,f1khz;
inputclk;
regf1hz,f10hz,f100hz,f1khz;
integercnt1=0,cnt2=0,cnt3=0,cnt4=0;
always@(posedgeclk)
beginif(cnt1<2)beginf1khz<=1'b0;cnt1=cnt1+1;end
elsebeginf1khz<=1'b1;cnt1=0;endend
always@(posedgef1khz)
beginif(cnt2<2)beginf100hz<=1'b0;cnt2=cnt2+1;end
elsebeginf100hz<=1'b1;cnt2=0;endend
always@(posedgef100hz)
beginif(cnt3<2)beginf10hz<=1'b0;cnt3=cnt3+1;end
elsebeginf10hz<=1'b1;cnt3=0;endend
always@(posedgef10hz)
beginif(cnt4<2)beginf1hz<=1'b0;cnt4=cnt4+1;end
elsebeginf1hz<=1'b1;cnt4=0;endend
endmodule
2.将分频模块例化,得到如图3-5所示的元件封装图。
图3-5分频模块元件封装图
3.分频模块波形仿真图如图3-6所示。
图3-6分频模块波形仿真图
3.4寄存器模块
寄存器模块实现每一个测量频率时,计数器计算值的暂时存储。
1.寄存器模块源程序代码如下。
modulejicun(clk,A0,A1,A2,A3,Q0,Q1,Q2,Q3);
output[3:
0]Q0,Q1,Q2,Q3;
inputclk;
input[3:
0]A0,A1,A2,A3;
reg[3:
0]Q0,Q1,Q2,Q3;
always@(posedgeclk)
beginQ0<=A0;Q1<=A1;Q2<=A2;Q3<=A3;end
endmodule
2.将寄存器模块例化,得到如图3-7所示元件封装图。
图3-7寄存器模块元件封装图
3.寄存器模块波形仿真图如图3-8所示。
图3-8寄存器模块波形仿真图
3.5多路选择模块
多路选择模块实现测量频率值的分时显示,即动态显示。
经过多路选择器模块来分时地传输数据。
1.多路选择模块源程序代码如下。
moduleduolu(disp_select,A0,A1,A2,A3,Q);
output[3:
0]Q;
input[2:
0]disp_select;
input[3:
0]A0,A1,A2,A3;
reg[3:
0]Q;
always@(disp_select,A3,A2,A1,A0,Q)
begincase(disp_select)
3'b000:
Q<=A3;
3'b001:
Q<=A2;
3'b010:
Q<=A1;
3'b011:
Q<=A0;
default:
Q<=4'b0;
endcase
end
endmodule
2.将多路选择模块例化,得到如图3-9所示元件封装图。
图3-9多路选择模元件封装图
3.多路选择模块波形方仿真图如图3-10所示。
图3-10多路选择模块波形方仿真图
3.6动态选择模块
动态位选模块用来驱动数码动态地显示频率测量数据,分时地选择各个数码管进行显示。
1.动态选择模块源程序代码如下。
moduledongtai(clk,disp_select,Q);
output[3:
0]Q;
output[2:
0]disp_select;
inputclk;
reg[3:
0]Q;
reg[2:
0]disp_select;
always@(posedgeclk)
beginif(disp_select<3'b011)disp_select<=disp_select+3'b1;
elsedisp_select<=3'b0;
case(disp_select)
3'b000:
Q<=4'b1000;
3'b001:
Q<=4'b0100;
3'b010:
Q<=4'b0010;
3'b011:
Q<=4'b0001;
default:
Q<=4'b0000;
endcase
end
endmodule
2.将多路选择模块例化,得到如图3-11所示元件封装图。
图3-11多路选择模块元件封装图
3.多路选择模块波形仿真图如图3-12所示。
图3-12多路选择模块波形仿真图
3.7BCD译码模块
BCD译码模块主要实现BCD码到7段数码管显示码字段的转换,同时,考虑到频率测量中的一些“零”的处理,比如选择量程1~999999Hz,但被测信号频率为100Hz,这样在显示的时候就需要将4位数码管的前三位屏蔽。
1.BCD译码模块源程序代码如下。
moduleBCD(data_in,disp_select,dp_s1hz,dp_s10hz,dp_s100hz,dp_s1khz,
Q3,Q2,Q1,Q0,counter_out,data_out,dp,rst);
output[6:
0]data_out;
outputdp;
inputrst,dp_s1hz,dp_s10hz,dp_s100hz,dp_s1khz,counter_out;
input[3:
0]data_in;
input[2:
0]disp_select;
input[3:
0]Q3,Q2,Q1,Q0;
reg[6:
0]data_out;
reghide,dp;
initial
begindp<=1'b0;hide<=1'b0;end
always@(data_in,hide,data_out,rst)
begin
if(!
rst)begindata_out<=7'b0111111;end
elseif(hide==1'b0)begin
case(data_in)
4'b0000:
data_out<=7'b0111111;
4'b0001:
data_out<=7'b0000110;
4'b0010:
data_out<=7'b1011011;
4'b0011:
data_out<=7'b1001111;
4'b0100:
data_out<=7'b1100110;
4'b0101:
data_out<=7'b1101101;
4'b0110:
data_out<=7'b1111101;
4'b0111:
data_out<=7'b0000111;
4'b1000:
data_out<=7'b1111111;
4'b1001:
data_out<=7'b1101111;
default:
data_out<=7'b0000000;
endcase
endend
always@(disp_select,dp_s1hz,dp_s10hz
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 频率计 课程设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)