资源描述
4.4.3 自定义组件实例1-DDS信号产生模块
1、启动Quatus II,并且打开Test_DDS工程
根据图4.14,修改形成下图
2、Tool->Qysy 启动Qsys
将自定制元件的Verilog HDL接口描述文件DDS_controner.v设计好,并且放在Test_DDS工程目录中。
3、双击Qsys界而左边Library组件库中Project下的New Component打开Qsys组件编辑器(或选择菜单File®New Component),如图4.16所示。
组件编辑器(Component Editor)有5个标签页。
n Component Type标签页
n Files标签页
n Parameter标签页
n Signals标签页
n Interfaces标签页
1)Component Type标签页
Component Type标签页可以指定关于自定制组件的以下信息:
(1)Name:指定_hw.tcl文件名中使用的名称(如输入DDS_Controller).对十不是基于已经编辑好的HDL文件的自定制组件,也指定项层模块名称。
(2)Display name(可选):识别参数编辑器GUI中的组件(如输入DDS_Controller),也出现在组件库中的project下和Qsys界面的System Contents标签上。
(3)Version:指定组件的版本编号(如1 .0)。
(4)Group(可选):代表组件库中组件列表中组件的类别(如输入User_IP)。用户可以从组建列表中选择一个现有的组,或通过在Group对话框中输入一个名称定义新组。
n 使用斜线在Group对话框中分离选项以便定义一个子类别。例如,输入 Memories and Memory Controllers/On-chip,则组件出现在组件库中的On-Chip组下,它是Memories and Memory Controllers组的子类别。
n 如果将Qsys设计保存到工程目录中,则组件出现在组件库的Project下定制的组中。
n 另外,如果将设计保存到Quartus ll安装目录中,则组件出现在Library下定制的组中。
(5)Deseription(可选):组件描述(如输入DDS_Controller)。
(6)Created by(可选):指定组件的作者。
(7)Icon(可选):可以输入图标文件(.gif、.jpg或. pgn格式)的相对路径,它代表组件并在组件的参数编辑器中显示为标头。默认图像是Altera MegaCore功能图标。
(8)Documentation(可选):可以添加链接到组件的文件中,右键点击组件库中的组件,选择Details时该选项会出现。
①要指定一个Internet链接,其路径以http://开始,如:
②要指定文件系统中的文件,对于Window,其路径以file:////开始,如:file:////company_server/datasheets/my_memory_eontroller.pdf。
③对于Linux,其路径以file:///开始。
填写好内容的Component Type标签页如下图所示。
2)Files标签页
n 组件编辑器的FileS标签页可以指定综合和仿真的硬件描述语言文件。
n 对于已经编辑好的HDL文件的自定制组件,在FileS标签页中可以直接指定HDL文件;
n 对没有编辑好的HDL文件的自定制组件,可以使用Files标签页来创建顶层HDL模板文件。
(1) 对于已经编辑好的HDL文件(本例),点击Files标签页中Synthesis Files下的“+”按钮,添加应该包含的自定制组件 HDL接口描述文件及其他支持文件。如图4.17所示,添加DDS_Controller.v文件,并指示为顶层文件。
一个组件必须将HDL文件指定为包含顶层模块的顶层文件。Synthesis Files列表也可包含时序约束文件,或需要在Quartus Ⅱ中综合和编译的其他文件。组件的综合文件在Qsys系统件生成过程中被复制到生成输出目录中。
(2)对于还没有编写好的HDL文件,可以使用组件编辑器来定义组件,对组件创建一个包含信号和参数的简单的顶层综合文件,然后可以编辑该HDL文件来添加自定制组件行为的接口描述及相关逻辑。开始时需要首先在Parameters、Signals和Interfaces标签页指定组件的信息,然后点击Fi les标签页Synthesis Files下的Create Synthesis File from signals按钮。
n Files标签页其他功能
(1)分析综合文件。
在Files标签页中指定了顶层HDL文件后,点击synthesis FileS下面的Analyze Synthesis Files按钮来分析顶层中的参数和信号,然后从Top-level Module列表中选择顶层模块。
下面窗口报告:出现错误
修改DDS_Controller.v,再点击synthesis FileS下面的Analyze Synthesis Files按钮进行分析,最终通过。如下面窗口所示。
如果在HDL文件中有一个单一模块或实体,那么Qsys自动填入Top-level Module列表。
分析完成并选择了顶层模块,顶层模块中的参数和信号就会被自动用作组件的参数和信号,在Parameters和Signals标签页上可以查看这些参数和信号。
由于还没有完全定义信号和接口类型,组件编辑器在这一阶段可能会报告错误或警告,如图4.17所示。
在该阶段不能随便添加或删除指定HDL文件所创建的参数或信号。
(2)指定仿真文件
要仿真Qsys生成的系统,必须指定组件的VHDL或Verilog仿真文件。
当用户将组件添加到Qsys系统并且选择生成Verilog或VHDL仿真文件时,将生成对应组件的仿真文件。
大多数情况中,这些文件和综合文件相同。
如果已经编写了自定义组件的HDL仿真文件,那么除了使用综合文件以外还可以直接使用它们,或者使用它们替代综合文件。
要将综合文件用作仿真文件,在Files标签页中,可点击Copy From Sythesis Files按钮将综合文件的列表复制到Verilog Simulation Files或VHDL Simulation Files列表。
填写好的File标签页如下图所示。
3)Parameters标签页
点开Parameters标签页,如下图所示。
组件编辑器的Parameters标签页可以指定用于Qsys系统中配置组件的实例参数。
Parameters列表显示了在顶层HDL模块中声明的HDL参数及类型,用户不可以随意添加或删除它们,除非重新编辑组件的HDL描述源文件。
本实例中所使用的DDS_controller.v描述中没有使用参数。
对使用组件编辑器来创建组件HDL描述模板文件的用户,可以使用Parameters表来指定每个参数的以下信息:
(1)Name:参数名。
(2)Default Value:设置组件在调用实例中使用的默认值。
(3)Editable:指定用户是否可以编辑参数值。
(4) Type:定义参数类型,如字符串、整型数、布尔类型、std_logic、逻辑矢量等。
(5)Group:可以在参数编辑器中将参数分组。
(6)Tooltip:可以添加参数说明。
可以点击该标签页中的Preview the GUI按钮查看所声明的参数是如何出现在参数编辑器中的。
在参数编辑器中HDL参数应该遵循以下规则:
(1)可编辑的参数不能包含计算表达式。
(2)如果参数<n>定义信号的宽度,则表示信号宽度的格式为<n-1>:0。
可以点Preview the GUI …按钮,查看自定义组件符号。如下图所示。
还可以点击Documentation按钮观察。如下图所示。
4)Signals标签页
点开Signals标签页,如下图所示。
组件编辑器的Signals标签页用于指定组件中的每个信号的接口及信号类型。
将组件HDL描述文件添加到Files标签上的Synthesis Files表后,点击Files标签页中的Analyze Synthesis Files按钮,顶层模块上的信号将出现在Signals标签页中。
注意:如果还没有组件顶层HDL描述文件,则可以点击Signals标签的Add Signal按钮来添加组件的每个顶层信号,并在Name、Interface、Signal Type、Width和Direction列中输入或选择相应的值。
用户可以使用窗口底部的错误和警告信息来指导相关参数的选择。通过双击Name列可编辑信号的名称。
注意:如果在Files标签页中已经分析了组件的顶层HDL文件,就不可以在Signals标签上添加或删除信号,也不能更改信号的名称。
要更改信号,就必须编辑HDL描述文件,然后重新添加到Files标签页中进行分析。
Signals标签页中的Interface列可以对接口分配信号。每个信号必须属于一个接口并且基于该接口分配一个合法的信号类型。要创建一个新的指定类型的接口,可以从Interface列的列表中选择new<interface type>,则新的接口就可以用于接下来的信号分配,如图4.18所示。
注意:接口名称可以在Interfaces标签页中进行编辑,但不可以在Signals标签页中编辑。
依据图4.15及组件HDL接口描述文件DDS_controller.v,在Signals标签页中为每个信号指定相应的Interface类型。例如iCLK信号,从Interface列的列表中选择new Clock Input,并在Signal Type列中选择clk。
图4.15中对应Avalon从接口的信号其Interface均为avalon_Slave_0类型,根据信号类型在Signal Type列中选择对应的信号类型,如32位的iDATA信号是Avalon总线从端口的写数据总线,因此在Signal Type中选择writedata,iRD_N是Avalon总线从端口的读信号,低电平有效,因此选择read_n;
而图4.15中对应DDS接口信号(即设备端的信号),包括外部时钟信号iOSC_50,需要在Interface列中选择new Conduit,建立Conduit end接口类型,并在Signal Type列中选择export导出这些信号。
设置好的signals标签页信号及其类型如图4.19或下图所示。
在Signals标签页中设置好所有接口信号的类型以后,在标签页下面可能会显示出很多错误和警告信息。根据这些信息,可以进一步完成Interfaces标签页的设置。
5)Interfaces标签页
点开Interfaces标签页,如下图所示。
组件编辑器的Interfaces标签页用于管理组件的每个接口的设置。
当创建好的组件例化添加到Qsys系统中时,出现在Signals标签页中的接口名称将显示在Qsys System Contents标签中。
在Interfaces标签页中,用户可以配置Signals标签中Interface列所设置的每个接口的类型和属性,如图4.20所示的avalon_slave_0接口的类型和属性。
填写好的Interfaces标签页,如下图所示。(注意:有报错!)
滚动填写好的Interfaces标签页,如下图所示。
再滚动填写好的Interfaces标签页,如下图所示。
再滚动填写好的Interfaces标签页,如下图所示。
注意:错误提示:trset_sink … requires associated clock
点开上图中associated clock下拉框,如下图所示。
选clock_sink,系统报告没有错误和警告。如下图所示。
接口的类型和属性设置可以参考图4.19中的错误信息,这些信息已经告诉用户各接口应该如何设置。
某些接口显示了描述接口时序的波形,如果需要更新时序参数,则波形自动更新。
当Interfaces标签页设置好后,所有的错误及警告信息将消失,信息栏提示Info:No errors or warnings。
通过Interfaces标签页下而的Remove Interfaces With No Signals按钮,可以删除没有信号的接口(多余接口)。
6)保存组件
点击组件编辑器界面下方的Finish按钮保存组件,组件编辑器将组件保存到文件名为
<eomponent_name>_hw.tel的文件,如图4.21或下图所示,本例为DDS_controler_hw.tel文件。
用户也可以将组件文件移到一个新的目录,以便其他用户可以在系统中使用该组件
_hw.tcl文件包含其他文件的相对路径,所以如果移动一个_hw.tcl文件,那么也应该移动所有与其相关的HDL及其他文件。
Altera一般建议将_hw.tcl文件和与它们相关的文件保存到Quartus Ⅱ工程目录的ip/<class-name>目录中。
7)在Qsys中调用自定制元件
保存后的Library窗口。如下图所示。
自定制组件生成后,可以在Qsys的组件列表下的User_IP组(在图4.16的Group中输入的名称)中找到名为DDS_controller的组件;
点开User_IP,结果如下图所示:
双击DDS_controller的组件,可以在Qsys系统中添加该组件的例化,如图4.22所示。
勾Show signals,结果如下图所示。
点Finish按钮,结果如下图所示。
注意:有两个报错。clock_sink,reset_sink没有连接。
点连接clock_sink,reset_sink的白点,进行连接。错误消失。如下图所示。
3.自定制元件的调用
(1)启动QuartusⅡ EDA软件工程;
再启动Qsys;Tool->Qsys
不打开任何系统文件。
(2)通过产在Qsys中加入所需的集成IP核(包括NioSⅡ软核处理器、存储器和各种外围设备)快速为自己的设计项日定制处理器硬件系统;如本例需要在Qsys中分别添加:
n Nios Ⅱ处理器(Nios Ⅱ_cpu);
点Add
有2个报错。
选中后错误排除。其余选默认。点Finish
上面图中选Edit->Rename,将实例名改为:Nios2_cpu_0
n 添加DDS信号产生模块(DDS_Controller_1);
点开User_IP,选中DDS_Controller,点Add
点Finish;选Edit->Rename,将DDS_Controller_0改为DDS_Controller_1。
n 添加外部输入控制信号(pio_sw_in,用来控制输出信号频率);
Add
选Input,然后点Finish,并且将pci_0改为pci_sw_in
n 添加处理器程序存储器(sdram);
Add
Finish
n 以及下载调试接口(jtag_uart)等设备;
如图4.22所示。
其中DDS_Controller_1是自定制元件的例化模块,通过该模块将DDS信号产生模块(图4.14框图所描述的模块,如图4.23中的DDS_Module模块)挂接到Avalon总线上。
(3)在Qsys中完成一定的参数配置(如基地址、中断等)并生成Qsys系统后,一个以Nios Ⅱ软核处理器为核心的嵌入式系统的硬件部分即定制完成。
n 完整的Qsys系统工程如图4.23所示。
n 图中,My_Interrupt_cpu即为Qsys中定制的处理器模块;
n DDS_Module为图4.14框图所描述的DDS信号产生模块。
n SW[0]接pio_sw_in_export信号控制DDS输出信号频率,
n clk_50M为50 MHz系统时钟,
n sys_clock与clk_50M频率相同。
n 图4.23中的DRAM_<xxx>均为SDRAM存储器信号。
n DDS_Module的q[9..0]是输出正弦波信号,
n DDS_oDATA[31..0]与q[9..0]一样,但可以通过Nios Ⅱ处理器RD读信号读入并显示到计算机上。
(4)按照EDA软件的操作流程,编译该QuartusⅡ工程,根据硬件开发板上器件型号选择器件、锁定引脚并完全编译产生FPGA下载文件。
初步结果:
图1(上左半部分)
图2(上右半部分)
图3(下左半部分)
图3(下右半部分)
注意:0 Errors, 0 Warnings
因此可以进一步生成Qsys的系统元件
选Generate -> Generate …
生成My_interrupt_cpu系统元件。
退出Qsys
在Quartus II下,打开下图对应的bdf文件。
选File->Create/Update ->Create Symbol File for Current File
产生与书上DDS_Module对应的符号文件。
在工程中新建新的bdf文件。
File->New->Block Diagram/Schematic File
添加生成的组件到bdf文件。如下图所示。这就是p124 图4.23中的组件。
展开阅读全文