电子技术基础 数字部分(第8版)课件4.6 用VerilogHDL描述组合逻辑电路_第1页
电子技术基础 数字部分(第8版)课件4.6 用VerilogHDL描述组合逻辑电路_第2页
电子技术基础 数字部分(第8版)课件4.6 用VerilogHDL描述组合逻辑电路_第3页
电子技术基础 数字部分(第8版)课件4.6 用VerilogHDL描述组合逻辑电路_第4页
电子技术基础 数字部分(第8版)课件4.6 用VerilogHDL描述组合逻辑电路_第5页
已阅读5页,还剩12页未读, 继续免费阅读

下载本文档

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

文档简介

4.6

用VerilogHDL描述组合逻辑电路4.6.1

组合逻辑电路的行为级建模4.6.2

分模块、分层次的电路设计4.6.1

组合逻辑电路的行为级建模组合逻辑的行为级描述常用语句assign连续赋值——用于简单组合逻辑过程赋值语句——在always等过程块中赋值if‑else条件语句——实现优先级选择逻辑case‑endcase多路分支——实现多条件并行分支for循环语句——用于描述重复结构或迭代逻辑(3)if(condition_expr1)true_statement1;elseif(condition_expr2)true_statement2;elseif(condition_expr3)true_statement3;……elsedefault_statement;1、条件语句(if语句)条件语句就是根据判断条件是否成立,确定下一步的运算。(1)if(condition_expr)true_statement;(2)if(condition_expr)true_statement;elsefale_statement;Verilog语言中有3种形式的if语句:if后面的条件表达式一般为逻辑表达式或关系表达式。执行if语句时,首先计算表达式的值,若结果为0、x或z,按“假”处理;若结果为1,按“真”处理,并执行相应的语句。例:使用if-else语句对4选1数据选择器的行为进行描述注意,过程赋值语句只能给寄存器型变量赋值,因此,输出变量Y的数据类型定义为reg。modulemux4to1_bh(input[3:0]D,

input[1:0]S,

outputregY);//输入输出端口及变量数据类型

always@(D,S)//电路功能描述

if(S==2’b00)Y=D[0];elseif(S==2’b01)Y=D[1];elseif(S==2’b10)Y=D[2];elseY=D[3];endmodule是一种多分支条件选择语句,一般形式如下case(case_expr)item_expr1:statement1;item_expr2:statement2;……

default:default_statement;//default语句可以省略endcase注意:若分支执行多条语句,需用begin…end括起,构成顺序块。default分支可省略(建议保留,防止锁存器)扩展形式casex——将x和z视为无关项casez——仅将z视为无关项2、多路分支语句(case语句)例:对具有使能端En的4选1数据选择器行为进行Verilog描述。当En=0时,数据选择器工作,En=1时,禁止工作,输出为0。modulemux4to1_bh

(input[3:0]D,[1:0]S,En,

outputregY);

always@(D,S,En)//2001,2005syntaxbeginif(En==1)Y=0;//En=1时,输出为0else//En=0时,选择器工作case(S)2’d0:Y=D[0];2’d1:Y=D[1];2’d2:Y=D[2];2’d3:Y=D[3];endcaseendendmodulemodulepriority(input[3:0]W,

outputreg[1:0]Y);always@(W)casex(W)4’b1xxx:Y=3;4’b01xx:Y=2;4’b001x:Y=1;4’b0001:Y=0;;default:Y=2’bx;//W无效时,Y为高阻endcaseendendmodule例:对基本的4线-2线优先编码器的行为进行Verilog描述。一般形式如下for(initial_assignment;condition;step_assignment)statement;initial_assignment为循环变量的初始值。Condition为循环的条件,若为真,执行过程赋值语句statement,若不成立,循环结束,执行for后面的语句。step_assignment为循环变量的步长,每次迭代后,循环变量将增加或减少一个步长。3、for循环语句moduleecoder3to8_bh(input[2:0]A,inputEn,outputreg[7:0]Y);integerk;//声明一个整型变量kalways@(A,En)//beginY=8’b1111_1111;//设译码器输出的默认值

for(k=0;k<=7;k=k+1)//下面的if-else语句循环8次

if((En==1)&&(A==k))Y[k]=0;//当En=1时,根据A进行译码

elseY[k]=1;//处理使能无效或输入无效的情况

endendmodule

试用Verilog语言描述具有高电平使能的3线-8线译码器.循环8次modulemux2x1_df(inputA,B,SEL;outputL);assignL=SEL?A:B;endmodule

例:用条件运算符描述了一个2选1的数据选择器。在连续赋值语句中,如果SEL=1,则输出L=A;否则L=B。modulemux2x1_df(inputA,B,SEL,outputregY);always@(D1,D0,S)//用always语句和条件运算符建模

L=S?D1:D0;endmodulemoduledecoder_df(inputA1,A0,E,output[3:0]Y);assignY[0]=~(~A1&~A0&~E);assignY[1]=~(~A1&A0&~E);assignY[2]=~(A1&~A0&~E);assignY[3]=~(A1&A0&~E);endmodule

例:用数据流建模方法对2线-4线译码器的行为进行描述。

4.6.2分模块、分层次的电路设计

4位全加器的层次结构框图分层次的电路设计:在电路设计中,将两个或多个模块组合起来描述电路逻辑功能的设计方法。设计方法:自顶向下和自底向上两种常用的设计方法modulehalfadder(

inputA,B,

outputS,C);

xor(S,A,B);

and(C,A,B);endmodule半加器的门级描述modulefulladder(inputA,B,CI,outputS,CO);wireS1,D1,D2;//内部节点信号halfadderHA1(.B(B),.S(S1),.C(D1),.A(A));

halfadderHA2(.A(S1),.B(Ci),.S(Sum),.C(D2));

or(Co,D2,D1);org1(CO,D2,D1);endmoduleD1S1D2全加器的描述-名称关联调用半加器,括号外是原名称,括号里是现在名称,位置时序可改变。module_4bit_adder(S,C3,A,B,C_1);input[3:0]A,B;inputC_1;output[3:0]S;outputC3;wireC0,C1,C2;//内部进位信号

fulladderFA0(S[0],C0,A[0],B[0],C_1),FA1(S[1],C1,A[1],B[1],C0),FA2(S[2],C2,A[2],B[2],C1),FA3(S[3],C3,A[3],B[3],C2);endmodule

4位全加器的描述--位置关联调用1位全加器,注意端口排列顺序0//带参数的4位加法器子模块moduleadder#(paratermetern=4)(

input[n-1:0]A,B,

inputCi,

output[n-1:0]S,

outputCo);

assign{Co,

温馨提示

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

评论

0/150

提交评论