数字集成电路设计与硬件描述语言
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
docin/sundae_meng
docin/sundae_meng
空白符和注释
module MUX2_1 (out, a, b, sel);
// Port declarations
单行注释
output out;
到行末结束
input sel, // control input
b, /* data inputs */ a;
and and2 (b1, b, sel);
or or1 (out, a1, b1);
endmodule
docin/sundae_meng
标识符(identifiers)
• 有效标识符举例: shift_reg_a busa_index _bus3
• 无效标识符举例: 34net // 开头不是字母或“_” a*b_net // 包含了非字母或数字, “$” “_” n238 //包含了非字母或数字, “$” “_”
• 可读性强,易修改。 • 提高逻辑设计的效率,降低设计成本,更重要的是缩
短设计周期。 • HDL追求对硬件的描述,而将该描述在目标器件上实
现则由EDA工具的综合器完成。 • 受限于目标器件,并不是所有HDL语句均可被综合。
docin/sundae_meng
• VHDL和Verilog HDL是目前世界上流行最广的两 种硬件描述语言,都是在20世纪80年代中期开发 出来的。均为IEEE标准。
’0’, Low, False, Logic Low, Ground, ‘1’, High, True, Logic High, Power, VDD, ’X’ Unknown: Occurs at Logic Which Cannot be Resolved Conflict HiZ, High Impedance, Tri- Stated,
qb[ 0]); DFF d1 (d[ 1], clk, clr, q[ 1],
qb[ 1]); DFF d2 (d[ 2], clk, clr, q[ 2],
qb[ 2]); docin/sDunFdFaed_3me(ndg[ 3], clk, clr, q[ 3],
qb[ 3]);
语言的主要特点
• 最长可以是1023个字符
• 标识符区分大小写,sel和SEL是不同的标识符
• 模块、端口和实例的名字都是标识符
module MUX2_1 (out, a, b, sel);
output out;
input a, b, sel;
not not1 (sel_, sel);
ቤተ መጻሕፍቲ ባይዱ
Verilog标识符
and and1 (a1, a, sel_);
在各模块保持一致。 F、自定义的标识符不能与保留字同名。 G、参数采用大写,如SIZE
docin/sundae_meng
主要变量类型
Verilog主要有三类数据类型: • net (线网) : 表示器件之间的物理连接 • register (寄存器) :表示存储元件 • parameters(参数) : 运行时的常数
第六讲 数字集成电路设计
与硬件描述语言
docin/sundae_meng
大纲
1. 数字IC设计方法 2. 两种HDL语言 3. Verilog HDL简介 4. VHDL简介
docin/sundae_meng
当前的数字IC设计分可分成以下几个层次:
1. 算法级设计:利用高级语言(如C语言)及其他一些系统分析 工具(如MATLAB)对设计从系统的算法级进行描述。算 法级不需要包含时序信息。
endmodule
docin/sundae_meng
模块端口(module ports)
端口等价于硬件 的引脚(pin)
端口在模块名字 后的括号中列出
端口可以说明为 input, output及 inout
• 注意模块的名称DFF,端口列表及说明 • 模块通过端口与外部通信
docin/sundae_meng
docin/sundae_meng
转义符
\t
\n
\\
\”
\<1-3 digit octal number>
tab 换行 反斜杠 双引号 ASCII representation of above
docin/sundae_meng
标识符(identifiers)
• 标识符是用户在描述时给对象起的名字
• 标识符必须以字母(a-z, A-Z)或( _ )开头,后面可以是字 母、数字、( $ )或( _ )。
2、既包含高级程序设计语言的结构形式,同时也 兼顾描述硬件线路连接的具体构件
3、通过使用结构级或行为级描述可以在不同的抽 象层次上进行设计
docin/sundae_meng
4、Verilog HDL语言是并发的,即具有在同一时
刻执行多任务的能力,因为在实际硬件中许多操 作都是在同一时刻发生的。 而计算机编程语言往 往是顺序执行的。
模端块口名列表
Verilog HDL的基本结构
输入、输出端口描述 --描述外部特性
简单的Verilog HDL的例子 八位加法器的Verilog HDL源代码
准备实现的逻辑功能
module adder8 (cout, sum, ina,inb, cin); output [7:0] sum; output cout; input [7:0] ina,inb; input cin; assign {cout,sum}= ina+inb+cin;
模块实例化(module instances):
• 将模块的实例通过端口连接起来构成一个大的系统 • 每个实例都有自己的名字(d0, d1, d2, d3)。实例名是每
个对象唯一的标记,通过这个标记可以查看每个实例的 内部。 • 实例中端口的次序与模块定义的次序相同。 • 模块实例化与程序调用不同。每个实例都是模块的一个 完全的拷贝,相互独立、并行。
endmodule
ina 8 inb 8
cin
∑ ci co
8 sum
cout
程序为模块结构,包含在module与 endmodule之间
逻辑功能描述
--描述内部特性
docin/sundae_meng
Verilog HDL模块的结构
一.模块的概念
• 模块是Verilog HDL语言的基本单元,数字系统用 模块集合的形式来描述
• Verilog区分大小写,所有Verilog关键词使用小写字母
docin/sundae_meng
书写规范建议
A、用有意义的名字如 Sum 、CPU_addr等。 B、用下划线区分词。 C、采用一些前缀或后缀,如时钟采用Clk 前缀:Clk_50,
Clk_CPU;低电平采用_n 后缀:Enable_n; D、统一缩写, 如全局复位信号 Rst。 E、同一信号在不同层次保持一致性,如同一时钟信号必须
endmodule
格式自由
一条语句可多行书写; 一行可写多个语句。空 白(新行、制表符、空 格)没有特殊意义。
如input A;input B;
与input A; input B; 是一样的。
使用空白符提高可读性 Verilog忽略空白符
docin/sundae_meng
Verilog采用的四值逻辑系统
docin/sundae_meng
时延
• 信号在电路中传输会有传播延时,如线延时、器件延时等 • assign # 2 B = A; 表示 B信号在2个时间单位后得到A信号的值
• 所有时延都必须根据时间单位进行定义 • 定义方式为在文件头添加语句:
`timescale 1ns /100ps
• 其中’timescale 是Verilog HDL 提供的预编译处理命令,1ns 表示时间单位是1ns,100ps表示时间精度是100ps 根据该命 令,编译工具可以认知 #2 为2ns
• VHDL语法严谨,易于学习;逻辑综合能力强。 在欧洲使用较多。
• Verilog HDL语法灵活(类似C语言,较难掌握) 底层综合出色。美国使用较多。
docin/sundae_meng
• Verilog HDL是一种应用广泛的硬件描述语言,是IC硬件设计人员和 EDA工具之间的桥梁。其功能为 – 编写设计文本(脚本) – 建立电子系统行为级的仿真模型并进行仿真 – 自动综合生成数字逻辑网表(Netlist)及具体电路 – 生成某工艺条件下具体电路的延时模型并进行时序仿真 – 仿真验证无误后用于制造ASIC或写入FPGA器件中
• 常用的Verilog HDL开发软件有 – Altera公司的MAX+PLUS II,Quartus II – Xilinx公司的Foundation ISE
docin/sundae_meng
Verilog HDL语言的主要特征
1、语法结构上,与C语言有许多相似之处,并借鉴 C语言的多种操作符
• 模块描述某个设计的功能、结构和与其它模块通信 的外部端口
• Verilog HDL中各个模块是并行运行的
• 模块可以调用其它模块的实体(实例)
docin/sundae_meng
二.模块的结构
module <模块名> (<端口列表>) 端口说明(input,output,inout) 参数定义 //可选 数据类型定义 //wire、reg、task、function 连续赋值语句(assign)//组合逻辑 过程块(always和initial) -行为描述语句 低层模块实例 //调用其它模块 任务和函数 延时说明块
出现空格 • 3' b 001 非法: ' 和基数b 之间不允许出现空格 • (2+3) 'b10 非法:位长不能为表达式
docin/sundae_meng
字符串(string)
格式符
%h %o %d %b %c %s %m %t hex oct dec bin ACSII string module time
docin/sundae_meng
具体实例
• 5 ‘O37 5位八进制数(二进制 11111 ) • 4 'D2 4位十进制数 (二进制0010) • 4 ‘B1x_01 4位二进制数 • 7 ’Hx 7位x (扩展的x), 即xxxxxxx • 4 ‘hZ 4 位z (扩展的z) , 即zzzz • 4 ’d-4 非法:数值不能为负 • 8 ‘h 2A 在位长和基数之间,以及基数和数值之间允许
行描述 –用综合工具将设计转化为具体门级电路网表 –物理级可以是FPGA器件或专用集成电路(ASIC)
系统级
功能级
TOP-DOWN 设计思想
docin/sundae_meng
门级
• 电子设计规模越来越大(百万/千万门的量级),复杂度 越来越高,只能用高级语言来描述其功能,在设计初 期隐藏其具体的细节实现。
5、有时序概念,因为在硬件电路中从输入到输 出总是有延迟存在的
这两点显示了 Verilog HDL与C语言的最大区别
docin/sundae_meng
数字电路可简单归纳为两种要素:连线和器件 Verilog HDL建模--使用硬件语言对数字电路的这两
种基本要素进行描述。
docin/sundae_meng
2. RTL级设计:用信号在寄存器间传输的模式来对设计进行 描述。
3. 门级设计:用逻辑门及门级之间的连线对设计进行描述。
4. 开关级设计:用晶体管及其连线来对设计进行描述。
docin/sundae_meng
TOP-DOWN 设计方法
数字IC一般采用自顶向下(TOP-DOWN)的设计方法
–在系统级(顶层)进行功能的划分和架构设计 –在功能级进行仿真、纠错,并用硬件描述语言对功能进
模块实例化(module instances)
REG4有模块DFF的 四个实例
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; DFF d0 (d[ 0], clk, clr, q[ 0],
/*
The netlist logic selects input ”a” when
sel = 0 and it selects ”b” when sel = 1.
*/
多行注释,在/* */内
not (sel_, sel);
and (a1, a, sel_), (b1, b, sel);
or (out, a1, b1);
docin/sundae_meng
空白符和注释
module MUX2_1 (out, a, b, sel);
// Port declarations
单行注释
output out;
到行末结束
input sel, // control input
b, /* data inputs */ a;
and and2 (b1, b, sel);
or or1 (out, a1, b1);
endmodule
docin/sundae_meng
标识符(identifiers)
• 有效标识符举例: shift_reg_a busa_index _bus3
• 无效标识符举例: 34net // 开头不是字母或“_” a*b_net // 包含了非字母或数字, “$” “_” n238 //包含了非字母或数字, “$” “_”
• 可读性强,易修改。 • 提高逻辑设计的效率,降低设计成本,更重要的是缩
短设计周期。 • HDL追求对硬件的描述,而将该描述在目标器件上实
现则由EDA工具的综合器完成。 • 受限于目标器件,并不是所有HDL语句均可被综合。
docin/sundae_meng
• VHDL和Verilog HDL是目前世界上流行最广的两 种硬件描述语言,都是在20世纪80年代中期开发 出来的。均为IEEE标准。
’0’, Low, False, Logic Low, Ground, ‘1’, High, True, Logic High, Power, VDD, ’X’ Unknown: Occurs at Logic Which Cannot be Resolved Conflict HiZ, High Impedance, Tri- Stated,
qb[ 0]); DFF d1 (d[ 1], clk, clr, q[ 1],
qb[ 1]); DFF d2 (d[ 2], clk, clr, q[ 2],
qb[ 2]); docin/sDunFdFaed_3me(ndg[ 3], clk, clr, q[ 3],
qb[ 3]);
语言的主要特点
• 最长可以是1023个字符
• 标识符区分大小写,sel和SEL是不同的标识符
• 模块、端口和实例的名字都是标识符
module MUX2_1 (out, a, b, sel);
output out;
input a, b, sel;
not not1 (sel_, sel);
ቤተ መጻሕፍቲ ባይዱ
Verilog标识符
and and1 (a1, a, sel_);
在各模块保持一致。 F、自定义的标识符不能与保留字同名。 G、参数采用大写,如SIZE
docin/sundae_meng
主要变量类型
Verilog主要有三类数据类型: • net (线网) : 表示器件之间的物理连接 • register (寄存器) :表示存储元件 • parameters(参数) : 运行时的常数
第六讲 数字集成电路设计
与硬件描述语言
docin/sundae_meng
大纲
1. 数字IC设计方法 2. 两种HDL语言 3. Verilog HDL简介 4. VHDL简介
docin/sundae_meng
当前的数字IC设计分可分成以下几个层次:
1. 算法级设计:利用高级语言(如C语言)及其他一些系统分析 工具(如MATLAB)对设计从系统的算法级进行描述。算 法级不需要包含时序信息。
endmodule
docin/sundae_meng
模块端口(module ports)
端口等价于硬件 的引脚(pin)
端口在模块名字 后的括号中列出
端口可以说明为 input, output及 inout
• 注意模块的名称DFF,端口列表及说明 • 模块通过端口与外部通信
docin/sundae_meng
docin/sundae_meng
转义符
\t
\n
\\
\”
\<1-3 digit octal number>
tab 换行 反斜杠 双引号 ASCII representation of above
docin/sundae_meng
标识符(identifiers)
• 标识符是用户在描述时给对象起的名字
• 标识符必须以字母(a-z, A-Z)或( _ )开头,后面可以是字 母、数字、( $ )或( _ )。
2、既包含高级程序设计语言的结构形式,同时也 兼顾描述硬件线路连接的具体构件
3、通过使用结构级或行为级描述可以在不同的抽 象层次上进行设计
docin/sundae_meng
4、Verilog HDL语言是并发的,即具有在同一时
刻执行多任务的能力,因为在实际硬件中许多操 作都是在同一时刻发生的。 而计算机编程语言往 往是顺序执行的。
模端块口名列表
Verilog HDL的基本结构
输入、输出端口描述 --描述外部特性
简单的Verilog HDL的例子 八位加法器的Verilog HDL源代码
准备实现的逻辑功能
module adder8 (cout, sum, ina,inb, cin); output [7:0] sum; output cout; input [7:0] ina,inb; input cin; assign {cout,sum}= ina+inb+cin;
模块实例化(module instances):
• 将模块的实例通过端口连接起来构成一个大的系统 • 每个实例都有自己的名字(d0, d1, d2, d3)。实例名是每
个对象唯一的标记,通过这个标记可以查看每个实例的 内部。 • 实例中端口的次序与模块定义的次序相同。 • 模块实例化与程序调用不同。每个实例都是模块的一个 完全的拷贝,相互独立、并行。
endmodule
ina 8 inb 8
cin
∑ ci co
8 sum
cout
程序为模块结构,包含在module与 endmodule之间
逻辑功能描述
--描述内部特性
docin/sundae_meng
Verilog HDL模块的结构
一.模块的概念
• 模块是Verilog HDL语言的基本单元,数字系统用 模块集合的形式来描述
• Verilog区分大小写,所有Verilog关键词使用小写字母
docin/sundae_meng
书写规范建议
A、用有意义的名字如 Sum 、CPU_addr等。 B、用下划线区分词。 C、采用一些前缀或后缀,如时钟采用Clk 前缀:Clk_50,
Clk_CPU;低电平采用_n 后缀:Enable_n; D、统一缩写, 如全局复位信号 Rst。 E、同一信号在不同层次保持一致性,如同一时钟信号必须
endmodule
格式自由
一条语句可多行书写; 一行可写多个语句。空 白(新行、制表符、空 格)没有特殊意义。
如input A;input B;
与input A; input B; 是一样的。
使用空白符提高可读性 Verilog忽略空白符
docin/sundae_meng
Verilog采用的四值逻辑系统
docin/sundae_meng
时延
• 信号在电路中传输会有传播延时,如线延时、器件延时等 • assign # 2 B = A; 表示 B信号在2个时间单位后得到A信号的值
• 所有时延都必须根据时间单位进行定义 • 定义方式为在文件头添加语句:
`timescale 1ns /100ps
• 其中’timescale 是Verilog HDL 提供的预编译处理命令,1ns 表示时间单位是1ns,100ps表示时间精度是100ps 根据该命 令,编译工具可以认知 #2 为2ns
• VHDL语法严谨,易于学习;逻辑综合能力强。 在欧洲使用较多。
• Verilog HDL语法灵活(类似C语言,较难掌握) 底层综合出色。美国使用较多。
docin/sundae_meng
• Verilog HDL是一种应用广泛的硬件描述语言,是IC硬件设计人员和 EDA工具之间的桥梁。其功能为 – 编写设计文本(脚本) – 建立电子系统行为级的仿真模型并进行仿真 – 自动综合生成数字逻辑网表(Netlist)及具体电路 – 生成某工艺条件下具体电路的延时模型并进行时序仿真 – 仿真验证无误后用于制造ASIC或写入FPGA器件中
• 常用的Verilog HDL开发软件有 – Altera公司的MAX+PLUS II,Quartus II – Xilinx公司的Foundation ISE
docin/sundae_meng
Verilog HDL语言的主要特征
1、语法结构上,与C语言有许多相似之处,并借鉴 C语言的多种操作符
• 模块描述某个设计的功能、结构和与其它模块通信 的外部端口
• Verilog HDL中各个模块是并行运行的
• 模块可以调用其它模块的实体(实例)
docin/sundae_meng
二.模块的结构
module <模块名> (<端口列表>) 端口说明(input,output,inout) 参数定义 //可选 数据类型定义 //wire、reg、task、function 连续赋值语句(assign)//组合逻辑 过程块(always和initial) -行为描述语句 低层模块实例 //调用其它模块 任务和函数 延时说明块
出现空格 • 3' b 001 非法: ' 和基数b 之间不允许出现空格 • (2+3) 'b10 非法:位长不能为表达式
docin/sundae_meng
字符串(string)
格式符
%h %o %d %b %c %s %m %t hex oct dec bin ACSII string module time
docin/sundae_meng
具体实例
• 5 ‘O37 5位八进制数(二进制 11111 ) • 4 'D2 4位十进制数 (二进制0010) • 4 ‘B1x_01 4位二进制数 • 7 ’Hx 7位x (扩展的x), 即xxxxxxx • 4 ‘hZ 4 位z (扩展的z) , 即zzzz • 4 ’d-4 非法:数值不能为负 • 8 ‘h 2A 在位长和基数之间,以及基数和数值之间允许
行描述 –用综合工具将设计转化为具体门级电路网表 –物理级可以是FPGA器件或专用集成电路(ASIC)
系统级
功能级
TOP-DOWN 设计思想
docin/sundae_meng
门级
• 电子设计规模越来越大(百万/千万门的量级),复杂度 越来越高,只能用高级语言来描述其功能,在设计初 期隐藏其具体的细节实现。
5、有时序概念,因为在硬件电路中从输入到输 出总是有延迟存在的
这两点显示了 Verilog HDL与C语言的最大区别
docin/sundae_meng
数字电路可简单归纳为两种要素:连线和器件 Verilog HDL建模--使用硬件语言对数字电路的这两
种基本要素进行描述。
docin/sundae_meng
2. RTL级设计:用信号在寄存器间传输的模式来对设计进行 描述。
3. 门级设计:用逻辑门及门级之间的连线对设计进行描述。
4. 开关级设计:用晶体管及其连线来对设计进行描述。
docin/sundae_meng
TOP-DOWN 设计方法
数字IC一般采用自顶向下(TOP-DOWN)的设计方法
–在系统级(顶层)进行功能的划分和架构设计 –在功能级进行仿真、纠错,并用硬件描述语言对功能进
模块实例化(module instances)
REG4有模块DFF的 四个实例
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; DFF d0 (d[ 0], clk, clr, q[ 0],
/*
The netlist logic selects input ”a” when
sel = 0 and it selects ”b” when sel = 1.
*/
多行注释,在/* */内
not (sel_, sel);
and (a1, a, sel_), (b1, b, sel);
or (out, a1, b1);