第3章 Verilog设计入门

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
L/O/G/O

第3章 Verilog 设计入门
Verilog设计入门

• 3.1 组合电路的Verilog描述 • 3.2 时序模块及其Verilog表述 • 3.3 二进制计数器及其Verilog设计

www.themegallery.com

3.1 组合电路的Verilog描述
3.1.1 2选1多路选择器及其Verilog描述
www.themegallery.com

3.1.3 4选1多路选择器及其数据流描述方式

数据流描述方式:即直接用布尔逻辑表达式来描述模块的功能。
www.themegallery.com

1.按位逻辑操作符

如果两个操作数位矢量不同长度,综合器将自动根据最长位 的操作数的位数把较短的数据按右端补0对齐的规则进行运 算操作,如C和E的操作。

www.themegallery.com

www.themegallery.com

2.过程语句
模块中任何顺序语句都必须放在过程语句结构中,格式如下:

www.themegallery.com

(1)过程语句首先需要用always@引导;

(2)要求将过程语句中所有的输入信号都放在敏感信号中;
(3)当过程语句的执行依赖于敏感信号的变化,当某一敏感信号变化时, 将启动此过程语句,于是always@引导的所有顺序语句被执行一遍,然 后返回起始端,进入等待状态; (4)所有过程语句本身都属于并行语句,而任一过程引导的语句结构都是 顺序语句;

• Case语句注意三项:
(1)表达式中的值必须在case以下列出的取值范围内,且数 据类型要匹配; 如例3.2的s1和s0只能对应2位二进制数; (2)与VHDL不同,verilog的case语句各分支表达式间未必 是并列关系,当多个分支取值同时满足表达式时,执行最 先满足的表达式分支,其余分支不检测; (3)除非所有条件句能完整覆盖case语句中的取值,否则最 末必须加上default语句。

www.themegallery.com

7. 文件取名和存盘 (1)文件名可以由设计者任意给定,文件后缀扩展 名必须是“.V”,如adder.v; (2)对于QuartusⅡ,文件名与该程序的模块名必 须一致。如例3.1的文件名应该是MUX21a.v; (3)文件取名对大小写敏感; (4)verilog程序必须存入某文件夹中(要求非中 文文件夹名),不要存在根目录或桌面上。

www.themegallery.com

Verilog的端口模式: (1)input:输入端口。数据只能由此端口被读入模块 实体中。 (2)output:输出端口。数据只能通过此端口从模块实 体向外流出,或者说可以将模块中的数据向此端口赋 值。 (3)inout:双向端口。即可以对此端口赋值,也可以 向此端口输入信号,如RAM的数据口、单片机的I/O口 等。

www.themegallery.com

3.赋值语句和条件操作符
关键词assign引导不同形式的赋值语句,如:

注:assign语句属于并行语句,即无论有多少行语句,都是同时执行。

www.themegallery.com

3.赋值语句和条件操作符
条件操作符的一般格式:

说明: 当条件表达式的计算值为真时(数值等于1),选择并计算表达式1的值,否则 (数值等于0),选择并计算表达式2的值。

www.themegallery.com

Verilog中的四种基本数值:
0:即二进制数0、低电平、逻辑0、事件为伪 的判断结果; 1:即二进制数1、高电平、逻辑1、事件为真 的判断结果; z或Z:高阻态,或高阻值,还可用“?”表示。 x或X:不确定,或未知的逻辑状态。

www.themegallery.com

www.themegallery.com

4. 关键字 (Key word)是指verilog语言中预定义的有特色含义的英文词 语,如3.1中input、output、module、endmodule,assign等。 5. 标示符 (Identifier)是设计者在verilog程序中自定义的,用于表 示不同的名词的词语,如模块名、信号名、端口名等。例3.1中的 MUX21a、a和b等。 6. 规范的程序书写格式 verilog程序对书写格式十分宽松,可以一行写多条语句 (只要能写下),也可以分行书写。

例如:Y定义为Y[1:0],当编译赋值语句Y<=9,Y是多少(用二进制表示?)

www.themegallery.com

敏感信号的表达方式:
(1)用文字or连接所有敏感信号; (2)用逗号区分或连接所有的敏感信号; (3)省略形式; 试图通过选择性地列出敏感信号来改变逻辑设计 是无效的。

www.themegallery.com

3.块Hale Waihona Puke Baidu句begin_ end

(1)块语句begin_ end 本身没什么功能,仅限于在always@引导的过程 语句中使用,通常用来组合顺序语句,相当于括号的作用; (2)verilog规定,若某语句结构中仅包含一条语句,则无需显式定义块语句, 若含多条语句,包含语句结构,如case语句,也包含含有局部变量定义的单 条语句,则必须用begin_ end 将它们括起来;

5.并位操作和数字表达
(1)并位操作
大括号{}:并位运算符,将两个或多个信号按二进制位拼接起来, 作为一个信号使用。

www.themegallery.com

(2)数字表示 表示二进制数的一般格式:

说明: 1. B表示二进制,O表示八进制,H表示十六进制,D表示十进制,且 不分大小写。 2. verilog2001规定可定义有符号二进制数,如8‘b10111011和 8’sb10111011是不一样的。前者是普通无符号数,后者是有符号数,最 高位1是符号。

www.themegallery.com

5.注释符号

www.themegallery.com

3.1.4 4选1多路选择器及其if语句描述方式

www.themegallery.com

1.if_ else条件语句

执行过程:当if后的条件表达式为真时,执行赋值语句, 否则执行else后的If语句,如此数据的执行下去,直到完 成所有if语句。 同样,如果执行多条语句时,应该用begin-end块语句将 它们括起来。

www.themegallery.com

4.wire定义网线型变量
端口变量被默认为网线型变量,assign语句中需要的端口以外的信 号 或连线性质的变量,必须用网线型变量显式定义。

wire和assign在表达信号及信号赋值性质上是一致的。如下:

www.themegallery.com

用wire语句描述的4选1多路选择器:

www.themegallery.com

(3)赋值符号“<=” 说明:只能用于顺序语句中

www.themegallery.com

• 改错:
module mux41a (a,b,c,d,s1,s0,y) input a,b,c,d,s1,s0; output y; reg a,b,c,d; always @ * begin : mux41 case({s1,s0}) 2'b1: y=a; 2'b2: y=b; 2'b3: y=c; 2'b4: y=d; endcase endmodule

2.端口语句、端口信号名和端口模式
端口或端口信号是模块与外部电路连接的通道,端口关键词有三种, 一般格式如下:

说明: 端口关键词旁的端口名可以有多个,端口名之间用逗号分开,最后加分号。

www.themegallery.com

2.端口语句、端口信号名和端口模式
(1)单逻辑位,或标量位,如例中用input和output定义的端口a、 b、s、y; (2)逻辑矢量位,描述一个多信号端口或总线端口,使用第四句的 端口描述,其中msb和lsb分别表示信号矢量的最高和最低位数; 如信号C定义为: output [3:0] C;
www.themegallery.com

2.等式操作符

(1)当关系为真时,等式操作的结果为1,当关系为假时,结果为0; (2) ==等于操作符,两个二进制数比较必须每一位都相等,结果才为1, 否则为0,且如果其中有的位是未知值X或高阻值z都判断为假,输出0; (3)全等比较操作符===,将两个比较值当成确定的值进行比较,当表述 相同为1.
www.themegallery.com

3.assign连续赋值语句

由assign引导的赋值语句方式也称为数据流描述方式,即当等号右侧 的驱动表达式中的任一信号发生变化时,表达式被计算一遍,赋给左 侧的目标变量;

www.themegallery.com

当一个模块中有多个assign语句时,不允许有多个不同赋值表 达式,即在同一个模块中,wire型变量不允许有多个驱动源。 如果驱动表达式为高阻态,是可以允许的。

www.themegallery.com

www.themegallery.com

3. 数据表示方式

例如:SEL==2 当等式不匹配时,verilog综合器会自动使其匹配;上例中将整数2变换成2’b10.

{S1,S0}=2‘b10,(SEL==2),(SEL==2’D2)
当所赋值大于某变量已定义的矢量位可能的值,综合器会将赋值符号右侧的数 据折算成二进制数,然后根据被赋值变量所定义的位数,向左截去多余位数。

www.themegallery.com

3.1.1 2选1多路选择器及其Verilog描述

www.themegallery.com

1.模块表达

说明: 1. 任何可综合的基本模块都必须以关键词module开头,模块名属于标识符, 由设计者自定;
2. 模块名右侧括号称为模块端口列表,列出所有输入、输出或双向端口名,端 口名之间用逗号分开,括号外加分号,端口名也属于标识符; 3. 以endmodule关键词结束模块,旁边没有标点符号; 4. 不应用数字或中文定义实体名,也不应用与EDA软件工具库中以定义好的 关键词或元件作为模块名,如or2,不能用数字起头的模块名,如74LS160; 5. Verilog规定,所有关键词必须小写,如INPUT、MODULE都不是关键词, 标识符对大小写敏感,与VHDL不同。 www.themegallery.com

www.themegallery.com

4.case条件语句和4种逻辑状态
• Case语句是一种多分支条件语句,类似真值表的描述 方式,其表述方式有三种,case、casez(变量是高阻 值)和casex(变量是未知值)语句。 • Case语句一般格式如下:

www.themegallery.com

www.themegallery.com

改错: Module 21a (A; B; S; Y) Input A;B;S; Output Y; Y=(S ? A;B) Endmodule;

www.themegallery.com

3.1.2 4选1多路选择器及其case语句表述方式

www.themegallery.com
If(s) y=a; else begin y=b;z=c; q=1’b0; end

www.themegallery.com

2.过程赋值语句
例3.2和例3.5中两种不同的赋值符号:“=”和“<=” (1)阻塞式赋值 :“=” 特点:一旦执行完当前赋值语句,如y=b,赋值目标变量y即刻获得计算值, 如果在一个块语句中含有多条阻塞式赋值语句,当执行到某条赋值语句时, 其他语句被禁止执行,其他语句被阻塞了一样,属于顺序执行语句。 (2)非阻塞式赋值: “<=” 特点:必须在块语句执行结束时才整体完成赋值操作,在执行当前语句时, 对块中其他语句的执行不加阻塞,所有赋值语句都是并行运行的。

www.themegallery.com

1.reg型变量定义
(1)verilog中最常用的变量:寄存器型变量(reg)和网线型变量 (wire)。 (2)模块中功能描述涉及的所有信号都必须定义相应的变量类型, 如果没有在模块中显式地定义信号的类型,verilog默认定义为 wire型。 (3)当需要信号为寄存器型信号时必须使用reg进行显示定义,在 过程语句always@引导的顺序语句中规定必须是reg型变量。 (4)输入或双向口信号不能定义为寄存器型信号类型
相关文档
最新文档