资源描述:
《EDA适合初学者入门第5章ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、EDA技术与应用山东科技大学信息学院陈新华2010.415.8循环语句5.9结构说明语句5.10编译预处理语句5.11语句的顺序执行与并行执行5.12不同抽象级别的VerilogHDL模型5.13设计技巧5.1引言5.2VerilogHDL基本结构5.3数据类型及常量、变量5.4运算符及表达式5.5语句5.6赋值语句和块语句5.7条件语句共5学时第5章硬件描述语言VerilogHDL25.1引言一、什么是VerilogHDL二、VerilogHDL的发展历史三、不同层次的VerilogHDL抽象四、Ver
2、ilogHDL的特点内容概要35.1引言一、什么是VerilogHDLVerilogHDL是一种用于数字逻辑电路设计的硬件描述语言(HradwareDescriptionLanguage),可以用来进行数字电路的仿真验证、时序分析、逻辑综合。用VerilogHDL描述的电路设计就是该电路的VerilogHDL模型。VerilogHDL既是一种行为描述语言也是一种结构描述语言。既可以用电路的功能描述,也可以用元器件及其之间的连接来建立VerilogHDL模型。45.1引言二、VerilogHDL的发展历史1
3、985年,由GDA(GateWayDesignAutomation)公司的PhilMoorby首创;1989年,Cadence公司收购了GDA公司;1990年,Cadence公司公开发表VerilogHDL;1995年,IEEE制定并公开发表VerilogHDL1564-1995标准;1999年,模拟和数字电路都适用的Verilog标准公开发表55.1引言三、不同层次的VerilogHDL抽象VerilogHDL模型可以是实际电路的不同级别的抽象。抽象级别可分为五级:系统级(systemlevel):用高
4、级语言结构(如case语句)实现的设计模块外部性能的模型;算法级(algorithmiclevel):用高级语言结构实现的设计算法模型(写出逻辑表达式);RTL级(registertransferlevel):描述数据在寄存器之间流动和如何处理这些数据的模型;门级(gatelevel):描述逻辑门(如与门、非门、或门、与非门、三态门等)以及逻辑门之间连接的模型;开关级(switchlevel):描述器件中三极管和储存节点及其之间连接的模型。返回5.1265.1引言四、VerilogHDL的特点语法结构上的
5、主要特点:形式化地表示电路的行为和结构;借用C语言的结构和语句;可在多个层次上对所设计的系统加以描述,语言对设计规模不加任何限制;具有混合建模能力:一个设计中的各子模块可用不同级别的抽象模型来描述;基本逻辑门、开关级结构模型均内置于语言中,可直接调用;易创建用户定义原语(UDP,UserDesignedPrimitive)。易学易用,功能强与C语言非常相似!75.2VerilogHDL基本结构一、简单的VerilogHDL例子二、VerilogHDL模块的结构三、逻辑功能定义四、关键字五、标识符六、编写V
6、erilogHDL源代码的标准内容概要85.3VerilogHDL基本结构一、简单的VerilogHDL例子[例5.2.1]8位全加器moduleadder8(cout,sum,a,b,cin);outputcout;//输出端口声明output[7:0]sum;input[7:0]a,b;//输入端口声明inputcin;assign{cout,sum}=a+b+cin;endmoduleI/O说明端口定义功能描述模块名(文件名)整个VerilogHDL程序嵌套在module和endmodule声明语句
7、中。每条语句相对module和endmodule最好缩进2格或4格!//……表示注释部分,一般只占据一行。对编译不起作用!单行注释符95.2VerilogHDL基本结构[例5.2.2]8位计数器modulecounter8(out,cout,data,load,cin,clk);output[7:0]out;outputcout;input[7:0]data;inputload,cin,clk;reg[7:0]out;always@(posedgeclk)beginif(load)out=data;//同
8、步预置数据elseout=out+1+cin;//加1计数endassigncout=&out&cin;//若out为8‘hFF,cin为1,则cout为1endmoduleI/O说明端口定义功能描述信号类型声明缩减运算符位运算符105.2VerilogHDL基本结构[例5.2.3]2位比较器modulecompare2(equal,a,b);outputequal;input[1:0]a,b;assignequal=(a==