当前位置:
文档之家› 数字系统设计与Verilog HDL课件
数字系统设计与Verilog HDL课件
说明:1)在assign 连续赋值语句里,被赋值的变量只能是”连线型 连线型”变量。 连线型 2)一个模块里可以包含一个或多个 assign 连续赋值语句, assign 连续赋值语句是并发执行的,也就是说一个模块中的多 条连续赋值语句的执行顺序与其在描述中出现的顺序无关。 3)数据流描述主要用来描述组合逻辑功能。
注重的是整个系统的功能而不是实现。 Verilog有高级编程语言结构用于行为描述,包括: while, if else, caseБайду номын сангаасforever等等 行为功能主要使用always过程语句来描述。 语法格式: always @ (敏感信号表达式 ) 块语句(begin-end)
23:48:22
敏感信号表达式 :
结果: 结果:四选一数据选择器
23:48:22
总结:
结构描述等价于逻辑图。通过连接简单元件来 构成更为复杂的元件。 在描述中使用元件时,是通过建立这些元件的 实例来完成。
23:48:22
2、数据流描述方式 、
以“assign”关键字开头的连续赋值语句 都称之为数据流描述。 连续赋值语句
例如:
module AND_G2
input A,B;
(A,B,F)
output F; assign F=A&B;
endmodule
23:48:22
连续赋值语句的语法为: assign #延时量 变量名 = 赋值表达式;
执行过程:右边表达式中的操作数无论何时发生变化, 右边表达 式都重新计算, 并且在指定的时延后将变化值赋予表达 式左边的连线型变量。时延定义了右边表达式操作数变 化与赋值给左边表达式之间的持续时间。如果没有定义 时延值, 缺省时延为0。
逻辑门) (1)内置门级元件(逻辑门)
not and nand or nor xor xnor。(表7.1、7.2) 表 、
三极管及储存节点等) (2)内置开关级元件(三极管及储存节点等)
cmos nmos pmos。 。
(3)用户自己定义的模块。 用户自己定义的模块。
23:48:22
门元件的调用
endmodule
结果:具有高电平有效使能端的 译码器 输出为低电平有效。 译码器, 结果:具有高电平有效使能端的2-4译码器,输出为低电平有效。
23:48:22
总结:
用assign 连续赋值语句来描述一个组合逻辑电 路,关键是找出输出与输入之间的逻辑关系,写出 逻辑表达式。
23:48:22
3、行为描述方式 、
元器件及其之间 的连接关系
23:48:22
Verilog HDL 提供了三种描述电路的方式: 提供了三种描述电路的方式:
1)数据流方式; 功能 2)行为方式; 3)结构方式; 结构
上述描述方式的混合。
23:48:22
1、结构描述方式 、
结构描述:在设计中,通过调用库中的元件来完成设计实体功能 结构描述:在设计中, 即用Verilog HDL定义的基本元件来描述电路的结构构成。 定义的基本元件来描述电路的结构构成 即用Verilog HDL定义的基本元件来描述电路的结构构成。 在Verilog HDL中可使用如下方式描述结构: HDL中可使用如下方式描述结构: 中可使用如下方式描述结构
23:48:22
练习:读一读下面模块描述了什么功能的电路? module Decoder2x4 (A, B, EN, Z);
input A, B, EN; output [ 3 :0] Z; wire Abar, Bbar; assign Abar = ~ A; assign Bbar = ~ B; assign Z[0] = ~ (Abar & Bbar & EN) , Z[1] = ~ (Abar & B & EN) , Z[2] = ~ (A & Bbar & EN) , Z[3] = ~ (A & B & EN) ;
23:48:22
一、初识Verilog HDL 初识Verilog
示例1:
输入端 输出端
定义成一个模块: 模块: 模块
module AND_G2 (A,B,F) ; input A,B; output F;
endmodule
23:48:22
示例2:
23:48:22
示例3:
module DFF (d, clk, clr, q, qb); .... endmodule module REG4( d, clk, clr, q, qb); output [3: 0] q, qb; input [3: 0] d; input clk, clr;
23:48:22
例:1位全加器 位全加器
23:48:22
数据流方式描述: 数据流方式描述:
module FA (A,B,Cin,Sum,Cout); input A,B,Cin ; //输入端口定义 output Sum, Cout; //输出端口定义 wire Sum,Cout; //变量类型申明语句 assign Sum=(A^B)^Cin; //连续赋值语句 assign Cout=((A&Cin)|(B&Cin)|(A&B)); endmodule
例:2选1数据选择器 选 数据选择器
module
MUX2_1 (out, a, b, sel); input a,b,sel; //输入端口列表 output out; not(sel_,sel); and(a1,a,sel_); and(b1,b,sel); or(out,a1,b1) ; //结构描述 //输出端口列表
and
A1(T1,A, Cin), A2(T2,B,Cin), A3(T3,A, B);
or
O1(Cout,T1,T2,T3); endmodule
23:48:22
练习:读一读下面模块描述了什么功能的电路?
module MUX4x1( Z, D0, D1, D2, D3, S0, S1); output Z; input D0, D1, D2, D3, S0, S1; and (T0, D0, S0_, S1_), (T1, D1, S0_, S1), (T2, D2, S0, S1_), (T3, D3, S0, S1); not (S0_, S0), (S1_, S1); or (Z, T0, T1, T2, T3); endmodule
门级结构描述 例:1位全加器 位全加器
23:48:22
结构描述: 结构描述:
module F_adder (A, B, Cin, Sum, Cout); input A, B, Cin ; //输入端口定义 output Sum, Cout; //输出端口定义
xor
X1(S1,A,B), X2(Sum,S1,Cin);
output F; and G2(F,A,B); endmodule
23:48:22
module rs_latch (y, yb, r, s); output y, yb; input r, s; nor n1( y, r, yb); nor n2( yb, s, y); endmodule
23:48:22
endmodule
23:48:22
HDL中的模块 Verilog HDL中的模块
1、模块的定义: 、模块的定义:
所谓“模块(module)”可以理解为Verilog HDL语言的基本描述单位, 它用于描述某个电路的功能或结构,以及它与其它模块通信的外部端 口。 一个复杂电路的完整Verilog HDL模型是由若个 Verilog HDL 模块构 成的,每一个模块又可以由若干个子模块构成。
23:48:22
逻辑功能
HDL中模块的描述方式 Verilog HDL中模块的描述方式
Verilog既是一种行为描述的语言也是一种结构描述语言。 Verilog模型可以是实际电路的不同级别的抽象。 这些抽象的级别包括:
系统说明/系统级,算法级 -设计文档/算法描述 行为描述 RTL/功能级 -Verilog 门级/结构级 -Verilog 结构描述 版图/物理级 -几何图形
又称或事件控制器,即当该表达式中变量的值改变时,就会引发 块内语句的执行,因此敏感信号表达式中应列出影响块内取值的所 有信号,它们中间需要用关键字 or 连接 。 敏感信号可以分为两种类型:边沿敏感型、电平敏感型 @(a) @(a or b) @(posedge clock) @(negedge clock) //当电平信号a的值发生变化 //当电平信号a或者b的值发生变化 //当边沿信号clock的上升沿到来时 //当边沿信号clock的下降沿到来时
模块的核心 如果没有定义,默认是 wire型。
23:48:22
逻辑功能定义
assign”持续赋值语句定义 持续赋值语句定义。 (1) 用“assign 持续赋值语句定义。 例:assign F= ( ~(A&B))∣(~(C&D)); “assign” 语句一般用于组合逻辑电路的赋值,称为持续赋值。 调用元件(元件例化)。 (2)调用元件(元件例化)。 如下页例题。 always”过程块赋值 过程块赋值。 (3)用“always 过程块赋值。 例:4位计数器模块设计 module count4(out,reset,clk); input reset,clk; output[3:0] out; reg[3:0] out; always @(posedge clk) begin if(reset) out<=0; else out<=out+1;end endmodule
23:48:22
例如:
module AND_G2
input A,B;
(A,B,F)