波形发生器使用方法功能模块QuartusII(波形存储器文件初值元件)

使用Quartus II 的MegeWizard Plug-In Manager中的宏功能模块可以帮助用户完成一些复杂系统的设计,并可以方便地对现有的设计文件进行修改
这些宏功能模块包括LPM(Library Parameterized Megafunction)、MegaCore(例如FFT、FIR等)和AMPP(Altera Megafunction Partners Program,例如PCI、DDS等)
下面以波形发生器的设计为例,介绍Quartus II宏功能模块的使用方法
2.3.1 设计原理波形发生器的原理图如图所示
其中,lpm_counter0是LPM计数器,LPM_ROM是LPM只读存储器(ROM)
ROM中保存的是某种波形信号(如锯齿波或正弦波)的数据,其地址由计数器lpm_counter0提供
lpm_counter0是一个8位加法计数器,在时钟的控制下计数器的输出q[7..0]由“00000000”到“11111111”循环变化,使ROM输出周期性的波形信号的数据
波形发生器的原理图2.3.2 编辑输入顶层设计文件设计开始时应首先为波形发生器建立新的设计工程,本例的设计工程名为“mydds”,并选择Cyclone II系列的EP2C35F672C6(DE2的目标芯片)作为设计工程的下载目标芯片
新的工程建立后,在Quartus II集成环境下,执行“File”→“New”命令,打开一个新的“Block Diagram/Schematic File ”(模块/原理图文件)编辑窗口
1. 加入计数器元件首先加入“arithmetic”库库中的“lpm_counter”(计数器)LPM元件
LPM是参数化的多功能库元件,每一种LPM元件都具有许多端口和参数,通过对端口的选择与参数的设置得到设计需要的元件
计数器元件上有许多端口,实际设计只需要时钟输入clock和数据输出q[]端口
通过参数设置就可以将不用的端口消去,并对使用端口的参数进行设置
lpm_counter元件选择窗选定计数器元件后单击元件选择窗的“OK”按钮,弹出如图所示的“MegaWizard Plug-In Manager[page 2c]”对话框页面
在该对话框页面中,选择VHDL(或Verilog HDL或AHDL)作为输出文件的类型,并在“What name do you want for the output file ?”栏目中选择或填入生成的计数器名称及保存的文件夹(如D:\myeda\lpm_counter0)
完成上述操作后,单击“Next”按钮,进入“MegaWizard Plug-In Manager [page 3 of 7] LPM_COUNTER”页面
在此页面中设置计数器的q输出位数为8bit,时钟输入clock的有效边沿为“Up only”(上升沿有效)
MegaWizard Plug-In LPM_COUNTER单击“Next”按钮,进入“MegaWizard Plug-In Manager [page 4 of 7] LPM_COUNTER”页面
在此对话框页面中,选择计数器的类型为“Plain binary”(二进制)
计数器的类型除了二进制外,还可以选择任意模值,如5、10、60等
单击“Next”按钮,进入“MegaWizard Plug-In Manager [page 5 of 7]LPM_COUNTER”页面
此页面用于为计数器添加同步或异步输入控制端,如“Clear”(清除)、“Load”(预置)等
2. 建立存储器初值设定文件为了将数据装入ROM中,在加入ROM之前,首先应建立一个存储器初值设定文件(或称为.mif格式文件)
建立存储器初值设定文件的操作如下:① 执行“File”→“New”命令,打开一个新的“Memory initialization file”(存储器初值设定文件)编辑窗口,在弹出存储器参数设置对话框中输入存储器的字数(Number of words)为256,字长(Word size)为8位存储器参数设置对话框 ②单击“OK”按钮,弹出存储器初值设定文件的界面,将此文件以.mif为类型属性(如mydds.mif)保存在工程目录中
在存储器初值设定文件的界面中,右击存储器的某个地址(如0),弹出Address Radix(地址基数)和Memory Radix(存储器基数)选择快捷菜单
执行“Address Radix”命令可对存储器的地址基数进行选择,地址基数有Binary(二进制)、Decimal(十进制)、Octal(八进制)和Hexadecimal(十六进制)4种选择,本例选择地址基数为“Decimal”
执行“Memory Radix”命令可对存储器单元中的数据基数进行设置,数据基数有Binary、Hexadecimal、Octal、Signed Decimal和Unsigned Decimal等5种选择,本例的设计选择“Unsigned Decimal” (无符号十进制)
存储器初值设定文件的界面③ 将数据加入存储器初值设定文件中
新建的存储器初值设定文件中的数据全部为0,在存储器初值设定文件的界面可以直接输入每个存储器字的数据,也可以右击文件,在格式文件操作快捷菜单提示下,完成数据输入
例如,在格式文件操作快捷菜单中选择“Custom Fill Cells”(块填充)项,弹出“Custom Fill Cells”对话框
在对话框的“Starting address”栏目内输入起始地址(如00),在“Ending address”栏目内输入结束地址(如255);将“Incrementing/Decrementing”选中后,在“Starting Value”栏目中输入起始值(如0),在“Increment by”(或Decrement by)栏目中输入增加(或减少)值(如1)
完成上述操作后单击“OK”按钮,结束.mif格式文件中的数据填充,得到一个锯齿波数据
根据快捷菜单,还可以对格式文件中的数据进行拷贝、粘贴、填充0、填充1等操作
生成的存储器初值设定文件(mydds.mif)的格式如下: WIDTH=8;DEPTH=256;ADDRESS_RADIX=UNS;DATA_RADIX=UNS;CONTENT BEGIN//存储器的地址与数据 0 : 0; 1 : 1; 2 : 2; //以下252行数据省略 254 : 254; 255 : 255;END; 用上述方法只能生成一些简单的波形数据,对于复杂的波形(如正弦波)的数据,需要在存储器初值设定文件的界面上一个一个地将数据填入
利用C语言程序也可以生成存储器初值设定文件(.mif)中的数据,例如生成正弦波数据的C语言源程序(myram.c)如下:#include <stdio.h>#include \"math.h\"main(){int i,k;for(i=0;i<256;i++) {k=128+128sin(360.0i/256.03.1415926/180); printf(\"%d : %d;\n\",i,k); } return;}在C语言编译软件环境下将myram.c文件通过编译并运行后,在DOS(Windows的命令提示符)环境下执行命令:myram > myram_1.mif则将myram文件运行的结果保存在myram_1.mif文件(该文件可以任意命名,也可以不加文件属性)中
以“记事本”方式打开myram_1.mif文件,将其地址和数据部分的内容(共256行)复制到以记事本方式打开的存储器初值设定文件(mydds.mif)中,替换源文件中的地址和数据
注意:如果原来的存储器初值设定文件(.mif)中的地址基数选用“Hexadecimal” (十六进制),而用C语言程序生成的地址基数是十进制,因此需要把mydds.mif中的“ADDRESS_RADIX=HEX;”语句修改为“ADDRESS_RADIX=DEC;”,表示地址基数为十进制,而原来的存储器初值设定文件中的地址基数选用十进制,则不需要修改
在Quartus Ⅱ环境下打开修改后的mydds.mif,其存储的数据即为正弦波的数据
3. 加入只读存储器ROM元件在弹出的元件选择窗的“Libraries”栏目中展开“megafunction”的“storage”库,选中库中的“lpm_rom”(只读存储器ROM))元件,单击“OK”按钮完成LPM_ROM元件符号的加入
双击元件符号右上角属性(property)框,弹出元件符号属性(Symbol Properties)窗口的General页面
元件符号属性窗口有General(常规)、Port(端口)、Parameter(参数)和Format(格式)4个页面,General页面用于符号名称(Symbol name)和实例名称(Instance name)的设置;Port 页面用于使用或不使用端口的设置;Parameter 页面用于参数的设置;Format 用于格式的设置,如元件符号的线条、字体的颜色等
在General页面保持的默认的符号名称LPM_ROM和实例名称inst1
单击元件符号窗口上方的“Port”按钮,进入Port页面
LPM_ROM一共提供了address(地址)、inclock(时钟输入)、memenab(存储器使能)、outclock(时钟输出)和q[](数据输出)5个端口,在Port页面的status(状态)栏中设置使用或不使用这些端口,在本例设计中,将address、inclock和q[]设置为“Used”(使用),将memenab和outclock设置为“Unused”(不使用)
单击元件符号窗口的“Parameter”按钮,进入Parameter页面
该页面有6项参数需要设置
① 在名称为“LPM_ADDRESS_CONTROL”项的Value(值)框中选择“\"REGISTERED\"”(注册),在Type(数据类型)框中选择Auto(自动)为数据类型
数据类型有多种,如“Signed Binary”(带符号整型)、 “Unsigned Integer”(无符号整型)、“Octal”(八进制)、“Float”(浮点)等,这些数据类型都可以用“Auto”替代
②在名称为“LPM_FILE”项的Value框中输入存储器初值文件的名称,本例的设计的名称为“mydds.mif”,在Type框中选择Auto为数据类型
③在名称为“LPM_NUMWORDS”项的Value框中填入存储器的字数,本例设计的字数为256(即28),在Type框中选择Auto为数据类型
④在名称为“LPM_OUTDATA”项的Value框中选择“\"UNREGISTERED\"”(未注册),在Type框中选择Auto为数据类型
⑤在名称为“LPM_WIDTH”项的Value框中填入存储器的字长,本例设计的字长为“8”,在Type框中选择Auto为数据类型
⑥在名称为“LPM_WIDTHAD”项的Value框中填入存储器地址的位数,本例设计的地址位数为“8”,在Type框中选择Auto为数据类型
单击元件属性窗口下方的“OK”按钮,结束LPM_ROM参数属性的设置
4. 编辑和编译顶层设计文件在新建的图形编辑窗口中加入计数器lpm_counter0和只读存储器LPM_ROM元件后,还需要加入一个输入(input)元件和两个输出(output)元件,输入元件接于lpm_counter0的clock端,并更名为“clk”,作为电路的时钟输入;一个输出元件接于LPM_ROM的q[]端,并更名为“q[7..0]”,作为8位波形数据输出;一个输出元件接于lpm_counter0的输出q[7..0]端,并更名为“qc[7..0]”,作为另一个8位数据输出端口,由于存储器的地址是从“00000000”递增到“11111111”不断循环,因此这个数据端口输出的是一种锯齿波
参照波形发生器原理图,完成设计电路的内部连接,然后以“mydds.bdf”为文件名保存在工程目录中,并通过Quartus II的编译
2.3.3 仿真顶层设计文件在Quartus II 13.0界面执行“Assignments”→“Settings”命令,在弹出的设置(Settings)窗口,单击选中“EDA Tool Settings”项,对“Simulation”栏目下的仿真测试文件进行设置和新的测试文件mydds.vho的添加
执行“Tools”→“Run EDA Simulation Tool”→“RTL Simulation”命令,开始对设计文件的寄存器传输级时序仿真,命令执行后,系统会自动打开ModelSim-Altera 10.1d主界面和波形窗口
为了便于观察,将波形窗口中q、clk和qc信号保留,其余信号删除,然后右击信号q,执行弹出的Object快捷菜单的“Properties…”命令,弹出波形属性窗口
在属性窗口将将q的数制基数设置为十六进制(hexadecimal),单击波形属性窗口上方的“Format”按钮,进入波形格式页面,在该页面选中“Analog”(模拟)格式,并在“Max:”栏中填入“300”作为模拟波形显示幅度的最大值,单击“OK”按钮,结束q信号的波形格式设置
用同样的方法设置qc信号为十六进制的模拟波形输出格式
右击信号clk,执行弹出的Object快捷→“clock…”命令,弹出“Define Clock”(定义时钟)窗口,在窗口的Period(周期)栏目中将时钟周期改写为10000(默认单位为ps),由于目标芯片的传输延迟在10ns左右,因此时钟周期小于10000ps时将无法看到设计电路时序仿真的输出波形
窗口中其他栏目保持默认,单击“OK”按钮,结束clk信号的设置
单击波形窗口的“运行全程”按钮,约数秒后单击“停止”按钮结束仿真,然后单击“全程”按钮,展开仿真波形,用“缩小”或“放大”按钮调整波形窗口,得到便于观察的正弦波和锯齿波仿真波形,仿真波形上的微小“尖峰”是设计电路的竞争-冒险现象
设计电路的仿真波形2.3.4 图形文件的转换 为了使利用Quartus II宏功能模块设计的电路能在其他软件平台运行和验证,可将其转换为硬件描述语言(HDL)文件
执行Quartus II主窗口的“File”→“Create/Update”→“Create HDL Design File for Current File”命令,弹出生成HDL文件对话框,选择生成Verilog HDL或VHDL类型文件
HDL文件类型确定后,单击“OK”按钮,即可为当前的设计生成Verilog HDL或VHDL文件
生成HDL文件对话框
波形发生器使用方法功能模块QuartusII(波形存储器文件初值元件)
(图片来源网络,侵删)

联系我们

在线咨询:点击这里给我发消息