您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 实验一 正弦信号发生器
1实验一正弦信号发生器本实验指导演示了一个简单的正弦信号发生器在QuartusII上的实现。通过这个实验,旨在演示利用QuartusII开发数字电路的基本流程和QuartusII软件的相关操作,并借此介绍QuartusII的软件界面。通过此实验开始逐步了解SOPC的硬件开发平台;开始学习系统设计的全过程,重点掌握:模块配置、时序仿真和编译综合等主要环节。我们还针对NiosII的实验板,实现了本实验所示硬件模块的相关配置工作以及下载和实现。实验条件:ALTERADEⅡ开发实验平台QuartusII6.0一、设计原理下图所示为正弦信号发生器的结构,共由4个部分组成:顶层文件singt.vhd在FPGA中实现两个部分:1、6位计数器产生地址信号;2、存储正弦信号(6bits地址线,8bits数据线)的ROM,由LPM_ROM模块实现,LPM_ROM模块底层由FPGA的EAB、ESB或M4K来实现。地址发生器的时钟频率CLK假设为f0,这里我们设定的地址发生器为6bit,则周期为26=64,所以一个正弦周期内可以采样64个点,DAC后的输出频率f为:64/0ff=我们可以如下生成sin数据以用于查找表,双、单极性Sin(x)数据波形可如下:x=round((sin(linspace(0,2*pi,64))+1)*127.5);VHDL顶层设计singt.vhd6位计数器(地址发生器)Sin数据存储ROM8位DAC2所要得到的单极性信号波形。二、实验步骤1、工程创建1.1建立工程进入QuartusII开发软件,选择File,点击NewProjectWizard。3弹出工程向导对话框,选择Next1.2输入存放工程及其相关设计文件的文件夹:指定“工程名”和工程对应的“顶层设计实体名”。这里我们将工程名和顶层设计实体名都取作“lab1”,再点击Next。(工程目录可以随意设置,但是必须是英文的目录,并且文件名中不能出现空格,否则在工程编译时会出现错误。)4接下来点击Add将先期已经输入的设计文件(*.bdf;*.vhd;*.v等)添加到工程中,这里我们没有事先输入好的文件,因此不用添加,即使点击AddAll,也没有文件可以加入。接着点击UserLiberaryPathname指定用户自定义元件库的路径,这里我们没有要用的用户自定义元件库,也忽略跳过,直接进入下一步。1.3如有已经输入完毕的设计文件,我们可以参照下述方式建立新工程:5该文件已给出,在实验原始文件夹中;打开此文件,正弦信号发生器的VHDL格式的设计文件已在文件框中;6对此文件做相应的编辑修改后点击file-saveas存入新建立工程的目录下此时会出现如下的提示,选择“是”,则开始了创建工程的步骤,如前所述;7指定目标器件:实验所用的Altera套件为“CyclineII”系列的“EP2C35F672C6”。在实际开发中,可以通过查看核心板参考手册,或者直接观察核心板来获得所使用的器件具体型号。8接下来指定“设计输入,综合,仿真,时序分析……”用到的工具,QuartusII对第三方工具的支持比较完善,这里我们不选择,直接点击Next,QuartusII将使用默认的“设计输入,综合,仿真,时序分析……”工具。上图给出了所创建工程的主要的信息。点击Finish,工程新建完成,工程相关的基本配置工作也完成,这些已经配置的参数,在开发工作进行的过程中,仍然可以通过菜单Assignments-Settings来修改。2、sin信号发生器顶层模块的设计2.1新工程设计文件输入模式:新建文件,打开File菜单点击New命令,选择DeviceDesignFiles子类中的VHDLFile,9点击OK,创建一个vhdl文件,利用VHDL语言方式输入我们刚才已经用拷贝文件方式新建了顶层设计文件保存,这是工程新建的第一个文件,系统会默认保存为顶层设计实体的名字,在本实例中,也就是“singt1”,点击“保存”,这样,就新建好了顶层设计实体的输入文件。下面我们介绍的是如何输入VHDL格式来建立我们所需模块的实现代码,没有兴趣的同学可以跳过此节。提示:Quartus给我们提供了很多的帮助,比如对VHDL不熟悉或某些语法生疏的情况下,该软件提供了如下图的模板生成代码:102.2模块的设计及其输入在singt.vhd文件中我们可以输入模块对应的实现代码。如下:11在该文件中我们完成了6位计数器的设计工作,调用了sin波形数据存储文件data_rom.vhd,并加以了例化。下面我们具体的给出该文件的编写方式。3、定制ROM存储sin波形数据构成ROM中初始化数据文件的方式有两种:MemoryInitializationFile(.mif)格式和Hexadecimal(Intel-Format)File(.hex)格式。下面我们仅仅以.mif格式的文件为例来讲解ROM初始化数据文件的生成。3.1建立.mif文件点击QuartusII的File-New-OtherFiles项,选择MemoryInitializationFile,点击OK,出现一个参数设置框。这里Numberofwords对应查找表中查找项的个数,为64;Wordsize对应sin输出波形的数据宽度,为8。点击OK出现如下表格:3.2ROM数据的生成表格中的数据即为sin输出点所对应的8bits的幅度,我们可以在Matlab下生成这些数据:12x=round((sin(linspace(0,2*pi,64))+1)*127.5);reshape(x,8,8)’ans=12814015216517618819820821822623424024525025325425525425325024524023422621820819818817616515214012811510390796757473729211510521012510152129374757677990103115复制这些数据或直接输入到mif表格中,如图。当然我们可以通过excel得到这些数据,也可以编程得到这些数据。最方便的方式则是在Matlab/Simulink的DSPBuilder下完成ROM波形数据文件的编写。我们将文件保存为singt.mif。3.3定制ROM元件下面我们对初始化数据文件加载到一定的硬件模块中,本例中我们将之加载于LPM_ROM模块,步骤如下。(1)调用MegaWizardPlug-InManager(Tool-MegaWizardPlug-InManager)13(2)设置LPM_ROM模块:选择Createanewcustommegafunctionvariation,点击Next。14这里我们设置器件为CycloneII,输出文件的格式为vhdl,输出文件名为data_rom.vhd,选择storage中的LPM_ROM。点击Next。在Page3of6,我们进一步设置LPM_ROM的相关参数,如下图:15其中器件为上一页面所选的CycloneII,rom输出的总线宽度为8bits,该查找表共有64个查找项,选择DaulClock方式,inclock为地址锁存控制信号。点击Next。取消’q’outputport选项,点击next。在page5of6中RAMblock的类型由Quartus进行自动的选择(如ACEX1K为EAB,APEX20K为ESB,Cyclone为M4K),内存初始化的数据文件指定为我们刚才创建的16singt.mif,选择AllowIn-SystemMemoryContentEditorto…,表示允许QuartusII将能通过JTAG口对下载于FPGA中的此ROM进行在系统的测试和读写,这种读写不影响FPGA中系统的工作。点击Finish!(3)添加文件到工程我们必须将刚才生成的所有文件添加到工程中。选择Quartus的Files选项,右键点击Add/RemoveFilesinProject。17点击右图的AddAll-OK打开data_rom.vhd,修改绝对路径为相对路径!(如图所示,将init_file-singt.mif改写成init_file-./singt.mif。)(4)建立顶层设计文件新建文件,打开File菜单点击New命令,选择DeviceDesignFiles子类中的Block18diagram/schematicfile,点击OK,点击file-saveas,文件名为lab1.bdf。这样创建一个.bdf文件作为顶层设计文件,顶层设计利用图形方式输入。(进行如下操作将lab1.bdf设置成顶层文件)生成singt.vhd的synmbol以方便在.bdf文件中调用。在lab1.bdf输入栏中双击空白处,弹出symbol调用窗口,如下图所示,选择刚才生成的singt的symbol,点击OK。19用相同的方式在原理图中添加input和output管脚。输入管脚命名为clk,输出管脚命名为dout[7..0]204、编译、综合等QuartusII编译器由一系列处理模块组成,如设计工程的查错、逻辑的综合、结构的综合、输出结果的编辑配置、时序分析等。在编译前,我们可以设置一些参数使得编译器采取一些特别的综合和适配技术(如时序驱动技术等),也可提高工程编译的速度,优化器件的资源利用率等。我们简单的点击StartCompilation进行全程编译。编译的时候,QuartusII会给出编译的一些相关信息,如果出错,则根据这些提示进行排错,直至无误。编译完成后出现如下框图。并给出编译报告,如图。215、仿真对工程的编译通过后必须进行功能和时序的仿真,以便了解系统是否满足要求。步骤如下:5.1编辑波形文件点击File-New-OtherFiles–VectorWaveformFile22设置仿真时间:保存波形文件:23导入singt工程的相关节点:在波形向量文件编辑器左侧空白处双击左键或者右键-InsertNodeorBus弹出InsertNodeorBus对话框,在对话框中输入名字插入需要仿真的Node和Bus(也就是设计输入文件中的Pin或者Signal),也可直接点击NodeFinder,让编辑器列出已知的Node和Bus。点击NodeFinder,就调出上述的对话框。选择所需的pin到观察列表,如图:24设置CLK的输入波形:25我们可以通过左侧的放大镜进行观察,保存该文件。5.2配置仿真参数26在菜单Assignments-Settings-Simulator页面,设置SimulationMode,根据具体需要选择Functional或者Timing,这里我们选择功能仿真(Functional)。仿真之前,先点击下图所示指令,生成功能仿真子表(功能仿真特有的步骤)。275.3进行仿真点击菜单工具栏按钮,得到仿真的结果。为便于观察DOUT的输出结果,设置其数据格式:28结果如下:29注意:如果采用时序仿真,时钟周期太小,可能会造成数据输出不正确,所以建议时钟周期尽量大于毛刺检测时间的十倍以上。6、内部电路观察观察RTL电路:点击Tool-RTLViewer点击Tool-TechnologyMapViewer307、管脚分配分析和综合之后,点击菜单Assignments-Pins,进入管脚分配编辑器,注意:如果不需要将最后的设计生成文件烧写到开发板,而只是需要尝试QuartusII的设计流程,任意选择几个管脚就可以。这里为了观察我们设计的工程是否正常工作,我们将输出引脚分配到8个LED上,对应我们实验所采用的试验平台具体的管脚分配后面将会给出。(如果将设计输入到其他实验平台上,请具体参考对应的开发板的《硬件开发配置参考31手册》(名字可能有差别)或类似文档来分配管脚。)确定锁定引脚编号后就可以完成以下引脚锁定操作了:(1)假设现在已打开了lab1工程(如果刚打开QuartusII,应在菜单File中选择OpenProject项,并单击工程文件lab1,打开此前已设计好的
本文标题:实验一 正弦信号发生器
链接地址:https://www.777doc.com/doc-5837900 .html