QuartusⅡ的强函数(Megafunctions)是一种复杂的逻辑函数的集合,它包括参数可设置的库函数LPM,它们可以用在逻辑电路设计中。在安装QuartusII的过程中,系统自动将这些强函数存放在/altera/quartus50/libraries/文件夹的“megafunctions”栏目中。包括参数设置的与门lpm_and、参数可预置的三态缓冲器lpm_bustri、参数设置的只读存存储器lpm_rom等。在利用QuartusⅡ进行逻辑设计时,可灵活地使用这些强函数进行设计。
例2.3 用参数设置的锁存器模块lpm_latch实现8位锁存器。
在QuartusⅡ主窗口,进入图形编辑方式。在原理图编辑框中双击鼠标左键,在弹出的元件选择对话框“Symbol Libraries:”中,从“megafunctions”栏目下的“storage”中选择“lpm_latch”宏模块并进行设置,将“lpm_latch”的数据位宽参数设置为8,将置位输入端aset和复位输入端aclr设置为可用,并加入相应的输入输出元件,得到8位锁存器如图2-33所示。在对锁存器的输入进行设置后,进行功能仿真,得到8位锁存器的仿真波形如图2-34所示。
图2-33 8位锁存器原理图
图2-34 8位锁存器仿真波形图
例2.4 正弦波发生器的设计。
基于波形数据存储的正弦波发生器的原理如图2-35所示。计数器在输入计数时钟的触发下输出持续变化的计数信号,该计数信号作为正弦波数据存储器的地址,这样就将保存在存储器的波形信号(如正弦波)的数据取出并送至D-A转换器,经过D-A转换后即可观察到正弦信号波形。下面是实现正弦波发生器的过程。
图2-35 正弦波发生器的原理框图
首先为正弦波发生器建立新的设计项目“mydds”,如图2-36所示,在新工程项目中增加设计文件“mydds.bdf”,如图2-37所示,并选择ACEX1K系列的EP1K30QC208-2作为设计项目下载的目标芯片,如图2-38所示。
图2-36 新建设计项目“mydds”对话框
图2-37 在新工程项目中增加设计文件“mydds.bdf”
图2-38 选择设计项目下载的目标芯片
(1)加入计数器元件
执行“File”菜单的“New”命令,打开一个新的“BlockDiagram/SchematicFile”编辑窗口,用鼠标双击原理图编辑窗口,在弹出的元件选择对话框的“Libraries”栏目中选择“arithmetic”的“lpm_counter”(计数器)LPM元件,如图2-39所示,通过对端口的选择与参数的设置得到需要的计数器元件。
图2-39 “lpm_counter”元件选择对话框
计数器元件选定后用鼠标单击“OK”按钮,弹出“MegaWizard Plug-In Manager[page2c]”对话框页面。在该对话框页面中,选择VHDL作为输出文件的类型,并将生成的计数器名称及保存的文件夹输入到“What name do you want for the output file?”栏目中,如图2-40所示。
图2-40 “MegaWizard Plug-In Manager[page2c]”对话框
完成图2-40操作后,单击“Next”按钮,进入计数器参数设置的下一个对话框“MegaWizard Plug-In Manager-LPM_COUNTER[page3of6]”。在此对话框中设置计数器的“q”输出位数为8bit,时钟输入clock的有效边沿为“Uponly”(上升沿有效)。时钟边沿也可以选择“Downonly”(下降沿有效),如图2-41所示。
图2-41 “MegaWizard Plug-In Manager-LPM_COUNTER[page3of6]”对话框
完成图2-41计数器的参数设置后单击“Next”按钮,进入计数器参数设置的“MegaW-izard Plug-In Manager-LPM_COUNTER[page4of6]”对话框。在此对话框中,选择计数器的类型为二进制“Plain binary”。计数器的类型除了二进制外,还可以选择任意模值,如10、24、60等。另外,计数器还可以增加一些输入或输出控制端口,如“Clock Enable”(时钟使能)、“Carry-in”(进位输入)、“Count Enable”(计数器使能)和“Carry-out”(进位输出),如图2-42所示。
图2-42 “MegaWizard Plug-In Manager-LPM_COUNTER[page4of6]”对话框
完成图2-42计数器的参数设置后单击“Next”按钮,进入计数器参数设置的“MegaW-izard Plug-In Manager-LPM_COUNTER[page5of6]”对话框。此对话框用于为计数器添加同步或异步输入控制端,如“Clear”(清除)、“Load”(预置)等,如图2-43所示。
图2-43 “MegaWizard Plug-In Manager-LPM_COUNTER[page5of6]”对话框
图2-44 “MegaWizard Plug-In Manager-LPM_COUNTER[page6of6]”对话框
单击“Next”按钮,进入计数器参数设置的“MegaWizard Plug-In Manager-LPM_COUNT-ER[page6of6]”对话框页面,如图2-44所示。这是计数器参数设置的最后一个页面,主要用于选择生成计数器的输出文件,如VHDL的文本文件“lpm_rom0.vhd”、图形符号文件“lpm_rom0.bsf”等。至此,计数器参数设置完成,用鼠标左键单击“Finish”按钮结束设置。
(2)建立存储器初值设定文件(www.xing528.com)
在设置正弦波数据存储器时,先建立一个存储器初值设定文件(或称为.mif格式文件),然后将数据装入ROM中。在QuartusⅡ集成环境下,执行“File”菜单的“New”命令,打开一个新的“Memory Initialization File”(存储器初值设定文件)对话框,如图2-45所示。在弹出的存储器参数设置对话框中输入存储器的字数(Number of words)为256,字长(Word size)为8位,如图2-46所示。
图2-45 新建“Memory initialization file”窗口
图2-46 存储器参数设置对话框
图2-46存储器的参数设置结束后单击“OK”按钮,弹出存储器初值设定文件的界面,如图2-47所示,将此文件以.mif为类型属性(如mydds.mif)保存在工程目录中。在存储器初值设定文件的界面中,在Addr地址栏单击鼠标右键,执行AddressRadix项则可对存储器的地址基数进行选择,地址有Binary、Decimal、Octal和Hexadecimal4种基数选择。执行MemoryRadix项则可对存储器单元中的数据基数进行设置,存储器数据有Binary、Hexadeci-mal、Octal、Signed Decimal和Unsigned Decimal5种基数选择。
图2-47新建的存储器初值设定文件的数据全部为0,部分有规律的波形数据(如锯齿波)可以通过快捷方式填充,而正弦波的数据需要在存储器初值设定文件的界面上一个一个地输入,利用MATLAB语言可以方便地生成正弦波数据。在MATLAB命令窗口,输入程序如下:
(3)加入只读存储器ROM元件
用鼠标双击原理图编辑窗口,在弹出的元件选择窗的“Libraries”栏目中选择“stor-age”的“lpm_rom”(只读存储器ROM)LPM元件,如图2-48所示。用鼠标单击“OK”按钮后弹出“MegaWizard Plug-In Manager[page2c]”对话框。在该对话框中,选择VHDL(或VerilogHDL)作为输出文件的类型,并将生成的只读存储器名称及保存的文件夹输入到“What name do you want for the output file?”栏目中,如图2-49所示。
图2-47 存储器初值设定文件的界面
图2-48 “lpm_rom”元件对话框
图2-49 “MegaWizard Plug-In Manager[page2c]”对话框
完成图2-49操作后,单击“Next”按钮,进入ROM参数设置的下一个对话框页面“MegaWizard Plug-In Manager-LPM_ROM[page3of6]”。在此页面中设置ROM的“q”输出位数为8bit,字数为256,如图2-50所示。
图2-50 “MegaWizard Plug-In Manager-LPM_ROM[page3of6]”对话框
完成图2-50的参数设置后单击“Next”按钮,进入ROM参数设置的“MegaWizard Plug-In Manager-LPM_ROM[page4of6]”对话框,在此页面设置单时钟输入,如图2-51所示。
完成图2-51的参数设置后单击“Next”按钮,进入ROM参数设置的“MegaWizard Plug-In Manager-LPM_ROM[page5of6]”对话框。在对话框的“Do you want to specify the initial content of the memory?”栏目中选中“Yes,use this file for the memory content data”项,并输入存储器初值设定文件名(如mydds.mif),如图2-52所示。
图2-51 “MegaWizard Plug-In Manager-LPM_ROM[page4of6]”对话框
图2-52 “MegaWizard Plug-In Manager-LPM_ROM[page5of6]”对话框
完成图2-52的参数设置后单击“Next”按钮,进入ROM参数设置的“MegaWizard Plug-In Manager-LPM_ROM[page6of6]”对话框,如图2-53所示。这是ROM参数设置的最后一个页面,此页面主要用于选择生成ROM的输出文件。至此,ROM参数设置完成,用鼠标左键单击“Finish”按钮结束设置。
图2-53 “MegaWizard Plug-In Manager-LPM_ROM[page6of6]”对话框
(4)编辑和编译顶层设计文件
在新建的图形编辑窗口中加入计数器“lpm_couter0”和只读存储器“lpm_rom0”元件后,再加入设计电路的输入和输出端口,按照波形发生器原理图完成电路中的连线,如图2-54所示,并以“mydds.bdf”作为顶层文件名将设计文件保存于工程目录中,并通过Quar-tusII的编译。
图2-54 正弦波发生器顶层文件
(5)仿真顶层设计文件
为正弦波发生器设计建立仿真文件,然后执行“Processing”菜单中的“StartSimula-tion”命令,或单击“Start Simulation”按钮,对波形发生器设计电路进行仿真,仿真波形输出的数据就是在存储器初值设定文件中加入的正弦波发生器数据。
(6)编程下载设计文件
选择好D-A转换器,并进行引脚锁定后,就可以将正弦波配置文件“mydds.sof”下载到FPGA目标芯片,然后用示波器观察输出正弦波形。至此,简单的正弦波发生器设计完成。在此基础上,可以进一步考虑如何改变正弦波的频率,如何实现三角波、锯齿波等多种波形等。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。