1 / 102

HDL 及仿真验证 + 补充内容 微电子与光电子研究所

第六讲. HDL 及仿真验证 + 补充内容 微电子与光电子研究所. 韩雁 2014 年 3 月. 大纲. 数字 IC 设计方法 两种 HDL 语言 Verilog HDL 简介 VHDL 简介. 当前的数字 IC 设计分可分成以下几个层次 : 1. 算法级设计: 利用高级语言 ( 如 C 语言 ) 及其他一些系统分析工具(如 MATLAB )对设计从系统的算法级进行描述。算法级不需要包含时序信息。 2 . RTL 级设计: 用信号在寄存器间传输的模式来对设计进行描述。 3. 门级设计: 用逻辑门及门级之间的连线对设计进行描述。

bianca
Download Presentation

HDL 及仿真验证 + 补充内容 微电子与光电子研究所

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第六讲 HDL及仿真验证+补充内容微电子与光电子研究所 韩雁 2014年3月

  2. 大纲 • 数字IC设计方法 • 两种HDL语言 • Verilog HDL简介 • VHDL简介 浙大微电子

  3. 当前的数字IC设计分可分成以下几个层次: 1. 算法级设计:利用高级语言(如C语言)及其他一些系统分析工具(如MATLAB)对设计从系统的算法级进行描述。算法级不需要包含时序信息。 2. RTL级设计:用信号在寄存器间传输的模式来对设计进行描述。 3. 门级设计:用逻辑门及门级之间的连线对设计进行描述。 4. 开关级设计:用晶体管及其连线来对设计进行描述。 浙大微电子

  4. TOP-DOWN 设计方法 系统级 功能级 门级 数字IC一般采用自顶向下(TOP-DOWN)的设计方法 • 在系统级(顶层)进行功能的划分和架构设计 • 在功能级进行仿真、纠错,并用硬件描述语言对功能进行描述 • 用综合工具将设计转化为具体门级电路网表 • 物理级可以是FPGA器件或专用集成电路(ASIC) TOP-DOWN 设计思想 浙大微电子

  5. 电子设计规模越来越大(百万/千万门的量级),复杂度越来越高,只能用高级语言来描述其功能,在设计初期隐藏其具体的细节实现。电子设计规模越来越大(百万/千万门的量级),复杂度越来越高,只能用高级语言来描述其功能,在设计初期隐藏其具体的细节实现。 可读性强,易修改。 提高逻辑设计的效率,降低设计成本,更重要的是缩短设计周期。 HDL追求对硬件的描述,而将该描述在目标器件上实现则由EDA工具的综合器完成。 受限于目标器件,并不是所有HDL语句均可被综合。 浙大微电子

  6. VHDL和Verilog HDL是目前世界上流行最广的两种硬件描述语言,都是在20世纪80年代中期开发出来的。均为IEEE标准。 • VHDL语法严谨,易于学习;逻辑综合能力强。在欧洲使用较多。 • Verilog HDL语法灵活(类似C语言,较难掌握)底层综合出色。美国使用较多。 浙大微电子

  7. Verilog HDL是一种应用广泛的硬件描述语言,是IC硬件设计人员和EDA工具之间的桥梁。其功能为 • 编写设计文本(脚本) • 建立电子系统行为级的仿真模型并进行仿真 • 自动综合生成数字逻辑网表(Netlist)及具体电路 • 生成某工艺条件下具体电路的延时模型并进行时序仿真 • 仿真验证无误后用于制造ASIC或写入FPGA器件中 • 常用的Verilog HDL开发软件有 • Altera公司的MAX+PLUS II,Quartus II • Xilinx公司的Foundation ISE 浙大微电子

  8. Verilog HDL语言的主要特征 1、语法结构上,与C语言有许多相似之处,并借鉴C语言的多种操作符 2、既包含高级程序设计语言的结构形式,同时也兼顾描述硬件线路连接的具体构件 3、通过使用结构级或行为级描述可以在不同的抽象层次上进行设计 浙大微电子

  9. 这两点显示了 Verilog HDL与C语言的最大区别 4、Verilog HDL语言是并发的,即具有在同一时刻执行多任务的能力,因为在实际硬件中许多操作都是在同一时刻发生的。 而计算机编程语言往往是顺序执行的。 5、有时序概念,因为在硬件电路中从输入到输出总是有延迟存在的 浙大微电子

  10. 数字电路可简单归纳为两种要素:连线和器件 Verilog HDL建模--使用硬件语言对数字电路的这两种基本要素进行描述。 浙大微电子

  11. Verilog HDL的基本结构 模块名 输入、输出端口描述 --描述外部特性 8 ∑ ina 8 sum 8 inb cout co ci cin 程序为模块结构,包含在module与endmodule之间 端口列表 简单的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; endmodule 逻辑功能描述 --描述内部特性 八位加法器的Verilog HDL源代码 浙大微电子

  12. Verilog HDL模块的结构 一.模块的概念 模块是Verilog HDL语言的基本单元,数字系统用 模块集合的形式来描述 模块描述某个设计的功能、结构和与其它模块通信的外部端口 Verilog HDL中各个模块是并行运行的 模块可以调用其它模块的实体(实例) 浙大微电子

  13. 二.模块的结构 module <模块名> (<端口列表>) 端口说明(input,output,inout) 参数定义 //可选 数据类型定义 //wire、reg、task、function 连续赋值语句(assign)//组合逻辑 过程块(always和initial) -行为描述语句 低层模块实例 //调用其它模块 任务和函数 延时说明块 endmodule 浙大微电子

  14. 模块端口(module ports) 端口等价于硬件的引脚(pin) 端口在模块名字后的括号中列出 端口可以说明为input, output及inout 注意模块的名称DFF,端口列表及说明 模块通过端口与外部通信 浙大微电子

  15. 模块实例化(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], qb[ 0]); DFF d1 (d[ 1], clk, clr, q[ 1], qb[ 1]); DFF d2 (d[ 2], clk, clr, q[ 2], qb[ 2]); DFF d3 (d[ 3], clk, clr, q[ 3], qb[ 3]); endmodule 浙大微电子

  16. vERILOG语言的主要特点 模块实例化(module instances): 将模块的实例通过端口连接起来构成一个大的系统 每个实例都有自己的名字(d0, d1, d2, d3)。实例名是每个对象唯一的标记,通过这个标记可以查看每个实例的内部。 实例中端口的次序与模块定义的次序相同。 模块实例化与程序调用不同。每个实例都是模块的一个完全的拷贝,相互独立、并行。 浙大微电子

  17. 时延 • 信号在电路中传输会有传播延时,如线延时、器件延时等 • assign # 2 B = A; 表示 B信号在2个时间单位后得到A信号的值 • 所有时延都必须根据时间单位进行定义 • 定义方式为在文件头添加语句: `timescale 1ns /100ps • 其中’timescale 是Verilog HDL 提供的预编译处理命令,1ns 表示时间单位是1ns,100ps表示时间精度是100ps 根据该命令,编译工具可以认知 #2 为2ns 浙大微电子

  18. 浙大微电子

  19. 空白符和注释 module MUX2_1 (out, a, b, sel); // Port declarations output out; input sel, // control input b, /* data inputs */ a; /* 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); endmodule 格式自由 一条语句可多行书写;一行可写多个语句。空白(新行、制表符、空格)没有特殊意义。 如input A;input B; 与input A; input B;是一样的。 使用空白符提高可读性Verilog忽略空白符 单行注释 到行末结束 多行注释,在/* */内 浙大微电子

  20. Verilog采用的四值逻辑系统 ’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, 浙大微电子

  21. 具体实例 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在位长和基数之间,以及基数和数值之间允许出现空格 3' b 001 非法: ' 和基数b 之间不允许出现空格 (2+3) 'b10 非法:位长不能为表达式 浙大微电子

  22. 字符串(string) 格式符 转义符 浙大微电子

  23. 标识符(identifiers) Verilog标识符 • 标识符是用户在描述时给对象起的名字 • 标识符必须以字母(a-z, A-Z)或( _ )开头,后面可以是字母、数字、( $ )或( _ )。 • 最长可以是1023个字符 • 标识符区分大小写,sel和SEL是不同的标识符 • 模块、端口和实例的名字都是标识符 module MUX2_1 (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, b1); endmodule 浙大微电子

  24. 标识符(续) • 有效标识符举例: shift_reg_a busa_index _bus3 • 无效标识符举例: 34net // 开头不是字母或“_” a*b_net // 包含了非字母或数字, “$” “_” n@238 //包含了非字母或数字, “$” “_” • Verilog区分大小写,所有Verilog关键词使用小写字母 浙大微电子

  25. 书写规范建议 A、用有意义的名字如 Sum 、CPU_addr等。 B、用下划线区分词。 C、采用一些前缀或后缀,如时钟采用Clk 前缀:Clk_50,Clk_CPU;低电平采用_n 后缀:Enable_n; D、统一缩写, 如全局复位信号 Rst。 E、同一信号在不同层次保持一致性,如同一时钟信号必须在各模块保持一致。 F、自定义的标识符不能与保留字同名。 G、参数采用大写,如SIZE 浙大微电子

  26. 主要变量类型 Verilog主要有三类数据类型: net (线网) : 表示器件之间的物理连接 register (寄存器) :表示存储元件 parameters(参数) : 运行时的常数 浙大微电子

  27. net(线网) net需要被持续的驱动,驱动它的可以是门和模块。 当net驱动器的值发生变化时, 会自动将新值传送到net上。在例子中,线网out由or门驱动。当or门的输入信号变化时将传输到线网net上。 浙大微电子

  28. net类的类型 wire类型是最常用的类型,只有连接功能。 wire常用来表示用assign语句赋值的组合逻辑信号 取值为:0,1,x(不定值),z(高阻) wire和tri类型有相同的功能。用户可根据需要将线网定义为wire或tri以提高可读性。例如,可以用tri类型表示一个net有多个驱动源,或者指示这个net可以是高阻态 Z (hign-impedance)。 浙大微电子

  29. wire型变量的定义 语法: wire 数据1,数据2,……数据n; 例子: wire a,b,c//定义了三个wire型变量a,b,c wire[7:0] databus//定义了八位宽wire型向量数据总线 wire[20:1] addrbus //定义了20位宽wire型向量地址总线 浙大微电子

  30. 寄存器类 (register) • 寄存器类型在赋新值以前保持原值 • 用行为描述结构给寄存器类型赋值(在过程块中进行) • 寄存器类型大量应用于行为描述及激励描述 • reg_a、reg_b、reg_sel用于施加激励给2:1多路器 浙大微电子

  31. 寄存器类的类型 寄存器类有四种数据类型 浙大微电子

  32. Verilog中net和register声明语法 举例: reg a; //一个标量寄存器 reg [3: 0] v; // 从MSB到LSB的4位寄存器向量 reg [7: 0] m, n; // 两个8位寄存器 tri [15: 0] busa; // 16位三态总线 wire [0: 31] w1, w2; // 两个32位wire,MSB为bit0 浙大微电子

  33. 选择正确的数据类型 输入端口可以由net/register驱动,但输入端口只能是net 输出端口可以是net/register类型,输出端口只能驱动net A in1 Y O B in2 双向端口只能是net类型 浙大微电子

  34. 操作符类型 Verilog操作符。“与”操作符的优先级总是比相同类型的“或”操作符高 最高 优先级 最低 浙大微电子

  35. 相等操作符 注意逻辑等与 case等的差别 逻辑等 == a = 2'b1x; b = 2'b1x; if (a == b) $display(" a is equal to b"); else $display(" a is not equal to b"); 2‘b1x==2’b0x 值为0,因为不相等 2‘b1x==2’b1x 值为x,因为可能不相等,也可能相等 case等 === a = 2'b1x; b = 2'b1x; if (a === b) $display(" a is identical to b"); else $display(" a is not identical to b"); 2‘b1x===2’b0x 值为0,因为不相同 2‘b1x===2’b1x 值为1,因为相同 Case等只能用于行为描述,不能用于RTL描述。综合工具不支持 浙大微电子

  36. 级联操作符 module concatenation; reg [7: 0] rega, regb, regc, regd; reg [7: 0] new; initial begin rega = 8'b0000_0011; regb = 8'b0000_0100; regc = 8'b0001_1000; regd = 8'b1110_0000; end initial fork #10 new = {regc[ 4: 3], regd[ 7: 5], regb[ 2], rega[ 1: 0]}; // new = 8'b11111111 #20 $finish; join endmodule 级联 { } 可以从不同的矢量中选择位并用它们组成一个新的矢量。 用于位的重组和矢量构造 浙大微电子

  37. 编译预处理 • 1、Verilog HDL语言提供了十多条的编译指令,例如: • `define • `include • `timescale 2、说明 • 编译指令以`(反引号)开头。 • 编译指令结束不需要加分号。 • 编译指令对同一个文件中的所有模块有效。 • 在进行Verilog HDL语言编译时,已定义的编译指令一直有效,直至有其它编译指令修改它或取消它 浙大微电子

  38. `timescale 说明时间单位及精度 格式:`timescale <time_unit> / <time_precision> 如:`timescale 1 ns / 100 ps `timescale必须在模块之前出现 `timescale 1 ns / 10 ps // All time units are in multiples of 1 nanosecond module MUX2_1 (out, a, b, sel); output out; input a, b, sel; not #1 not1( sel_, sel); and #2 and1( a1, a, sel_); and #2 and2( b1, b, sel); or #1 or1( out, a1, b1); endmodule 浙大微电子

  39. Timescale • time_precision不能大于time_unit • precision的时间单位应尽量与设计的实际精度相同 • precision是仿真器的仿真时间步长 • 若time_unit与precision_unit差别很大将严重影响仿真速度 • `timescale 1s / 1ps,则仿真器在1秒内要扫描其事件序列1012次;而`timescale 1s/1ms则只需扫描103次。 • 如果没有timescale说明将使用缺省值,一般是ns 浙大微电子

  40. Verilog HDL语句模块的描述方法 结构型描述 系统级 行为描述级 算法级 寄存器级 数据流描述 混合型描述 浙大微电子

  41. 结构型描述 术语及定义 • 结构描述 : 用门来描述器件的功能,是通过实例进行描述的,将预定义的基本元件实例嵌入到语言中,监控实例的输入,一旦其中任何一个发生变化便运算并输出。 • primitives(基本单元) : Verilog语言已定义的具有基本逻辑功能的模型(models) 浙大微电子

  42. 结构描述 module rs_latch (y, yb, r, s); output y, yb; input r, s; nor n1( y, r, yb); nor n2( yb, s, y); endmodule 结构描述表示一个逻辑图 结构描述用已有的元件构造更为复杂的元件 浙大微电子

  43. Verilog基本单元(primitives) Verilog基本单元提供基本的逻辑功能,这些逻辑功能是预先定义的,用户不需要再定义这些基本功能 基本单元是Verilog 库的一部分,基本单元库是自下而上(Bottom Up)设计方法的一部分 浙大微电子

  44. 调用基本单元的句法: 可以只有一个输出 语法:门类型关键字 <例化的门名称>(端口列表) 其中端口列表为: 多输入门:(输出,输入1,输入2,……) 多输出门:(输出1,输出2,……输入) 三态门: (输出,输入,使能输入) 浙大微电子

  45. 带条件的基本单元 • Verilog有四种不同类型的条件基本单元 • 这四种基本单元只能有三种引脚:output, input, enable • 这些单元由enable引脚使能。 • 当使能信号无效时,输出高阻态。 浙大微电子

  46. 基本单元实例化 • 在端口列表中,先说明输出端口,然后是输入端口 • 实例化时实例的名字是可选项 and (out, in1, in2, in3, in4); // unnamed instance buf b1 (out1, out2, in); // named instance • 延时说明是可选项。所说明的延时是固有延时。输出信号经过该延时才变化。没有说明时延时为0。 notif0 #3.1 n1 (out, in, cntrl); // delay specified 浙大微电子

  47. 模块实例化(module instantiation) module comp (o1, o2, i1, i2); output o1, o2; input i1, i2; . . . endmodule module test; comp c1 (Q, R, J, K); // Positional mapping comp c2 (.i2(K), .o1(Q), .o2(R), .i1(J)); // Named mapping comp c3 (Q, , J, K); // One port left unconnected endmodule 名称映射的语法: .内部信号(外部信号) 没有连接时通常会产生警告 模块实例化时实例必须有一个名字。 使用位置映射时,端口次序与模块的说明相同。 使用名称映射时,端口次序与位置无关 没有连接的输入端口初始化值为x。 浙大微电子

  48. 行为描述 DFF 在每一个时钟上升沿, 若Clr不是低电平, 置Q为D值, 置Qb为D值的反 无论何时Clr变低 置Q为0, 置Qb为1 • 行为级描述是对系统的高抽象级描述。 • 在这个抽象级,注重的是整个系统的功能而不是实现。 • Verilog将高级编程语言结构用于行为描述,包括: wait, while, if then, case和forever 浙大微电子

  49. 过程(procedural)块 • 过程块是行为描述的基础 • 过程块有两种: • initial块,只能执行一次 • always块,循环执行 浙大微电子

  50. initial过程块 (3)说明: (1) initial 块语句模板: • 主要面向功能模拟,通常不具有可综合性。 • initial • begin • 语句1; • 语句2; • …… • end • 0时刻开始执行,只执行一次 • 同一模块内的多个initial过程块,0时刻开始并行执行 (2)例 initial begin #2 Stream = 1; #5 Stream = 0; #3 Stream = 1; #4 Stream = 0; #2 Stream = 1; #5 Stream = 0; end • initial过程块不能嵌套使用。 initial语句中的积累延时 浙大微电子

More Related