matlab_C语言_verilog之间的区别

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C语言、verilog与Matlab语言的运算符号的区别C语言verilogMatlab功能描述*,/,+,-乘除一般不能直接写*,/,+,-乘,除,加,减%%rem(x,y)取余(在matlab中%表示注释)!!(逻辑非)~取反即非&&&&&逻辑与|||||逻辑或,,==,,==,,==大于,小于,等于=,==,=(=也是非阻塞赋值符号)=,=大于等于,小于等于!=!=~=不等于===!==条件相等和条件不相等~~无位反相&&无按位逻辑与||无按位逻辑或^^无异或~^~^无同或无右移无左移一行注释://多行注释:/**/同c语言一行注释:%注释?:?:无等同于if-else叙述{}beginend等同于{},执行语句多于一句就要用beginend包含起来;verilog中{}是拼接运算符,例:{a[0],b[14:0]}{{}}为复制算子:{3{2‘b10}}结果是6’b101010forkjoin也等同于{},与beginend的区别是,前者内部的语句是并行执行的,后者内部的语句是顺序执行的。十进制:直接表示八进制:以0开头,例如0123;十六进制:0x开头(在一个整常数后面十进制(’d或‘D):16’D255十六进制(‘h或’H)二进制(‘b或’B)八进制(‘o或’O)数据格式加上一个字母u或U,认为是无符号整型;在一个常数后面加上l或L,表示长整型)#后面加上数值,表示延时多秒个周期C语言、verilog、Matlab语言的关键字的区别C语言verilogMatlab功能描述parametera=1’b1;状态机里面都用parameter参数定义,模块中a代表二进制1definea=1’b1;a代表1’b1parameter作用于声明的那个文件;`define从编译器读到这条指令开始到编译结束都有效,或者遇到`undef命令使之失效if(条件a){执行指令A};elseif(条件b){执行指令B};……else{执行指令N};if()begin语句end;elseif()begin语句end;……else;注:verilog的elseif是分开的if表达式语句elseif表达式语句else语句endif条件判断语句for(表达式的;表达式样;表达式3){执行语句}或者for(循环变量赋初值;循环条件;循环变量增值){执行语句}硬件描述语言一般禁用for语句。只在测试模块中使用。格式同C语言。for(循环变量赋初值;循环条件;循环变量增值)begin执行语句;endfor变量=向量语句end例子:x=0;fori=1:1:10x=x+1;endfor循环语句while(表达式){执行语句}或者do{语句}同for语句;格式同C语言;但没有dowhile。while()beginwhile表达式语句endwhile循环语句while(表达式)执行语句;end无repeat(表达式)begin执行语句;end无repeat循环语句switch(表达式){case常量表达式1:{语句1}case常量表达式2:{语句2}case常量表达式3:{语句3}.........default:{语句n+1}}case语句case()x:;y:;z:;default:;endcase用的最多。Switch表达式Case常量表达式1语句1Case常量表达式2语句2Case常量表达式3语句3………Otherwise语句endswitch分支语句Break:结束for或while整个循环Continue:结束for或while单次循环无Break:结束for或while整个循环Continue:结束for或while单次循环Break和while语句类型标识符函数名(形式参数表列){声明部份语句部分}例:Intmax(intx,inty){intz;z=xy?x:y;return(z);}function返回值的类型或范围(函数名);端口及数据类型说明;语句;Endfunction例:function[7:0]getbyteinput[15:0]addressbegin执行语句;getbyte=result_expresstion;endendfunction说明:1定义数时至少有一个输入参量2必须有一条赋值语句给函数中的一个内部变量赋与函数的结果值,该内部变量与函数名相同function[out1,out2,...]=funname(in1,in2,...)例:function[mean,stdev]=stat(x)n=length(x);mean=sum(x)/n;stdev=sqrt(sum((x-mean).^2/n));function语句assigna=b;连续赋值组合逻辑语言,always赋值语句外面的赋值语句;always模块里面的阻塞赋值=非阻塞赋值=module模块名(引脚列表);input引脚名;定义类型output;reg;子模块名在本模块的名称(引脚列表);(例:dspi1(.clk(clk)……);.clk表示子模块中的名称,(clk)表示本模块中的名称)endmodule一个文件的形式TaskendtaskEg:Taskand;//定义任务名Inputa,b;Outputc;BeginC=a+b;Endendtask任务定义wire组合逻辑数据类型reg时序逻辑数据类型定义数据类型1、always语句,连续执行;用于时序逻辑always@(posedgeclk1ornegedge)边沿(上升沿)触发beginend用于组合逻辑always@(aorb)敏感列表beginend2、initial语句,只用于测试模块,只执行一次initialbegin语句end(一个模块中可以有多结构语句个initial块,它们都是并行运行的,initial块常用于测试文件虚拟模块。)3、task语句,任务task模块名;端口及数据类型说明;语句;endtask4、function语句,函数,返回一个表达式的值。function返回值的类型或范围(函数名);端口及数据类型说明;语句;endfunction*3、4不常用可综合的verilog语法子集常用的RTL语法结构如下:☆模块声明:module……endmodule☆端口声明:input,output,inout(inout的用法比较特殊,需要注意)☆信号类型:wire,reg,tri等,integer常用语for语句中(reg,wire时最常用的,一般tri和integer不用)☆参数定义:parameter☆运算操作符:各种逻辑操作符、移位操作符、算术操作符大多时可综合的(注:===与!==是不可综合的)☆比较判断:if……else,case(casex,casez)……defaultendcase☆连续赋值:assign,问号表达式(?:)☆always模块:(敏感表可以为电平、沿信号posedge/negedge;通常和@连用)☆begin……end(通俗的说,它就是C语言里的“{}”)☆任务定义:task……endtask☆循环语句:for(用的也比较少,但是在一些特定的设计中使用它会起到事半功倍的效果)☆赋值符号:=和=(阻塞和非阻塞赋值,在具体设计中时很有讲究的)可综合的语法时verilog可用语法里很小的一个子集,用最精简的语句描述最复杂的硬件,这也正是硬件描述语言的本质。对于做RTL级设计来说,掌握好上面这些基本语法是很重要。关于C语言的一点总结头文件中常用1类型定义:typedef(1)定义一般的类型例如:typedefintint16;typedeflongint32;typedefunsignedintUint16;typedefunsignedlongUint32;typedeffloatfloat32;typedeflongdoublefloat64;(2)定义结构体为一种数据类型:typedefstruct{_iqfs;/*Input:samplingfrequency(Q15)*/_iqfn;/*Input:thenotchfrequency(Q15)*/_iqBW;/*theband_widthofattenuationby3DB(Q15)*/_iqb0;/*Output:thecoficientofnumerator(Q15)*/_iqb1;/*Output:thecoficientofnumerator(Q15)*/_iqb2;/*Output:thecoficientofnumerator(Q15)*/_iqa0;/*Output:thecoficientofdenominator(Q15)*/_iqa1;/*Output:thecoficientofdenominator(Q15)*/_iqUk;/*input:thecurrentinputofsignal*/_iqUk_1;/*input:thepreviousinputofsignal*/_iqUk_2;/*input:thepreviousinputofsignal*/_iqYk;/*output:thecurrentoutputoffilteredsignal*/_iqYk_1;/*output:thepreviousoutputoffilteredsignal*/_iqYk_2;/*output:thepreviousoutputoffilteredsignal*/void(*calc)(void*);/*Pointertothe1st_Lowpass_Filterfunction*/}NF;NF为一种结构体类型,可以用NF来定义变量;例如:NFnf=NF_initial;//定义一个变量nf,nf为NF类型的,并赋初值。(采用这种方式与直接采用struct的区别是直接用NF,不用带struct,struct的用法见下面)(3)定义一种指向结构体的指针类型typedefNF*NF_handle;//NF_handle是一种指针类型,voidnotch_calc(NF_handle);//头文件中的函数申明中,函数notch_calc的输入值是一//个NF型的指针变量;2结构体定义struct(1)先定义结构,再说明结构变量。如:structstu{intnum;charname[20];charsex;floatscore;};structstuboy1,boy2;说明了两个变量boy1和boy2为stu结构类型。也可以用宏定义使一个符号常量来表示一个结构类型。例如:#defineSTUstructstuSTUboy1,boy2;这样可以省掉struct(2)在定义结构类型的同时说明结构变量。例如:structstu{intnum;charname[20];charsex;floatscore;}boy1,boy2;这种形式的说明的一般形式为:struct结构名{成员表列}变量名表列;(3)直接说明结构变量。例如:struct{intnum;charname[20];charsex;floatscore;}boy1,boy2;这种形式的说明的一般形式为:struct{成员表列}变量名表列;(4)定义结构体的位域structSCIFFCT_BITS{//bitsdescriptionUint16FFTXDLY:8;//7:0FIFOtransmitdelayUint16rsvd:5;//12:8reservedUint16CDC:1;//13AutobaudmodeenableUint16ABDCLR:1;//14AutobaudclearUint16ABD:1;//15Autobauddetect};同位体定义unionunionSCIFFCT_REG{Uint16all;structSCIFFCT_BITSbit;};3宏定义#define#define标识

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功