




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章数组、结构体和联合体,结构体联合体结构体和联合的操作非压缩数组压缩数组数组操作数组foreach循环用于数组的特殊系统函数,5.1结构体,结构体提供了对相关信息进行分组的方法,结构体使用关键字struct声明,结构体内的成员可以是任何数据类型,包括用户自定义类型和其它的结构体类型;结构体是变量和常量的集合,整个集合可以用结构体名进行引用,也可以用结构体成员名来引用该成员。,structinta,b;opcode_topcode;logic31:0address;biterror;instruction_word;,结构体内的成员引用:Instruction_word.address=32hf000001e;结构体与数组有什么不同?,5.1.1结构体声明,变量或线网都可以定义为结构体,当结构体定义为线网时,结构体中所有成员必须都是四态类型的。,varstructlogic31:0a,b;logic7:0opcode;logic23:0address;instruction_word_var;wirestructlogic31:0a,b;logic7:0opcode;logic23:0address;instruction_word_net;,structlogic31:0a,b;logic7:0opcode;logic23:0address;instruction_word_var;Instruction_word_var是变量or线网类型?,虽然结构体可以声明为线网类型,但结构体内成员不能使用线网类型!,5.1.1结构体声明,自定义和匿名结构体:,typedefstructlogic31:0a,b;logic7:0opcode;logic23:0address;instruction_word_t;instruction_word_tIW;structlogic31:0a,b;logic7:0opcode;logic23:0address;instruction;,自定义结构体可以在模块或接口内定义,在整个模块或接口中都可以使用,如果一个自定义结构体需要在多个模块中使用,或者是作为模块或接口的端口使用,那么结构体定义应放在package中!,5.1.2结构体赋值,结构体初始化:用值列表方式初始化,值列表是使用中的一组数值,大括号中的数值个数必须与成员个数一致。,typedefstructlogic31:0a,b;logic7:0opcode;logic23:0address;instruction_word_t;instruction_word_tIW=100,3,8hff,0;/大括号间的数值必须与成员个数一致,5.1.2结构体赋值,结构体成员赋值:,typedefstructlogic31:0a,b;logic7:0opcode;logic23:0address;instr_t;inst_tIW;always(posedgeclk,negedgeresetN)if(!resetN)beginIW.a=100;IW.b=100;IW.opcode=8hff;/成员引用IW.address=0;endelsebeginend,5.1.2结构体赋值,结构体成员赋值:,always(posedgeclk,negedgeresetN)if(!resetN)IW=100,3,8hff,0;/结构体表达式赋值elsebeginend/IW=address:0,opcode:8hff,a:100,b:5;/IW=address:0,opcode:8hff,100,5;/错误,混用成员名称/和成员顺序,IW=real:1.0,default:0;IW=real:1.0,default:0,r1:3.14;,structrealr0,r1;inti0,i1;logic7:0opcode;logic23:0address;IW;,5.1.3压缩和非压缩结构体,默认情况下,结构体是非压缩的,也就是说,虽然结构体成员使用一个共同的名字,但它们被当作是独立的变量,压缩结构体用packed关键字显式说明,其特点是所有成员被当作一个向量存储,第一个成员在向量的最左边,最后一个成员在最低位,其编号为0,structpackedlogicvalid;logic7:0tag;logic31:0data;data_word;,40,39,31,15,0,压缩综合体中的成员只能是包含整数类型值:即可以表示为byte,int这样的向量以及用bit或logic创建的向量!,5.1.3压缩和非压缩结构体,压缩结构体的操作:非压缩结构体的操作对压缩结构体一样适用,但压缩结构体还有与向量类似的操作,如算术操作、逻辑操作等,typedefstructpackedlogicvalid;logic7:0tag;logic31:0data;data_word_t;data_word_tpacket_in,packet_out;always(posedgeclk)packet_out=packet_in2;,5.1.3压缩和非压缩结构体,有符号的压缩结构体:压缩结构体作为向量使用可以是有符号或无符号的,用关键字signed或unsigned来声明,但结构体中成员是有符号还是无符号的,只依赖于成员的类型声明,与结构体声明没有联系。压缩结构体的部分选择始终是无符号的。,typedefstructpackedsignedlogicvalid;logic7:0tag;logic31:0data;data_word_t;data_word_ta,b;always(posedgeclk)if(ab)/有符号比较,5.1.4通过端口传递结构体,结构体可以通过模块和接口的端口传递,packagedefinitions;typedefenumADD,SUB,MULT,DIVopcode_t;typedefstructlogic31:0a,b;opcode_topcode;logic23:0address;logicerror;instruction_word_t;endpackageimportdefinitions:*;modulealu(inputinstruction_word_tIW,inputwireclk);endmodule,在两个不同模块中声明的匿名结构体,即使它们具有相同的名称、同样的成员及名称,也不是相同的结构体!,5.1.5将结构体作为任务和函数的自变量,结构体可以作为自变量传递给任务和函数,moduleprocessor();typedefenumADD,SUB,MULT,DIVopcode_ttypedefstructlogic31:0a,b;opcode_topcode;logic23:0address;logicerror;instruction_word_t;functionalu(inputinstruction_word_tIW);endfunctionendmodule,非压缩和压缩结构体都是可综合的,综合工具支持结构体通过模块端口、任务和函数传递,支持使用成员名和值的列表对结构体赋值!,5.2联合体,联合体只存储一个元素,但这个元素有多种表示方法,每种表示可以是不同的数据类型。联合体与结构体的声明类似,其成员引用也一样,unionbytei;byteunsignedu;data;data.i=-5;$display(“datais%d”,data.i);data.u=-5;$display(“nowdatais%d”,data.u);,typedefunioninti;intunsignedu;data_t;data_ta,b;,用户自定义和匿名联合体:区别在于是不是用typedef声明,5.2.1非压缩联合体,非压缩联合体可以包含任意变量类型,如real类型,非压缩结构体和非压缩数组等;非压缩联合体不可综合,可用于对高层次系统和交易级建模;如果从非压缩联合体中读取的成员不同于上次写入的成员,可能导致不确定的结果!,structbitis_real;unioninti;realr;value;data;/,always(posedgewrite)begincase(operation_type)INT_OP:begindata.value.i=5;data.value.r=0;endFP_OP:begindata.value.r=3.1415;data.is_real=1;endendcaseend,always(posedgereal)beginif(data.is_real)real_opd=data.value.r;elseint_opd=data.value.i;end,5.2.2标签联合体,标签联合体包含一个存储“标签”的隐含成员,代表存储数值的最后一个联合体成员的名称,使用标签表达式可以将一个值写入标签联合体中,标签表达式具有关键字tagged,后面是成员名,再后面是要存储的值;标签联合体检测联合体使用是否一致;使用标签表达式将值赋给标签联合体后,可以使用成员名将值写取联合体成员中,如果指定的成员名与当前标签不匹配,将会产生错误。,uniontaggedinti;realr;data;data=taggedi5;/在data.i中存5,并设备隐含标签d_out=data.i;/从联合体中读值d_out=data.r;/错误:成员与联合的隐含标签不匹配data.i=7;/写到联合体成员中data.r=3.14;/?,5.2.3压缩联合体,压缩联合体声明方式与压缩结构体声明方式相同,在压缩联合体中,每个联合体成员的位数都必须是相同的,以保证压缩联合体使用同样的位数存储数据;压缩联合体只能存储两态或四态类型的数据,因此,压缩联合体不能包含real或shortreal变量,或非压缩结构体、非压缩联合体、非压缩数组;压缩联合体允许数据以一种格式写入,而以另一种格式读取。,typedefstructpackedlogic15:0src_addr;logic15:0dest_addr;logic23:0data;logic7:0opcode;data_packed_t;unionpackeddata_packet_tpacket;logic7:07:0bytes;/压缩数组dreg;,5.2.3压缩联合体,always(posedgeclk,negedgeresetn)if(!resetn)begindreg.packet=0;k=0;endelseif(load_data)begindreg.bytesk2;endcaseendendendmodule,5.3数组,Verilog-1995只允许声明一维的reg,integer和time数据类型的数组;Verilog-2001允许除了event类型外的所有变量或线网类型都可以用于数组声明,且允许声明多维数组;SystemVerilog允许任何数据类型用于声明数组,包括使用struct、enum以及用户自定义类型,5.3.1非压缩数组,/1024个1位线网的一维非压缩数组wiren0:1023;/256个8位变量的一维非压缩数组reg7:0lut0:255;/1024个实数变量的一维非压缩数组realr0:1024;/32位的整数变量的三维非压缩数组integeri7:03:07:0;wire7:0table3:0;/如何存储?非压缩数组中各个数组元素是独立存储的!Verilog一次访问多个数组元素是错误的!,5.3.1非压缩数组,SystemVerilog支持的非压缩数组:bit63:0d_array1:128;/向量数组shortrealcosines0:89;/浮点数组typedefenumMo,Tu,We,Th,Fr,Sa,SuWeek_t;Week_tyear1:52;/自定义数组SystemVerilog可以引用整个数组或其中的一段元素,因此允许将整个数组或者数组特定维的内容复制到另一个数组,其限制是等号两边的数组必须有相同的维数、位数和类型。inta17:01023:0;inta21:81:1024;a2=a1;/复制整个数组a23=a10;/复制一段,5.3.2压缩数组,Verilog中的向量就是一维压缩数组:wire3:0a;/4位压缩数组reg63:0data;/64位压缩数组SystemVerilog可以声明多维压缩数组:logic3:07:0data;/2维压缩数组压缩数组存储:无间隙存储,与编译器、OS及硬件平台无关,31,23,15,8,0,5.3.2压缩数组,压缩数组元素只能是位形式的数据类型:包括logic,bit,reg,其它压缩数组,压缩结构体及压缩联合体。typedefstructpackedlogic7:0crc;logic3:0data;data_word_t;data_word_t7:0dataarray;压缩数组引用:压缩数组可以作为整体、位选择或部分选择引用。,logic3:07:0data;wire31:0a=data;wiresign=data37;wire3:0nib=data03:0;,bytehigh_byte;assignhigh_byte=data3;logic15:0word;assignword=data1:0;/assignword=data1:02;,5.3.4数组声明时的初始化,压缩数组初始化:与向量一样,可以在声明时用简单赋值进行初始化,赋值可以是常数、常数的拼接或常数的复制。logic3:07:0a=32h0;logic3:07:0b=16hz,16h0;/拼接操作符logic3:07:0c=162b01;/复制操作符非压缩数组初始化:在声明时用内的值序列进行初始化,作为左定界符表明里面是表达式列表,而不是verilog表达式的拼接,括号的套数与数组的维数一致。intd10:10:3=7,3,0,5,2,0,1,6;intd20:10:3=27,3,0,5;/复制,复制操作符前无与verilog中的拼接和复制操作符不同,拼接和复制要求指定文本值的位数,因而未指定位数的数值和实数不允许在这些操作符中!,5.3.4数组声明时的初始化,为非压缩数组指定默认值:SystemVerilog可以通过指定一个默认值初始化非压缩数组的所有元素或一段元素,默认值在在使用关键字default指定,或者使用数据类型关键字,以初始化结构或联合类型的数组元素中相应成员的值。inta10:70:1023=default:8h55;typedefstructlogic3:0opc;intk;realr;data_t;data_tdata0:7=default:0,real:3.14;,5.3.5数组赋值,非压缩数组赋值:给一个元素赋值给一个元素的1位或部分位赋值用一个值序列给整个数组赋值用一个值序列给数组的一段赋值。bytea0:30:3;a10=8h5;a=0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0;a3=hf,ha,hc,he;a=default:0;/整个数组赋值a0=default:4;/数组一段赋值,5.3.5数组赋值,压缩数组赋值:压缩数组是向量,可以象verilog向量一样赋值数组一个元素整个数组(向量)数组的一部分数组的一段(多个相邻的子域)logic1:01:07:0a;a110=1b0;a=32hf1a3c5e7;a103:0=4hf;a0=16hface;a=16hz,16b0;/拼接赋值,非压缩数组与压缩数组赋值有什么不同?!,5.3.6数组复制,压缩数组到压缩数组的复制:一个压缩数组可以直接赋给另一个压缩数组,且数组的类型和宽度可以不同,按向量操作进行扩展或截断bit1:015:0a;logic3:07:0b;logic15:0c;logic39:0d;b=a;/32位数组赋给32位数组c=a;/a的高16位被忽略d=a;/d的高8位填0,5.3.6数组复制,非压缩数组到非压缩数组的复制:两个具有相同维数、元素位数和类型的非压缩数组可以直接赋值,两个数组中元素编号不必相同,但数组的结构和类型必须完全匹配;不同结构的非压缩数组间的赋值需要经过转换实现。logic31:0a2:09:0;logic0:31b1:31:10;b=a;/非压缩数组间赋值,非压缩数组到压缩数组,压缩数组到非压缩数组间的复制需要经过转换才能实现!,5.3.7使用位流转换复制数组和结构体,位流转换将非压缩数组临时地转换成向量形式的位流,该临时向量可以赋值给其它数组。源数组和目标数组的每个元素的宽度可以不同,但数组的总位数必须相同。位流转换机制主要用于以下情况:把非压缩数组赋值给不同结构的非压缩数组把非压缩数组赋值给压缩数组把结构体赋值给压缩数组或非压缩数组把定宽或动态宽度的数组赋值给动态宽度数组把结构体赋值给另一个不同结构的结构体,位流转换使用SystemVerilog静态转换操作符,转换需要至少目标数组是用typedef表示的自定义类型!typedefintdata_t3:07:0;data_ta;intb1:03:03:0;a=data_t(b);/将非压缩数组赋给不同结构的非压缩数组,5.3.8由数组构成的数组,数组可以是压缩和非压缩的混合维度。logic63:0men0:4095;/一个由64位压缩数组组成的非压缩数组logic3:07:0data0:1023/由32位元素组成的非压缩数组,每个/元素是由4个字节组成的压缩数组数组的索引:非压缩维度的索引先于压缩维度,且按从左到右次序。,logic3:07:0mi_array0:70:70:7;mi_array01234=1b1;,5.3.9数组中使用用户自定义类型,数组元素可以是用户自定义类型,用于数组元素类型声明的用户自定义类型也可以是数组。typedefintunsigneduint_t;uint_tu_array0:127;/用户自类型组成的数组typedeflogic3:0nibble_t;nibble_t31:0big_word;/压缩数组/logic31:03:0big_word;typedeflogic3:0nibble_t;typedefnibble_tnib_array_t0:3;nib_array_tcompound_array0:7;/logic3:0compound_array0:70:3;,5.3.10数组通过端口、任务与函数传递,Verilog允许压缩数组通过模块端口、任务与函数传递,SystemVerilog允许任何类型及任意维数的数组通过端口、任务与函数传递,但要求端口、任务与函数的自变量说明为数组,传送的规则与数组赋值给其它数组的规则相同。modulecpu();logic7:0lookup_table0:255;lookupi1(.lut(lookup_table);endmodulemodulelookup(outputbit7:0lut0:255);initialload(lut);taskload(inoutlogic7:0t0:255;endtaskendmodule,5.3.10结构体、联合体与数组,压缩与非压缩数组的元素可以是结构体或联合体,在压缩数组中,结构体或联合体也必须是压缩的;结构体或联合体中也可以包含压缩或非压缩数组,压缩的结构体或联合体也只能包含压缩数组,typedefstructpackedlogic31:0a;logic7:0b;packet_t;packet_t23:0packet_array;typedefstructinta;realb;data_t;data_tdata_array31:0;,structpackedlogicparity;logic3:07:0data;data_word;structlogicdata_ready;logic7:0data3:0;packet;,5.3.13综合指导,数组及数组的赋值都是可综合的!数组声明数组赋值数组复制结构体或联合体中数组数组中的结构体或联合体(结构体或联合体须为用户自定义类型)数组传递前提:基值为四态或两态!,5.3.14数组应用实例,/指令寄存器模型:packagedefinitions;typedefenumADD,SUB,MULT,DIV,SL,SRopcode_t;typedefenumUNSIGNED,SIGNEDoperand_type_t;typedefunionpackedlogic31:0u_data;logicsigned31:0s_data;data_t;typedefstructpackedopcode_topc;operand_type_top_type;data_top_a;data_top_b;instr_t;endpackage;,5.3.14数组应用实例,importdefinitions:*;moduleinstr_register(outputinstr_t0:31instr_reg,inputdata_toperand_a;inputdata_toperand_b;inputoperand_type_top_type;inputopcode_topcode;inputlogic4:0wp);always(wp)begininstr_regwp.op_type=op_type;instr_regwp.opc=opcode;if(op_type=SIGNED)begininstr_regwp.op_a.s_data=operand_a.s_data;instr_regwp.op_a.s_data=operand_a.s_data;endelsebeginendendendmodule,5.4foreach循环,foreach循环可以遍历任何维数的数组,foreach循环的自变量是数组名,它后面是方括号内用逗号分隔的循环变量列表,循环变量不需声明,每个循环变量对应一个维度,多循环变量创建嵌套循环来对给定索引进行迭代,外循环对应低基数索引。foreach循环变量可以省略,如果省略了某个维数的循环变量,则表明该维度不会进行迭代!,intsum1:81:3;foreach(sumi,j)sumij=i+j;/为一个128位向量产生校验位,向量被分成16个8位元素组成的二维/数组,只指定了一个循环变量,省略了一个一个逗号!function15:0gen_crc(logic15:07:0d);foreach
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗从业者述职报告
- 智能化招聘系统的构建与应用效能研究
- 学生行为规范讲话稿:上下楼梯安全指南
- 【《大学生就业竞争力的实证研究(附问卷)》7300字(论文)】
- 2025年新能源产业技术创新与知识产权保护研究报告
- 2025年跨境电商保税仓物流配送模式创新研究报告
- 商平房订购合同(标准版)
- 印花卫衣加工合同
- pvc地板采购合同(标准版)
- 河南购房合同(标准版)
- 口腔科印模制取技术要点
- 2025年江西省中考语文试卷真题(含标准答案及解析)
- 工程石材吊装方案(3篇)
- 混凝土销售管理制度
- 2024年全国职业院校(中职组)技能大赛(植物嫁接)赛项考试题库
- 《江姐》教案-中职语文高一(高教版2023基础上册)
- 公司中小型会议策划方案
- T/CCT 017-2024中低温煤焦油
- 《中国传统文化》课件:佛教思想及其人生模式
- 医师多点执业协议书
- DB65∕T 3952-2016 反恐怖防范设置规范 学校
评论
0/150
提交评论