教程 – 创新电子设计平台入门

Old Content - visit altium.com/documentation

创新电子设计平台 (Innovation Station)代表了Altium Designer软件和NanoBoard可 重构硬件平台的强强联合。

这种强强联合实时提供绘制、实现、测试和调试嵌入式/ FPGA设计必须的所有工具及技术。在Altium创新电子设计平台的帮助下,您无需管理低级细节,只需专注于设备的智能和功能——真正可持续产品差异化 的来源。

在这个教程中,我们将首先定义创新电子设计平台,然后实现一个简单的基于处理器的FPGA设计,使其运行在插入到NanoBoard的 物理FPGA器件上,以显示这样两个组件系统是如何互相协调工作的。

通过学习本教程的各个章节,您将获得关于Altium进 行FPGA设计的基础知识,包括:

  • NanoBoard概述
  • Altium Designer中FPGA项目的创建
  • FPGA项目中设计层次的使用
  • 完成一个基于OpenBus的FPGA设计,包括查找及放置元器件,完成元件连接,以及将元件连接到NanoBoard的外部设 备。
  • 创建嵌入式项目并使其与目标FPGA上的软核处理器链接起来
  • 使用自动配置特性指定一个设计,使其面向NanoBoard上的子板FPGA 
  • 设计加工——编译、合成和创建设计,以获得用于对目标器件进行编程的编程文件
  • 使用虚拟仪器来控制系统

对于本教程中的特色设计样例,我们将会在软件中创建一个基本的、类似混响的音频,使其在目标FPGA器件的处理器上执行。与所有回声效 果一样,混响 会重复输入音频信号;不同的是,混响通过减弱回声来创造一种使声音听起来更像是回响在大面积区域内的效果。之后,衰减信号反馈回输入端并且和当前输入的音 频混合,制造一种更丰富的音效,让我们能够通过听觉来感受区域的大小。

本教程的重点是为这种混响音效创建延迟和衰减元件。更完整的混响可能包括了控制延迟和抑制特定频段的选项。

音 频系统概述。

源文件可以在Altium Designer安装程序的教程文件夹\Examples\Tutorials\Audio Effects中找到。您可以在任意时刻参考这个实例或跳过某些步骤。

您需要什么?

为了完成本教程,您将需要:

  • 已安装的Altium Designer Summer 08 (或更高版本)
  • 已安装的配有PB01外设板和DB30 Spartan3子板(或类似)的 NanoBoard 
  • 音频源(可以是PC耳机输出,MP3播放器等)
  • 包含在NanoBoard的环回音效电缆(或将您的音频源连接到NanoBoard音频输入的类似电缆)
  • 供应商构建工具。如果您使用的是DB30子板,那么Xilinx ISE(8.2.03i或更高版本)的免费版本就足够了。

什么是电子创新设计平台?

创新电子设计平台代表了NanoBoard可重构硬件平台和备受赞誉的Altium Designer软件的强强联合。作为一个概念,创新电子设计平台提供了利用前所未有的设计创新电子产品所需的全部工具;真正地激发了每位工程师的创造潜 力。

硬件实现平台,也就是NanoBoard,专门设计来配合Altium Designer使用,在真正的硬件上开发测试完整系统,变得前所未有地快捷和简单。NanoBoard包括了Altium Designer执行基于FPGA 的软IP内核阵列所必须的全部物理层外设。安装在可移动外设板上的外围设备可以在任意时刻进行交换,用户设计的系统甚至可以被替代,通过3个高密度外设板 连接器之一来连接到NanoBoard的子系统。

Altium Designer,作为强强联合的另一半软件主力,是第一个也是唯一一个完全一体化的电子设计软件工具,涵盖了原理图设计,PCB布局,FPGA开发,嵌 入式软件开发,甚至CAM。Altium Designer和其他软件工具之间的根本性区别仍然是Altium设计的整体方法,它不把电子设计看作一系列孤立解决的独立任务,而是看作一个由多个组 件组成的单一任务,其中每个组件部分必须依靠并和其他部分一起协调工作。Altium Designer包含了一系列完整的可重用IP,并封装成为创新电子设计平台的一部分。这包括了用于FPGA开发的软IP内核,从处理器端支持IP的低级 软件驱动程序和每个子系统的完整原理图,用于在目标系统中快速实现您的设计。

为什么选择NanoBoard?

NanoBoard是一个完全可重构的硬件开发平台,包含了广泛的硬件外设,旨在使其易于充分利用Altium Designer提供的软IP内核。外围设备都位于一系列的可移动外设板内,每个外设都通过100引脚的连接器连接到了主板上。

通过将硬件与Altium Designer配合,并向NanoBoard提供完整的原理图,Altium使得在设计中充分利用NanoBoard成为可能。所以,当您从 Altium Designer提供的元器件库中选择IP内核时,不仅仅是访问IP,还可以参考目标板中的所有物理系统。

此外,每个NanoBoard子系统均使用器件页面符(Device Sheets)绘制。器件页面符是可以在目标系统中使用层次符号进行初始化的可重用文档。也就是说,如同您可以快速添加图表符号到层次化原理图中并进行导 线连接,您同样也可以快速在您的电路板上包含用于创建NanoBoard的物理层元器件。

录入FPGA设计

我们需要做的第一件事是在Altium Designer环境中录入FPGA设计。Altium Designer推出了一系列的录入模式,包括OpenBus,原理图,VHDL,Verilog,甚至C语言。最佳的模式取决于项目本身和控制及定制水 平。所有的Altium IP内核都以OpenBus符号和原理图元器件的形式提供,所以,如果您想仅仅使用Altium Designer提供的IP,可以优先考虑这两种录入方式。

在原理图和OpenBus两者间,OpenBus能够更快地执行,几乎消除了原理图中需要的所有复杂布线。由于需要顶层原理图,如果需 要添加 OpenBus控制板中没有的额外元器件,这些元器件可以按要求添加到顶层原理图并连接到图表符。事实上,OpenBus和原理图录入可以混合并匹配,从 而轻松地开发任何具有完美低级细节的复杂系统。例如,在使用OpenBus的情况下,一个利用Altium IP创建的设计,能够通过书写源代码并在项目层次的另一层内链接两个文件的方式,实现利用VHDL或Verilog的扩展。

无论您选择何种方式,每个FPGA项目都必须包括一个顶层原理图。这个顶层图纸将会包括端口或端口插入式元件(来自后文的Altium 端口插件库之 一),因为这些端口/元器件代表了目标FPGA器件的引脚。顶层原理图还能够将软核IP元器件和/或接口括入由图表符代表的低级源文档中。FPGA设计必 须是分层的,且适用于FPGA设计的分层规则与适用于其他Altium Designer设计的分层规则是相同的(若想了解Altium Designer分层设计的完整细节,请参阅“连 通性与多图表设计”章节)。

因为我们的设计仅仅使用了Altium IP,最简单的录入方式是OpenBus。这将包括在一个OpenBus文档中添加所需的元器件以及把它们连接起来。然而,在我们能访问OpenBus文 档及其内容之前,我们必须创建一个项目。以下部分将带您浏览录入设计的必要步骤。

创建FPGA项目

在Altium Designer环境中创建的所有设计的基础是项目文件。对于一个FPGA设计,我们必须创建一个新的FPGA项目(*.PrjFpg)。项目文档本身是 一个储存了项目信息的ASCII文件,项目信息包括从属于该项目的文档、输出设置、编译设置、错误检查设置等。

让我们继续下一步并创建FPGA项目。

  1. 通过“File » New » Project » FPGA Project”指令,创建一个新的FPGA项目
  2. 在项目(Projects)面板上,鼠标右键单击这个新项目的名称(FPGA_Project1.PrjFpg),并选择“Save Project” 指令。用“Audio_Effects.PrjFpg”这个名称保存项目到指定的路径,并将项目放入一个名为“Audio Effects Tutorial”的新文件夹中。请注意,在FPGA项目或文档文件名中不能使用空格和/或破折号。这样做将会导致设计过程中出现合成错误。可以用下划线 (_)代替空格和破折号来保证可读性。

添加原理图和OpenBus源文档

下一个步骤就是添加FPGA设计所需的源文档。虽然这个设计将在OpenBus中录入,但调用每个FPGA项目需要顶层原理图文档,因 此,我们在项目中既会添加新的OpenBus文档,也会添加新的原理图文档。

  1. 在项目面板上鼠标右键单击FPGA项目条目并选择“Add New to Project » Schematic”指令来添加一个新的原理图文档。一个空白的原理图图纸将会作为活动文 档在设计主窗口中打开。
  2. 用“Effects_Sch.SchDoc”这个名称来保存该文档(File » Save),并将其放入与母项 目相同的文件夹中。
  3. 在项目面板上鼠标右键单击FPGA项目条目并选择“Add New to Project » OpenBus System Document”指令来添加一个新的OpenBus文 档。一个空白的OpenBus文档将会作为活动文档在设计主窗口打开。
  4. 用“Effects_OB.OpenBus”这个名称来保存这个文档,并将其放入与母项目相同的文件夹中。
  5. 该项目本身将在项目面板上显示为已修改,保存项目(鼠标右键单击其名称并选择“Save Project”)。

定义OpenBus系统

OpenBus是实现系统级FPGA设计的一种新方法。以原理图为基础的实现方法与OpenBus相比,后者能够提供更轻便的接口,同 时在容量上也 几乎不比前者小。通过自动地处理许多低级细节,OpenBus使您能够集中关注高层次系统和主要元件的连接。您将在OpenBus控制板中找到所有需要的 元器件。通过单击主编辑器右下角的OpenBus面板控件并选择弹出菜单中的“OpenBus Palette”来显示控制板。

单 击工作区右下角的“OpenBus”按钮来打开控制板

放置OpenBus元器件

既然我们已经有了空白的OpenBus文 档,下面我们就需要 来添加组成我们设计电路图所需的元器件。OpenBus控制面板包括了所有OpenBus文档中可使用的OpenBus元器件。在控制板中,它们被归在连 接器(Connectors)、处理器(Processors)、存储器(Memories)和外围设备(Peripherals)这几大类中。下面的表 格列出了我们设计中所需的元器件。

所需的OpenBus元器件。

符号(Symbol)

元件名称(Component Name)

描述(Description)

所需数量(Quantity Required)

TSK3000A

TSK3000A 32-Bit,兼容Wishbone的RISC处理器

1

音频流控制器(Audio Streaming Controller)

音频流控制器用于控制数据在inter-IC sound (I2S)总线内的传输。 

1

SPI

为目标器件,如位于PB01的音频编解码器(Audio CODEC),提供了一个能够使主机处理器与从属的SPI外设通信的SPI主机接口,此外设位于物理FPGA器件外。

1

Port IO

兼容Wishbone可配置的并行端口单元,提供了一个简单的寄存器接口,用于存储输入/输出另一设备的数据。

1

终端仪器

兼容Wishbone的仪器通过提供一个IO控制台来进行有效的处理器调试。
通过JTAG实现读取和写入数据,通过相关的仪器面板用文本的形式输入/显示信息。

1

SRAM 控制器

在32位处理器和异步静态SRAM之间提供一个简单的接口。

1

互连

提供了一种通过单一Wishbone接口访问一个或多个从器件的方法。

2

在OpenBus文档上放置一个OpenBus元器件:

  1. 通过鼠标左键单击OpenBus控制板上的一个OpenBus元器件图标来选择想要放置的元器件。
  2. 该元器件将会锁定到光标上。此时,您可以使用空格键(Spacebar)来旋转元器件或使用X键和Y键来分别沿X轴或Y轴翻转元 器件。
  3. 移动鼠标至您想要放置元器件的位置,鼠标左键单击来放置元器件。
  4. 如下图OpenBus图所示,放置表中所列的元器件。

该 设计所需的OpenBus元器件。

编辑您已放置的OpenBus元器件的名称:

  1. 第一次鼠标左键单击与您想要重命名的元器件相关的文本,选中此文本。
  2. 第二次单击或按F2键进入文本编辑模式。
  3. 编辑元器件名称,使其与上图所示的名称相匹配。
  4. 按回车键(Enter)或者单击编辑窗口的其他任意位置,退出编辑模式并接受修改。
  5. 一旦您已经放置并命名了所有需要的OpenBus元器件,选择主菜单中的“File » Save”来保存您的工作。

连接OpenBus元器件

为了控制OpenBus文档中元器件之间的数据流,需要在它们之间进行连线。这些连接线表示主端口与 从端口之 间的总线连接。连接线路上的箭头表示控制的方向。

进行主端口与从端口之间的连接:

  1. 选择“Place » Link OpenBus Ports”或者单击OpenBus工具栏内的链接OpenBus端口图标。
  2. 单击您想要创建链接的主端口
  3. 单击您想要创建链接的从端口
  4. 如果想要创建任何另外的链接,请重复步骤2和步骤3。若想退出连接放置模式,请按Esc键或者鼠标右键单击。
  • 若想删除主端口与从端口之间的链接,请鼠标左键单击连接线并按删除键(Delete)。
  • 若想在OpenBus元器件上更改端口位置,请鼠标左键单击并拖动端口,将其重新放置在元器件主体周围。 

互连元件

因为链接只能存在单个主端口与单个从端口之间,需要使用OpenBus互连元件来连接多个元器件。

OpenBus互连元件拥有一个从端口以及一个或多个主端口。这使得主设备(连接到OpenBus互连元件的从端口)能够控制多个从设 备(连接到OpenBus互连元件的主端口)。向OpenBus互连元件添加另外的端口:

  1. 选择“Place » Add OpenBus Port”或者单击OpenBus工 具栏的添加OpenBus端口图 标。
  2. 将鼠标悬停在想添加新端口的元器件的外边缘。端口会添加在元器件周围的4个点上,即上、下、左、右。单击元器件的一侧将会添加端 口到相应的侧面。
  3. 单击添加新的端口。
  4. 如果想要创建另外的链接,请重复步骤2&3。若想退出端口放置模式,请按Esc键或者鼠标右键单击。
    若想删除OpenBus互连元件中的端口,请鼠标左键单击选择端口并按删 除键(Delete)
    若想更改OpenBus互连元件中端口的位置,只需鼠标左键单击并拖动端口,将其重新放置在元器件周围。

完成OpenBus系统

  1. 使用上面介绍的技术来完成OpenBus系统的创建。完成后的系统如下图所示。
  2. 保存您的工作。

已 完成的OpenBus连接。

配置OpenBus元器件

OpenBus控制板中找到的大部分元器件可以直接转化为在FPGA外围设备及FPGA处理器库(用于基于原理图的FPGA设计)中可 找到的类似名 称的元器件。如同在基于原理图的FPGA设计中的许多可配置元器件一样,在OpenBus中对应的元器件也是可配置的。在本教程中,我们使用的许多可配置 元器件将需要调整。

配置I/O端口元器件

I/O端口元器件,GPIO将被用于为处理器创建一个简单的接口,关于仪器对其的使用,我们将会在本教程的后面内容进行介绍。现在,我 们需要配置I/O端口元器件并指定其端口数目、方向和宽度。配置本教程中的I/ O端口元器件:

  1. 双击GPIO元器件打开“Configure OpenBus Port I/O”对话框。
  2. 在此对话框内:
    • 设 置元器件标号GPIO
    • 设 置种类(Kind)Input/Output
    • 设 置端口数目2
    • 设 置总线宽度8
    • 设 置接口类型(Interface Type)信 号线束(Signal Harness)
  3. 单击“OK” 来保存您的更改。

配置终端仪器

终端仪器提供了一种在FPGA设计中输出数据的简单方法。

  1. 双击GPIO元器件打开“Configure OpenBus Terminal Instrument”对话框。
  2. 在此对话框内:
    • 设 置元器件标号TERM 
    • 设 置接口类型信 号线束
  3. 单击“OK” 来保存您的更改。

配置音频流控制器(Audio CODEC)

作为高品质音频子系统的一部分,NanoBoard包括了24位的CS4270,192kHz的立体声音频编解码器(Cirrus Logic公司)。该编解码器可同时满足模拟和数字I/O音频。该音频流控制器使得音频数据能够在inter-IC sound(I2S)总线上进行传输。

  1. 双击TERM元器件打开“Configure OpenBus Audio Streaming Controller”对话框。
  2. 在此对话框内:
    • 设 置I2S通道(I2S Channels)接 收和发送(Receive and Transmit)
    • 设 置12S硬件缓冲区(I2S Hardware Buffer)包括硬件缓冲区,1K采样 (Include Hardware Buffer, 1K sample)
    • 设 置元器件标号AUDIO 
    • 设 置接口类型信 号线束
  3. 单击“OK” 来保存您的更改。 

配置SPI(音频编解码器控制Audio CODEC Control)

通过SPI总线访问用于确定设备所需的功能的音频编解码器的内部寄存器。

  1. 双击GPIO元器件打开“Configure OpenBus SPI”对话框。
  2. 在此对话框内:
    • 设 置元器件标号SPI 
    • 设 置接口类型信 号线束
  3. 单击“OK” 来保存您的更改。

配置内存控制器

SRAM 控制器为异步静态RAM提供了一种简单通用的接口。因此,它要求我们为想要使用的外部存储器按类型和数量配置元器件。

  1. 鼠标右键单击SRAM元器件并从右键菜单中选择“Configure SRAM (SRAM Controller)”。
  2. 在“Configure (Memory Controller)”对话框中:
    • 设 置内存类型异 步SRAM
    • 设 置静态RAM阵列的大小 为1MB(256K×32位)
    • 设 置内存布局2× 16位宽度
  3. 单击“OK” 来保存您的更改。

配置处理器

TSK3000A是一个可配置的软核处理器,需要在使用前指定几个关键参数。包括内部处理器内存的大小,是否使用硬件乘法/除法单元, 是否包括片上调试系统,以及如何管理复位断点。配置本教程中的处理器:

  1. 鼠标右键单击MCU元器件并从右键菜单中选择“Configure MCU (TSK3000A)”。
  2. 在“Configure (32-bit Processors)”对话框内:
    • 设 置内部处理器内存32K Bytes(8K×32位字) 
    • 设 置乘法/除法单元(MDU)硬 件MDU 
    • 设 置片上调试系统包 括基于JTAG的片上调试系统 
    • 设 置最后一个选项为禁用硬复位断点
  3. 单击“OK” 来保存您的更改。

您可能会收到一条错误信息,显示“顶层图纸上找到了两个‘Nexus JTAG Part’,但是没找到‘NEXUS_JTAG_CONNECTOR’(2 Nexus JTAG Parts Found but no NEXUS_JTAG_CONNECTOR was found on the top sheet)”。您可以忽略这条信息,因为还没有完成顶层图纸。

管理存储器映射

用OpenBus来开发系统的最主要优势之一是OpenBus带给存储器映射管理的自动化水平。最终,所有的外围设备和存储设备都将位 于一个跨越 4G Bytes的32位内存空间内。为了简化存储器映射的管理,OpenBus能够智能地解读设计并自动为每个外围设备及内存控制器分配内存空间。在大多数情 况下,这些分配的内存都是足够的,只有在极少数情况下,您可能希望亲自手动编辑内存分配。您仍然可以使用OpenBus做到这一点。

使用互连元件实现内存配置

在正常情况下,互连元件将会检测其连接的所有设备的设置及需要的内存,还将自动更新内存映射。您可以通过访问元器件右键菜单内的“Configure OpenBus Interconnect” 对话框,查看并编辑互连元件的内存映射。

OpenBus 互连配置。

互连的配置信息会自动传送到处理器内存映射。如果“Configure OpenBus Interconnect”对话框没有如上述一般出现,请不要担心。内存映射将会自动处理,并可能会出现细微 的不同。

在处理器内自动进行内存配置

除了在OpenBus文档中由每个互连元件管理内存,您也可以在处理器内存和外围设备配置对话框内集中地管理内存,这可以通过鼠标右键 单击处理器来 访问。“Configure Processor Memory”对话框提供了在处理器内存中如何定位外围设备及内存控制器的图形化表示。勾选“hardware.h (C Header File)”选项将会在编译项目时产生一个hardware.h头文件。这个文件包含了#defines,能够指定所有外围设备的地址、大小以及使用的所 有中断细节。这可以保证所有的OpenBus内存设置在设计编译时都包含在设计中,且与设计同步。

通过勾选这个选项,您对OpenBus文件的任何更改都将会传送到之后创建的嵌入式项目中。

启 用hardware.h选项使得外围设备自动映射到处理器内存空间。

将项目设置为从OpenBus文档中自动导入设置信息:

  1. 鼠标右键单击MCU元器件并从右键菜单中选择“Configure Processor Peripheral”。
  2. 在“Configure Peripherals”对话框内,勾选“hardware.h (C Header File)”选项。
  3. 单击OK退 出。

管理低等级信号

虽然OpenBus在简化元器件(使用标准总线接口)之间的复杂互连问题上取得了跨越性的进步,但是有时候,查看并控制设计中的低等级 信号还是十分 必要的。这有助于理解OpenBus文档中的相关信号是如何显示在顶层原理图中的。所有用于总线互连的信号在OpenBus信号管理器(OpenBus Signal Manager)中都是可见的。

使用OpenBus信号管理器

OpenBus信号管理器(如 下图所示,可通过工具(Tools) 菜单访问),允许您更好地控制哪些信号将显示到OpenBus文档中。

您基本不需要关注时钟复位Clocks and Resets)选项卡,因为默认设置通常就足 够了。如果计划将外围设备作为中断源使用,需要设置中断(Interrupts)选项卡。在这个对话框内,您能够在主控制器上把中断分配到可用中断通道 上。因为在本设计中将会用到许多中断,所以必须在这里指定连接。

外部连接(External connection)汇总中的 信号列表不能够直接编辑,但这个对话框是一个很好的参考。对话框内列出的所有信号都将被导出到母原理图中。信号根据控制它们的元器件进行分组,使得识别和 定位不同信号的来源变得更加简单。例如,将一个OpenBus文档连接到母原理图时,图表符上特定信号的来源或许不会立即显示,但您可以在这个对话框内找 到答案。

在OpenBus信号管理器中指定中断

TSK3000A 总共支持32个中断输入,每个中断都可以配置为电平触发(高电平有效)或边沿触发(上升沿有效)。

为设计配置中断:

  1. 选择“Tools » OpenBus Signal Manager”。
  2. OpenBus信号管理器对 话框内选择中断选项卡。
  3. 在对话框顶部的OpenBus外设表中定位音 频流控制器(AUDIO),并单击信号INT_O右 侧的Interrupt栏来 显示下拉列表。
  4. 将信号分配到中断引脚INT_I1, 通过在有效中断列表中选择这一项来实现。请注意种类 (Kind)极性 (Polarity)栏会自动填入。OpenBus系统了解每个OpenBus外设的中断要求,因此没有必要手动配置引脚种类 或极性。
  5. 在对话框顶部的OpenBus外设列表中定位SPI (SPI),并为信号INT_O分 配中断引脚INT_I2
  6. 在对话框顶部的OpenBus外设列表中定位终 端仪器(TERM),并为中断引脚INT_I3分 配信号INT_O0
  7. 最后,为中断引脚INT_I4分 配终端的INT_O1信号。 现在,显示的中断列表将会如下图所示。
  8. 单击“OK” 退出。

在OpenBus 信号管理器中指定中断。

将OpenBus文档与其母原理图链接起来

本教程之前提到,FPGA设计中的顶层文档必须是原理图。在我们已经创建了一个OpenBus文档的情况下,我们现在要做的是将这个文 档链接到我们之前创建的顶层原理图图纸。

从OpenBus文档创建一个图表符

为了将OpenBus文档和母原理图链接在一起,您必须在OpenBus文件中创建一个图表符并将其放置在母原理图中。

  1. 打开Effects_Sch.SchDoc。
  2. 选择“Design » Create Sheet Symbol From Sheet or HDL”。
  3. 当“Choose Document to Place”对话框出现时,选择Effects_OB.OpenBus 文档并单击“OK”。
  4. 一个图表符将会附在光标上。在原理图页面上将它放置在您希望的位置并单击以确认放置。
  5. 调整图表符大小并重新放置图纸入口,使之如下图所示,即输入和双向信号位于左侧,而输出位于右侧。

将 图表入口放到符合逻辑的位置上。

在原理图中放置元件

为了完成放置过程并完成顶层原理图,您必须先放置一些元件。这些元件所在的相关集成库位于Altium Designer安装目录的\Libraries\FPGA文件夹中。这些库都是默认安装在Altium Designer里的,所以在元器件库面板中都是有效的。如下面的原理图所示,放置这些元件。

  1. 来自于 FPGA NB2DSK01 Port-Plugin.IntLib library的:
    • CLOCK_BOARD #
    • TEST_BUTTON #
  2. 来自于 FPGA PB01 Port-Plugin.IntLib library的:
    • AUDIO_CODEC #
    • AUDIO_CODEC_CTRL #
  3. 来自于FPGA DB Common Port-Plugin.IntLib library的:
    • SRAM_DAUGHTER0 #
    • SRAM_DAUGHTER1 #
  4. 来自于 FPGA Instruments.IntLib library的:
    • DIGITAL_IO
  5. 来自于 FPGA Generic.IntLib library的:
    • OR2N1S
    • FPGA_STARTUP8

如 图放置元件

请注意这个元器件库列表是针对NanoBoard NB2的,这个设计在NanoBoard 3000系列的所有板上都可以建立并运行。如果您使用的是NanoBoard 3000,那么有#标记的元件都来自于FPGA NB3000 Port-Plugin.IntLib。如果您是为NB2创建的设计,并希望将其转入NB3000,则不需要重新放置原理图上的所有元件,只需要重新放置 AUDIO_CODEC和 AUDIO_CODEC_CTRL。原理图布线的区别如下图所示。

音 频编解码器元件以及NB2(左)和NB3000(右)的布线。

配置数字IO仪器

元件放置完成后,下一个步骤就是配置数字IO仪器。此仪器是一种可配置设备,提供了一种在设计中监测/生成数字信号的高效且简单的方 法。一旦完成编 程,就完成了Altium Designer软件中与此设备的实时交互,使您能够在FPGA上执行信号时,在系统内实时读取并处理FPGA信号的值。

在此设计中,数字IO仪器将用于模拟用户接口连接至系统。我们将使用数字IO仪器在处理器中触发事件,而不是建立一个完整的执行平台, 从而保证我们能够在没有PCB原型的情况下继续开发。想要了解更多关于数字IO仪器的详细信息,请参考文章“可配置的数字IO模块(Configurable Digital IO Module)”。

配置可配置数字IO仪器:

  1. 鼠标右键单击DIGITAL_IO元器件并选择“Configure U? (DIGITAL IO)”打开“Digital I/O Configuration”对话框。
  2. 按下位于对话框顶端输入信号部 分右侧的“Add”按钮,添 加第二组名为“BIN[7..0]”的信号。
  3. 单击信号AIN[7..0]右侧的“Style” 栏,并选择“Bar”样式。
  4. 右侧的“Color” 栏,并选择“Orange” 颜色。
  5. 按下位于对话框底端输出信号部 分右侧的“Add”按钮,添 加第二组名为“BOUT[7..0]”的信号。
  6. 单击信号AOUT[7..0]右侧的“Style” 栏,并选择“Slider” 样式。
  7. 单击信号BOUT[7..0]右侧的“Style” 栏,并选择“LED Digits” 样式。此时,对话框将如下图所示。
  8. 单击OK

配 置数字IO仪器。

完成原理图布线

元器件配置完成后,下一个步骤就是完成顶层原理图的最终布局和布线。

完成设计的布线:

  1. Effects_Sch.SchDoc 原理图的完整版本如下图所示。将它作为指导,在图表符周围放置端口插件元件,然后重新排布图表入口使其能够实现美观的布线。
  2. 将下图作为指导,完成设计中的元件布线。
  3. 一旦完成了原理图布线,请选择“Tools » Annotate Schematics Quietly”来对设计进行元件标注,赋予每个元器件独一无二的元器件标号。
  4. 通过选择“Project » Compile FPGA Project Audio_Effects.PrjFpg”来编译设计。必要时,修正所有的 编译和接线错误。
  5. 保存您的工作。

完 成原理图布线。

配置项目使其在NanoBoard上运行

此时,我们已经完成了大部分的FPGA设计,但是在NanoBoard上运行设计前还有一个必须的额外步骤。约束FPGA设计是一个定 义特定 FPGA引脚的过程,在这些引脚上将显示设计中的每个信号。这是一个很重要的步骤,它保证了FPGA设计能够与通过硬线连接到FPGA子板的 NanoBoard资源进行交互。
在定义约束时,可以将其硬编码至顶层原理图中,但我们不建议用户这样操作。因为这将使设计捆绑到了特定设备中, 限制了在必要时将其绑定到新FPGA上的能力。最好的做法是,将约束信息存储到图纸上独立的位置。Altium Designer通过使用一系列预建和用户自定义的约束文件来实现这种方法,这些约束文件均可添加到FPGA项目中。

自动配置NanoBoard上运行的项目

自 动配置FPGA项目。

为了简化将设计对应到NanoBoard的过程,Altium Designer包含了一个方便的自动控制功能。通过使用已内置于NanoBoard固件中的智能对象,Altium Designer能够检测NanoBoard并决定子板与外设板的连接。一系列预先定义的约束文件将被加载并组合成为针对您特定硬件设置的配置。

自动配置您的FPGA设计并使其在NanoBoard 上运行:

  1. 确定您的NanoBoard已开机并已连接至您的电脑。
  2. 选择“View » Devices”或单击工具栏中的设 备视图图标。
  3. 在设备视图中,确保选项“Live”已勾选。您将会在显示区域的上方看到NanoBoard的图片。
  4. 鼠标右键单击NanoBoard图标并选择“Configure FPGA Project » Audio_Effects.PrjFpg”。
  5. Altium Designer将会花一小段时间来检测NanoBoard并创建一个新的配置。单击“OK”来确定新的配置。

您可能会注意到,如下图所示,项目中添加了一个新的“Settings”文件夹。在这个文件夹中,您将会找到一个“Constraint Files”文件夹, 里面包含了所有新添加的约束文件。

请 注意已添加到项目的“Settings”文件夹。

许多约束文件会有一个“缩写”符 号。Altium Designer使用这种符号表示未存储于主项目文件夹内的文件。这些特殊的文件都是随Altium Designer而来的预先定义的约束文件。它们针对其代表的各种外设板及子板,不能对这些文件进行编辑,因为对这些文件做出的更改将会影响为 NanoBoard创建的所有其他项目。

上图高亮的约束文件是由自动配置过程自动创建的,并且和项目一起存储。这个文件定义了NanoBoard上外设板的地址。

如果您想要将设计从NB2移动到NB3000,请注意再次运行自动配置,使得Altium Designer能够将新的NanoBoard映射到正确的约束文件中。

创建用户约束

自动配置过程处理的是定义在顶层FPGA原理图的端口和其对应FPGA引脚的映射关系。然而,一些对设计而言十分重要的约束(例如时钟 频率)无法实现自动化。为了录入该信息,最好的做法是创建一个新的约束文件,来存储该信息并将其添加到配置中。

创建一个新的用户约束文件并将其添加到配置中:

  1. 在项目面板中鼠标右键单击“Audio_Effects.PrjFpg”项目,并选择“Add New to Project » Constraint File”。
  2. 选择“File » Save As”来保存文件。给它一个有意义的名称,比如“MyConstraints.Constraint”,并单击 “OK”。
  3. 选择“Project » Configuration Manager”或者鼠标右键单击项目面板中的项目并选择配置管理器配置管理器对话框将会打开。
  4. Constraint Files栏中定位MyConstraint.Constraint,并勾选配置栏内的方框,添加约束至当前配置。
  5. 单击“OK” 来关闭配置管理器并保存您的更改。

添 加新的约束文件至配置。

添加一个时钟约束至“CLK_BRD”信号:

  1. 打开MyConstraints.Constraint.
  2. 选择“Design » Add Modify Constraint » Port”。
  3. 在“Add/Modify Constraint”对话框内:
    • 设置目标 (Target)为CLK_BRD 
    • 设置约束类型 (Constraint Kind)为FPGA_CLOCK_FREQUENCY 
    • 设置约束值 (Constraint Value)为50MHz 
  4. 单击“OK” 关闭“Add/Modify Port Constraint”对话框。
  5. 如下所示,一个新的约束记录已经添加到了MyConstraints.Constraint。保存您的工作。

创建FPGA设计

一旦FPGA设计与其约束一同定义完成,您就可以开始创建设计了。创建一个FPGA设计是一个将所有FPGA设计编译合成至一个配置位 文件的过程, 此配置位文件可以在目标设备上下载并运行。Altium Designer标准化了FPGA设计创建方式,所以它是独立于供应商的。针对特定目标设备的供应商工具副本都列在本教程“您将需要什么”的部分。 Altium Designer需要这些供应商工具来为设计实现布局和布线,但是和这些终端工具的交互将在很大程度上对用户透明。

创建一个FPGA设计:

  1. 确保您的NanoBoard 已开机并已连接到电脑。
  2. 选择“View » Devices View”或者单击工具栏中的Devices View图标
  3. 确保已勾选“Live”选项。您将在显示区域上方看到NanoBoard的图片并在中部看到一个“Spartan 3 FPGA”的图标。
  4. 在“Spartan 3”图标下面的下拉菜单中,确保已选择Audio_Effects / NB2DSK01_08_DB30_04 project / configuration pair。
  5. 在NanoBoard 图标下从左至右分别放置编译(Compile)、合成(Synthesize)、创建(Build)、FPGA编程(Program FPGA)的按钮。因为这是您第一次创建设计,每个按钮上的彩色指示器会显示为红色(RED)。单击“FPGA编程(Program FPGA)”来开始创建过程。
  6. 随着创建过程的进行,在处理过程中彩色指示器会变成黄色,当处理完成时会变成绿色。设计创建的过程需要几分钟来完成。您可以通 过主工作区右下角的“System”面板选项卡来访问“Messages and Output”面板,查看创建进度,。

    设 备视图中的FPGA创建过程。
  7. & nbsp;如果出现了任何错误,您需要在继续下一步之前将其纠正。通过本教程的指示追溯所执行的步骤来找到错误根源。
  8. 一旦设计创建完成并下载成功,就会出现一个汇总(summary)对话框。点击“OK”关闭此对话框。
  9. 一旦将FPGA设计下载到了NanoBoard,TSK3000A处理器的状态会从“Missing”变为“Running”。现在,我们可以操作处理器 运行的嵌入式代码了。

开发嵌入式代码

Altium Designer将嵌入式项目作为一个容器,包含了在给定目标上执行的所有源代码。创建一个新的嵌入式项目:

  1. 从菜单上选择“File » New » Embedded Project”,或者单击文件(File)面板上的Blank Project (Embedded)。
  2. 项目面板将会显示一个默认名为“Embedded_Project1.PrjEmb”的新嵌入式项目。选择“File » Save Project”, 或者鼠标右键单击项目面板中的项目并选择“Save Project”。将文件保存为Audio_Effects_Emb.PrjEmb。如果想要使您的嵌入式项目文档独立于 FPGA项目文档,可以将嵌入式项目保存在FPGA项目文件夹下名为“Embedded”的子文件夹中。

将嵌入式项目链接到其目标处理器

嵌入式项目可以独立开发,但是您很快就会想使其运行在目标处理器中。Altium Designer使您能够将嵌入式项目链接到一个包含了嵌入式处理器的FPGA项目。

嵌 入式项目已链接到“结构编辑器(Structure Editor)”内的目标处理器。

将嵌入式项目链接到其目标处理器:

  1. 确保已在项目面板中加载了嵌入式项目和含有目标处理器的FPGA项目。
  2. 选择项目面板顶端的“结构编辑 器(Structure Editor)”选项,切换到结构编辑器模式。
  3. 鼠标左键单击并拖动FPGA项目顶端的嵌入式系统。所有有效的处理器目标都会用淡蓝色标出。将项目放在MCU (TSK3000A) 处理器上。
  4. 将项目面板切换回文件视图, 可观察到项目的层次结构已更新,将Audio_Effects_Emb.PrjEmb放到了Audio_Effects.PrjFpg下。

添加源代码至嵌入式系统

当一个新嵌入式系统初次创建完成时,它是一个空的容器。之后,您必须在项目中添加或创建相关的源文件。Altium Designer可以将C源文件、C头文件或者类似的文件作为项目的一部分进行编译。在开发嵌入式应用程序时Altium Designer还能够提供软件平台搭建器 (Software Platform Builder),用于为应用程序搭建一个软件平台(Software Platform)

搭建软件平台

软件平台是 一种软件框架,用来简化用于访问NanoBoard 外围设备的软件编写。它也有利于软件协议的执行,提供了在应用程序中使用的额外功能,例如多线程。在本质上,这是一个源文件形式的软件模块集合。这些模块 会自动添加到您的嵌入式项目中,来管理访问或控制外围设备必须的各种低级线程。这些模块还为应用程序提供了一个接口,用于提供各种特定功能(例如 set_baudrate(),动态改变传输速率的函数)。

软 件平台搭建器是用 于配置项目和添加模块的图形用户界面,用于搭建软件平台。您可用软件平台搭建器为嵌入式项目添加特定文档:扩展名为.SwPlatform的软件平台文 件。该文档既代表了项目的软件平台,也提供了一个图形界面用于选择和配置需要的模块。当然,您需要什么取决于您想在应用程序中访问的FPGA外围设备。

软件平台搭建器能够读取FPGA设计并为FPGA设计中的外围设备导入合适的低级模块。您可以将这种导入作为起点并添加更多(高级)模 块至软件平台文件。

添加并搭建一个软件平台:

  1. 鼠标右键单击项目面板中的嵌入式项目并选择“Add New to Project » SwPlatform File”。一个名为“Software Platform1.SwPlatform”的空白软件平台文档将会添加至嵌入式系统,并在主编辑器窗口显示。 
  2. 通过选择“File » Save As”来重命名新创建的文件,将其保存到嵌入式项目所在的文件夹中,键入文件名 “Audio_Effects_Emb.SwPlatform”并单击“Save”。
  3. 下一步是在软件平台中搭建设备栈。单击“Import from FPGA”按钮,为OpenBus文档中检测到的每个硬件模块(如下图绿色图标所示)添加一个低级硬件封装。
  4. 接下来必须依次扩展设备栈。步骤如下:
    1. 单击绿色的“通用IO 端口(General Purpose IO Port)”封装,然后单击“扩展栈(Grow Stack Up)”按 钮。“扩展栈(Grow Stack Up)” 对话框将会打开,单击橙色的“GPIO端口驱动程序 (GPIO Port Driver)”并单击OK将 其添加至栈中。
    2. 单击绿色的“I2S主 机控制器(I2S Master Controller)”封装,单击“扩展栈(Grow Stack Up)”按 钮,添加I2S驱动程序
    3. 单击绿色的“SPI主 机控制器(SPI Master Controller)”封装,单击“扩展栈(Grow Stack Up)”按 钮,添加CS4270音频编解码器驱动程序 (CS4270 Audio Codec Driver)。关闭“扩展栈(Grow Stack Up)”对 话框后,您可以看到SPI驱动程序CS4270音频编解码器驱动程序均已添加至 SPI栈。
    4. 单击绿色的“虚拟终端 仪器(Virtual Terminal Instrument)”驱动程序,单击“扩展栈(Grow Stack Up)”按 钮,添加“串行设备的IO服务(Serial Device IO Services)”环境。

这样,低级硬件封装、设备驱动器和环境代码都已添加至您的嵌入式项目——现在您可以关注应用程序的高级代码了。想要了解更多有关软件平 台的信息,请参见软件平台介绍

根据使用的软件平台版本,您可能需要在虚拟终端仪器中手动将POSIX 通用设备I/O(POSIX Generic Device I/O)和SERIAL_1文本I/O平台(SERIAL_1 text I/O platform)链接起来。如上图所示,选择通用设备I/O(Generic Device I/O)并勾选右侧窗格中的“标准输入(Standard Input)”和“标准输出(Standard Output)”的方框。在勾选的方框下,单击标准输入 设备名称(或标准输出设备名 称) 旁边的空白位置并单击出现的下拉箭头,然后都选择SERIAL_1。这为虚拟终端仪器连接了C中的“printf()” 函数和软件平台栈中的“串行设备的I/O环境”图块,使得printf()能够向终端发送文本,getchar() 和 scanf()型的标准输入设备库功能可以从终端获取文本以输入您的程序中。

已 完成的软件平台。

添加main.C

创建一个新的C文件并将其添加至项目中:

  1. 鼠标右键单击项目面板中的嵌入式项目并选择“Add New to Project » C File”。一个名为Source1.C 的空白文本文档将会添加至嵌入式项目,并在主编辑器窗口中显示。
  2. 通过选择“File » Save As”来重命名新创建的文件(扩展名为.C)。将其导入您的嵌入式项目所在文件夹并且键入名称“main.C”,单 击“Save”。

编写C源代码

既然嵌入式项目已经链接到了其可执行的硬件平台,就可以开始编写C代码了。我们将循序渐进并使用小段代码,向数字IO仪器的A端口写入 0x55数值。

添加一些简单的代码至嵌入式项目:

  1. 打开自动生成的hardware.h文件,它现在已经是Audio_Effects_Emb.PrjEmbproject的一 部分了。观察到端口IO元件的基址入口已经生成。基址Base_GPIO在您的设备中可能有细微的不同。

    //.............................................................................. #define Base_GPIO 0xFF000000 #define Size_GPIO 0x00000002 //..............................................................................
  2. 打开main.C并输入以下源代码:

    #include "hardware.h" #define DIGIO_PORTA (*(unsigned char*)Base_GPIO) void main (void) { DIGIO_PORTA = 0x55; }
  3. 选择“View » Devices view”或单击工具栏中的设 备视图按钮, 切换至设备视图。
  4. 单击“FPGA程序 (Program FPGA)”按钮上“Program FPGA”字样左侧的箭头, 来重新运行FPGA创建过程。
  5. 从设备视图中,找到软JTAG链上的数字IO仪器。鼠标右键单击设备并选择“Instrument”,会弹出设备的仪器架 (Instrument Rack)。
  6. 信号AIN[7..0]的值将会如下图所示显示为0x55。

    数 字IO仪器架。
  7. 如果数字IO仪器中AIN[7..0]输入处什么都没有出现,请确保OR2N1S元件在原理图上放置正确(若要对其进行更改,需 要从设备视图中重新创建一个设计)。TEST_BUTTON端口插件必须连接到反相输入,否则设备将保持在复位状态。

开发完整的应用程序

在本教程的开头提到,我们将要开发一个完整的应用程序,能够接收传入的音频信号并且在软件中产生加入混响效果的音频输出。到目前为止, 我们已经为这个应用程序打好了基础,并只剩下几个步骤了。

最后一个步骤是完成用于创造混响音效的软件。下框内包含了main.C 的完整列表。

#include #include #include #include "devices.h" #include #include #include #define PORT_A 0 #define PORT_B 1 #define I2S_BUF_SIZE 512 #define AUDIO_BUF_SIZE 65536 //this number MUST be a power of 2 #define I2S_SAMPLERATE 48000 #define MS_SAMPLES (I2S_SAMPLERATE / 1000) //millisecond samples int32_t i2s_inbuf[I2S_BUF_SIZE] = {0}; int16_t in_temp_buf[I2S_BUF_SIZE / 2] = {0}; int16_t process_buf[AUDIO_BUF_SIZE] = {0}; cs4270_t * cs4270_drv; i2s_t * i2s_drv; ioport_t* ioport_drv; void init_audio(void); void get_audio(void); void process_audio_echo(uint8_t delay); void passthrough(void); void put_audio(void); void main(void) { uint8_t effect_enable; uint8_t delay_coefficient = 0; //initialize the audio init_audio(); ioport_drv = ioport_open(DRV_IOPORT_1); //output a list of instructions on how to use the digital IO example to control audio on the terminal printf("\n\nAudio Reverb Example:\n"); printf("\n1. Set Bit 0 of BOUT[7..0] on the digital IO instrument for audio pass\n through.\n"); printf("\n2. Set Bits 1 - 7 to initiate the audio Reverb Effect.\n"); printf(" The Slider AOUT[7..0] will control the delay used by the reverb effect.\n"); printf("3. Clear all bits on BOUT[7..0] to stop audio.\n"); while (1) { effect_enable = ioport_get_value(ioport_drv, PORT_A); //read the value from the digital IO connected into GPIO port A ioport_set_value(ioport_drv, PORT_A, effect_enable); //loop value of 'a' to the output of the GPIO port A (display to user) //create a coefficient to control the delay from value of digital IO slider at port B of GPIO (aka Port 0 or OUTB[7..0]) delay_coefficient = ioport_get_value(ioport_drv, PORT_B); //loop value of delay_coefficient to B input of digital IO to display on the digital IO input channel B ioport_set_value(ioport_drv, PORT_B, delay_coefficient); //function to go and get the audio -- always gets audio when available and tries to fill input buffer get_audio(); //test for the IO port A status to indicate what type of effect to create if (effect_enable == 1) { //simple fetch and put audio function passthrough(); //function to put the audio in the output buffer put_audio(); } else if (effect_enable > 1) { //function to process the audio and create the echo process_audio_echo(delay_coefficient); //function to put the audio in the output buffer put_audio(); } } } /* *get audio and place into audio buffer */ void get_audio(void) { uint32_t rx_size; while (i2s_rx_avail(i2s_drv) < I2S_BUF_SIZE / 2) // if the incoming buffer is < 256 samples (1/2 buffer size), get more samples { i2s_rx_start(i2s_drv); // if no samples available, make sure the receiver is running } rx_size = i2s_rx_avail(i2s_drv) & ~1; // make even, the same number of samples for both channels rx_size = rx_size > I2S_BUF_SIZE ? I2S_BUF_SIZE : rx_size; i2s_read16(i2s_drv, in_temp_buf, rx_size); // read samples into the incoming buffer } /* *accept incoming audio and create a reverb effect */ void process_audio_echo(uint8_t delay) { static int16_t * prcs_insert_ptr = process_buf; //creating 2 pointers, slightly offset from one another to read data at different times in the history of the data acquisition process. //the delta between the two corresponds to the length of delay int16_t * prcs_echo_ptr = prcs_insert_ptr - ((MS_SAMPLES * ((delay) * 5)) + 1); int16_t * curr_ptr = in_temp_buf; if (prcs_echo_ptr <= process_buf) prcs_echo_ptr += AUDIO_BUF_SIZE; for (int i = 0; i < I2S_BUF_SIZE / 2; i++) { * prcs_insert_ptr = (* prcs_echo_ptr >> 1) + * curr_ptr; prcs_insert_ptr++; if (prcs_insert_ptr == & process_buf[AUDIO_BUF_SIZE]) prcs_insert_ptr = process_buf; curr_ptr++; prcs_echo_ptr++; if (prcs_echo_ptr == & process_buf[AUDIO_BUF_SIZE]) prcs_echo_ptr = process_buf; } } /* *passthrough audio triggered from the digital IO */ void passthrough(void) { static int16_t * prcs_insert_ptr = process_buf; int16_t * curr_ptr = in_temp_buf; for (int i = 0; i < I2S_BUF_SIZE / 2; i++) { * prcs_insert_ptr = * curr_ptr; prcs_insert_ptr++; if (prcs_insert_ptr == & process_buf[AUDIO_BUF_SIZE]) prcs_insert_ptr = process_buf; curr_ptr++; } } /* * write audio to the I2S output buffer */ void put_audio(void) { static int16_t * prcs_extract_ptr = process_buf; while (i2s_tx_avail(i2s_drv) < I2S_BUF_SIZE / 2) // wait till there is space for the received samples to store in the transmit buffer { i2s_tx_start(i2s_drv); // if no space available, make sure the transmitter is running } i2s_write16(i2s_drv, prcs_extract_ptr, I2S_BUF_SIZE / 2); prcs_extract_ptr += I2S_BUF_SIZE / 2; while (prcs_extract_ptr >= & process_buf[AUDIO_BUF_SIZE]) prcs_extract_ptr -= AUDIO_BUF_SIZE; } /* * initialize the audio peripherals */ void init_audio(void) { while (cs4270_drv == NULL) { cs4270_drv = cs4270_open(DRV_CS4270_1); } i2s_drv = i2s_open(DRV_I2S_1); i2s_rx_start(i2s_drv); i2s_tx_start(i2s_drv); }

main.C 列表。

完成嵌入式项目并下载软件至目标:

  1. 将上框中的列表内容复制到剪贴板。
  2. 返回到main.C 并使用“Edit » Select All”或者Ctrl+A 来选择当前的C代码,并按删除键。
  3. 选择“Edit » Paste”或Ctrl+V ,将剪贴板中的内容粘贴到main.C 中。
  4. 保存您的工作。
  5. 通过按工具栏中的“编译和下载(Compile and Download)”键, 重新编译并下载更新的程序。
  6. 将一个音频源连接到NanoBoard背面(或NB3000正面)的黑色“线路输入(Line In)”端口
  7. 通过选择“View » Devices View”,切换至设备视图。
  8. 鼠标右键单击终端仪器(Terminal Instrument)并选择“Instrument”来启用设备的仪器架(Instrument Rack)。终端仪器将如下图所示,显示一列指令。(这些指令是在main.C源文件中使用printf命令创建的)。
  9. 为数字IO仪器启用仪器架,并通过单击仪器架最右边的位来设置BOUT[7..0]的 bit 0。这将使音频直通,且能够通过NanoBoard上的扬声器听到音频。使用NanoBoard正面的音量旋钮来调节音量。
  10. 在数字IO仪器中设置BOUT[7..0]的bit 1,来启用混响音效。使用AOUT[7..0]的滑动条来听辨音频输出中的不同。

仪 器架 – 软设备。

考虑您的部署选项

既然已经做到功能设计这一步了,就让我们来看看您可以在这一领域如何部署产品。Altium 提供了一系列NanoBoard,您既可以将其完全作为一个现成的解决方案,也可以用外设板进行定制。或者,您可以选择全定制的PCB解决方案,选择性使 用当前的NanoBoard电路块,并将它们组合成为一个设计。部署选项的选择将受到一系列因素的影响,包括了成本、时间、市场、物流、外形和装配约束。 虽然我们不能告诉您在特定情况下哪种解决方案是最好的,但我们可以向您提供一系列的选项,使您获得一个合理的指标来了解它们的优缺点。

等级1:发展纯粹的“智能设备”

几乎所有的设计都会从这一级开始。开发的重点围绕着应用软件和使用开发型NanoBoard(例如Desktop NanoBoard)的可编程硬件。几乎不用考虑在最终执行时使用的硬件平台,工作能够依据检验过的巩固的设计特性快速推进。如何部署新系统在这种级别的 设计中是独立的。 

假如您打算在Desktop NanoBoard产品之外部署您的设计,您将会有两种自由度。

  1. 硬件平台 – 使用现成的(OTS)硬件,还是自己创建硬件,或是使用两者的结合?
  2. 外壳 - 使用现成的(OTS)外壳,还是自己从头开始创建外壳,或是改进现有的外壳?
    下面的部分将会讨论如何在这样的自由度下开展不同级别的工作。

等级2:现成的(OTS)硬件,现成的(OTS)外壳

这个级别是最简单的部署选项,因为它既使用了现成的硬件也使用了现成的外壳。通过使用Altium的NanoBoard,您能够将不同 的子板与外设 板混合并配对,来为您的应用程序量身定制一个硬件平台。此外,用Altium提供的外壳为完成的NanoBoard进行封装,能够确保您的产品拥有专业的 外观,并能够避免制造相关的麻烦。设计可兼容性保证您能够将设计从NanoBoard无缝迁移至一个完整的部署方案中。

用这种方式部署设计使您能够将重点放在设备智能上而不被硬件实现问题拖累。在NanoBoard中已创建的独一无二的识别系统使其能够 检测所有已连 接的子板和外设板,并快速地为整个设计实现重新配置。您在运行部署平台前花的时间将会比重新运行FPGA构建流程花的时间少得多。

等级3:现成的(OTS)硬件,定制的外壳

在您自己设计的外壳中使用现成的NanoBoard,是在等级2基础上增加的一个步骤,这在向顾客介绍时,可以极大提高专业性。以 Altium机械 STEP模型为基础,为您的设计定制或构建一个全新的外壳。无论采用什么方式,都能够为您的最终产品量身定制外形和契合度,以保证其能够紧密结合到最终环 境中。
Altium Designer的三维效果(3D)可以使您的最终产品快速实现可视化,并捕获任何在ECAD和MCAD环境之间可能出现的干扰问题。

等级4:现有硬件平台与定制硬件平台的混合体,现有的或定制的外形

虽然Altium 不断地开发外设板,但是在某些情况下,您还是需要将定制的硬件作为一部分括入设计中。NanoBoard的可扩展性保证了该工作相对简单,并且两全其美。 您可以选择性地定制硬件平台,同时仍使用NanoBoard结构中的现有基础结构。 

和上一级相同,使用现有外壳或创建/定制外壳完全由您自己决定。

等级5:定制硬件平台,现成的(OTS)或定制的外壳

最后一个等级需要最大量的硬件开发,但是在外形和契合度上给了您最大的灵活性。在特别注重成本的应用程序中,极有必要合理化 NanoBoard电 路,使其只包含设计绝对必需的子系统。Altium Designer的设计重用功能使这个过程变得十分快捷简单。因为所有的NanoBoard电路都是可复用的设计模块,且已安装为Altium Designer的一部分,您可以避免另起炉灶,直接将这些模块连接到定制硬件设计中。Altium Designer甚至包含了NanoBoard中使用的所有零部件的数量和供应商信息。这使得采购零部件的过程变得轻而易举。

将设计转移到部署平台

您选择的部署等级将会影响设计定位的简单程度。NanoBoard的基础结构具有人工智能,能够检测已连接的子板及外设板,并自动创建 基于已连接硬 件的新配置。Altium提供的所有硬件都符合此标准,但是如果您使用的硬件是来自第三方或是您自己定制的,则不具有这个功能,您可能需要手动执行一些配 置步骤来实现相同的目的。
Altium Designer通过知识中心(Knowledge Centre)为用户提供了大量的帮助,来辅助新约束文件的创建及配置。可以说,一旦定义了新配置,您登入并运行部署平台前所花的时间将比重新运行 FPGA构建流程所需的时间少得多。

You are reporting an issue with the following selected text and/or image within the active document: