基于FPGA的数字频率计的设计.docx

上传人:b****7 文档编号:9448822 上传时间:2023-02-04 格式:DOCX 页数:24 大小:2.60MB
下载 相关 举报
基于FPGA的数字频率计的设计.docx_第1页
第1页 / 共24页
基于FPGA的数字频率计的设计.docx_第2页
第2页 / 共24页
基于FPGA的数字频率计的设计.docx_第3页
第3页 / 共24页
基于FPGA的数字频率计的设计.docx_第4页
第4页 / 共24页
基于FPGA的数字频率计的设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

基于FPGA的数字频率计的设计.docx

《基于FPGA的数字频率计的设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的数字频率计的设计.docx(24页珍藏版)》请在冰豆网上搜索。

基于FPGA的数字频率计的设计.docx

基于FPGA的数字频率计的设计

 

电子系统课程设计

 

06级电子信息与通信工程系

电子信息工程专业

(2)班

学号姓名哈哈哈

2010--2011学年第二学期

 

实验项目:

基于FPGA的数字频率计的设计

*******

实验时间:

2011-5-28

一、用VerilogHDL语言设计频率计的实例

组合逻辑电路和时序逻辑电路的设计都是属于功能部件的设计。

功能部件设计建立在真值表、特性表、状态转换图或工作时序图的基础上,在输入变量较少的情况下,因为描述逻辑函数关系的各种表格和图表较简单,设计电路分析建模的工作也较简单,按照前面介绍的方法就可以完成电路的设计工作。

但在大型数字系统的设计中,因为输入变量、输出变量和状态变量的数目可能相当大,设计电路分析建模的工作将非常复杂,在进行数字系统的设计时不适用,进行数字系统的设计需要引入层次化结构设计的思想。

1、数字系统的层次化结构设计

图1-1系统结构的组成框图

层次化结构设计的思想是将设计的目标层层分解,对分解后的各层次电路分别进行设计,最后,再根据分解的规则将各层次电路综合起来组成数字系统。

各层次模块组成系统的连接示意图如图1-1所示。

因为图E-1所示的系统结构连接示意图与树的形状相类似,所以,具有这种结构的系统称为树形结构系统。

对于树型结构系统存在着“自顶向下(Top-down)”设计和“自底向上(Bottom-up)”设计两种不同的设计思想。

自顶向下的设计强调性能上的最优,而自底向上的设计强调的是设计上的经济性。

实际的设计过程往往是这两种设计方法的综合,但在使用大规模集成电路,特别是使用可编程逻辑器件进行设计时,自顶向下的设计会有更多的优点。

随着电子设计自动化水平的提高,在进行复杂数字系统设计时,使用EDA仿真工具可以使整个设计过程变得简捷和方便,特别是对各层次电路工作时序图的分析更为快捷和准确,为设计更大规模的数字系统提供了直观准确的实验数据。

下面以两位十进制频率计的设计为例,介绍层次化设计的思想在EDA环境下的体现,所采用的EDA工具软件平台是QuartusII。

2、两位十进制数字频率计的层次结构框图

图1-2两位十进制数字频率计的层次化结构示意图

根据两位十进制数字频率计的逻辑功能可知,两位十进制数字频率计应由带锁存功能的十进制计数器电路、测频时序控制电路,显示译码器和频率计顶层电路四部分组成,两位十进制数字频率计的层次化结构示意图如图1-2所示。

利用EDA技术进行两位十进制数字频率计设计的步骤是:

先分别设计底层的计数器电路模块,测频时序控制电路模块和显示译码器电路模块,再在频率计顶层电路中调入事先设计好的三个底层电路模块。

二、在QuartusII中实现计数器的电路

1、为本设计项目建立文件夹

要在QuartusII软件上搭建图E-2所示的频率计电路,首先要建立一个文件夹,以便于存储设计项目。

任何一个设计都是一个工程(project),都必须为此工程建立一个放置与此工程相关的所有文件的文件夹。

该文件夹将被EDA软件默认为工作库(library)。

一般情况下,不同的设计项目最好放在不同的文件夹中,设本项工程的文件夹位于D:

/work/plj文件夹中。

2、输入设计项目并存盘

在QuartusII软件上搭建图D-2所示的计数器电路模块的步骤是:

(1)运行QuartusII,选择File→New命令,在VerilogHDL编辑窗口中,用VerilogHDL语言编写两个十进制计数器的程序为

modulesjzjsq(Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7,C,C1,CP,R,EP,ET);

inputCP,R,EP,ET;

outputQ0,Q1,Q2,Q3,Q4,Q5,Q6,Q7,C,C1;

regQ0,Q1,Q2,Q3,Q4,Q5,Q6,Q7;

reg[3:

0]QT1;

always@(negedgeCP)

begin

if(~R)QT1=4'b0000;

elseif(EP&&ET)

if(QT1<4'b1001)QT1=QT1+1;

elseQT1=4'b0000;

elseQT1=QT1;

end

reg[7:

4]QT2;

always@(negedgeQ3)

begin

if(~R)QT2=4'b0000;

elseif(EP&&ET)

if(QT2<4'b1001)QT2=QT2+1;

elseQT2=4'b0000;

elseQT2=QT2;

end

always

begin

{Q3,Q2,Q1,Q0}=QT1;

{Q7,Q6,Q5,Q4}=QT2;

end

and(C1,Q0,Q3);

and(C,Q0,Q3,Q4,Q7);

endmodule

输入编好的程序后,选择文件保存命令,将设计好的文件存到事先准备好的文件夹D:

/work/plj下,文件名用sjzjsq。

然后弹出询问是否为当前文件创建工程的对话框,单击“是”按钮,如图2-1所示。

图2-1文本输入和创建工程的对话框

(2)创建工程

接着在弹出的对话框中点击“Next”按钮后,将弹出如图E-5所示的工程创建项目的对话框。

在图E-5所示对话框中,第一栏指定工程所在的工作目录;第二栏表示此项工程的工程名;第三栏是顶层文件的实体名。

本设计项目的名称及顶层文件的名称均设为sjzjsq(自动生成)。

点击“Next”按钮后将弹出如图2-2所示的对话框。

2-2创建工程流程的对话框

在图2-3中,将设计文件加入到工程中,单击Add按钮,将存好的VerilogHDL文件加入到设计工程中后。

点击Next按钮后,将弹出如图2-4所示的目标芯片选择对话框。

图2-3将设计文件加入到工程中

图2-4选择目标芯片的对话框

(3)目标芯片的选择

在图5-6所示对话框中,Family栏目的下拉列表框用于选择芯片系列,本例选则Cyclone系列,在Availabledevice列表框中选择EP1C3T144C8型号的芯片(选择的依据源于开发板,如果开发板上的芯片是其它的系列,根据开发板上的芯片选择相应的系列芯片)。

右边选项区域可以设置过滤条件,以方便选择芯片。

单击“Next”按钮后,在弹出的对话框中再点击“Next”按钮后,接着点击“Finish”按钮完成目标芯片的选择。

图2-5

图2-5

3、编译

QuartusII编译器是由一系列处理模块构成的,这些模块负责对设计项目的检错、逻辑综合、结构综合、输出结果的编辑配置,以及时序分析。

在这一过程中将设计项目适配到FPGA/CPLD目标器件的同时产生多种用途的输出文件,如功能和时序仿真文件、器件编程的目标文件等。

编译器首先从工程设计文件中的层次结构描述中提取信息,包括每个低层次文件中的错误信息,供设计者排除。

编译的方法是

选择Processing→StartCompilation命令,如图2-6所示,启动全程编译。

图2-6启动全程编译

编译的结果如图2-7所示。

如果工程文件中有错误,在下方的Processing选项卡中会显示出来。

对于Processing选项卡中显示出的语句格式错误,可双击此条文,即可弹出相应的设计文件,蓝色标记处即为文件中的错误,将相关的错误排除后再次进行编译。

编译成功后,点击编译成功提示栏的“确定”按钮,完成编译的操作。

图2-7编译结果的报告窗口

4、仿真

工程编译通过后,必须对其功能和时序特性进行仿真测试,以了解设计结果是否满足原设计的要求。

仿真程序的步骤如下:

(1)打开波形编辑器

选择File→New命令,在New对话框中选择OtherFiles选项,在弹出的对话框中选择VectorWaveformFile(波形图文件)选项,如图2-8所示。

图2-8建立波形图文件的对话框

图2-9

单击OK按钮,打开空白的波形图编辑器窗口。

对时序仿真来说,将仿真时间轴设置在一个合理的时间区域上非常重要,一般设置的时间范围在数十微秒间。

选择Edit→EndTime命令,在弹出的对话框中的Time文本框中输入30,单位选择μs,即设置仿真域的时间为30μs,如图2-10所示,单击OK按钮即可。

图2-10波形图编辑器和设置仿真时间的对话框

(2)端口引脚的输入

设置好仿真时间后,选择View→UtilityWindows→NodeFinder命令,在弹出对话框中的Filter下拉列表框中选择Pins:

all选项,然后单击List按钮,在下方的NodesFound列表框中将显示出设计工程所有端口引脚的名称,如图2-11所示。

图2-11显示引脚端口的列表框

用鼠标分别将输入和输出信号拖到波形编辑窗口中,结束后关闭NodesFound列表框。

然后单击图2-12中的CP信号,使之变成蓝色条,再单击左列的时钟周期信号设置图标,在弹出的Clock对话框中设置CP的时钟周期为20μs;Clock对话框中的Dutycycle是占空比,默认为50,即50%占空比。

这时CP信号处就会出现周期为20μs的时钟脉冲。

对于其他的输入信号也可以用同样方法调用工具栏中相应的工具完成设置。

图5-12将输入信号拖到波形编辑窗口中

(3)波形仿真

设置好参数后,点击保存文件的按钮,将文件保存在默认的文件夹中,然后点击工具栏上的StartSimulation按钮即可启动仿真程序,仿真程序运行的结果如图2-13所示。

图2-13

图2-14启动仿真

5-15波形图仿真的结果

图5-15波形仿真的结果不仅显示出十进制计数器的功能,还显示出所设计的电路模块当输入信号R为低电平时,电路复位;当R为高电平,且EP和ET也为高电平时,电路为十进制计数器;当R为高电平,且EP和ET为低电平时,电路是锁存器,保存计数的数据不变。

5、包装元件入库

关闭波形图仿真程序窗口,重新打开刚才设计好的文件,然后选择File→Create/Update→CreateSymbolFilesforCurrentFile命令,如图2-16所示,可将当前文件变成一个包装好的单一元件(Symbol),并放置在工程路径指定的文件夹中备用。

图2-16包装元件入库

图2-17包装成功

三、在QuartusII中实现测频时序控制电路的设计

频率计要能够自动测频,必须在电路中增加一个测频控制电路。

测频控制电路的功能是:

能够产生测频使能EP和ET、测频时钟clk和清零R三个控制信号。

频率计在这三个控制信号的控制下自动完成频率的测量。

频率测量的过程要经历清零、计数和锁存三个流程。

频率计的功能是测量频率。

因为,频率的定义是每秒钟完成振荡的次数,测频控制电路要输出控制测频的时钟信号,计数器开始计数时的复位信号和计数器使能的控制信号。

根据这些信号的逻辑关系可得,测频时序控制电路应由时钟计数器、产生控制信号的译码器和量程控制的编码器三个部分组成。

利用VerilogHDL语言编写的测频控制电路的模块为:

modulecpkz(Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7,EP1,ET1,CLR,clk,S0,S1,R);

inputclk,S0,S1,R;

outputEP1,ET1,CLR,Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7;

wires0,s1,m0,m1,m2,m3;

not(s0,S0);

not(s1,S1);

and(m0,s1,s0);

and(m1,s1,S0);

and(m2,S1,s0);

and(m3,S1,S0);

regQ0,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,QA,QB,QC,QD,QE,QF;

reg[15:

0]QT1;

always@(negedgeclk)

begin

if(~R)QT1=16'b0000000000000000;

elseif(m0)begin

if(QT1<16'b0000000001110100)QT1=QT1+1;

QT1=QT1;end

elseif(m1)begin

if(QT1<16'b0000001111111000)QT1=QT1+1;

QT1=QT1;end

elseif(m2)begin

if(QT1<16'b0010011100100000)QT1=QT1+1;

QT1=QT1;end

elseif(m3)begin

if(QT1<16'b1100001101100000)QT1=QT1+1;

QT1=QT1;end

end

always

begin

{QF,QE,QD,QC,QB,QA,Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0}=QT1;

end

wired0,d1,d2,d3;

and(d0,Q2,Q4,Q5,Q6,m0);

and(d1,Q3,Q4,Q5,Q6,Q7,Q8,Q9,m1);

and(d2,Q5,Q8,Q9,QA,QD,m2);

and(d3,Q5,Q6,Q8,Q9,QE,QF,m3);

or(CLR,QF,QE,QD,QC,QB,QA,Q9,Q8,Q7,Q6,Q5,Q4);

nor(EP1,d0,d1,d2,d3);

nor(ET1,d0,d1,d2,d3);

endmodule

注:

当S0和S1为低电平时,m0为高电平,计数器开始从0计数到十进制数的116后,保持二进制数01110100的数值不变,EP1和ET1的输出为低电平,该信号可作为测频计数器的锁存信号。

计数器从0计数到16以后,CLR输出高电平信号,该信号可以作为测频计数开始的控制信号。

如果测频控制信号的输入脉冲的频率为1MHz,周期为1μs,测频的时间为116-16=100μs,测量所得到数据的单位为MHz,该量程用来测高频的信号,其它的量程用来测低频的信号。

该电路模块波形仿真的结果如图3-1所示。

3-1测频控制电路波形仿真的结果

图3-1的波形清晰的显示出测频控制电路在R信号的控制下复位,CLR输出低电平,该信号可作为测频计数器的复位信号,当计数器计数的值增大到16以后,CLR输出为高电平信号,该信号输入测频计数器的复位端口,测频计数器开始计数。

当测频控制电路的计数器计数到01110100时,EP1和ET1的输出为低电平,该信号输入测频计数器的EP和ET端口,测频计数器进入锁存的状态,保存计数的数值不变。

采用上面所介绍的方法将该文件包装入库。

图3-2封装入库

四、频率计显示译码器电路的设计

频率计所测量的数据要转变出数字显示,需要显示译码器,用VerilogHDL语言编写的显示译码器电路模块为:

modulexsymq(a,b,c,d,e,f,g,A3,A2,A1,A0);

inputA3,A2,A1,A0;

outputa,b,c,d,e,f,g;

wirea3,a2,a1,a0,m0,m1,m2,m3,m4,m5,m6,m7,m8,m9;

not(a3,A3);

not(a2,A2);

not(a1,A1);

not(a0,A0);

and(m0,a3,a2,a1,a0);

and(m1,a3,a2,a1,A0);

and(m2,a3,a2,A1,a0);

and(m3,a3,a2,A1,A0);

and(m4,a3,A2,a1,a0);

and(m5,a3,A2,a1,A0);

and(m6,a3,A2,A1,a0);

and(m7,a3,A2,A1,A0);

and(m8,A3,a2,a1,a0);

and(m9,A3,a2,a1,A0);

or(a,m0,m2,m3,m5,m6,m7,m8,m9);

or(b,m0,m1,m2,m3,m4,m7,m8,m9);

or(c,m0,m1,m3,m4,m5,m6,m7,m8,m9);

or(d,m0,m2,m3,m5,m6,m8,m9);

or(e,m0,m2,m6,m8);

or(f,m0,m4,m5,m6,m8,m9);

or(g,m2,m3,m4,m5,m6,m8,m9);

endmodule

该模块经编译成功后,打包进元件库。

图4-1编译成功

图4-2入库成功

五、频率计顶层电路的设计

频率计顶层电路是用来连接底层电路的,用VerilogHDL语言可以编写连接电路的模块。

在底层电路模块已经包装入库的前提下,用QuartusII软件所具有的原理图编辑功能比较方便,原理图编辑功能设计电路的操作方法为:

1、在QuartusII软件的工作界面上,选择File→New命令,在弹出的对话框中选择图5-1所示的BlockDiagram/SchematicFile选项,然后按OK按钮即可打开原理图编辑窗口。

图5-1

2、将元件拖入原理图编辑窗口的方法

在原理图编辑窗口中,点击元件工具栏上的与门符号按钮,就可以打开元件库。

在元件库中,点击“project”选项,就可以找到打包入库的元件cpkz,sjzjsq和xsymq,点击“ok”按钮,就可以将如图5-2所示的器件拖入编辑窗口。

图5-2将器件拖入编辑界面的方法

安置好器件以后,根据图5-3所示的图标操作,将输入端口和输出端口器件拖入编辑界面。

图5-3将输入和输出端口拖入编辑界面的方法

安置好器件和端口后,根据图5-4所示的电路连接顶层电路。

连接电路的导线和修改端口文字的按钮在工具栏上,激活相关的按钮就可以进行导线的连接和文字的修改。

图5-4频率计

顶层电路的逻辑图

按照图5-5所示的电路连接好以后,采用前面相同的方法保存、编译通过以后,启动波形仿真的程序,波形仿真的结果如图5-5所示。

图5-5顶层电路的时序仿真图

图5-5波形仿真的结果清晰的显示出,频率计电路在复位信号R的驱动下开始测频的工作。

测频电路输入的clk信号周期是10ns,待测信号的周期是23ns,1μs(10ns×100)的测量时间内计数的脉冲数应为44,频率计输出的信号a2b2c2d2e2f2g2和a1b1c1d1e1f1g1相等,都是0110011,该信号输入七段数码管,将显示数字44,所测信号的频率为44MHz,说明所设计的电路时序正确。

六、心得体会

经过学习,我发现硬件描述语言(VerilogHDL)其实很简单,原来以为要好几个月才能学会的语言,没想到看了十几天就能够勉强编程,更让人惊喜的是,Verilog的书写习惯跟C语言基本上是一样的,所以我看书的时候并没有记太多的东西。

只是当我们编程时,发现Verilog跟C语言还是有本质区别的,毕竟Verilog是描述语言,一切都要以硬件为主。

通过这次设计使我懂得了如何可以用电路图的方法去设计顶层电路,而不用编写一大段长长的程序了。

同时也让我了解到自己以前对QuartusⅡ软件的错误认识,还有就是进一步深刻的了解了QuartusⅡ的使用方法。

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

当前位置:首页 > 成人教育 > 电大

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

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