1 / 130

可编程逻辑器件

可编程逻辑器件. 华东师范大学电子系 2004 级 ( 微电子选修). 主讲:金之诚 邮箱: zcjin@ee.ecnu.edu.cn 网站: http://jinzc.chiname.cn. 硬件描述语言. 一个例子 硬件描述语言简介 Verilog HDL Verilog HDL 设计举例. 一个例子 ---- 秒表. 一个例子 ---- 秒表. 圆形金属壳多功能 2 道秒表 全金属防水、防震、防滑结构 1/100 秒计时 时间、日历显示 12/24 小时显示模式 每日响闹 大型跳字显示屏. *. 一个例子 ---- 秒表.

Download Presentation

可编程逻辑器件

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. 可编程逻辑器件 华东师范大学电子系2004级 (微电子选修) 主讲:金之诚 邮箱:zcjin@ee.ecnu.edu.cn 网站:http://jinzc.chiname.cn

  2. 硬件描述语言 • 一个例子 • 硬件描述语言简介 • Verilog HDL • Verilog HDL 设计举例

  3. 一个例子----秒表

  4. 一个例子----秒表 • 圆形金属壳多功能2道秒表 • 全金属防水、防震、防滑结构 • 1/100秒计时 • 时间、日历显示 • 12/24小时显示模式 • 每日响闹 • 大型跳字显示屏 *

  5. 一个例子----秒表 • 功能 • 计时 • 时间 • 闹钟 • 外部特性 • 3个按键 • 6位数码显示

  6. 一个例子----秒表(续) • 内部电路 • 计数器(时基1/100) • BCD--〉七段码译码 • 显示扫描 • 实现方法 • 纯逻辑 • 微机(单片机) • PLD

  7. 硬件描述语言简介 • 什么是HDL? • 为什么要用HDL? • HDL的发展历史 • Verilog HDL与VHDL的比较

  8. 什么是HDL • 硬件设计人员与EDA工具之间的接口 • 用于多层次的数字系统建模 • 建立电子系统行为级的仿真模型,对复杂数字逻辑进行综合仿真 • 生成适合某工艺条件下的具体电路的延时模型 • 写入FPGA/CPLD,或制造ASIC

  9. 为什么要用HDL • 电子设计的规模越来越大,复杂度越来越高 • 市场的竞争越来越激烈 • 提高设计效率、降低设计成本 • 缩短开发周期,减少设计重复的次数 • HDL的易用性,功能的完善

  10. HDL的发展历史 • 1962年,Iverson公司提出HDL • 多种HDL • ABEL HDL、VHDL、Verilog HDL • 1987年,VHDL成为IEEE标准,是国际上第一个标准化的HDL,称为IEEE 1076 • 1993年升级、更新成为IEEE1164标准;1996年,IEEE1076.3成为VHDL的综合标准

  11. HDL的发展历史(续) • Verilog HDL于1983年由Gateway Design Automation公司开发 • 1989年,GDA公司被Cadence公司并构,1990年由Cadence公司发布Verilog HDL • 1995年Verilog HDL成为IEEE标准,成为IEEE std 1364-1995 • 2001年3月在原标准的基础上经过改进和补充,推出了Verilog IEEE1364-2001新标准

  12. Verilog HDL与VHDL的比较 • 推出的过程 • VHDL偏重于标准化的考虑,语法比较严格 • Verilog HDL在C语言基础上发展起来,语法比较自由 • 功能 • VHDL适用于电路高级建模 • Verilog HDL适用于描述门级电路,易于控制资源

  13. Verilog HDL与VHDL的比较(续) • 学习 • VHDL入门比较难,但设计效率较高 • Verilog HDL入门比较容易 • 工作量 • VHDL综合器完成的工作量大,设计者的工作相对较少 • Verilog HDL需要设计者搞清除具体电路结构,工作量较大

  14. 学习HDL的注意事项 • 用硬件电路的设计思想来编写HDL • 充分理解HDL语句与硬件电路的关系 • 编写HDL就是描述一个电路 • 了解HDL的可综合性 • HDL有两种实现:系统仿真、硬件实现 • 要硬件实现,就必须保证程序“可综合” • 所有的HDL描述都可以用于仿真,但不是所有的HDL描述都能用来硬件实现

  15. Verilog HDL • Verilog HDL 入门 • Verilog HDL的建模 • Verilog HDL的综合 • Verilog HDL仿真和时序 • 设计实例

  16. Verilog HDL 入门 • Verilog HDL 语言要素 • 数据类型 • 表达式

  17. Verilog HDL 语言要素 • 标识符 • 字母、数字、$、_、 • 第一个字符为字母或_ • 区分大小写 • 转义标识符用“\”开头 • Verilog HDL定义了一系列保留字(小写) Count COUNT _R1_D2 R56_68 FIVE$ 56R_X BUF-ABC Five_<6>

  18. Verilog HDL 语言要素(续) • 注释 • 本行注释 • // 注释语句 • 多行注释 • /*注释语句*/ • 格式 • 自由格式,可以跨行编写,也可以一行多语句 module fa_1(A,B,Cin,Sum,Cout); input A,B,Cin; output Sum,Cout; wire S1,T1,T2,T3; module fa_1(A,B,Cin,Sum,Cout); input A,B,Cin; output Sum,Cout; wire S1,T1,T2,T3;

  19. Verilog HDL 语言要素(续) • 系统任务和函数 • 以$字符开始的标识符表示系统任务或系统函数 • $display 显示 • $time 返回当前的模拟时间 • 编译指令 • 以`(反引号)开始的标识符是编译命令 • `timescale 定义时延单位和精度

  20. 数据类型 • 物理数据类型 • 连线型(wire)、寄存器型(reg) • 抽象数据类型 • 整型、时间型、实型、参数型 integer count; integer k[1:64]; time start,stop; real stime; Parameter c=25,f=9; Integer,real,time都归为寄存器型

  21. 数据类型(续) • 数据取值 • Verilog HDL有下列四种基本取值 • 0 逻辑0(假) • 1 逻辑1(真) • x 未知 • z 高阻 • x和z不分大小写 • 在有些场合z的值通常解释成x

  22. 连线型(wire) • 连线型数据对应的是硬件电路中各种可能的物理信号连线,没有电荷保持作用(trireg除外)。 • 连线型数据必须有驱动源的驱动 • 连接到门或模块的输出 • 用assign语句赋值 • 没有驱动源驱动,将保持高阻态

  23. 连线型(wire) • Verilog HDL提供了多种连线型数据 • wire,tri 连线、三态线 • wor,trior 线或、三态线或 • wand,triand 线与、三态线与 • trireg 具有电荷保持特性 • tri1,tri0 上拉(下拉)电阻 • supply1,supply0 电源线 逻辑0(逻辑1)

  24. 连线型(wire) • wire,tri • 如果有多个驱动源驱动一个连线(三态线),则连线型的有效值由表决定

  25. 连线型(wire) • wor,trior • 如果有多个驱动源驱动一个连线(三态线),则连线型的有效值由表决定

  26. 连线型(wire) • wand,triand • 如果有多个驱动源驱动一个连线(三态线),则连线型的有效值由表决定

  27. 连线型(wire) • trireg • 存储数值,用于电容节点的建模 • tri1,tri0 • 用于线逻辑的建模 • 无驱动时tri1(tri0)为1(0) • supply1,supply0 • 用于电源(地)的建模

  28. 连线型(wire) • 未说明的连线型 • 缺省连线类型为1位连线 • 向量和标量连线 • 用vectored表示向量连线 • 用scalared表示标量连线 • 向量连线只能整体赋值 • 缺省为标量 wire vectored [3:1] a; wire scalared [3:1] b; (wire [3:1] b;)

  29. 连线型(wire) wire a1; //连线型数据 a1 tri [3:0] b; //4位三态总线 trireg store_a; //具有电荷存储的连线 Tri1 [15:0] data_bus; //16位具有上拉电阻的三态总线 wor b1; //具有线或的连线

  30. 寄存器型(reg) • 寄存器型数据对应具有状态保持作用的硬件电路元件 • 触发器、锁存器 • 若寄存器未初始化,为x状态 • 缺省值为1(位)

  31. 寄存器型(reg) • 寄存器型数据有5种 • reg 寄存器 • interger 整数 • time 时间寄存器 • real 实数寄存器 • realtime 实数时间寄存器

  32. 寄存器型(reg) • reg • 最常见的数据类型 • 存储器 • 寄存器数组 reg cnt; //1位寄存器 reg [3:0] v; //4位寄存器 reg [0:3] mymem [0:63]; //64个4位寄存器的数组 reg bog [1:5]; //5个1位寄存器的数组

  33. 寄存器型(reg) Reg a; //寄存器 reg [0:3] a1; //4位寄存器 Reg [0:3]mymem [0:63]; //64个4位寄存器的数组 reg bog [1:5]; //5个1位寄存器的数组 reg [1:5] bog; //5位寄存器

  34. 数据类型(续) • 寄存器型数据与连线型数据的区别: • 寄存器型数据保持最后一次的赋值 • 连线型数据需要持续的驱动

  35. 表达式 • 表达式是由操作数和操作运算符组成 • 可以在出现数据的任何地方使用

  36. 操作数 • 可以有参数、连线、寄存器(整型、时间型、实型)、位选择等 • 也可以有常量、变量和函数 • Verilog HDL中有三类常量: • 整型 • 实数型 • 字符串型

  37. 操作数(续) 695 //简单的十进制数格式 ‘h 87fe //缺省位宽的16进制 ‘o746 //缺省位宽的8进制 4’b1001 //4位宽度的二进制数 5’d3 //5位宽度的十进制数 12’hx //12位宽度的未知数 16’hz //16位宽度的高阻态 16’b0001_1010_1111_1000 //提高可读性 4af b001 8’b_0001_1010 4’d-4 4’haf ‘b001 8’b0001_1010 -4’d4

  38. 运算符 • Verilog HDL定义了九类运算符 • 算术运算符 • 逻辑运算符 • 关系运算符 • 相等运算符 • 按位运算符 • 规约运算符 • 移位运算符 • 条件运算符 • 连接运算符

  39. 算术运算符 • 加(+) • 减(-) • 乘(*) • 除(/) • 取模(%) module arith_test; reg [3:0] a,b; initial begin a=4’b1100; //12 b=4’b0011; //3 $display(a*b); //4’b0100 $display(a/b); //4 $display(a+b); //15 $display(a-b); //9 $display((a+1b’1)%b); //1 end endmodule

  40. 算术运算符(续) • 如果算术操作符中的任意操作数是x或z,那么整个结果为x • ‘b10x1+’b01111的结果为’bxxxxx • Verilog HDL规定:表达式中的所有中间结果应取最大的操作数长度 • 无符号数和带符号数 • 连线、一般寄存器存储无符号数 • 整数寄存器、十进制形式的整数存储带符号数

  41. 算术运算符(续) reg [0:5] bar; integer tab; …. bar =-4’d12; Tab =-4’d12; …. bar =-4’d12/4; Tab =-4’d12/4; …. bar =4-6; Tab =4-6;

  42. 逻辑运算符 • 与(&&) • 或(||) • 非(!) • 必须把操作数当作一个整体 module logical_test; reg [3:0] a,b,c; initial begin a=2;b=0;c=4’hx $display(a&&b); //0 $display(a||b); //1 $display(!a); //0 $display(a||b); //1 $display(!c); //x end endmodule

  43. 关系运算符 • 小于(<) • 大于(>) • 小于等于(<=) • 大于等于(>=) module relat_test; reg [3:0] a,b,c,d; initial begin a=2;b=5;c=2;d=4’hx $display(a<b); //1 $display(a>b); //0 $display(a>=c); //1 $display(d<=a); //x end endmodule

  44. 相等关系运算符 module equ_test; reg [3:0] a,b,c,d,e,f; initial begin a=4;b=7; c=4’b010; d=4’hx10; e=4’bx101; f=4’bxx01; $display(c); //0010 $display(d); //xx10 $display(a==b); //0 $display(c!=d); //x $display(c!=f); //1 $display(d===e); //0 $display(c!==d); //1 end endmodule • 相等(==) • 不等(!=) • 全等(===) • 不全等(!==)

  45. 按位运算符 • 与(&) • 或(|) • 非(~) • 异或(^) • 异或非(^~,~^) module bit_test; reg [3:0] a,b,c; initial begin a=4’b1100; b=4’b0011; c=4’b0101; $displayb(~a); //4’b0011 $displayb(a&c); //4’b0100 $displayb(a|b); //4’b1111 $displayb(b^c); //4’b0110 $displayb(a~^c); //4’b0110 end endmodule

  46. 归约运算符 • 与(&) • 或(|) • 与非(~&) • 或非(~|) • 异或(^) • 异或非(^~,~^) module reduct_test; reg [3:0] a,b,c; initial begin a=4’b1111; b=4’b0101; c=4’b0011; $displayb(&a); //1 $displayb(|b); //1 $displayb(^b); //0 end endmodule

  47. 移位运算符 • 左移(<<) • 右移(>>) module shift_test; reg [3:0] a; initial begin a=4’b1010; $displayb(a<<1); //4’b0100 $displayb(a>>2); //4’b0010 end endmodule

  48. 条件运算符 • 操作数1 ?操作数2:操作数3 • 操作数1的值为逻辑值 • =1,返回操作数2 • =0,返回操作数3 • 操作数1的值为x或z,则操作数2和操作数3如表所示,按位比较

  49. 连接和复制操作 module concat_test; reg a; reg [1:0] b; reg [5:0] c; initial begin a=1’b1; b=2’b00; c=6’b101001; $displayb({a,b}); //3’b100 $displayb({c[5:3],a); //4’b1011 end endmodule • Verilog HDL中用{ }实现多个表达式的连接,表达式之间用逗号(,)分隔

  50. 连接和复制操作(续) module concat_test; reg a; reg [1:0] b; reg [5:0] c; initial begin a=1’b1; b=2’b00; $displayb({4{a}}); //4’b1111 c={4{a}}; $displayb(c); //6’b001111 end endmodule • Verilog HDL还有复制运算符{{}},将第一个表达式放入双重括号中,将复制因子放在第一层括号中,用来指定复制的次数

More Related