资源预览内容
第1页 / 共179页
第2页 / 共179页
第3页 / 共179页
第4页 / 共179页
第5页 / 共179页
第6页 / 共179页
第7页 / 共179页
第8页 / 共179页
第9页 / 共179页
第10页 / 共179页
亲,该文档总共179页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
期中检测说明,11月28号期中检测 按小组抽签决定(cpld和单片机前四个实验为基础,适当变化),1,2,3.8 循环语句 3.9 结构说明语句 3.10 编译预处理语句 3.11 语句的顺序执行与并行执行 3.12 不同抽象级别的Verilog HDL模型 3.13 设计技巧,3.1 引言 3.2 Verilog HDL基本结构 3.3 数据类型及常量、变量 3.4 运算符及表达式 3.5 语句 3.6 赋值语句和块语句 3.7 条件语句,第3章 硬件描述语言Verilog HDL,3,3.1 引言,一、什么是Verilog HDL 二、Verilog HDL的发展历史 三、不同层次的Verilog HDL抽象 四、Verilog HDL的特点,内容概要,4,3.1 引言,一、什么是Verilog HDL Verilog HDL是一种用于数字逻辑电路设计的硬件描述语言(Hradware Description Language ),可以用来进行数字电路的仿真验证、时序分析、逻辑综合。 用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型。 Verilog HDL 既是一种行为描述语言也是一种结构描述语言。 既可以用电路的功能描述,也可以用元器件及其之间的连接来建立Verilog HDL模型。,5,3.1 引言,二、Verilog HDL的发展历史 1983年,由GDA(GateWay Design Automation)公司的Phil Moorby首创; 1989年,Cadence公司收购了GDA公司; 1990年, Cadence公司公开发表Verilog HDL; 1995年,IEEE制定并公开发表Verilog HDL1364-1995标准; 1999年,模拟和数字电路都适用的Verilog标准公开发表,6,3.1 引言,三、不同层次的Verilog HDL抽象 Verilog HDL模型可以是实际电路的不同级别的抽象。抽象级别可分为五级: 系统级(system level): 用高级语言结构(如case语句)实现的设计模块外部性能的模型; 算法级(algorithmic level): 用高级语言结构实现的设计算法模型(写出逻辑表达式); RTL级(register transfer level): 描述数据在寄存器之间流动和如何处理这些数据的模型; 门级(gate level): 描述逻辑门(如与门、非门、或门、与非门、三态门等)以及逻辑门之间连接的模型; 开关级(switch level): 描述器件中三极管和储存节点及其之间连接的模型。,返回3.12,7,3.1 引言,四、Verilog HDL的特点 语法结构上的主要特点: 形式化地表示电路的行为和结构; 借用C语言的结构和语句; 可在多个层次上对所设计的系统加以描述,语言对设计规模不加任何限制; 具有混合建模能力:一个设计中的各子模块可用不同级别的抽象模型来描述; 基本逻辑门、开关级结构模型均内置于语言中,可直接调用; 易创建用户定义原语(UDP,User Designed Primitive) 。 易学易用,功能强,与C语言非常相似!,8,3.2 Verilog HDL基本结构,一、简单的Verilog HDL例子 二、Verilog HDL模块的结构 三、逻辑功能定义 四、关键字 五、标识符 六、编写Verilog HDL源代码的标准,内容概要,9,3.2 Verilog HDL基本结构,一、简单的Verilog HDL例子 例3.2.1 8位全加器 module adder8 ( cout,sum,a,b,cin ); output cout; / 输出端口声明 output 7:0 sum; input 7:0 a,b; / 输入端口声明 input cin; assign cout,sum=a+b+cin; endmodule assign语句:无论右边表达式操作数何时发生变化,右边表达式都会重新计算,并且在指定的延迟后给左边表达式赋值。,端口定义,功能描述,模块名(文件名),整个Verilog HDL程序嵌套在module和endmodule声明语句中。 每条语句相对module和endmodule最好缩进2格或4格! / 表示注释部分,一般只占据一行。对编译不起作用!,单行注释符,10,3.2 Verilog HDL基本结构,例3.2.2 8位计数器 module counter8 ( out,cout,data,load, cin,clk ); output 7:0 out; output cout; input 7:0 data; input load, cin,clk ; reg7:0 out; always (posedge clk) begin if(load) out = data; / 同步预置数据 else out = out + 1 + cin; / 加1计数 end assign cout = /若out为8hFF,cin为1,则cout为1 endmodule,端口定义,功能描述,缩减运算符,位运算符,11,3.2 Verilog HDL基本结构,例3.2.3 2位比较器 module compare2 ( equal,a,b); output equal; input 1:0 a,b; assign equal = ( a = = b ) ? 1:0; / * 如果a等于b,则equal 为1,否则为0 * / endmodule “=”非阻塞过程性赋值:将想要赋给左式的值安排在未来时刻。不等上一个赋值完成执行下个赋值语句。 “=” 阻塞过程性赋值:按照顺序执行,前一个赋值结束才执行下边的赋值语句。,连续赋值语句,条件运算符,/ * * /内表示注释部分,一般可占据多行。对编译不起作用!,多行注释符,12,3.2 Verilog HDL基本结构,例3.2.4 三态驱动器 module trist2(out,in,enable); output out; input in, enable; bufif1 mybuf(out,in,enable); endmodule,例化元件名,门元件关键字,门元件例化程序通过调用一个在Verilog语言库中现存的实例门元件来实现某逻辑门功能。,Inputs | Output IN ENABLE | OUT X 0 | Z 1 1 | 1 0 1 | 0,bufif1的真值表,门元件例化,13,module trist1(out,in,enable); output out; input in, enable; mytri tri_inst(out,in,enable); endmodule module mytri(out,in,enable); output out; input in, enable; assign out = enable? in:bz; / * 如果enable为1,则out = in,否则为高阻态 * / endmodule,3.2 Verilog HDL基本结构,例3.2.5 三态驱动器,例化元件名,子模块名,顶层模块,子模块,模块元件例化,模块元件例化顶层模块(trist1)调用由某子模块(mytri)定义的实例元件(tri_inst)来实现某功能。,返回逻辑功能定义,14,3.2 Verilog HDL基本结构,Verilog HDL程序是由模块构成的。每个模块嵌套在module和endmodule声明语句中。模块是可以进行层次嵌套的。 每个Verilog HDL源文件中只准有一个顶层模块,其他为子模块。 每个模块要进行端口定义,并说明输入输出端口,然后对模块的功能进行行为逻辑描述。 程序书写格式自由,一行可以写几个语句,一个语句也可以分多行写。 除了endmodule语句、begin_end语句和fork_join语句外,每个语句和数据定义的最后必须有分号。 可用/*.*/和/.对程序的任何部分作注释。加上必要的注释,以增强程序的可读性和可维护性。,总 结,15,3.2 Verilog HDL基本结构,二、Verilog HDL模块的结构 Verilog的基本设计单元是“模块 (block) ” 。 Verilog 模块的结构由在module和endmodule关键词之间的4个主要部分组成:,module block1(a,b,c,d ); input a,b,c; output d; wire x; assign d = a | x; assign x = ( b & c ); endmodule,I/O说明,端口定义,功能描述,信号类型声明,1,2,3,4,16,3.2 Verilog HDL基本结构,三、逻辑功能定义 在Verilog 模块中有3种方法可以描述电路的逻辑功能: (1)用assign 语句 assign x = ( b & c );,连续赋值语句,常用于描述组合逻辑,门元件例化,模块元件例化,例化元件名,门元件关键字,(2)用元件例化(instantiate) and myand3( f,a,b,c);,注1:元件例化即是调用Verilog HDL提供的元件; 注2:元件例化包括门元件例化和模块元件例化; 注3:每个实例元件的名字必须唯一!以避免与其它调用元件的实例相混淆。 注4:例化元件名也可以省略!,17,3.2 Verilog HDL基本结构,(3)用 “always” 块语句 always (posedge clk) / 每当时钟上升沿到来时执行一遍块内语句 begin if(load) out = data; / 同步预置数据 else out = data + 1 + cin; / 加1计数 end,结构说明语句,注1:“always” 块语句常用于描述时序逻辑,也可描述组合逻辑。 注2:“always” 块可用多种手段来表达逻辑关系,如用if-else语句或case语句。 注3: “always” 块语句与assign语句是并发执行的, assign语句一定要放在“always” 块语句之外!,18,3.2 Verilog HDL基本结构,Verilog HDL模块的模板(仅考虑用于逻辑综合的部分),module () ; output 输出端口列表; input 输入端口列表; /(1)使用assign语句定义逻辑功能 wire 结果信号名; assign = 表达式 ; /(2)使用always块定义逻辑功能 always () begin /过程赋值语句 /if语句 / case语句 / while,repeat,for循环语句 / task,function调用 end,19,3.2 Verilog HDL基本结构,/ (3)元件例化 (); / 模块元件例化 (); / 门元件例化 endmodule,例化元件名也可以省略!,20,3.2 Verilog HDL基本结构,四、关键字 关键字事先定义好的确认符,用来组织语言结构;或者用于定义Verilog HDL提供的门元件(如and,not,or,buf)。 用小写字母定义! 如always,assign,begin,case,casex,else,end,for,function,if,input,output,repeat,table,time,while,wire 见数字系统设计与Verilog HDL P285附录A。,用户程序中的变量、节点等名称不能与关键字同名!,21,3.2 Verilog HDL基本结构,Verilog HDL关键字,ed
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号