标题：SOPC
SOPC简介
英文全称:System On a Programmable Chip. SOPC实验板  实验板中文译名:可编程片上系统 
SOPC它是用可编程逻辑技术把整个系统放到一块硅片上,来用于嵌入式系统的研究和电子信息处理. SOPC是一种特殊的嵌入式系统,它是片上系统（SOC），即由单个芯片完成整个系统的主要逻辑功能但它不是简单的SOC,它也是可编程系统，具有灵活的设计方式，可裁减、可扩充、可升级，并具备软硬件在系统可编程的功能。
SOPC的特点
SOPC结合了SOC和PLD、FPGA各自的优点，一般具备以下基本特征：
至少包含一个嵌入式处理器内核； 
具有小容量片内高速RAM资源； 
丰富的IP Core资源可供选择； 
足够的片上可编程逻辑资源； 
处理器调试接口和FPGA编程接口； 
可能包含部分可编程模拟电路； 
单芯片、低功耗、微封装。
SOPC的技术内容
SOPC设计技术涵盖了嵌入式系统设计技术的全部内容，除了以处理器和实时多任务操作系统（RTOS）为中心的软件设计技术、以PCB和信号完整性分析为基础的高速电路设计技术以外，SOPC还涉及目前以引起普遍关注的软硬件协同设计技术。由于SOPC的主要逻辑设计是在可编程逻辑器件内部进行，而BGA封装已被广泛应用在微封装领域中，传统的调试设备，如：逻辑分析仪和数字示波器，已很难进行直接测试分析，因此，必将对以仿真技术为基础的软硬件协同设计技术提出更高的要求。同时，新的调试技术也已不断涌现出来，如Xilinx公司的片内逻辑分析仪Chip Scope ILA就是一种价廉物美的片内实时调试工具。
SOPC技术主要应用以下三个方向
1）基于FPGA嵌入IP硬核的应用。这种SOPC系统是指在FPGA中预先植入处理器。这使得FPGA灵活的硬件设计与处理器的强大软件功能有机地结合在一起，高效地实现SOPC系统。 
2）基于FPGA嵌入IP软核的应用。这种SOPC系统是指在FPGA中植入软核处理器，如：NIOS II核等。用户可以根据设计的要求，利用相应的EDA工具，对NIOS II及其外围设备进行构建，使该嵌入式系统在硬件结构、功能特点、资源占用等方面全面满足用户系统设计的要求。 
3）基于HardCopy技术的应用。这种SOPC系统是指将成功实现于FPGA器件上的SOPC系统通过特定的技术直接向ASIC转化。把大容量FPGA的灵活性和ASIC的市场优势结合起来，实现对于有较大批量要求并对成本敏感的电子产品，避开了直接设计ASIC的困难。
SOPC的前景
SOPC是PLD和ASIC技术融合的结果，目前0.13微米的ASIC产品制造价格仍然相当昂贵，相反，集成了硬核或软核CPU、DSP、存储器、外围I/O及可编程逻辑的SOPC芯片在应用的灵活性和价格上有极大的优势。SOPC被称为“半导体产业的未来”。
利用QuartusII7.3建立SOPC的简单流程
完整的基于NiosII的SOPC系统是一个软硬件复合的系统，因此在设计时可分为硬件和软件两部分。NiosII的硬件设计是为了定制合适的CPU和外设，在SOPCBuider和QuartusII中完成。在这里可以灵活定制NiosII CPU的许多特性甚至指令，可使用Altera公司提供的大量IP核来加快开发NiosII外设的速度，提高外设性能，也可以使用第三方的IP核或VHDL来自行定制外设。完成NiosII的硬件开发后，SOPCBuider可自动生成与自定义的NiosIICPU和外设系统、存储器、外设地址映射等相应的软件开发包SDK，在生成的SDK基础上，进入软件开发流程。用户可使用汇编或C，甚至C++来进行嵌入式程序设计，使用GNU工具或其它第三方工具进行程序的编译连接以及调试。
第一步打开QuartusII软件,点击tool按键
第二步点击用红色标记的SOPCBuilder
  第二步
第三步定制CPU  第三步第四步:完成并下载之nios电路板中
Altera公司支持SOPC的FPGA芯片有
1）Cyclone系列 
2）Cyclone II系列 
3）Cyclone III系列 
4）Stratix系列 
5）Stratix II系列 
6）Stratix III系列
对于sopc的理解
很多人把主要精力放到了nios的定制上，认为可定制的CPU这一灵活的功能就是sopc的灵魂，实现了nios后，把fpga作为一个传统的mcu来使用，这实际上是一种扬长避短的行为，试想，相对于mcu系统来说，仅仅为了那一点点灵活性，就要凭空在系统设计中增添一项定制工作而得到一个并不是非常稳定可靠的cpu，然后用一个并不是很成熟的开发环境去进行和mcu系统类似的开发，这实在不是产品开发之道。当然，可以把逻辑电路也一同用fpga来实现，这就有那么一点sopc的味道了。我个人对sopc的看法如下：
1：sopc应该是nios系统+硬实时部分+逻辑电路的一个组合体，其中nios负责数据管理，通讯，人机交互等实时性相对较低的任务，硬实时部分则是独立于nios系统，充分利用现有IP，用hdl语言实现的某些实时性可靠性要求较高的关键部分，它可以和nios系统通过自定义的接口通讯。至于逻辑电路，这本就是fpga的强项，没啥可说的，做一些接口以及逻辑处理吧。
2：对于nios系统，ALTERA已经推出了相对比较完整的方案，现在nios在功能上来讲，已经非常全面了，并且也有多种os可供选择，据说年底要推出带有mmu的nios，到时候，linux应该会在nios上大行其道。
3：对于我认为最关键的硬实时部分，我认为这才是sopc系统的精华所在，但由于纯粹要用hdl语言实现，最多是结合一些现有的ip，因此难度较高，我觉得这也正是ALTERA一直鼓吹sopc但效果却并不理想的根本原因，不过ALTERA自有妙计，于是推出了dsp builder。
4：至于dsp builder，纯粹是为了降低系统硬实时部分编码过于困难的一个工具，目前ALTERA推出的参考方案多是音视频等信号处理领域，但是由于靠上了matlab这个大牛（控制领域事实上的标准），自然是要在控制领域多下工夫，只是目前还不支持浮点，并且相应的IP也不齐备，但是基于matlab的直接代码生成，肯定是一个方向，相信dsp builder会马上支持浮点的，并且应该会在控制领域有所动作。实际上，dsp builder或者说XILINX的SYSTEM generator的推出，就是为了降低开发难度，配合nios实现sopc系统，以此来和传统的dsp处理器市场。
5：举一个例子说明一下sopc的作用，以pci总线的视频卡来讲，一般来说都是dsp处理器完成视频信号处理（实时性要求较高）、数据后处理、与pc通讯等功能，系统中如果采用fpga，大都是实现pci的桥接器以及其他逻辑功能，现在有了dspbuiler，那么视频信号处理这一实时性要求较高的功能完全可以用dspbuilder直接生成，然后用nios代替传统dsp处理器的数据后处理和通讯功能，同时在集成pci接口和其他逻辑功能，如此则sopc大事成矣。
6：在控制领域，关键问题是controller的实现，首先在控制领域，我认为nios2直接做控制器还难当大任，而且就算抛开可靠性、成熟性等因素，控制领域一般都是需要硬实时（hard real-time），同时一般还会有大量的浮点处理，我个人估计nios2恐怕难以实现，这些已经决定了controller必须用硬件实现，也就是用vhdl写控制器，这样做的话，对于系统中所需要的浮点运算，最好用相应的ip实现，否则恐怕很难。[1]
SOPC技术在视觉测量中的应用
SOPC系统的总体设计方案 
本系统采用加拿大 SBS公司的 TSUNAMI A40系列开发板，其核心的 FPGA模块是 Altera公司的 Stratix EP1S40芯片。
2.1 系统算法的基本原理
  图系统算法实现流程如图 1所示。首先，针对本系统图像处理的要求与算法实现特点进行软硬件划分。图像预处理部分所需要处理的数据量比较大，但算法相对简单，可以通过 FPGA自定义相应的 IP模块，采用硬件的方式实现；后续处理部分由于算法相对复杂，用硬件实现比较困难，而且其数据处理量不大，所以采用在 Nios II软核中以软件的方式实现。最后编写系统控制软件对整个系统进行控制使软硬件协同工作。
2.2 系统硬件的设计方案
如图 所示，本系统硬件开发板通过 PCI桥与 PC机相连，原始图片保存在 PC机中。 PCI-Avalon桥是 PC机与 FPGA开发板的通信接口，图像数据经过 PCI-Avalon桥进入系统处理模块。Sdram管理控制器用来管理和控制 Sdram中的数据存取。控制电路用来控制与协调各个外设的运行，实现状态控制与数据传输等基本操作，包括读取 Sdram中保存的图像数据，控制图像处理各模块。 Sdram用来保存图像数据。原始图像数据最初由 PC机下载到 Sdram中，再通过 Sdram管理控制器传输给各处理模块依次处理。处理后的图像数据仍然通过 Sdram管理控制器返回 Sdram中保存。最后通过 PCI桥把最终图像返回到 PC机。
2.3 系统软件的设计
本系统的控制流程相对简单，因此在 Nios II软核中没有内嵌操作系统，而是通过 IO操作调用中断的方式实现运行状态的控制、数据通信、协调外设等基本操作，控制系统各硬件模块，使系统软硬件协同工作。整个系统搭建成功之后，在 PC机上编写应用程序对整个SOPC系统的运行进行控制。
3 系统算法的具体实现
3.1 滤波模块
根据所采集到的图像的特点，本文采用 3×3的模板实现中值滤波，这种方法不仅可以滤除图像中的噪声，而且可以将边缘信息很好的保留下来。一般求取中值的方法是采用取冒泡法排序，但这种算法并不适合硬件实现。考虑到硬件实现的特点和效率，本文采用了一种全新的求取中值的算法，其原理如图 3所示。其中 max、mid、min分别表示三输入的最大值、中值和最小值比较器。最后经几轮比较后求得中值。
3.2 边缘提取模块及二值化模块
边缘提取采用 Roberts算子。 Roberts边缘检测算子利用局部差分算子寻找边缘。
由于待处理图像特征明显，采用经验阈值法对图像进行二值化，算法简单、实现方便。
3.3 边缘细化模块
本文的边缘是建立在二值化之后的，因此处理的图像都是二值化的，边缘非常清晰，不需要太复杂的算法。这里采用两个 3×3模板作乘积，如图所示， X为待处理像素。如果模板乘积不为 0，于是中心象素为 1，反之为 0，即点的周围有灰度为 0的象素，则保留此点，否则剔除。如此很容易得到二值化后点的单象素边缘。
3.4 后续处理部分
后续处理部分由于其数据处理量并不大且算法比较复杂，所以在本系统中，这部分算法在 NiosⅡ中以软件的方法实现。
4 系统测试结果的分析与总结
经测试，本系统所有算法用 C语言在 PC机（配置： Pentium( R) 4 CPU 3.00GHz, 512MB内存）上实现，所需时间为 2'12"，而本系统仅需 30"，其中主要耗时为 NiosII软件处理部分，系统的硬件算法部分所耗时间不到 1"。