《VHDL电路设计》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:雷伏容编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2006
  • ISBN:7302142262
  • 页数:393 页
图书介绍:本书介绍VHDL硬件描述语言的语法规则及其实际应用。

第1章 概述 1

1.1 硬件描述语言介绍 1

1.2 VHDL语言的发展与特点 2

1.3 VHDL语言的开发流程 4

1.4 可编程逻辑器件简介 5

1.5 学习小结 7

1.6 思考与练习 7

第2章 数字逻辑基础 8

2.1 逻辑代数基础 8

2.1.1 逻辑变量和逻辑函数 8

2.1.2 基本逻辑运算 8

2.1.3 逻辑函数的表示方法 11

2.1.4 逻辑代数的定理和规则 12

2.2 组合逻辑电路 13

2.2.1 组合逻辑电路的分析 14

2.2.2 组合逻辑电路的综合 15

2.2.3 组合逻辑电路中的竞争与冒险 16

2.3 时序逻辑电路 18

2.3.1 触发器 18

2.3.2 时序逻辑电路的分析 22

2.3.3 时序逻辑电路的设计 26

2.4 学习小结 28

2.5 思考与练习 29

3.1 VHDL程序基本结构 31

例3-1:2选1多路选择器程序 31

第3章 VHDL程序结构与要素 31

3.1.1 实体 32

例3-3:n输入与非门的实体描述 33

例3-2:有类属说明的2输入与非门的实体描述 33

3.1.2 结构体 35

例3-4:半加器的完整VHDL描述 36

3.1.3 描述风格 36

例3-6:2选1多路选择器数据流描述程序 37

例3-5:2选1多路选择器行为描述程序 37

例3-7:2选1多路选择器结构描述程序 38

例3-8:半加器的混合描述程序 39

3.2.1 数值型文字 40

3.2 VHDL文字规则 40

3.2.2 标识符 42

3.3.1 VHDL数据对象 43

3.3 VHDL基本数据对象与数据类型 43

3.3.2 VHDL数据类型 47

例3-9:打开一个字符文件,读出文件中的内容并关闭文件 51

3.4 VHDL表达式与运算符 57

3.6 思考与练习 63

3.5 学习小结 63

4.1 顺序描述语句 64

第4章 VHDL基本描述语句 64

例4-2:WAIT FOR语句示例程序 65

例4-1:WAIT语句示例程序 65

4.1.1 WAIT语句 65

例4-3:WAIT ON语句示例程序(2选1选择器) 66

例4-4:WAIT ON语句和PROCESS语句中所使用的敏感信号列表的对比 67

例4-5:WAIT UNTIL语句示例程序 67

例4-6:多条件WAIT语句的示例程序 68

例4-7:信号代入语句示例程序 68

4.1.2 代入语句 68

例4-8:变量赋值语句示例程序 69

4.1.3 赋值语句 69

例4-9:变量赋值和信号量代入的对比示例程序 70

例4-10:采用单IF语句描述D触发器的示例程序 71

4.1.4 IF语句 71

例4-11:采用二选择IF语句描述2选1选择器的示例程序 72

例4-12:采用多选择IF语句描述4选1选择电路的示例程序 73

例4-13:采用IF语句嵌套结构的带复位端的4选1选择器的示例程序 74

4.1.5 CASE语句 75

例4-14:采用CASE语句来描述4选1选择器的示例程序 76

例4-15:采用CASE语句设计3-8译码器的示例程序 77

例4-16:采用FOR LOOP语句实现32位奇偶校验电路的示例程序 78

4.1.6 FOR LOOP语句 78

例4-17:WHILE LOOP语句格式的示例程序 79

4.1.7 WHILE LOOP语句 79

例4-18:采用WHILE LOOP语句实现32位奇偶校验电路的示例程序 80

4.1.8 NEXT语句 80

例4-19:采用外部信号控制的32位奇偶校验电路的示例程序 81

例4-20:NEXT语句嵌在两个循环中的示例程序 81

4.1.9 EXIT语句 82

例4-21:采用EXIT语句的示例程序 82

例4-22:采用RETURN语句的示例程序 83

4.1.10 RETURN语句 83

4.1.11 REPORT语句 83

例4-24:使用NULL语句的示例程序 84

例4-23:采用REPORT语句的示例程序 84

4.1.12 NULL语句 84

例4-25:采用ASSERT语句的示例程序 85

4.1.13 ASSERT语句 85

4.2 并行描述语句 86

4.2.1 并发信号代入语句(Concurrent Signal Assignment) 87

例4-27:采用条件信号代入语句描述3-8译码器的示例程序 89

例4-26:采用条件信号代入语句描述异或门的示例程序 89

例4-28:采用条件信号代入语句来描述4选1选择器的示例程序 90

例4-29:采用选择信号代入语句描述异或门的示例程序 91

例4-30:采用选择信号代入语句来描述4选1选择器的示例程序 91

4.2.2 进程语句(PROCESS) 92

例4-31:利用进程语句设计半加器的示例程序 93

例4-32:利用在一个构造体中有两个进程语句通信的示例程序 93

4.2.3 元件调用语句(COMPONENT) 94

例4-33:利用COMPONENT语句的2选1选择器的示例程序 95

4.2.4 端口映射语句(PORT MAP) 96

例4-34:利用GENERIC语句定义二输入或非门的上升沿和下降沿参数的示例程序 98

4.2.5 类属参数传递语句(GENERIC) 98

例4-35:利用GENERIC语句的示例程序 99

例4-36:利用BLOCK语句设计2选1选择器的示例程序 100

4.2.6 块语句(BLOCK) 100

例4-37:利用BLOCK语句和PROCESS语句嵌套设计半加器的示例程序 101

例4-38:利用BLOCK语句的CPU芯片设计的示例程序 102

例4-39:利用卫式BLOCK语句设计D触发器的示例程序 104

4.2.7 过程语句(PROCEDURE) 105

例4-40:利用PROCEDURE语句结构把位矢量转换成整数的示例程序 106

例4-41:在主程序中调用过程bitvector_to_integer的示例程序 107

4.2.8 函数(FUNCTION) 108

例4-42:利用FUNCTION语句结构把位矢量转换成整数的示例程序 109

例4-44:调用函数getmax()实现最大值检出的示例程序 110

例4-43:利用FUNCTION语句结构实现取最大值的示例程序 110

4.2.9 生成语句(GENERATE) 111

例4-45:用FOR-GENERATE语句设计4位移位寄存器的示例程序 112

例4-46:用一般的方法设计4位移位寄存器的示例程序 113

例4-47:利用IF-GENERATE语句设计n位移位寄存器的示例程序 114

4.2.10 延时语句 115

4.3.2 数值类属性描述语句 117

4.3.1 属性预定义 117

4.3 属性描述语句 117

例4-49:用DOWNTO来排列数据时,获取该数据的数值属性的示例程序 118

例4-48:获取数值型枚举类型的数值属性的示例程序 118

例4-50:利用数据的数值属性检测数据总线宽度的示例程序 119

例4-51:获取字符型枚举类型的数值属性的示例程序 120

例4-52:利用′LENGTH属性来获取数组的范围长度的示例程序 120

例4-53:利用′LENGTH属性来获取枚举类型的多维数组范围长度的示例程序 121

例4-54:说明块的数值属性′STRUCTURE和′BEHAVIOR的示例程序 123

4.3.3 函数类属性描述语句 124

例4-55:利用数据类型的属性函数解析欧姆定律的示例程序 125

例4-56:说明′SUCC、′PRED、′LEFTOF、′RIGHTOF属性使用方法的示例程序 127

例4-57:利用数组的属性函数的示例程序 128

例4-58:属性函数′EVENT和′LAST VALUE的使用方法的示例程序 129

例4-59:利用信号的属性函数′LAST EVENT检查建立时间的示例程序 131

4.3.4 信号类属性描述语句 132

例4-60:利用属性′DELAYED(time)描述三输入或门的示例程序 133

例4-61:利用信号类属性′DELAYED检查保持时间的示例程序 134

例4-62:利用属性′STABLE(time)的示例程序 136

例4-63:利用属性′QUIET(time)描述具有优先级的中断机制的示例程序 136

例4-64:利用属性′BASE的示例程序 139

4.3.5 数据类型类属性描述语句 139

例4-65:使用数据区间类属性描述语句——属性′RANGE和属性′REVERSE RANGE的示例程序 140

4.3.6 数据区间类属性描述语句 140

4.3.7 用户自定义属性语句 141

例4-66:使用用户自定义属性语句ATTRIBUTE的示例程序 142

4.4 学习小结 142

4.5 思考与练习 144

5.1 基本逻辑门电路 145

第5章 组合逻辑电路的VHDL语言描述 145

5.1.1 2输入与非门电路 145

例5-2:一般2输入与非门电路设计的示例程序2 146

例5-1:一般2输入与非门电路设计的示例程序1 146

例5-3:调用集电极开路的2输入与非门电路的示例程序 147

例5-5:2输入或非门电路设计的示例程序2 148

例5-4:2输入或非门电路设计的示例程序1 148

5.1.2 2输入或非门电路 148

例5-7:反相器电路设计的RTL描述方式的示例程序 149

例5-6:反相器电路设计的行为描述方式的示例程序 149

5.1.3 反相器电路 149

例5-8:2输入异或门电路设计的行为描述方式的示例程序 150

例5-9:2输入异或门电路设计的结构描述方式的示例程序 150

5.1.4 2输入异或门电路 150

5.1.5 2输入同或门电路 151

例5-10:2输入同或门电路设计的行为描述方式的示例程序 151

例5-11:2输入同或门电路设计的结构描述方式的示例程序 152

5.1.6 多输入门电路 152

例5-12:3输入或门电路设计的行为描述方式的示例程序 153

例5-13:3输入或门电路设计的结构描述方式的示例程序 153

例5-14:4输入与非门电路设计的行为描述方式的示例程序 154

例5-15:4输入与非门电路设计的结构描述方式的示例程序 154

5.2 选择器电路 155

5.2.1 2选1选择器 156

例5-16:采用IF-ELSE语句实现2选1选择器的示例程序 156

例5-17:采用CASE语句实现2选1选择器的示例程序 157

5.2.2 16选1选择器 157

例5-18:采用IF-ELSIF-ELSE语句实现16选1选择器的示例程序 158

5.3 编码器与译码器电路 159

5.3.1 编码器 159

例5-19:采用IF-ELSE语句实现BCD输出的10线-4线优先级编码器电路的示例程序 160

5.3.2 译码器 161

例5-20:4线-16线译码器电路的示例程序 162

例5-21:BCD码输入的4线-10线译码器电路的示例程序 164

5.4.1 三态门 165

5.4 三态门及总线缓冲器电路 165

例5-22:多种方法实现三态门电路的示例程序 166

5.4.2 总线缓冲器 167

例5-23:两种方法实现74244形式的单向总线缓冲器的示例程序 168

例5-24:实现74245形式的双向总线缓冲器电路的VHDL示例程序 169

5.5 加法器电路 170

例5-25:-半加器电路的VHDL示例程序 171

例5-26:直接根据真值表设计的全加器电路的VHDL示例程序 172

例5-28:采用行波进位的4位加法器电路的VHDL示例程序 173

例5-27:由两个半加器元件和一个或门构成的全加器电路的VHDL示例程序 173

例5-29:基于兆函数LPM_ADD_SUB模块生成的自定制加/减法电路的VHDL示例程序 176

例5-30:采用行为描述方法的16位求补器电路的示例程序 177

5.6 求补器电路 177

5.7 乘法器电路 178

例5-31:4位×4位原码移位的乘法器电路的示例程序 179

例5-32:基于兆函数LPM_MULT模块生成的自定制8位×8位无符号乘法器电路的VHDL示例程序 180

例5-33:4位输入数据的一般数值比较器的VHDL示例程序 182

5.8 数值比较器电路 182

例5-34:基于兆函数LPM_COMPARE模块生成的自定制8位与8位无符号数据比较器电路的VHDL示例程序 184

5.9 移位器电路 185

例5-35:对8位输入数据进行移位的VHDL示例程序 185

5.10 学习小结 186

5.11 思考与练习 187

6.1 时序电路的时钟信号 189

第6章 时序逻辑电路的VHDL语言描述 189

6.1.1 时钟边沿的描述 189

例6-1:显式表示时钟敏感信号(上升沿)的示例程序 191

6.1.2 时钟作为敏感信号 191

例6-2:隐式表示时钟敏感信号(下降沿)的示例程序 192

6.2 时序电路的复位信号 193

6.2.1 时序电路的同步复位方法 193

例6-3:VHDL程序中描述时序电路同步复位的示例程序 193

6.2.2 时序电路的异步复位方法 194

例6-4:VHDL程序中描述时序电路异步复位的示例程序 194

例6-5:单输入电平锁存器的VHDL模型的示例程序 195

6.3 锁存器电路 195

6.3.1 电平锁存器 195

例6-6:多输入电平锁存器的VHDL模型的示例程序 196

6.3.2 同步锁存器 196

6.3.3 异步锁存器 197

例6-8:异步锁存器的VHDL模型的示例程序 197

例6-7:同步锁存器的VHDL模型的示例程序 197

6.3.4 自定制锁存器 198

例6-9:基于兆函数LPM_LATCH模块生成的自定制的带有异步置位端和异步清零端的8位锁存器电路的VHDL示例程序 199

6.4.1 D触发器 200

6.4 触发器电路 200

例6-11:异步复位的D触发器的示例程序 201

例6-10:上升沿触发的D触发器的示例程序 201

例6-12:异步复位/置位的D触发器的示例程序 202

例6-13:同步复位的D触发器的示例程序 203

例6-14:基于兆函数LPM_DFF模块生成的自定制的带有异步置位端(aset)和异步清零端(aclr)的16位D触发器电路的VHDL示例程序 204

6.4.2 T触发器 205

例6-15:下降沿触发的T触发器的示例程序 206

例6-16:基于兆函数LPM_TFF模块生成的自定制的带有同步置位端(sset)、同步清零端(sclr)和同步加载端(sload)的24位T触发器电路的VHDL示例程序 208

6.4.3 JK触发器 208

例6-17:带有异步置位/复位端的上升沿触发的JK触发器的示例程序 210

6.5 寄存器电路 210

例6-18:用VHDL语言描述的10位通用寄存器的示例程序 211

6.5.1 10位通用寄存器 211

6.5.2 串入-串出移位寄存器 211

例6-19:用VHDL语言描述的8位串入-串出移位寄存器的示例程序 212

例6-20:直接采用信号代入的方法实现串入-串出移位寄存器的示例程序 213

6.5.3 串入-并出移位寄存器 214

例6-21:用VHDL语言描述的8位串入-并出移位寄存器的示例程序 215

6.5.4 循环移位寄存器 216

例6-22:用VHDL语言描述的8位循环左移位寄存器的示例程序 217

例6-23:调用包集合CYPAC中的循环左移过程的8位循环左移位寄存器示例程序 218

6.5.5 双向移位寄存器 220

6.5.6 串/并入-串出移位寄存器 221

例6-24:用VHDL语言描述的8位双向移位寄存器的示例程序 221

例6-25:用VHDL语言描述的8位串/并入-串出移位寄存器74166的示例程序 223

6.6.1 同步计数器 225

6.6 计数器电路 225

例6-26:用VHDL语言描述的带使能端的十二进制计数器的示例程序 226

例6-27:利用两个4位二进制计数器构成一个六十进制计数器的示例程序 227

例6-28:用VHDL语言描述的8位二进制加/减计数器的示例程序 229

6.6.2 异步计数器 230

例6-29:用VHDL语言描述的4位行波型异步计数器电路的示例程序 230

6.6.3 自定制计数器 231

例6-30:基于兆函数LPM_COUNTER模块生成的自定制的带有时钟使能端(ckk_en)、计数使能端(cnt_en)、异步置位端(aset)、异步加载端(aload)和异步清零端(aclr)的12位模30加/减(updown)计数器电路的VHDL示例程序 232

6.7 学习小结 234

6.8 思考与练习 235

7.1 有限状态机概述 236

第7章 有限状态机的VHDL语言描述 236

7.2 有限状态机的VHDL语言描述 237

例7-1:交通灯控制系统的VHDL有限状态机实现 240

例7-2:交通灯控制器采用单进程描述的有限状态机实现 243

7.3 Moore型状态机的设计 247

例7-3:步进电机控制器的有限状态机实现 248

7.4 Mealy型状态机的设计 250

例7-4:Mealy型有限状态机 250

7.5.1 符号化的状态编码 252

7.5.2 直接状态编码 252

7.5 有限状态机的状态编码 252

例7-5:顺序编码的有限状态机 253

例7-6:采用状态位直接输出编码的交通灯控制系统 255

例7-7:一位热码编码的有限状态机 257

7.6 非法状态的处理 258

7.7 学习小结 261

7.8 思考与练习 261

第8章 采用VHDL的数字系统设计 262

8.1 层次化结构设计 262

8.2 自顶向下的设计方法 263

8.3 库 265

8.4 程序包 267

8.5 配置 275

例8-1:全加器的设计 276

例8-2:采用元件配置说明方式实现的全加器的设计 277

8.6 系统设计实例 280

例8-3:64×8bit的ROM初始化(采用在程序包中直接定义的方法) 281

8.6.1 存储器设计 281

例8-5:64×8bit的ROM设计(采用在程序包中直接定义的方法) 282

例8-4:64×8bit的ROM初始化(采用读TEXTIO的方式) 282

例8-6:64×8bit的ROM设计(采用读TEXTIO的方式) 283

例8-7:32×4bit的RAM设计 284

例8-8:16×4bit的FIFO设计 285

8.6.2 4位微处理器设计 287

例8-9:ALU输入选择模块设计 290

例8-10:ALU算术逻辑运算模块设计 290

例8-11:存储器模块设计 292

例8-13:输出选择模块设计 293

例8-12:寄存器模块设计 293

例8-14:4位微处理器系统的顶层描述 294

8.8 思考与练习 296

8.7 学习小结 296

第9章 仿真、综合与优化 297

9.1 仿真 297

9.1.1 仿真输入信号的生成 298

例9-1:全加器仿真程序(采用程序直接生成全加器仿真输入信号) 299

例9-2:全加器仿真程序(利用TEXTIO文本文件的方式来生成仿真输入信号) 302

例9-3:全加器仿真程序(不采用观察仿真输出波形,而使用完整的测试平台程序) 304

9.1.2 仿真的δ延时 305

例9-4:仿真程序 305

9.2 综合 306

9.2.1 约束条件 307

9.2.2 工艺库 308

9.2.3 门级映射 309

9.3 设计优化 309

例9-5:加法器示例程序 310

9.3.1 模块复用 310

例9-6:采用了面积优化的加法器示例程序 311

9.3.2 流水线设计 313

9.4 设计实现 315

9.5 学习小结 317

9.6 思考与练习 317

第10章 在Quartus Ⅱ中进行电路设计 318

10.1 Quartus Ⅱ软件的安装 318

10.1.1 配置要求 318

10.1.2 安装步骤 319

10.1.3 授权方法 324

10.1.4 设计特点 326

10.2.1 图形用户界面设计流程 328

10.2 Quartus Ⅱ软件的设计流程 328

10.2.2 EDA工具设计流程 330

10.2.3 命令行可执行文件 331

10.2.4 Quartus Ⅱ软件的设计流程 332

10.2.5 常用窗口介绍 333

10.3 设计项目输入 334

10.3.1 创建工程项目文件 335

10.3.2 创建图形编辑文件 336

例10-1:由Quartus Ⅱ软件生成的电路模块testblock下层的VHDL语言文件testblock.vhd的示例程序 340

10.3.3 创建文本编辑文件 346

例10-2:由Quartus Ⅱ软件的文本编辑器的“插入模板”对话框生成的实体声明的示例程序(采用VHDL语言编写程序) 347

10.3.4 创建存储器编辑文件 348

10.3.5 创建波形编辑文件 350

10.4 设计项目编译与仿真 353

10.4.1 Quartus Ⅱ软件的编译器选项设置 353

10.4.2 编译设计项目 359

10.4.3 仿真设计项目 361

10.5 设计项目时序分析 364

10.5.1 时序分析的基本参数介绍 364

10.5.2 时序分析选项设置 364

10.5.3 进行时序分析 366

10.5.4 查看时序分析结果 367

10.6 设计项目的下载编程 367

10.6.1 器件编程介绍 368

10.6.2 进行器件编程 368

10.7 学习小结 370

10.8 思考与练习 370

附录A VHDL保留字 371

附录B 常用逻辑符号对照表 372

附录C 常用VHDL开发软件 372

附录D 习题答案 373

参考文献 393