EDA课程设计简易频率计设计.docx
- 文档编号:30077859
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:15
- 大小:248.12KB
EDA课程设计简易频率计设计.docx
《EDA课程设计简易频率计设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计简易频率计设计.docx(15页珍藏版)》请在冰豆网上搜索。
EDA课程设计简易频率计设计
EDA课程设计--简易频率计设计
摘要
EDA技术是以硬件语言为主要的描述方式,以EDA软件为主要的设计软件,以大规模课编程逻辑器件为载体的数字电路的设计过程。
其设计的灵活性使得EDA技术得以快速发展和广泛应用。
本设计以QuartusⅡ软件为设计平台,采用VerilogHDL语言现数字频率计的整体设计。
电子设计自动化(EDA)逐渐成为重要的设计手段,已经广泛应用于模拟与数字电路系统等许多领域,电子设计自动化是一种实现电子系统或电子产品自动化设计的技术,它与电子技术,微电子技术的发展密切相关,它吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机作为工作平台,促进了工程发展。
EDA的一个重要特征就是使用硬件描述语言(HDL)来完成的设计文件,在电子设计领域受到了广泛的接受。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,有硬件描述语言VerilogHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作,最终形成集成电子系统或专业集成芯片的一门新技术。
EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
关键词:
EDA;QuartusⅡ;VerilogHDL
一、简易数字频率计设计原理
1.1基本原理
数字频率计的主要功能是测量周期信号的频率。
频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。
频率是单位时间(1秒)内方波信号发生周期变化的次数。
在给定的1秒时间内对方波信号波形计数,并将所计数值显示出来,就能读取被测信号的频率。
数字频率计首先必须获得相对稳定与准确的时间,然后通过计数器计算这一段时间间隔内的方波脉冲个数并显示出来。
这就是数字频率计的基本原理。
脉冲信号的频率就是在单位时间内所产生的脉冲个数,其表达式为f=N/T,其中f为被测信号的频率,N为计数器所累计的脉冲个数,T为产生N个脉冲所需的时间。
本设计要求基准时钟的频率为1MHZ。
待测方波信号的频率在1HZ-9999HZ,所以用四位7段数码管无法完全正确显示,所以需要选择恰当的量程来显示待测风波信号的频率,当量程选择不当或者频率超出9999HZ时,能够给出指示信号。
1.2原理框图
根据设计要求,输入系统的标准时钟信号要先经过分频后得到一个周期为2s占空比50%的信号,用来对输入信号采样,得到采样信号GATED_CLK;为了能够控制计数模块对采样的信号进行正常计数及保存计数后的频率,这要求,要在计数器刚好完成计数后立即将数据输出给显示部分进行显示,并且要为下次计数做好准备,因此数据信号处理部分还要有产生控制计数器的两个信号LOAD和COUNTER_CLR,LOAD信号控制计数完成后的数据及时输出给显示,COUNTER_CLR信号控制计数器清零;计数模块就是完成对采样信号的计数,并当计数发生溢出时产生溢出信号FLOW_UP;显示控制模块要完成将计数模块输入的信号进行译码显示。
1.3信号描述
测试信号采样原理:
GATED_CLK、LOAD、COUNTER_CLR信号的关系:
程序中用到的信号变量:
FREQUENCY_COUNTROL_BLOCK
FREQUENCY_COUNTER_BLOCK
FREQUENCY_DISPLY_BLOCK
GATED_CLK
采样信号
COUT
计数输出信号
DOUT
输出到数码管
LOAD
控制计数器信号
FLOW_UP
计数溢出信号
CDIN
计数输入信号
COUNTER_CLR
清零计数器信号
CLOCK_IN
计数器时钟信号
DCLK_IN
标准时钟信号
CLK_IN
标准时钟信号
LOAD
控制计数输出
RESET
复位信号
SIGNAL_TEST
测试信号
COUNTER_CLR
清零计数信号
RESET
复位信号
RESET
复位信号
二、各模块程序及仿真
此设计运用元件例化的方法进行功能的实现,所以各个模块即使相互独立又是彼此联系的,三个模块和一个顶层共同完成方波信号的测量。
2.1信号处理模块_verilog:
moduleFREQUENCY_COUNTROL_BLOCK(GATED_CLK,LOAD,COUNTER_CLR,CLK_IN,SIGNAL_TEST,RESET);
outputGATED_CLK;
outputLOAD;
outputCOUNTER_CLR;
inputCLK_IN;
inputSIGNAL_TEST;
inputRESET;
regLOAD;
regCOUNTER_CLR;
regDIVIDE_CLK;
reg[19:
0]cn;
regA1,A2;
//信号分频:
由CLK_IN得到分频后的信号DIVIDE_CLK(0.5Hz)
always@(posedgeCLK_IN)
begin
if(RESET)
begin
DIVIDE_CLK<=0;
cn<=0;
end
elseif(cn==1000000)
begin
cn<=0;
DIVIDE_CLK<=~DIVIDE_CLK;
end
else
cn<=cn+1;
end
//频率计数控制信号的产生:
产生LOAD信号和COUNTER_CLR信号
always@(posedgeSIGNAL_TEST)
begin
A1<=~DIVIDE_CLK;
end
always@(posedgeSIGNAL_TEST)
begin
A2=A1;
end
always@(A1orA2)
begin
LOAD=A1&&(!
A2);
end
always@(posedgeSIGNAL_TEST)
COUNTER_CLR=LOAD;
//产生驱动计数模块的信号GATED_CLK,也就是被计数模块检测的信号
assignGATED_CLK=SIGNAL_TEST&DIVIDE_CLK;
endmodule
2.2计数器模块:
moduleFREQUENCY_COUNTER_BLOCK(COUT,FLOW_UP,CLOCK_IN,RESET,LOAD,COUNTER_CLR);
output[15:
0]COUT;
outputFLOW_UP;
inputCLOCK_IN;
inputLOAD;
inputCOUNTER_CLR;
inputRESET;
reg[15:
0]TEMP;
regFLOW_UP;
parameterB_SIZE=16;//二进制位宽,为便于移植,所有定义了成参数
reg[B_SIZE+3:
0]bcd;//转换后的BCD码的位数要比二进制多4位
reg[B_SIZE-1:
0]binary;
reg[B_SIZE-1:
0]bin;
reg[B_SIZE+3:
0]result;
//计数器完成计数得到二进制表示的频率数值
always@(CLOCK_INorRESETorLOADorCOUNTER_CLR)
begin
if(RESET|COUNTER_CLR)
begin
TEMP<=0;
FLOW_UP<=0;
end
elseif(LOAD)
binary<=TEMP;
elseif(TEMP>9999)
begin
FLOW_UP<=1;
binary<=9999;
end
else
if(CLOCK_IN)
TEMP<=TEMP+1;
end
//将二进制表示(或十六进制表示)的数转换为BCD码的形式,便于数码管译码显示
always@(binaryorRESET)
begin
bin=binary;
result=0;
if(RESET)
bcd<=0;
else
begin
repeat(B_SIZE-1)
begin
result[0]=bin[B_SIZE-1];
if(result[3:
0]>4)
result[3:
0]=result[3:
0]+4'd3;
if(result[7:
4]>4)
result[7:
4]=result[7:
4]+4'd3;
if(result[11:
8]>4)
result[11:
8]=result[11:
8]+4'd3;
if(result[15:
12]>4)
result[15:
12]=result[15:
12]+4'd3;
if(result[19:
16]>4)
result[19:
16]=result[19:
16]+4'd3;
result=result<<1;
bin=bin<<1;
end
result[0]=bin[B_SIZE-1];
bcd<=result;
end
end
assignCOUT=bcd[15:
0];
endmodule
2.3信号显示处理
moduleFREQUENCY_DISPLY_BLOCK(DOUT,DCLK_IN,RESET,CDIN);
output[10:
0]DOUT;
input[15:
0]CDIN;
inputDCLK_IN;
inputRESET;
reg[10:
0]DOUT;
reg[3:
0]Temp1;
reg[1:
0]cn;
always@(posedgeDCLK_IN)//设置成动态扫描
begin
if(RESET)
cn<=0;
else
begin
cn<=cn+1;
case(cn)
2'b00:
beginDOUT[10:
7]<=4'b0001;Temp1<=CDIN[3:
0];end
2'b01:
beginDOUT[10:
7]<=4'b0010;Temp1<=CDIN[7:
4];end
2'b10:
beginDOUT[10:
7]<=4'b0100;Temp1<=CDIN[11:
8];end
2'b11:
beginDOUT[10:
7]<=4'b1000;Temp1<=CDIN[15:
12];end
endcase
end
end
always@(Temp1)//译码显示
begin
case(Temp1)
4'b0000:
DOUT[6:
0]<=7'b0111111;//3fh=0
4'b0001:
DOUT[6:
0]<=7'b0000110;//06h=1
4'b0010:
DOUT[6:
0]<=7'b1010110;//56h=2
4'b0011:
DOUT[6:
0]<=7'b1001111;//4fh=3
4'b0100:
DOUT[6:
0]<=7'b1100110;//66h=4
4'b0101:
DOUT[6:
0]<=7'b1101101;//6dh=5
4'b0110:
DOUT[6:
0]<=7'b1111101;//7dh=6
4'b0111:
DOUT[6:
0]<=7'b0000111;//07h=7
4'b1000:
DOUT[6:
0]<=7'b1111111;//7fh=8
4'b1001:
DOUT[6:
0]<=7'b1101111;//6fh=9
default:
DOUT[6:
0]<=7'b0111111;//3fh
endcase
end
endmodule
2.4顶层verilog程序:
moduleFREQUENCY_COUNTER_DISPLY_BLOCK(DOUT,FLOW_UP,CLK,TEST_CLK_IN,RESET);
output[10:
0]DOUT;
outputFLOW_UP;
inputCLK;
inputTEST_CLK_IN;
inputRESET;
wiregated_clk,load,counter_clr;
wire[15:
0]cout_cdin;
FREQUENCY_COUNTROL_BLOCKu1(.GATED_CLK(gated_clk),.LOAD(load),.COUNTER_CLR(counter_clr),.CLK_IN(CLK),.SIGNAL_TEST(TEST_CLK_IN),.RESET(RESET));
FREQUENCY_COUNTER_BLOCKu2(.COUT(cout_cdin),.FLOW_UP(FLOW_UP),.CLOCK_IN(gated_clk),.RESET(RESET),.LOAD(load),.COUNTER_CLR(counter_clr));
FREQUENCY_DISPLY_BLOCKu3(.DOUT(DOUT),.DCLK_IN(CLK),.RESET(RESET),.CDIN(cout_cdin));
endmodule
三、仿真结果分析
仿真结果如图所示,输入标准时钟频率为1MHz,经过分频后变成频率为0.5Hz的信号,将其与测试信号相与得到采样信号GATED_CLK,同时利用测试信号和0.5Hz的分频信号可以产生LOAD信号和COUNTER_CLR信号,它们和采样信号的关系在图上可以清楚的看出。
图中测试信号频率为2500Hz,16进制表示为09C4。
Dout信号为要输入4个共阴数码管的信号,其高四位为片选控制,低七位为经译码后输入到数码管的信号。
以下为综合后的顶层电路和各子电路图:
(a)顶层模块综合后的电路
(b)FREQUENCY_COUNTROL_BLOCK模块综合后的电路
(c)FREQUENCY_COUNTER_BLOCK模块综合后的电路
(d)FREQUENCY_DISPLY_BLOCK模块综合后的电路
总结与致谢
通过这次EDA课程设计,我对课堂上所学到的理论知识的理解加深了许多,自己动脑、动手设计的能力也得到了较大提高。
在这次课程设计的过程中,我对VerilogHDL语言有了更深的认识。
通过查阅相关资料和动手设计我发现我以前对VerilogHDL语言的认识太过肤浅,认为VerilogHDL语言只能用于设计小型的电路系统。
但有了更深刻的认识之后我发现学好VerilogHDL语言可以设计出大规模的、功能复杂的电路系统。
我发现了动手实践的重要性。
动手实践是理论知识得以灵活运用的必要前提,也是今后走上工作岗位之后能够很好的完成设计工作的技术保证。
只有遇到实际问题并根据自己对课堂上获得的专业知识的理解来解决才能真正的提高自己的能力。
这也提醒我在平时的学习生活中不能一味埋头于课本知识,当今社会竞争越来越激烈,社会对人才的要求越来越全面,只有理论知识是远远不够的,必须靠实践作支撑。
虽然课设完成了,但是我意识到,我对FPGA技术仅仅只是停留在入门的阶段,想要有更大的发展,更深入的研究,还需要更多的努力与实践。
因此在学习之余我们应该积极参加各种与专业知识有关的实践活动和知识竞赛,巩固所学的理论知识,多注重培养实际动手能力和专业技术能力,这样才能在以后的工作岗位上有所作为。
感谢学校和老师对我的培养,给我这个自己动手的机会和空间。
经过一段时间,终于在杨老师的帮助下完成了课程设计,对自己的能力有了很大的提升。
在此我要感谢每一个帮助过我的人,他们今天对我的付出,成为我将来工作的动力。
参考文献
[1]江国强编著.EDA技术与应用(第三版)..北京:
电子工业出版社,2010
[2]夏宇闻编著.VerilogHDL数字系统设计教程..北京:
北京航空航天大学出版社,2008
[3]周祖成,程晓军,马卓钊编著.数字电路与系统教学实验教程.北京:
科学出版社,2010
[4]周润景,苏良碧.基于QuartusII的数字系统VerilogHDL设计实例详解.北京:
电子工业出版社,2010
[5]云创工作室.VerilogHDL程序设计与实践.北京:
人民邮电出版社,2009
[6]刘福奇,刘波.VerilogHDL应用程序设计实例精讲.北京:
电子工业出版社,2009
[7]张延伟,杨金岩,葛爱学.veriloghdl程序设计实例详解.北京:
人民邮电出版社,2008
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程设计 简易 频率计 设计