




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Handel-C介绍新一代硬件描述预言HandelC简介第1页Handel-C引入伴随EDA技术发展,使用硬件描述语言(HDL)设计FPGA是当前最主要设计方法。而VHDL(Very High Speed Integrated Circuits Language)是应用最广泛硬件描述语言之一。VHDL主要用于描述数字系统结构、行为、功效和接口。但对于现在越来越多领域需要高速运行复杂算法如:加解密压缩,图形图像,语音脉声处理,通讯协议,雷达,软件无线电等。编程者假如采取复杂硬件描述语言来开发高速执行FPGA或ASIC芯片,将是一个极富挑战性和非常耗时过程,甚至难以处理这些复杂算法FPGA设计。为
2、了把编程者从复杂VHDL语言中解脱出来,Celoxica企业专门开发了一套由C语言程序直接到FPGA开发工具包DK。新一代硬件描述预言HandelC简介第2页Handel-C引入Celoxica企业开发DK设计工具使开发者用软件方法设计硬件,这种设计思想关键是开发者使用硬件C语言Handel-C。这Handel-C是一个起源于ISO/ANSI-C高级程序设计语言,它是以硬件为目标,兼有常规高级语言和硬件描述语言(Hardware Description Language,简称HDL)优点,即它能描述一些复杂算法,又能实现并行执行,做到了用软件方法来设计硬件。它允许系统开发人员和软件工程师经过一
3、些特殊表示式来指定一些算法是否并行,并把它直接映射到硬件上,从而加速算法设计,大大提升设计效率,缩短了产品上市时间。它还提供灵活数据宽度、通用内存体系结构(RAM,ROM)和外部硬件接口(Interface)。新一代硬件描述预言HandelC简介第3页Handel-C编译工具DKCeloxica企业专门开发了一套由C语言程序直接到FPGA开发工具包DK。DK环境包含内置设计输入、模拟与综合,DK编译器能够直接输出经过优化EDlF网表,直接进行布局布线;或生成VHDLVerilog文件,再经第三方综合工具进行综合后交给布局布线工具。开发环境允许开发者使用软件范例和库代码,而且能够与指令仿真器、V
4、HDL仿真器及外部CC+测试装置进行协同仿真和验证。Handel-C设计环境支持现有HDL代码块和嵌入式软件协同仿真(比如ModelSim)。Handel-C优点在于产品算法设计,这么,它就完全填补了HDL在接口和定时方面不足。新一代硬件描述预言HandelC简介第4页目录1/2初步认识1数据类型2基本语法3表示式4新一代硬件描述预言HandelC简介第5页目录2/2函数和宏命令5 时序介绍6 时钟7新一代硬件描述预言HandelC简介第6页目录1/2初步认识1数据类型2基本语法3表示式4新一代硬件描述预言HandelC简介第7页初步认识1/41并行程序(par)2 通道通信(channel)
5、3 范围与变量共享Handel-C很多语法都是来自传统C语言,当然Handel-C也有其特有并行(par)语句。你能够在Handel-C中使用传统次序语句,不过只有使用Handel-C并行结构,才能使性能到达最高效率。当然,为了更加好使用Handel-C,我们也得了解Handel-C其它特点。新一代硬件描述预言HandelC简介第8页图1.Handel-C并行结构(par)Handel-C编译器目标是低级硬件。这就意味着我们能够经过使用par并行结构来得到高性能优势。编写有效程序来指导编译器建立硬件来并行执行语句是十分主要。Handel-C并行是真正并行。当要同时处理两个并行指令时,会同时产生
6、2个不一样硬件来处理。初步认识2/4并行结构(par)新一代硬件描述预言HandelC简介第9页图2.Handel-C通道通信(channel)channel为并行程序中各分支信息提供联络。并行程序一个分支输出数据到channel中,另外一个分支则从该channel中读出数据。初步认识3/4通信通道(channel)新一代硬件描述预言HandelC简介第10页图3.Handel-C范围及变量共享初步认识4/4变量范围是基于代码块。这就意味着全局变量必须在全部代码块外部定义;标示符范围只在该代码块内部以及该代码块子代码块中。因为并行程序存在,为了防止资源冲突,Handel-C申明不能同时向一个变
7、量内写入数据,但能够从同一个变量中读出数据。范围与变量共享新一代硬件描述预言HandelC简介第11页目录1/2初步认识1数据类型2基本语法3表示式4新一代硬件描述预言HandelC简介第12页数据类型数据类型逻辑类型(logic)intarraysstructbit fieldsenumpointers结构类型(architecture)channelsinterfacesmemoriessignalregister类型介绍变量与常量新一代硬件描述预言HandelC简介第13页数据类型/简明介绍Handel-C使用对象有2种类型:逻辑类型(logic types)和结构类型(architec
8、ture types)。逻辑类型用来说明变量,结构类型用来说明需要特殊硬件结构变量(比如ROMs,RAMs 和channels等)。 这两种数据类型能够由其使用范围,字长及类型来详细说明。结构类型还 能够由使用该结构类型逻辑类型来详细说明。说明符类型说明符:signed, unsigned, undefined(定义变量符号以及长度)存放类说明符:extern, static(定义变量使用范围)修饰符类型修饰符:const, volatile(提升与ANSI-C兼容性,可用来修饰逻辑类型)排歧工具扩展符号:(用来详细说明结构类型复杂申明)Handel-C数值与长度 Handel-C与传统C语言
9、最大不一样就在于Handel-C能够处理任意长度值。 而且Handel-C能够从数值中提取任意长度值,也能够将值连接在一起 来形成一个更长数值。能够经过连字符或补零来得到给定长度数值。新一代硬件描述预言HandelC简介第14页数据类型数据类型逻辑类型(logic)intarraysstructbit fieldsenumpointers结构类型(architecture)channelsinterfacesmemoriessignalregister类型介绍变量与常量新一代硬件描述预言HandelC简介第15页数据类型/常量字符串常量 Handel-C中允许字符串常量。字符串常量由双引号括起
10、来一串字符组成。 字符串常量存放在字符数组中。字符串常量可以包含特殊字符。 数组和指针可以初始化为字符串常量,而且字符串常量可以被赋值给指 针。常量 常量可以被用在表达式里。十进制不需要加任何前缀,十六进制需要加0 x 或0X为前缀,八进制前缀为0,二进制前缀为0b或0B。下面是几个例 子 w=1234; /* 十进制 */ x=0 x1234; /* 十六进制 */ y=01234; /* 八进制 */ z=0b00100110; /* 二进制 */ 常量宽度可以进行类型转换。经常用于当编译器不能推测出常量宽度 情况下。例如 x=(unsigned int 3 )1;新一代硬件描述预言Han
11、delC简介第16页数据类型数据类型逻辑类型(logic)intarraysstructbit fieldsenumpointers结构类型(architecture)channelsinterfacesmemoriessignalregister类型介绍变量与常量新一代硬件描述预言HandelC简介第17页数据类型/逻辑类型1/3在Handel-C中只有一个基本逻辑类型:int。能够用unsigned或signed来修饰。整型长度能够由编程者给出,也能够由编译器推测给出。有一些由基本类型衍生出来数据类型:数组,指针,结构体,位域以及函数。void能够用来申明一个空参数列表或用在函数中来表示不
12、返回任何值。intint默认为有符号整型变量。下面有几个例子unsigned int 6 x;unsigned 6 x;经过使用尽可能短变量,能够产生更少且更有效率硬件。arrays和传统C语言相同,在Handel-C也能够以一样方法来申明数组。int 6 x7;x4=1;int 5 x;signed int 5 x;signed 5 x; 新一代硬件描述预言HandelC简介第18页数据类型/逻辑类型2/3struct结构体定义一个数据结构,语法以下struct type namemember-list instance_name,inatance_name;struct_name.memb
13、er_name来取得相关变量。bit fields位域是一个特殊结构体组员。域长与域名之间由冒号(:)分开。下面定义了两个完全相同结构体。struct structureunsigned int 1 LED;unsigned int 1 value;unsigned int 1 state;outputs;struct tag_namefield_type field_name:field_width instance_names;struct bitfield unsigned int LED:1;unsigned int value:1;unsigned int state:1;signa
14、ls;新一代硬件描述预言HandelC简介第19页数据类型/逻辑类型3/3enum枚举型列出了一系列整型常量。enum weekdays MON,TUES,WED,THURS,FRI;pointers基本申明:type *name函数指针:returntype (*pointername)(parament list);接口指针:interface bus_out() *p(int 2 x);结构体指针:struct s int 18 a,b;s,*sp;sp=&s;s.a=26;sp-b=sp-a;sp-a=(*sp).a;新一代硬件描述预言HandelC简介第20页数据类型数据类型逻辑类型
15、(logic)intarraysstructbit fieldsenumpointers结构类型(architecture)channelsinterfacesmemoriessignalregister类型介绍变量与常量新一代硬件描述预言HandelC简介第21页数据类型/结构类型1/4结构类型主要有以下四种类型channels:主要用于并行进程之间通信。interfaces:用来与引脚相连,或与外部编码进行通信。memories:主要有rom,ram,wom,mpramsignal:作为连线。channelsHandel-C为并行进行程序之间提供了信息交流通道:channels。一分支写入
16、通道,另一分支读出通道内信息。chan logictype name with specification;channel ?variable; /从通道中读出数据到variable中channel ! expression; /将表示式值写入通道中chan unsigned int 5 x6; /通道类型数组不能同时从一个通道中写入或读出数据。interfaces接口主要用来与外部设备或外部逻辑进行通信。接口定义分为两部分interface sort (ports_in_to_handel-C) (ports_out_from_Handel-C);新一代硬件描述预言HandelC简介第22页
17、数据类型/结构类型2/4interface sort (ports_in_to_handel-C) (ports_out_from_Handel-C);sort为用户自定义或预定义接口类型ports_in_to_handel-C可选,为将数据输入ports_out_from_Handel-C可选,将数据输出sort可分为bus和port两种。bus_in bus_latch_inbus_clock_inbus_outbus_ts_latch_inbus_ts_clock_inport_inport_outmemoriesRAMs和ROMs:能够用ram rom关键词来定义。rom必须定义为全局
18、变量或静态变量。ram能够被定义为静态,全局或自动变量。所以ram和rom都必须像数组一样申明。interface bus_in(int 4 To) InBus()with data=P4P3,P2,P1;int 4 x;x=InBus.To;新一代硬件描述预言HandelC简介第23页数据类型/结构类型3/4RAM与数组区分在于数组是定义了一定数量变量,每个变量是独立,在同一时钟内能够读出或写入n个变量。RAM在同一时钟内只能写入或读出一个数据,但RAM效率要比数组高。ram int 6 a43;static rom int 16 b4=23,46,69,92;a7=4;MPRAM:多端口R
19、AM。与C语言共用体类似。通惯用MPRAM来定义拥有相同长度两个端口。mpram MPRAM_nameram_type variable_type RAM_namesizewith ClockPosition/writeEnableSpecs=value;ram_type variable_type RAM_namesizewith ClockPosition/writeEnableSpecs=value;WOM:只写存放器。能够经过使用关键词wom来申明一个只写存放器。wom唯一用途就是在mpram中定义一个元素。因为rom只能出现在mpram中,故不能再mpram外部申明wom。新一代硬件
20、描述预言HandelC简介第24页数据类型/结构类型4/4semaHandel-C提供了semaphore来保护临界资源。sema mysema;while(trysema(MySema)=0)delay;CriticalSection();releasesema(MySema);sema定义一个数据类型。trysema()检测MySema是否被占用,releasesema()释放信号量。signal信号只能保持赋给它值一个时钟周期。在其它时间signal值为其初始值。排歧工具能够用来使复杂信号定义愈加简明易懂。signal signal_name;int 15 a,b; signal sig
21、;a=7;parsig=a;b=sig;新一代硬件描述预言HandelC简介第25页目录1/2初步认识1数据类型2基本语法3表示式4新一代硬件描述预言HandelC简介第26页基本语法5.循环1.seq2.par3.赋值4.分支基本语句Company Logo新一代硬件描述预言HandelC简介第27页基本语法1/4次序(seq)Handel-C中默认是次序执行指令。为了循环执行对应指令,Handel-C提供了相关关键词seq。seq能够省略。并行(par)Handel-C提供了par来并行处理语句。也能够对par来进行循环。par/seq (index_Base;index_Limit; i
22、ndex_Count)body下面举个例子:par (i=0; i3;i+)ai = bi; para0 = b0;a1 = b1;a2 = b2;新一代硬件描述预言HandelC简介第28页基本语法2/4赋值语句赋值语句以下:variable=expression;右侧表示式类型必须和左侧一致,不然会出现错误。还有一些赋值缩写,比如+/-/+=/-=等就不再详细介绍。分支语句()if else语句:if (Expression)StatementelseStatementswitch语句:switch (Expression)case Constant:Statementbreak;defa
23、ult:Statement break;新一代硬件描述预言HandelC简介第29页基本语法3/4prialt语句:prialtcase CommsStatement:Statementbreak;default:statementbreak;循环语句while循环:while(Expression)Statementprialt语句类似于switch语句,只是它判断条件是通信通道,而不是某个变量。它可用来选择某个通道通信。而CommsStatement只能是下面2个语句中一个Channel?VariableChannel!Expressiondo while循环:doStatementwhi
24、le(Expression)新一代硬件描述预言HandelC简介第30页基本语法4/4for语句for(init;test;inc)body;在Handel-C中,能够等价于右边循环continue,break,goto,return:init;while(test)body;inc;终止此次循环执行,即跳过当前这次循环中continue语句后还未执行语句,接着进行下一次循环条件判断。break在循环体内,强行结束循环执行,也就是结束整个循环过程,不再判断执行循环条件是否成立,直接转向循环语句下面语句。当break出现在switch/prialt语句体内时,其作用只是跳出该语句体。goto语句
25、是无条件转向语句,goto语句往往用来从多重循环中跳出。它在处理一些特定问题时很方便,但因为goto语句难于控制,尽可能少用。从当前函数中退出,返回到调用函数语句处,继续执行。continue:break:goto:return:新一代硬件描述预言HandelC简介第31页目录1/2初步认识1数据类型2基本语句3表示式4新一代硬件描述预言HandelC简介第32页表示式表示式类型转换assert位操作运算符数学运算符关系运算符逻辑运算符条件和组员运算符简明介绍新一代硬件描述预言HandelC简介第33页表示式1/4在Handel-C中,表示式判断不需要时钟周期。表示式会影响该项目时钟频率。表示
26、式越复杂,判断该表示式所需要硬件就越多,硬件时延就会使得所花费时间就越长。硬件项目中时钟由最长判断时间所局限。因为表示式不需要时钟周期,有副作用表示式在Handel-C中是不被允许。比如 if(ab+) /*不被允许*/ b+需要花费一个时钟周期。所以我们需要把复杂表示式简单化。因为RAM和ROM在同一时钟周期内只能对一个元素进行读或写操作,所以只能次序执行。类型转换在Handel-C中,在unsigned和signed是不能自动进行类型转换。所以必须进行强制类型转换。int 4 x;unsigned int undefined y;x=(int undefined)y;不过类型转换不能改变数
27、值宽度。新一代硬件描述预言HandelC简介第34页表示式2/4assertassert能够在编译时碰到某种情况下产生信息。assert(condition,trueValuestring with format specification(s),argument(s);位操作运算符Handel-C提供了以下位操作运算符:右移运算符-取低m位取高(n-m)位连字符位选width(Expresson)字宽unsigned int 4 x;unsigned int 4 y;unsigned int 8 z;x=0 xC;y=0 x7;z=xy;/z=0 xC7x=z4;/取z高(8-4)=4位y=
28、z-4;/取z低4位z=x7x7x7x7x;/符号扩展y=z-width(x);/width(x)为x字长新一代硬件描述预言HandelC简介第35页表示式3/4数学运算符进行数学运算操作数字长与类型必须一致。不然会产生编译错误。+ 加法- 减法* 乘法/ 除法% 取模关系运算符这些运算符用于比较含有相同字长值,返回一个一字节无符号整型0或者1。0表示假,1表示真。= 等于!= 不等于 大于)能够用来得到结构体或mpram中组员。新一代硬件描述预言HandelC简介第37页目录2/2函数和宏命令5 时序介绍6 时钟78新一代硬件描述预言HandelC简介第38页函数和宏命令函数和宏命令简明介绍
29、 函数 宏命令 新一代硬件描述预言HandelC简介第39页函数和宏命令简明介绍Handel-C提供和扩展了C语言函数和宏命令。新一代硬件描述预言HandelC简介第40页函数和宏命令/函数1/3函数函数与C语言中函数类似。函数会产生硬件共享。Handel-C还提供了函数数组(arrays of functions)以及内联函数(inline functions)。函数有一定参数并有返回值。假如返回值为0,则函数为void型。返回值类型为整型(integers)或结构体型(structs)。默认返回值为int undefined。若没有参数,则参数列表为void型。void mian(void
30、)函数定义:returnType Name (parameterList)declarationsstatementsint 4 add(left,right)int 4 sum;sum=left+right;return sum;新一代硬件描述预言HandelC简介第41页函数和宏命令/函数2/3函数申明:returnType Name(parameterType_1 parameter_1, parameterType_n parameter_n);函数数组:函数数组就是很多完全相同函数集合。函数数组能够允许并行运行相同函数。假如没有函数数组,并行运行相同函数做法就是申明两个名称不一样但功
31、效相同函数。unsigned func2(unsigned x,unsigned y)return (x+y);returnType NameSize(parameterList);/函数申明函数指针:unsigned 1 addeven(const short int *x,const short int *y)return(unsigned)(*x+*y)0;/函数定义unsigned 1 (*p)(const short*,const short *);/函数申明新一代硬件描述预言HandelC简介第42页函数和宏命令/函数3/3内联函数(inline function)内联函数能够实现
32、同时函数同时调用。inline int func(x,y)par a=func(b,c);b=foo;d=func(e,f);int func2(x,y)par a=func0(b,c);b=foo;d=func1(e,f);新一代硬件描述预言HandelC简介第43页函数和宏命令/宏命令1/4宏命令宏表示式(macro expressions):不带参数宏表示式:有2中形式:常量和常量表示式。macro expr DATA_WIDTH=15;/常量,与C语言中#define相同int DATA_WIDTH x;常量表示式:macro expr sum=(x+y)(y+z);/常量表示式v=s
33、um;w=sum;带参数宏表示式:Handel-C允许宏命令带参数。macro expr add3(x)=x+3;y=add3(z);/等于y=z+3;select操作符select意味着在编译时间选择表示式。select(Expression1,Expression2,Expression3)新一代硬件描述预言HandelC简介第44页函数和宏命令/宏命令2/4ifselect用于检验编译时间内常量表示式结果。假如为真,就编译接下来语句,假如为假,就跳过该语句,进行另外语句。ifselect (condition)statement1elsestatement2递归宏表示式(recursiv
34、e macro expressions)编译预处理不能产生递归表示式。经过将Handel-C宏命令(macro expr)与select()操作符结合在一起使用,递归宏命令能够将很复杂硬件简单化。共享表示式(shared expressions)在默认状态下,Handel-C会为整个项目标表示式产生所需要硬件。这就造成了很大一部分硬件长时间空闲。共享表示式允许硬件在不一样模块中共享,能够降低硬件使用。共享表示式与宏表示式形式类似,但不允许递归。能够使用letin来产生递归共享表示式。shared expr mult(x,y)=x*y;a=mult(b,c);d=mult(e,f);g=mult
35、(h,i);新一代硬件描述预言HandelC简介第45页函数和宏命令/宏命令3/4let inlet和in能够让你在宏表示式中再申明一个宏表示式。这么,复杂宏表示式就能够被分解为简单表示式。还能够产生递归共享表示式。以let为开始来申明局部宏,以in为结束来结束该申明,并定义其范围。、macro expr Fred(x)= let macro expr y=x*2;in y+3;/x*2+3第一行定义了宏名字与参数。第二行在宏定义中定义了y。最终一行给出了宏整体形式。但内部宏仅仅是宏内部。宏过程(Macro procedures)宏过程能够被用来替换完整语句,从而防止在编程时冗余重复。一个单一
36、宏过程能被扩展成一段代码。每次调用时都会为语句产生对应硬件.基本语法为macro proc Name(Params) statementmacro proc output(x,y)out!x;out!y;output(a+b,c*d);output(a+b,c*d);新一代硬件描述预言HandelC简介第46页函数和宏命令/宏命令4/4宏过程(macro procedures)与预处理宏(pre-processor macros)区分宏过程与预处理宏区分在于宏过程不但仅是简单内容替换。宏过程定义语句部分必须是完整Handel-C语句。下面代码使用预处理宏是合理,而使用宏过程则会出现错误。#define test(x,y) if (x!=(y2) / not valid as a macro procedure as not acomplete statementtest(a,b)a+;elseb+;新一代硬件描述预言HandelC简介第47页目录2/2函数和宏命令5时序介绍6 时钟7新一代硬件描述预言HandelC简介第48页时序介绍1/4Handel-C中每个main语句都有一个对应时钟脉冲源。清楚每
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商务谈判书合同协议
- 2025标准版合同范本下载
- 2025技术开发合同撰写关键要点
- 快递转承包合同协议
- 正规装修合同协议书范本
- 樱桃苗木买卖合同协议
- 员工技能培训协议合同
- 比赛奖励协议书模板
- 2025年度城市基础设施建设项目借款合同书
- 员工辅导协议书范本
- (四调)武汉市2025届高中毕业生四月调研考试 生物试卷(含答案)
- Revision Going to a school fair Lesson 1(教学设计)-2024-2025学年人教PEP版(2024)英语三年级下册
- 第25课它们吃什么(教学设计)-教科版科学一年级下册
- 2025年极兔速递有限公司招聘笔试参考题库含答案解析
- DZ/T 0430-2023 固体矿产资源储量核实报告编写规范(正式版)
- ZT-S1-NB蓝牙智能云锁家庭版介绍课件
- 智慧树超星尔雅创新性思维和方法网络通识课题库附答案
- 航空煤油MSDS安全技术说明书
- 基金从业资格考试培训中欧基金版
- 室外配套工程监理实施细则
- 最新企业资产管理系统(EAM)简介
评论
0/150
提交评论