主要内容
●通过大量的实例对比和详细介绍了如何形成良好的VHDL编程风格;
●以VHDL语言为载体,详细介绍了功能仿真软件 ModelSim、综合软件 Synplify、时序仿真软件 MaxplusII;
●内容深入浅出,覆盖面广,实例切合实际,演示说明有关应用程序的设计过程,图文并茂,使读者能够快速掌握设计要领;
●通过介绍主流的编程思想及方法,培养读者的代码编写能力及良好的设计风格;
●详细介绍了测试平台的建立方式;
封面图
目录
- 第1章 VHDL设计概念1
- 1.1 数字电路设计简介1
- 1.2 ASIC和FPGA组件比较2
- 1.2.1 ASIC2
- 1.2.2 FPGA4
- 1.3 FPGA和ASIC设计流程简介5
- 1.4 数字电路设计所需考虑的因素7
- 第2章 EDA软件介绍10
- 2.1 功能仿真软件ModelSim10
- 2.1.1 ModelSim简介10
- 2.1.2 建立一个新的项目11
- 2.1.3 基本VHDL仿真14
- 2.1.4 除错16
- 2.1.5 Finding names and values19
- 2.1.6 使用Wave窗口20
- 2.1.7 性能分析器仿真22
- 2.1.8Code Coverage仿真25
- 2.1.9 ModelSim 常用指令集28
- 2.2 综合工具Synplify30
- 2.2.1 Synplify简介30
- 2.2.2 Synplify的特色31
- 2.2.3 Synplify FPGA设计流程32
- 2.2.4 安装事项32
- 2.2.5 Synplify用户接口33
- 2.2.6 设定源文件33
- 2.2.7 检查源文件35
- 2.2.8 RTL View35
- 2.2.9 Synplify Altera Flow37
- 2.3 Altera MaxplusII EDA Tool42
- 2.3.1 Maxplus Ⅱ版本介绍及安装方式43
- 2.3.2 设计输入53
- 2.3.3 功能仿真57
- 2.3.4 平面布局64
- 2.4 结论70
- 第3章 初探HDL语言71
- 3.1 HDL的好处71
- 3.2 VHDL和Verilog的比较71
- 3.3 如何选择电路的结构72
- 3.4 HDL程序的组成73
- 3.5HDL程序结构77
- 第4章 基本VHDL要素79
- 4.1 标识符79
- 4.2 数据对象80
- 4.3 数据类型82
- 4.3.1 标量数据类型82
- 4.3.2 复合数据类型84
- 4.3.3 数组数据类型84
- 4.3.4 记录数据类型85
- 4.4 运算操作符85
- 第5章 VHDL行为模型91
- 5.1 简介91
- 5.2 实体声明91
- 5.3 结构体92
- 5.4 进程语句93
- 5.5 变量赋值语句94
- 5.6 信号赋值语句95
- 5.7 Wait 语句95
- 5.8if语句97
- 5.9 Case 语句100
- 5.10 Null 语句104
- 5.11 Loop语句104
- 5.12 Exit 语句109
- 5.13 Next 语句109
- 5.14 Assertion 语句110
- 5.15 Report 语句111
- 5.16 信号赋值语句进阶探讨112
- 5.16.1 惯性延迟模型112
- 5.16.2 传输延迟模型113
- 5.17 建立信号波形113
- 5.18 多进程114
- 第6章 数据流模型117
- 6.1 简介117
- 6.2 并发性信号赋值语句117
- 6.3 并发性与顺序性信号赋值118
- 6.4 探讨Delta delay119
- 6.5 条件信号赋值语句121
- 6.6 选择信号赋值语句122
- 6.7 Unaffected值123
- 6.8 块语句124
- 第7章 结构化模型127
- 7.1 简介127
- 7.2 简单的范例127
- 7.3 元件声明128
- 7.4 元件实例化130
- 7.5 层次式结构131
- 7.6 其他范例134
- 第8章 VHDL中的属性和配置142
- 8.1 简介142
- 8.2 数值属性142
- 8.2.1 数值类型属性143
- 8.2.2 数值数组属性143
- 8.2.3 数值块属性144
- 8.3 函数属性144
- 8.3.1 函数类型属性144
- 8.3.2 函数数组属性145
- 8.3.3 函数信号属性147
- 8.4 类型属性148
- 8.5 范围属性148
- 8.6 信号属性149
- 第9章 层次式模块化设计151
- 9.1 简介151
- 9.2 类属和配置151
- 9.2.1 类属151
- 9.2.2 配置153
- 9.3 生成语句162
- 第10章 子程序及包167
- 10.1 简介167
- 10.2 子程序167
- 10.2.1 函数167
- 10.2.2 过程170
- 10.3 运算符重载171
- 10.4 包175
- 10.4.1 包声明175
- 10.4.2 包主体177
- 第11章 组合逻辑电路设计180
- 11.1 简介180
- 11.2 多选器设计180
- 11.3 编码器设计183
- 11.4 优先级编码器设计187
- 11.5 译码器设计189
- 11.6 含有使能的译码器设计192
- 11.7 四位地址译码器设计194
- 11.8 使用Generic N to M 位的二进制译码器197
- 11.9 比较运算符200
- 11.10 算术逻辑单元设计202
- 第12章 时序逻辑电路设计205
- 12.1 简介205
- 12.2 D型触发器205
- 12.3 触发器应用电路212
- 12.3.1 延迟电路212
- 12.3.2 微分器电路设计214
- 12.4 计数器设计216
- 12.5 同步计数器电路设计220
- 12.6分频电路设计220
- 第13章 状态机设计227
- 13.1 状态机简介227
- 13.2 Moore 状态机227
- 13.3 Melay 状态机231
- 第14章 测试平台234
- 14.1 简介234
- 14.2 如何写测试平台234
- 14.3 波形产生器235
- 14.3.1 重复性和非重复的测试样本235
- 14.3.2 使用向量的方式238
- 14.4 整数转换成time数据类型240
- 14.5 将结果保存为文本文件240
- 14.6 从文本文件中读取向量242
- 第15章 RTL Coding Guideline245
- 15.1 简介245
- 15.2 初探Coding Guideline245
- 15.3 基本的代码注意事项245
- 15.3.1 一般的命名方式245
- 15.3.2 结构名称命名规则246
- 15.3.3 标题文件的注意事项246
- 15.3.4 注释247
- 15.3.5 一行的长度248
- 15.3.6 缩进248
- 15.3.7 Port的顺序248
- 15.3.8 端口映射和类属映射249
- 15.3.9 实体、结构和配置250
- 15.3.10 使用函数250
- 15.3.11 使用Loops和Arrays250
- 15.3.12 使用有意义的标记名称251
- 15.4 可移植性252
- 15.4.1 使用IEEE 标准类型252
- 15.4.2 不要使用实际的数值252
- 15.4.3 包253
- 15.4.4 转换(VHDL至Verilog)253
- 15.5 有关Clock和Reset的准则253
- 15.5.1 避免使用混合频率触发253
- 15.5.2 避免对频率信号做处理254
- 15.5.3 避免内部产生频率信号254
- 15.5.4 门时钟和低功率设计255
- 15.5.5 避免内部产生Reset信号255
- 15.6 Coding for Synthesis256
- 15.6.1 触发器的写法256
- 15.6.2 避免锁存器257
- 15.6.3 避免使用组合逻辑的反馈262
- 15.6.4 完整的敏感表262
- 15.6.5 信号和变量赋值264
- 15.6.6 Case语句与if-then-else 语句264
- 15.6.7 状态机的编程风格265
- 15.6.8 Partitioning for Synthesis267
- 第16章 高级设计范例269
- 16.1数字闹铃电路设计269
- 16.2 最大公因子电路设计及验证278
- 16.2.1 设计要求278
- 16.2.2 设计概念278
- 16.2.3 测试平台的设计285