VerilogHDL负责数字电路设计(AI助学版)课件_第1页
VerilogHDL负责数字电路设计(AI助学版)课件_第2页
VerilogHDL负责数字电路设计(AI助学版)课件_第3页
VerilogHDL负责数字电路设计(AI助学版)课件_第4页
VerilogHDL负责数字电路设计(AI助学版)课件_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

模块用户自定义原语门级原语连续赋值语句initial和always块关键字:generateendgenerate类型:4.3生成块VerilogHDL语言允许在生成范围内声明下列数据类型:net(线网),reg(寄存器)integer(整型数),real(实型数),time(时间型),realtime(实数时间型)event(事件)生成的数据类型具有惟一的标识名,可以被层次引用任务和函数的声明也允许出现在生成范围中,但是不能出现在循环生成当中生成任务和函数同样具有惟一的标识符名称,可以被层次引用不允许出现在生成范围中的模块项声明包括:参数、局部参数输入、输出和输入/输出声明指定块生成模块实例的连接方法与常规模块调用相同,三种创建生成语句的方法:循环生成条件生成case生成4.3.1循环生成语句变量声明模块用户自定义原语、门级原语连续赋值语句initial和always块循环生成语句:对两个N位总线变量进行按位异或modulebitwise_xor(out,i0,i1);parameterN=32;output[N-1:0]out;input[N-1:0]i0,i1;genvarj;generatefor(j=0;j<N;j=j+1)begin:xor_loopxorg1(out[j],i0[j],i1[j]);end//在生成块内部结束循环endgenerate//结束生成块另一种编写形式,异或门可以用always块代替:/*reg[N-1:0]out;generatefor(j=0;j<N;j=j+1)begin:bitalways@(i0[j]ori1[j])out[j]=i0[j]^i1[j];endendgenerate*/endmodule在仿真开始之前,仿真器会对生成块中的代码进行展开,将生成块转换为展开的代码,然后对展开的代码进行仿真关键字genvar用于声明生成变量,生成变量只能用在生成块中;在展开后的仿真代码中,生成变量不在存在一个生成变量的值只能由循环生成语句来改变循环生成语句可以嵌套使用。但是使用同一个生成变量作为索引的循环生成语句不能相互嵌套xor_loop是赋予循环生成语句的名字,目的在于通过它对循环生成语句中的变量进行层次化调用。因此,循环生成语句中各个异或门的相对层次名分别为:xor_loop[0].g1,xor_loop[1].g1,....…,xor_loop[31].g1一位全加器的逻辑如图所示:modulefulladd(sum,c_out,a,b,c_in);outputsum,c_out;inputa,b,c_in;wiret1,t2,t3;xorg1(t1,a,b);xorg2(sum,t1,c_in);andg3(t2,a,b);andg4(t3,t1,c_in);xorg5(c_out,t2,t3);endmodule

modulefulladd4(sum,c_out,a,b,c_in);output[3:0]sum;outputc_out;input[3:0]a,b;inputc_in;wirec1,c2,c3;fulladdfa0(sum[0],c1,a[0],b[0],c_in);fulladdfa1(sum[1],c2,a[1],b[1],c1);fulladdfa2(sum[2],c3,a[2],b[2],c2);fulladdfa3(sum[3],c_out,a[3],b[3],c3);endmodule用循环生成语句描述的脉动加法器moduleripple_adder(c_out,sum,a,b,c_in);output[3:0]sum;outputco;input[3:0]a,b;inputc_in;wire[3:0]c;assignc[0]=c_in;genvari;generatefor(i=0;i<4;i=i+1)begin:r_loopwiret1,t2,t3;xorg1(t1,a[i],b[i]);xorg2(sum[i],t1,c[i]);andg3(t2,a[i],b[i]);andg4(t3,t1,c[i]);xorg5(c[i+1],t2,t3);end//生成块内部循环的结束endgenerate//生成块的结束assignc_out=c[3];endmodule

modulefulladd(sum,c_out,a,b,c_in);outputsum,c_out;inputa,b,c_in;wiret1,t2,t3;xorg1(t1,a,b);xorg2(sum,t1,c_in);andg3(t2,a,b);andg4(t3,t1,c_in);xorg5(c_out,t2,t3);endmodule

4.3.2条件生成语句模块用户自定义原语、门级原语连续赋值语句initial和always块条件生成语句if-else,依据条件决定是否调用:使用条件生成语句实现参数化乘法器modulemultiplier(product,a0,a1);parametera0_width=8;parametera1_width=8;localparamproduct_width=a0_width+a1_width;output[product_width-1:0]product;input[a0_width-1:0]a0;input[a1_width-1:0]a1;generateif(a0_width<8)||(a1_width<8)cla_multiplier#(a0_width,a1_width)m0(product,a0,a1);elsetree_multiplier#(a0_width,a1_width)m0(product,a0,a1);endgenerate//生成块的结束endmodule4.3.3case生成语句模块用户自定义原语、门级原语连续赋值语句initial和always块case生成语句依据条件决定是否调用:case生成语句moduleadder(co,sum,a0,a1,ci);parameterN=4;output[N-1:0]sum;outputco;input[N-1:0]a0,a1;inputci;generatecase(N)1:adder_1bitadder1(c0,sum,a0,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论