基于SYSTEM C的FPGA设计方法

发布者:leader4最新更新时间:2007-04-24 来源: 今日电子关键字:算法  接口  程序  规范 手机看文章 扫描二维码
随时随地手机看文章
一、概述

   随着VLSI的集成度越来越高,设计也越趋复杂。一个系统的设计往往不仅需要硬件设计人员的参与,也需要有软件设计人员的参与。软件设计人员与硬件设计人员之间的相互协调就变的格外重要,它直接关系到工作的效率以及整个系统设计的成败。传统的设计方法没有使软件设计工作与硬件设计工作协调一致,而是将两者的工作割裂开来。软件算法的设计人员在系统设计后期不能为硬件设计人员的设计提供任何的帮助。同时现在有些大规模集成电路设计中往往带有DSP Core或其它CPU Core。这些都使得单纯地用原理图或硬件描述语言来设计、仿真这么复杂的系统变得十分困难。System C就是在这些矛盾的背景下提出的。它的出现为复杂的系统设计提供了一条有效的解决途径。

  System C 是由 Synospy Inc. 提出的,目前最新的版本为V2.0。它提出的目的就是以一种系统设计的思想进行系统设计。它将软件算法与硬件实现很好的结合在一起,提高了整个系统设计的效率和正确性。

  System C 是一个C++ 库,也是一种使设计者可以有效地设计出一个软件算法的准确循环模型,硬件结构以及系统级设计的方法。

  设计者可以用System C开发工具或在标准C++开发工具中加如System C库制作系统级模型,快速地仿真和优化设计,以及研究不同的算法,并且为硬件和软件设计人员提供一个设计系统的可执行规范。可执行规范本质上是一个C++程序,它显示了和设计系统同样的性能,为软件设计人员和硬件设计人员提供了一个设计的标准。

  System C 库提供了创造系统结构模型的必须结构,包括那些在C++没有的功能如硬件时序,并行和触发功能。C++这种面对象语言提供了通过增加类来扩展语言的能力,而这种能力是C语言所不具备的。因此,System C使用大家熟悉的C++语言和开发工具。

  System C 库提供了创造系统结构模型的必须结构,包括那些在C++没有的功能如硬件时序,并行和触发功能。C++这种面对象语言提供了通过增加类来扩展语言的能力,而这种能力是C语言所不具备的。因此,System C使用大家熟悉的C++语言和开发工具。

二、SYSTEM C的特点

  System C 支持对硬件和软件的联合设计,支持描述一个既包含硬件部分也包含软件部分的复杂系统结构。它也支持对接口的描述,有以下几个显著的特点:

  1.System C可以为软件设计人员和硬件设计人员提供一个系统的可执行规范。设计人员使用该可执行规范可以避免设计中矛盾和错误的产生,并确保设计的完备性。这是应为在设计可执行规范时,系统设计者必须设计出也一个和系统具有同样工作状态的程序,通过这个程序可以发掘出潜在的矛盾和错误,并将这些矛盾和错误消除在整个设计的开始阶段,而不是在整个系统进行调试阶段才发现和解决这些矛盾和错误。这个程序还可以帮助设计者确保整个系统设计的完备性。

  2.设计人员利用这个可执行的系统规范,还可以发现设计中概念模糊的地方。无论什么时候,设计人员对设计产生疑惑,就可以运行这个可执行程序以明确在这个问题上系统设计人员是如何处理的,从而确保系统设计的正确性。而现在的设计方法不能使设计人员方便迅速的解决这些疑惑。甚至这些疑惑是系统设计人员也不曾考虑过,这可能导致系统要重新进行设计。

  3.在系统设计被实现以前,设计人员还可以通过用System C设计的系统可执行规范来验证整个系统设计。这样可以避免由于在系统设计上的失误,而使系统实现不能达到要求。现在的设计方法不能提供这样的手段在设计完成前进行系统的验证,对系统的验证必须是在系统设计完后。即使在完成前进行验证,由于不能完全模拟实际系统的工作,其结果也只能作为一种参考。

  4.System C设计的可执行规范所使用的TESTBENCH文件可以通过小范围的修改或直接用在实现后的系统仿真。这就为设计实现人员带来很大的好处,他们不必花很多的时间去编写用来验证实现后系统正确性的TESTBENCH文件。而现在采用的设计方法所使用的TESTBENCH文件却没有提供这样的便利条件。这是应为软件设计人员和硬件设计人员两者的设计思想和设计手段都是不同的,一个软件设计人员所使用的TESTBENCH文件并不能被硬件设计人员使用,甚至不能给硬件设计人员任何帮助。

三、SYSTEM C设计与传统设计比较

  现在的系统设计一般是由系统工程师用C语言或C++语言设计出一个系统模型,并在系统级层次上检验概念和算法。当这些概念和算法被检验为正确无误时,C/C++模块被分解为功能相对独立的子模块。这些相对对立的子模块由硬件设计人员手工地转化为VHDL或Verilog语言用以硬件实现。

  这种设计流程中我们可以发现以下几个问题:

  1.人工将C\C++程序转换为HDL程序容易产生错误。在现在的这种设计方法中,系统工程师先按期望的设计要求设计出一个C模块,并验证这个模块使其达到期望的设计要求。然后系统工程师所设计的C模块被硬件设计人员手工转换为HDL模块。这个转换过程不仅容易产生错误,而且还很浪费时间。这是因为C\C++语言和HDL语言有着显著的区别。首先,HDL的处理方式比C\C++的复杂。C\C++程序采用顺序执行的处理方式,而HDL程序中既有顺序执行也有并行执行的处理方式。要将C\C++程序转化为HDL程序必然要引入一些控制信号,由这些信号控制HDL程序的运行,但这样也容易产生错误。其次,C\C++语言不涉及到时序关系。由于C\C++语言不支持对时序的描述,系统工程师设计的系统模型只是验证了概念和算法,而只能对时间耗费上有一个大概的估计。这就使得硬件实现时,为满足系统在时间上的要求,硬件设计人员必须对软件算法进行一定的改造或优化。而这些改造或优化也有可能引入各种错误。

  2.系统模块和HDL模块间缺乏联系。当系统模块被转换为HDL模块后,HDL模块成为整个系统设计的焦点。为适应硬件实现的特点,硬件设计人员会更改系统设计人员的设计,但这种更改只是在HDL模块中进行,而系统设计人员设计的C模块并没有因此更改。这就使得系统工程师设计的C模块和当前硬件设计人员设计的HDL模块缺乏必要的联系。当硬件设计人员遇到概念模糊或理解

错误的地方时,往往不能马上从C模块中得到明确的解答。此时,C模块的设计人员也不一定能为HDL设计人员提供有效的帮助。

  3.多系统测试。不但C模块要转换为HDL模块,对C模块的测试也要人工转换为在HDL环境下的测试。这种转换也很复杂,而且浪费时间。HDL设计人员是根据他所设计的HDL模块和系统要求来设计TESTBENCH,这使得硬件设计人员不可能利用软件设计人员所使用的测试文件。同时,HDL人员要设计出一个好的TESTBENCH也需要比较长的时间。

  为解决在现在设计流程中所带来的种种弊端,一种全新的设计流程被提出,这就是System C设计流程。它能很好的解决上面所提到的各种设计弊端,大大提高设计效率。图2是System C的硬件设计流程。

  这种设计方法与现在常用的设计方法相比有很多优点:

  1.精炼的设计方法。使用System C设计系统,系统设计人员不必花费很大的精力将整个系统设计由C语言描述转换为HDL描述。系统设计人员可以通过在C模块中很小的区域范围内加入必要的硬件和时序结构描述,从而将C模块方便准确地转化为一个有效的硬件设计,而避免将另行设计一个硬件模块。利用System C设计方法,设计人员可以很轻松地实现一个设计的更改,或在优化算法时检测出一些设计错误并及时修改。

  2.单一语言书写。使用System C设计系统,整个设计都用一种语言设计系统,降低了对设计人员的要求,减少了语言转换时所造成的错误。这一优点也使得设计人员可以在一个比较高的层次上进行系统模块设计。在较高层次的设计会导致产生小的设计代码,使设计和仿真的速度比传统的设计方法要快很多。这一点是很显著的。

四、SYSTEM C基本概念

  1.模块

  模块是System C设计中的基本设计单元。模块可以使得设计者将一个复杂的系统分割为一些更小但易于管理的部分。System C模块的功能和作用与HDL语言中的模块是相类似的,这使得一位习惯于用HDL进行设计的设计人员可以很容易的转向用System C进行设计。

  模块在System C中的关键字为SC_MODULE。紧跟着关键字后的是模块的名称,如SC_MODULE(fifo),这就定义了一个叫fifo的模块。定义的模块也可以像HDL语言一样包含端口、信号、其它模块、处理过程和结构体,这些单元实现用以实现模块的功能。通过端口可以将几个模块连接起来。

  模块被保存为.h文件。如果在一个模块中调用其它模块,只需像C++中引入库一样将要调用的模块作为一个库引入即可。

  2.过程

  模块中的处理过程(process)类似于C语言中的子程序,与C语言中的子程序不同的的是它具有HDL语言中的触发功能。处理过程(process)的具体工作部分被保存为.cpp文件。处理过程的调用类似于在C语言中子程序的调用。根据不同的要求,SystemC中有三种处理过程。

  ● Methods : SC_METHOD()

  ● Threads : SC_THREAD()

  ● Clock Threads : SC_CTHREAD()
  
  SC_METHOD是用来描述组合逻辑,它由输入信号的变化触发,但不能在两次调用中保存控制状态。并且在SC_METHOD中不能包含无限循环。由于组合逻辑有可能导致毛刺的产生,从而影响系统性能,所以SC_METHOD不易太复杂。 下面是一个简单的SC_METHOD例子:

  SC_MODULE(example) {

  sc_in din;

  sc_out dout;//端口

  void inverter();//处理过程声明

  SC_CTOR(example) {

  SC_METHOD(inverter);

  sensitive(din);//处理过程由输入变化触发

  }

  };

  处理过程inverter如下:

  void example::inverter() {

  bool internal;

  internal = din;//输入数据取反后由输出端口输出

  dout = ~internal;

  }

  SC_THREAD是最常用的处理过程,基本上可以用在任何地方。它是由输入信号的变化触发,但与SC_METHOD不同的是它可以在两次调用这保存控制状态。它的功能类似于积存器的功能。SC_THREAD中可以包含有wait()函数,这使得处理过程可以被挂起。

  SC_CTHREAD是SC_THREAD的一种特殊情况。SC_CTHREAD能产生更好的综合效果。SC_CTHREAD中可以使用wait()函数。在不同的状态

间加入wait()函数,设计人员可以用SC_CTHREAD来实现状态机。这种设计风格是简便的而且容易理解。SC_CTHREAD只能由时钟信号沿触发,而SC_THREAD可以由其它非时钟信号触发。如果在时钟上跳边触发,可以使用pos()函数,反之用neg()。

  为进一步说明SC_CTHREAD,下面给出了一个SC_CTHREAD的例子。

  SC_MODULE(example) {

  sc_in_clk clock;//输入时钟

  sc_in trigger, din;

  sc_out dout;

  void invert();

  SC_CTOR(example) {

  SC_CTHREAD(toggler, clock.pos());//时钟上升沿触发

  }

  }

  void example::invert() {

  bool last = false;

  for (;;) {

  wait_until(trigger.delayed() == true);//等到下个时钟上升沿 //且trigger=1再执行

  last = din; dout = last; wait();

  last =~din; dout = last;wait();//下个上升沿才更改数据

  }

  }

  3.端口与信号

  与HDL语言相似,使用System C库就可以在C程序中加入端口和信号。这些原先C语言中没有的功能,使设计更复合硬件设计的要求。

  模块与模块之间是通过端口信号加一联系。只要两个端口被连接在一起,信号就可以在它们之间进行传递。对于这一点习惯用HDL进行设计的设计人员是很容易理解和接受的,因为这和HDL中端口的功能是一样的。 信号只是在一个模块的内部使用,这也是和HDL中信号的用法是一致的。 下面给出端口和信号声明的例子。

  sc_in<“类型”> din// 输入端口din

  sc_out<“类型”> dout// 输出端口dout

  sc_inout<“类型”> q// 输入输出端口q

  sc_signal i[16]; //创建一个具有16比特的逻辑型信号i

  4.数据类型

  考虑到硬件设计的要求,System C中也加入了一些硬件设计中常用的数据类型。具体如下:

  sc_int 有符号整数类型,最大有64个比特位。

  sc_uint 无符号整数类型,最大有64个比特位。

  sc_bigint 有符号整数类型,任意比特位,其最大比特位定义在

  sc_constants.h中。

  sc_biguint 无符号整数类型,任意比特位,其最大比特位定义在

  sc_constants.h中。

  sc_bit 二值数据,单比特位。

  sc_logic 四值数据,单比特位。

  sc_bv 二值数据,任意比特位。

  sc_lv 四值数据,任意比特位。

  sc_fixed 参数固定的有符号定点数。

  sc_ufixed 参数固定的无符号定点数。

  sc_fix 参数不固定的有符号定点数。

  sc_ufix 参数不固定的无符号定点数。

  User defined structs 用户自定义结构

  以上是一些System C的基本概念。

五、结论

  System C是一种很有效的设计方法,它不仅可以帮助设计人员完成一个复杂的系统设计,还可以避免传统设计中的各种弊端,并提高设计人员的工作效率。它的这些优点使System C在复杂的系统设计中大有作为。并且习惯用HDL的设计人员,可以很容易地转到用System C设计。

关键字:算法  接口  程序  规范 引用地址:基于SYSTEM C的FPGA设计方法

上一篇:PDH通信二次群复接器在CPLD中的实现
下一篇:基于IP核的FPGA 设计方法

推荐阅读最新更新时间:2024-05-13 18:35

RS485多机通信程序
单片机:AVR ATMEGA8 通信:RS485 芯片:MAX485/MAX487 要求:一个主机从机三个以上。(本例使用3个从机) 工作原理: 三个从机: 采集电压(1-5V),并把数据发给主机 模数采样引脚PC0/ADC0 MAX487的RE和DE连在一起,并接到PD3 主机: MAX487的RE和DE连在一起,并接到PD3 PC0-PC3接1602液晶的D4-D7 (只用4条数据线) PD7接LCD E PC4接LCD RW PC5接LCD RS 工作过程: 从机等间隔进行进行AD采样 1. 主机发送地址(adr):01 寻找01从机 ,01号从机收到后,把AD采回来的数据发给主机,主机把数 据显示在LCD上。 2. 从机改
[单片机]
基于MIPS内核的HDTV-SoC平台总线接口模块
       在系统级芯片(SoC)的设计当中,MIPS的RISC处理器是一种应用非常广泛的嵌入式CPU,它具有高性能、低功耗的特点,可以很方便地集成到一个完整的片上系统之中,使开发者能够专注于用户IP模块的设计。         MIPS架构的处理器占据了数字机顶盒微处理器和解码器用CPU架构市场领域的领先地位。在MIPS家族的产品当中,32位的4KcTM处理器是具有代表性的一款,它采用了MIPS32的CPU架构,支持MIPS IITM指令集。在本文介绍的SoC系统设计中,就采用了MIPS32TM4KcTM处理器作为芯片的CPU内核。   在当前的数字消费电子市场领域,基于SoC平台的HDTV芯片是所有数字电视接收及播放
[嵌入式]
图像采集系统的Camera Link标准接口设计
  引 言   高速数据采集系统可对相机采集得到的实时图像进行传输、实时处理,同时实现视频采集卡和计算机之间的通信。系统连接相机的接口用的是Camera Link接口,通过Camera Link接口把实时图像高速传输到FPGA图像采集卡中进行数据实时处理,并通过PCI接口实现采集卡和计算机之间的通信。本文主要研究数据采集系统 Cam-era Link接口技术。   Camera Link是专门为数字摄像机的数据传输提出的接口标准,是2000年10月由一些摄像头供应商和图像采集公司联合推出的。Camera Link标准简化了计算机和摄像头之间的连接。本设计选用Dalsa公司的DS-21-02M30相机,该相机支持Camera L
[嵌入式]
基于Windows CE的物流车载终端设计
物流在现代社会中正扮演着越来越重要的角色。但是,与国外技术密集型的物流行业相比,国内物流行业在信息化、智能化程度上还存在着较大差距。鉴于这样一种状况,本文提出了一个基于Windows CE平台的物流车载终端设计方案。该物流车载终端以Liod评估板(简称为“Liod板”)为硬件平台,在嵌人式操作系统Windows CE上实现的功能有:电子地图,实现地图4级缩放、平移、归中功能;无线通信,实现终端与控制中心的GPRS无线通信;GPS定位,定位车载终端当前的位置;称重与打印,读取电子秤数据,实现票据的打印;语音提示,提供更好的人机交互功能。   1 软硬件平台简介 本车载终端以Liod板为硬件平台。Liod板的核心PXA270是一款属
[应用]
瑞萨电子推出集成LIN输出接口的传感器信号调理芯片解决方案
ZSSC4132集成LIN输出 接口 和业界领先的模拟前端,可缩减BOM成本。 带来更高精度、灵活性与性价比 2020 年 7 月 9 日,日本东京讯 - 全球领先的半导体解决方案供应商 瑞萨 电子集团(TSE:6723)今日宣布推出通过汽车级认证、集成LIN v2.2a接口的汽车 压力传感器 解决方案——ZSSC4132。该单封装 传感器 信号调理芯片(SSC)具有紧凑的外形,提供卓越性能、高度灵活性设计和高性价比,可应用于插电式混合动力电动汽车(PHEV)、 电池 电动汽车(BEV)和 燃料电池 电动汽车(FCEV)环境控制系统中的HVAC(暖通 空调 系统)等应用。 ZSSC4132可配置用于几乎所有 电阻 桥
[汽车电子]
瑞萨电子推出集成LIN输出<font color='red'>接口</font>的传感器信号调理芯片解决方案
把累加器ACC中的内容通过串行发送出去汇编语言源程序
把累加器ACC中的内容通过串行发送出去,汇编语言程序如下:  SOUT:MOV SCON,#40H ;设置串行接口为工作方式     MOV TMOD,#20H ;定时器T1工作于模式2 MOV TL1,#0E8H; ;设置波特率为1200b/s MOV TH1,#0E8H SETB TR1 MOV SBUF,A JNB T1,$ CLB T1 RET
[单片机]
基于USB接口1553B总线设备检测系统设计
引言   MIL-STD-1553B军用总线标准,在军事装备,特别是飞机系统中得到了广泛的应用,舰载系统中也正在逐步推广。对于1553B总线传输信息的飞机系统,特别是由该总线网络构成的综合航火控系统、通信系统而言,系统时实监测与在线故障诊断均建立在信息录取的前提下。为了方便录取1553B总线上传输的信息就需要应用1553B总线到计算机标准接口转换器,目前常用转换器有1553B-PCI、1553B-VXI等,但在工程实践过程中,它们存在体积大、价格高、使用不方便等缺陷。相比而言,USB接口具有体积小、携带方便、热插拔等特征,具有不可替代的优势。   本文介绍的1553B设备检测系统就是基于USB接口的。设计包含两大部分:硬件设计
[嵌入式]
关于STM32自举程序原理和使用详细解析
很很多单片机都有自举程序,像支持STC单片机使用串口下载,这种其实也是单片机内部集成了一段自举程序。 那你,你了解自举程序吗?下面结合STM32给大家分享一下关于自举程序的知识。 1关于自举程序 STM32中内嵌了一段自举程序,可能很多人不知道。 那段自举程序存放在System memory(系统存储器)中,我们通过配置启动,选择启动系统存储器就可以运行这段程序。 2STM32启动配置 STM32有三种启动模式: Main Flash memory:主FLASH System memory:系统存储器 Embedded SRAM:内置SRAM 三种模式是通过不同配置来实现,一般通过BOOT引脚和BOOT位来配置启动模式。
[单片机]
关于STM32自举<font color='red'>程序</font>原理和使用详细解析
小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved