Verilog入门
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例: `timescale 10ns / 1ns module MUX2(out, a, b, sel); output out; input a, b, sel; not #2.63 not1(sel_, sel); /* 2.63*10ns = 26.3ns ... 四舍五入→26ns. delay 26ns */ endmodule
– 连线类(Net):反映硬件电路的物理连接特 性的变量 – 寄存器类(Register):具有数据存储特性的 变量
第五章 Verilog 语言
Verilog 语法与实例
• 连线型与寄存器型区别:
– 连线型:
• • • • • 驱动方式(赋值方式): 连接到一个门或模块的输出端; 用assign赋值 电荷保持作用:没有电荷保持作用,未被驱动时将处于高阻态 对应硬件:物理信号连接
第五章 Verilog 语言
Verilog 语法与实例
• Verilog的四种逻辑状态: 0:逻辑零、逻辑非、低电平 1:逻辑1、逻辑真、高电平 x或X:不定态 z或Z:高阻态
第五章 Verilog 语言
Verilog 语法与实例
• 数据类型:为了能对硬件电路中的信号连 线和寄存器等物理量进行描述,引入特定 数据类型
第五章 Verilog 语言
Verilog概述
• Verilog 语言的描述风格
– 行为描述
描 述 复 杂 度 • 只对系统行为与功能进行描述,不涉及时序 电路实现,是一种高级语言描述的方法,有 很强的通用性
– 结构型描述
• 描述实体连接的结构形式,通过实例描述, 将verilog已定义的基本实例嵌入到语言中
– 数据流型描述
• 通过assign连续赋值实现组合逻辑功能的描 述
第五章 Verilog 语言
Verilog HDL结构
• Verilog HDL是由module模块组成,模块定义关键词 module 开始,到关键词 endmodule结束,每条Verilog语句以分号 “;”作为结束(块语句、编译向导、endmodule等除外)
第五章 Verilog 语言
Verilog 语法与实例
• 基本词法定义
– 空白符 : 空格(space bar),TAB 键,return键。 – 注释 (Comment) : “//”或“/*, */”。
第五章 Verilog 语言
Verilog 语法与实例
/* 2-to-1 multiplexer; out = a when sel = 0;out = b when sel = 1; */ module MUX_2(out, a, b, sel); output out; input a, b, sel; //netlist not(sel_, sel); and(a1, a, sel_),(b1, b, sel); or(out, a1, a2); endmodule
第五章 Verilog 语言
Verilog概述
• 与C语言的联系与区别
项目 C Verilog
执行顺序
时序概念 语法限制
顺序执行
无延迟 灵活完善
来自百度文库并行执行
存在延迟 限制严格,需 要有数字电路 的知识
第五章 Verilog 语言
Verilog概述
• 抽象层次
– 系统级:C等高级语言描述 – 行为级:模块的功能描述 – RTL级:寄存器与组合电路的合成 – 逻辑门级:基本逻辑门的组合(and, or, nand) – 开关级:晶体管开关的组合(nmos, pmos)
寄存器类
Register Types reg integer real time 32 位带符号整型 64 位浮点、双精度、带符号实型变量 64 位无符号时间变量 Function 用于行为描述时的寄存器类说明,无符号整型
第五章 Verilog 语言
Verilog 语法与实例
• 寄存器类变量声明:
第五章 Verilog 语言
例: `timescale 10ns / 1ps module MUX2(out, a, b, sel); output out; input a, b, sel; not #3 not1(sel_, sel); // delay 3个10ns ... endmodule
第五章 Verilog 语言
Verilog 语法与实例
• 关键词keywords
– 是指一些Verilog语言内部已经使用的词,主要是用 来定义语言的架构,并且所有的keyword都是用小 写表示,用户应避免使用 module, endmodule input, output, inout
reg, integer, real
not, and, or, xor, nor begin, end
第五章 Verilog 语言
Verilog 语法与实例
• 特殊字符: $,#,`
– $:以$开头的标识符代表系统命令 $time:返回目前的仿真时间 $display:显示出信号的值 $stop:停止仿真 –# not #3 not1(sel_, sel);// instance delay – ` `define,`include,`timescale
第五章 Verilog 语言
可编程逻辑器件应用实践
孙涛 ise_sunt@ujn.edu.cn
第五章 Verilog 语言
主要内容
• 目的:
– 通过具体实例讲解Verilog 的语法,快速掌握 Verilog的语法与结构
• 内容:
1. Verilog概述 2. Verilog HDL结构 3. Verilog 语法与实例
实数:
7.2 1.8e-4 9.5E6 //1.8*10-4
第五章 Verilog 语言
Verilog HDL基础知识
• 取名规则
– 标识符必须是由a-z, A-Z, 0-9,_, $这些字符組成, 最長只能到1024个字符 – 开头必须由a-z, A-Z或下划线_开头 – 可以在标识符所取的非法名称前加上反斜杠 “\”,并在名称结尾加上空白键,这样就可以 用任何可印出的ASCII字符来当作标识符的名 称了;而反斜杠和空白键不会被视为标识符的 一部分
第五章 Verilog 语言
例:
module \2:1 MUX (out, a, b, sel); output out; input a, b, sel;
not not1 (\~sel , sel); and and1 (a1, a, \~sel ), and and2 (b1, b, sel); or or1 (out, a1, a2); endmodule
例: wire net1; wand net2; tri [15:0] bus_in; wand [0:31] bus_a, bus_b; 当沒指定 net 是何种 type 时,Verilog 会以 default 值
来设定,default 为一位的 wire型
第五章 Verilog 语言
Verilog 语法与实例
<reg type> <[msb:lsb]> <name of variable> <,<name of variable>>*;
例:
reg a;
reg [7:0] a; reg [31:0] a, b; reg [0:7] b;
第五章 Verilog 语言
Verilog 语法与实例
• 参数(Parameter):常量定义,用文字参数 代替一个数字量
第五章 Verilog 语言
例: module MUX_2(out, a, b, sel); output out; input a, b, sel; not U0(sel_, sel); and U1(a1, a, sel_), and U2(b1, b, sel); or U3(out, a1, a2); endmodule
第五章 Verilog 语言
Verilog 语法与实例
• 数字表示:整数,实数 整数:+/- <位宽> ‘<基数符号> <数值>
<位宽>:指定整数的大小,以bit为单位。
<基数符号>:指定整数的基数,可以是b(binary)二进
制;o(octal)八进制;d(decimal)十进制;h(hex-
adecimal)十六进制。
module var_mux (out, a, b, sel); parameter width = 8, delay = 3; output [width-1:0] out; input [width-1:0] a, b; input sel; assign #delay out = sel ? a : b;
<数值>:指定整数的值。
第五章 Verilog 语言 整数:
17 //位宽, 基数符号不写会采用default值 (32bit十进制) 8’d32 //8-bit十进制值为32 8’h12 8’h1A 8’b0001_1100 /* ”_”无特別意义,只是为了方便二进制数易读*/ 8’o37 32’bx // ”x”表unknown 4’b0??? // ”?”表High impedance
wand,triand 多重驱动时,具有线与特性的连线 trireg 具有电荷保持特性的连线 tri1 tri0 supply1 supply0 具有弱上拉电阻的连线 具有弱下拉电阻的连线 电源线,逻辑 1 地线,逻辑 0
第五章 Verilog 语言
Verilog 语法与实例
• 连线型变量声明:
<net type> <[msb:lsb]> <delay> <net name> <, <net name>>*;
module module_name(Port_list) 端口声明; 数据类型声明; 电路描述; endmodule
例:上升沿D触发器
module dff_pos(data,clk,q); input data,clk; //端口声明 output q; //端口声明 reg q; //数据类型声明 always @(posedge clk) q=data;//电路描述 endmodule
endmodule
第五章 Verilog 语言
Verilog 语法与实例
• 模拟时间定标`timescale `timescale <计时单位>/<计时精度> 例:`timescale 1ns/100ps
– 合法的整数:1、10、100 – 合法时间单位:s、ms、µs、ns、ps、fs
第五章 Verilog 语言
• `define
`define <name> <macro_text> 例: `define ADD 3’h0 `define SUB 3’h1 .... case(opcode) `ADD:.... `SUB:..... end case • 例: `include “user_define_task.v” • `timescale 例: `timescale <time unit>/<time precision> `include
第五章 Verilog 语言
Verilog概述
• Verilog是在C语言的基础上发展起来的一种 硬件描述语言 • 由Gateway Automation 于1983年首创,并于 1995年成为IEEE标准,即IEEE standard 1364
第五章 Verilog 语言
Verilog概述
• 支持不同抽象层次的精确描述以及混合模拟,如 行为级、 RTL级、开关级等 • 设计、测试、模拟所用的语法都相同 • 较高层次的描述与具体工艺无关 • 提供了类似C语言的高级程序语句,如if-else, for, while, break, case,loop以及int等数据类型 • 提供了算术、逻辑、位操作等运算符 • 包含完整的组合逻辑元件,如and、or、xor等, 无需自行定义 • 支持元件门级延时和元件门级驱动强度(nmos, pmos)
– 寄存器型
• 驱动方式(赋值方式) :通过过程赋值语句赋值 • 电荷保持作用:在下一次赋值之前保持不变 • 对应硬件:触发器、锁存器
第五章 Verilog 语言
Verilog 语法与实例
连线类
Net Types wire, tri wor, trior Function 标准连线(default) 多重驱动时,具有线或特性的连线
– 连线类(Net):反映硬件电路的物理连接特 性的变量 – 寄存器类(Register):具有数据存储特性的 变量
第五章 Verilog 语言
Verilog 语法与实例
• 连线型与寄存器型区别:
– 连线型:
• • • • • 驱动方式(赋值方式): 连接到一个门或模块的输出端; 用assign赋值 电荷保持作用:没有电荷保持作用,未被驱动时将处于高阻态 对应硬件:物理信号连接
第五章 Verilog 语言
Verilog 语法与实例
• Verilog的四种逻辑状态: 0:逻辑零、逻辑非、低电平 1:逻辑1、逻辑真、高电平 x或X:不定态 z或Z:高阻态
第五章 Verilog 语言
Verilog 语法与实例
• 数据类型:为了能对硬件电路中的信号连 线和寄存器等物理量进行描述,引入特定 数据类型
第五章 Verilog 语言
Verilog概述
• Verilog 语言的描述风格
– 行为描述
描 述 复 杂 度 • 只对系统行为与功能进行描述,不涉及时序 电路实现,是一种高级语言描述的方法,有 很强的通用性
– 结构型描述
• 描述实体连接的结构形式,通过实例描述, 将verilog已定义的基本实例嵌入到语言中
– 数据流型描述
• 通过assign连续赋值实现组合逻辑功能的描 述
第五章 Verilog 语言
Verilog HDL结构
• Verilog HDL是由module模块组成,模块定义关键词 module 开始,到关键词 endmodule结束,每条Verilog语句以分号 “;”作为结束(块语句、编译向导、endmodule等除外)
第五章 Verilog 语言
Verilog 语法与实例
• 基本词法定义
– 空白符 : 空格(space bar),TAB 键,return键。 – 注释 (Comment) : “//”或“/*, */”。
第五章 Verilog 语言
Verilog 语法与实例
/* 2-to-1 multiplexer; out = a when sel = 0;out = b when sel = 1; */ module MUX_2(out, a, b, sel); output out; input a, b, sel; //netlist not(sel_, sel); and(a1, a, sel_),(b1, b, sel); or(out, a1, a2); endmodule
第五章 Verilog 语言
Verilog概述
• 与C语言的联系与区别
项目 C Verilog
执行顺序
时序概念 语法限制
顺序执行
无延迟 灵活完善
来自百度文库并行执行
存在延迟 限制严格,需 要有数字电路 的知识
第五章 Verilog 语言
Verilog概述
• 抽象层次
– 系统级:C等高级语言描述 – 行为级:模块的功能描述 – RTL级:寄存器与组合电路的合成 – 逻辑门级:基本逻辑门的组合(and, or, nand) – 开关级:晶体管开关的组合(nmos, pmos)
寄存器类
Register Types reg integer real time 32 位带符号整型 64 位浮点、双精度、带符号实型变量 64 位无符号时间变量 Function 用于行为描述时的寄存器类说明,无符号整型
第五章 Verilog 语言
Verilog 语法与实例
• 寄存器类变量声明:
第五章 Verilog 语言
例: `timescale 10ns / 1ps module MUX2(out, a, b, sel); output out; input a, b, sel; not #3 not1(sel_, sel); // delay 3个10ns ... endmodule
第五章 Verilog 语言
Verilog 语法与实例
• 关键词keywords
– 是指一些Verilog语言内部已经使用的词,主要是用 来定义语言的架构,并且所有的keyword都是用小 写表示,用户应避免使用 module, endmodule input, output, inout
reg, integer, real
not, and, or, xor, nor begin, end
第五章 Verilog 语言
Verilog 语法与实例
• 特殊字符: $,#,`
– $:以$开头的标识符代表系统命令 $time:返回目前的仿真时间 $display:显示出信号的值 $stop:停止仿真 –# not #3 not1(sel_, sel);// instance delay – ` `define,`include,`timescale
第五章 Verilog 语言
可编程逻辑器件应用实践
孙涛 ise_sunt@ujn.edu.cn
第五章 Verilog 语言
主要内容
• 目的:
– 通过具体实例讲解Verilog 的语法,快速掌握 Verilog的语法与结构
• 内容:
1. Verilog概述 2. Verilog HDL结构 3. Verilog 语法与实例
实数:
7.2 1.8e-4 9.5E6 //1.8*10-4
第五章 Verilog 语言
Verilog HDL基础知识
• 取名规则
– 标识符必须是由a-z, A-Z, 0-9,_, $这些字符組成, 最長只能到1024个字符 – 开头必须由a-z, A-Z或下划线_开头 – 可以在标识符所取的非法名称前加上反斜杠 “\”,并在名称结尾加上空白键,这样就可以 用任何可印出的ASCII字符来当作标识符的名 称了;而反斜杠和空白键不会被视为标识符的 一部分
第五章 Verilog 语言
例:
module \2:1 MUX (out, a, b, sel); output out; input a, b, sel;
not not1 (\~sel , sel); and and1 (a1, a, \~sel ), and and2 (b1, b, sel); or or1 (out, a1, a2); endmodule
例: wire net1; wand net2; tri [15:0] bus_in; wand [0:31] bus_a, bus_b; 当沒指定 net 是何种 type 时,Verilog 会以 default 值
来设定,default 为一位的 wire型
第五章 Verilog 语言
Verilog 语法与实例
<reg type> <[msb:lsb]> <name of variable> <,<name of variable>>*;
例:
reg a;
reg [7:0] a; reg [31:0] a, b; reg [0:7] b;
第五章 Verilog 语言
Verilog 语法与实例
• 参数(Parameter):常量定义,用文字参数 代替一个数字量
第五章 Verilog 语言
例: module MUX_2(out, a, b, sel); output out; input a, b, sel; not U0(sel_, sel); and U1(a1, a, sel_), and U2(b1, b, sel); or U3(out, a1, a2); endmodule
第五章 Verilog 语言
Verilog 语法与实例
• 数字表示:整数,实数 整数:+/- <位宽> ‘<基数符号> <数值>
<位宽>:指定整数的大小,以bit为单位。
<基数符号>:指定整数的基数,可以是b(binary)二进
制;o(octal)八进制;d(decimal)十进制;h(hex-
adecimal)十六进制。
module var_mux (out, a, b, sel); parameter width = 8, delay = 3; output [width-1:0] out; input [width-1:0] a, b; input sel; assign #delay out = sel ? a : b;
<数值>:指定整数的值。
第五章 Verilog 语言 整数:
17 //位宽, 基数符号不写会采用default值 (32bit十进制) 8’d32 //8-bit十进制值为32 8’h12 8’h1A 8’b0001_1100 /* ”_”无特別意义,只是为了方便二进制数易读*/ 8’o37 32’bx // ”x”表unknown 4’b0??? // ”?”表High impedance
wand,triand 多重驱动时,具有线与特性的连线 trireg 具有电荷保持特性的连线 tri1 tri0 supply1 supply0 具有弱上拉电阻的连线 具有弱下拉电阻的连线 电源线,逻辑 1 地线,逻辑 0
第五章 Verilog 语言
Verilog 语法与实例
• 连线型变量声明:
<net type> <[msb:lsb]> <delay> <net name> <, <net name>>*;
module module_name(Port_list) 端口声明; 数据类型声明; 电路描述; endmodule
例:上升沿D触发器
module dff_pos(data,clk,q); input data,clk; //端口声明 output q; //端口声明 reg q; //数据类型声明 always @(posedge clk) q=data;//电路描述 endmodule
endmodule
第五章 Verilog 语言
Verilog 语法与实例
• 模拟时间定标`timescale `timescale <计时单位>/<计时精度> 例:`timescale 1ns/100ps
– 合法的整数:1、10、100 – 合法时间单位:s、ms、µs、ns、ps、fs
第五章 Verilog 语言
• `define
`define <name> <macro_text> 例: `define ADD 3’h0 `define SUB 3’h1 .... case(opcode) `ADD:.... `SUB:..... end case • 例: `include “user_define_task.v” • `timescale 例: `timescale <time unit>/<time precision> `include
第五章 Verilog 语言
Verilog概述
• Verilog是在C语言的基础上发展起来的一种 硬件描述语言 • 由Gateway Automation 于1983年首创,并于 1995年成为IEEE标准,即IEEE standard 1364
第五章 Verilog 语言
Verilog概述
• 支持不同抽象层次的精确描述以及混合模拟,如 行为级、 RTL级、开关级等 • 设计、测试、模拟所用的语法都相同 • 较高层次的描述与具体工艺无关 • 提供了类似C语言的高级程序语句,如if-else, for, while, break, case,loop以及int等数据类型 • 提供了算术、逻辑、位操作等运算符 • 包含完整的组合逻辑元件,如and、or、xor等, 无需自行定义 • 支持元件门级延时和元件门级驱动强度(nmos, pmos)
– 寄存器型
• 驱动方式(赋值方式) :通过过程赋值语句赋值 • 电荷保持作用:在下一次赋值之前保持不变 • 对应硬件:触发器、锁存器
第五章 Verilog 语言
Verilog 语法与实例
连线类
Net Types wire, tri wor, trior Function 标准连线(default) 多重驱动时,具有线或特性的连线