【资料分享】Verilog编程艺术.pdf

7deea842ea57fe2fb0870859fcd464bc.png

d394bc67b888a7033da912e90aa0ca94.png

本书深入地探讨了Verilog编程,分为七个部分:设计原则、语言特性、书写文档、高级设计、时钟和复位、验证之路、其他介绍。本书对这些部分做了重点的探讨:Verilog编码风格、Verilog-2001的新特性、简洁高效的编程、容易出错的语言元素、可配置设计、时钟生成、复位设计、验证方法等。另外,本书还对SystemVerilog做了简单的介绍。

目录

目 录
第一部分 设 计 原 则
第1章 美的设计 2
1.1 美学观点 2
1.2 美是修养 3
1.3 专业术语 4
第2章 高效之道 5
2.1 敏捷开发 5
2.2 代码质量 6
2.3 版本控制 7
2.4 提早集成 7
第3章 组织管理 9
3.1 植物分类 9
3.2 SoC特性 11
3.3 设计流程 12
3.4 仔细规划 12
3.5 管理表格 13
3.6 模块层次 14
3.7 目录组织 14
第4章 使用工具 19
4.1 使用Emacs 19
4.1.1 Emacs介绍 19
4.1.2 Emacs安装 19
4.1.3 常用快捷键 20
4.1.4 我的.emacs 21
4.1.5 cua-base.el 22
4.1.6 verilog-mode.el 23
4.1.7 shell buffer 23
4.2 使用Shell 24
4.2.1 Shell介绍 24
4.2.2 Shell例子 24
4.2.3 Perl例子 25
4.3 使用CVS 26
4.3.1 CVS介绍 26
4.3.2 CVS术语 27
4.3.3 CVS初始化 27
4.3.4 CVS常用命令 29
第5章 编码风格 31
5.1 干干净净 32
5.2 代码划分 32
5.3 代码要求 33
5.3.1 Verilog部分 33
5.3.2 SystemVerilog部分 40
5.4 名字定义 40
5.5 书写格式 42
5.5.1 模块端口声名 42
5.5.2 模块实例化 45
5.5.3 函数和任务调用 47
5.5.4 书写语句 47
5.5.5 书写表达式 48
5.6 添加注释 49
5.7 参数化 50
5.8 lint检查 52
第二部分 语 言 特 性
第6章 Verilog特性 54
6.1 Verilog标准 54
6.2 抽象级别 54
6.3 可综合子集 55
6.4 保持一致 57
第7章 常数 58
7.1 整数(integer) 58
7.2 实数(real) 60
7.3 字符串(string) 60
7.4 标识符(identifier) 60
第8章 数据类型 61
8.1 线网(net) 61
8.1.1 wire和tri 61
8.1.2 wor、wand、trior、triand 61
8.1.3 tri0、tri1 61
8.1.4 uwire 61
8.1.5 supply0、supply1 62
8.1.6 驱动强度 62
8.1.7 默认net 62
8.2 变量(variable) 62
8.3 线网和变量的区别 63
8.4 向量(vector) 64
8.5 数组(array) 65
8.6 多维数组 65
第9章 表达式 67
9.1 操作符(Operator) 67
9.1.1 操作符的优先级(Operator priority) 68
9.1.2 表达式中使用整数 68
9.1.3 算数操作符(Arithmetic operators) 69
9.1.4 算术表达式中的regs和integers 69
9.1.5 比较操作符(Compare operators) 70
9.1.6 逻辑操作符(Logical operators) 70
9.1.7 位运算操作符(Bitwise operators) 71
9.1.8 归约操作符(Reduction operators) 71
9.1.9 移位操作符(Shift operators) 71
9.1.10 条件操作符(Conditional operator) 72
9.1.11 连接操作符(Concatenations) 72
9.2 操作数(Operands) 73
9.2.1 向量的抽取(bit-select and part-select) 73
9.2.2 part-select的例子 75
9.2.3 数组的访问 75
9.2.4 字符串 76
9.3 表达式位长(Expression bit lengths) 77
9.3.1 表达式位长规则 77
9.3.2 表达式位长问题的例子A 78
9.3.3 表达式位长问题的例子B 79
9.3.4 表达式位长问题的例子C 79
9.3.5 表达式位长问题的例子D 79
9.3.6 表达式位长问题的例子E 80
9.4 符号表达式(Signed expressions) 80
9.4.1 表达式类型规则 81
9.4.2 计算表达式的步骤 81
9.4.3 执行赋值的步骤 82
9.4.4 signed表达式中处理x和z 82
9.4.5 signed应用的例子 82
9.4.6 signed应用的错误 83
9.5 赋值和截断(Assignments and truncation) 84
9.6 与x/z比较 85
第10章 赋值操作 86
10.1 连续赋值 86
10.2 过程赋值 87
第11章 门级和开关级模型 88
11.1 门和开关的声明语法 88
11.1.1 门和开关类型 88
11.1.2 驱动强度 88
11.1.3 延迟 89
11.1.4 实例数组 89
11.2 and、nand、nor、or、xor、xnor 90
11.3 buf、not 90
11.4 bufif1、bufif0、notif1、notif0 90
11.5 MOS switches 90
11.6 Bidirectional pass switches 91
11.7 pullup、pulldown 91
第12章 用户定义原语 92
12.1 UDP定义 92
12.1.1 UDP状态表 92
12.1.2 状态表符号 93
12.2 组合UDP 93
12.3 电平敏感时序UDP 93
12.4 沿敏感时序UDP 94
第13章 行为模型 97
13.1 概览 97
13.2 过程赋值 98
13.2.1 阻塞赋值 98
13.2.2 非阻塞赋值 99
13.3 过程连续赋值 102
13.3.1 assign和deassign过程语句 103
13.3.2 force和release过程语句 103
13.4 条件语句 104
13.5 循环语句 105
13.5.1 for循环例子 106
13.5.2 disable语句 107
13.6 过程时序控制 108
13.6.1 延迟控制(Delay control) 108
13.6.2 事件控制(Event control) 108
13.6.3 命名事件(Named events) 109
13.6.4 事件or操作符(Event or operator) 109
13.6.5 隐含事件列表(Implicit event_expression list) 109
13.6.6 电平敏感事件控制(Level-sensitive event control) 111
13.6.7 赋值间时序控制(Intra-assignment timing controls) 111
13.7 块语句 113
13.7.1 顺序块(Sequential block) 113
13.7.2 并行块(Parallel block) 114
13.7.3 块名字(Block names) 114
13.7.4 开始和结束时间(Start and finish times) 114
13.8 结构化过程 116
13.8.1 initial construct 116
13.8.2 always construct 116
13.8.3 always的敏感列表 117
13.8.4 并发进程 117
13.9 always有关的问题 118
13.9.1 敏感列表不完整 118
13.9.2 赋值顺序错误 119
第14章 case语句 120
14.1 case语句定义 121
14.2 case语句的执行 122
14.3 Verilog和VHDL对比 123
14.4 case的应用 123
14.5 casez的应用 125
14.6 描述状态机 126
14.7 casex的误用 127
14.8 casez的误用 128
14.9 full_case 和parallel_case 128
14.10 full_case 129
14.10.1 不是full的case语句 129
14.10.2 是full的case语句 129
14.10.3 使用full_case综合指令 130
14.10.4 full_case综合指令的缺点 131
14.10.5 使用full_case指令后还是生成Latch 132
14.11 parallel_case 132
14.11.1 不是parallel的case语句 132
14.11.2 是parallel的case语句 133
14.11.3 使用parallel_case综合指令 133
14.11.4 parallel_case综合指令的缺点 134
14.11.5 没有必要的parallel_case指令 135
14.12 综合时的警告 135
14.13 case语句的编码原则 136
第15章 task和function 137
15.1 task和function之间的不同点 137
15.2 task的声明和使能 137
15.2.1 task的声明 137
15.2.2 task的使能和参数传递 138
15.2.3 task的内存使用和并发进程 140
15.3 disable语句 141
15.3.1 disable语句的例子A 141
15.3.2 disable语句的例子B 143
15.4 function的声明和调用 145
15.4.1 function的声明 145
15.4.2 function的返回值 147
15.4.3 function的调用 147
15.4.4 function的规则 147
15.4.5 constant function 148
15.5 task的误用 149
15.6 function的误用 149
第16章 调度和赋值 151
16.1 仿真过程 151
16.2 事件仿真 151
16.3 仿真参考模型 152
16.4 分层事件队列 153
16.4.1 事件队列分类 154
16.4.2 事件队列特性 155
16.4.3 事件调度例子 155
16.5 确定性和不确定性 157
16.5.1 确定性(Determinism) 157
16.5.2 不确定性(Nondeterminism) 157
16.6 赋值的调度含义 158
16.6.1 连续赋值 159
16.6.2 过程连续赋值 159
16.6.3 阻塞赋值 159
16.6.4 非阻塞赋值 159
16.6.5 开关处理 159
16.6.6 端口连接 159
16.6.7 任务和函数 160
16.7 阻塞赋值和非阻塞赋值 160
16.7.1 阻塞赋值 160
16.7.2 非阻塞赋值 161
16.8 赋值使用原则 161
16.9 自己触发自己 162
16.10 仿真零延迟RTL模型 163
16.11 惯性延迟和传输延迟 165
16.11.1 门级仿真中的传输延迟 166
16.11.2 各种#delay的位置 168
16.11.3 仿真时钟生成方法 169
16.12 延迟线模型 170
16.13 使用#1延迟 171
16.14 多个公共时钟和竞争条件 172
16.15 避免混杂阻塞赋值和非阻塞赋值 173
16.16 RTL和门级混合仿真 176
16.16.1 RTL-to-Gates仿真 177
16.16.2 Gates-to-RTL仿真 177
16.16.3 有时钟偏差的门级时钟树 178
16.16.4 有时钟偏差的Vendor模型 178
16.16.5 错误的Vendor模型 179
16.16.6 结论和建议 183
16.17 带有SDF延迟的门级仿真 183
16.17.1 全系统仿真 183
16.17.2 软件要花钱 184
16.17.3 门级回归仿真 184
16.18 验证平台技巧 185
16.18.1 在0时刻复位 186
16.18.2 时钟沿之后复位 186
16.18.3 创建仿真时钟 186
16.18.4 在无效沿输入激励 187
第17章 层次结构 188
17.1 模块 188
17.1.1 模块定义 188
17.1.2 模块实例 188
17.2 参数 188
17.2.1 参数声明 189
17.2.2 参数调整 189
17.2.3 参数传递 190
17.2.4 参数依赖 192
17.2.5 内部参数 193
17.2.6 clog2 193
17.2.7 指数** 194
17.3 端口 194
17.3.1 端口声明 194
17.3.2 端口连接 195
17.3.3 实数传递 196
17.4 Generate语句 196
17.4.1 Loop generate construct 197
17.4.2 Conditional generate construct 200
17.5 实例数组 201
17.6 层次名字 203

获取途径:

公众号:Hack电子

后台回复:

Verilog编程艺术

即可获得

切勿用作商务用途,产生的经济纠纷与本公众号无关~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
目 录 译者序 前言 第1章 简介 1 1.1 什么是Verilog HDL? 1 1.2 历史 1 1.3 主要能力 1 第2章 HDL指南 4 2.1 模块 4 2.2 时延 5 2.3 数据流描述方式 5 2.4 行为描述方式 6 2.5 结构化描述形式 8 2.6 混合设计描述方式 9 2.7 设计模拟 10 第3章 Verilog语言要素 14 3.1 标识符 14 3.2 注释 14 3.3 格式 14 3.4 系统任务和函数 15 3.5 编译指令 15 3.5.1 `define和`undef 15 3.5.2 `ifdef、`else 和`endif 16 3.5.3 `default_nettype 16 3.5.4 `include 16 3.5.5 `resetall 16 3.5.6 `timescale 16 3.5.7 `unconnected_drive和 `nounconnected_drive 18 3.5.8 `celldefine 和 `endcelldefine 18 3.6 值集合 18 3.6.1 整型数 18 3.6.2 实数 19 3.6.3 字符串 20 3.7 数据类型 20 3.7.1 线网类型 20 3.7.2 未说明的线网 23 3.7.3 向量和标量线网 23 3.7.4 寄存器类型 23 3.8 参数 26 第4章 表达式 28 4.1 操作数 28 4.1.1 常数 28 4.1.2 参数 29 4.1.3 线网 29 4.1.4 寄存器 29 4.1.5 位选择 29 4.1.6 部分选择 29 4.1.7 存储器单元 30 4.1.8 函数调用 30 4.2 操作符 30 4.2.1 算术操作符 31 4.2.2 关系操作符 33 4.2.3 相等关系操作符 33 4.2.4 逻辑操作符 34 4.2.5 按位操作符 35 4.2.6 归约操作符 36 4.2.7 移位操作符 36 4.2.8 条件操作符 37 4.2.9 连接和复制操作 37 4.3 表达式种类 38 第5章 门电平模型化 39 5.1 内置基本门 39 5.2 多输入门 39 5.3 多输出门 41 5.4 三态门 41 5.5 上拉、下拉电阻 42 5.6 MOS开关 42 5.7 双向开关 44 5.8 门时延 44 5.9 实例数组 45 5.10 隐式线网 45 5.11 简单示例 46 5.12 2-4解码器举例 46 5.13 主从触发器举例 47 5.14 奇偶电路 47 第6章 用户定义的原语 49 6.1 UDP的定义 49 6.2 组合电路UDP 49 6.3 时序电路UDP 50 6.3.1 初始化状态寄存器 50 6.3.2 电平触发的时序电路UDP 50 6.3.3 边沿触发的时序电路UDP 51 6.3.4 边沿触发和电平触发的混合行为 51 6.4 另一实例 52 6.5 表项汇总 52 第7章 数据流模型化 54 7.1 连续赋值语句 54 7.2 举例 55 7.3 线网说明赋值 55 7.4 时延 55 7.5 线网时延 57 7.6 举例 57 7.6.1 主从触发器 57 7.6.2 数值比较器 58 第8章 行为建模 59 8.1 过程结构 59 8.1.1 initial 语句 59 8.1.2 always语句 61 8.1.3 两类语句在模块中的使用 62 8.2 时序控制 63 8.2.1 时延控制 63 8.2.2 事件控制 64 8.3 语句块 65 8.3.1 顺序语句块 66 8.3.2 并行语句块 67 8.4 过程性赋值 68 8.4.1 语句内部时延 69 8.4.2 阻塞性过程赋值 70 8.4.3 非阻塞性过程赋值 71 8.4.4 连续赋值与过程赋值的比较 72 8.5 if 语句 73 8.6 case语句 74 8.7 循环语句 76 8.7.1 forever 循环语句 76 8.7.2 repeat 循环语句 76 8.7.3 while 循环语句 77 8.7.4 for 循环语句 77 8.8 过程性连续赋值 78 8.8.1 赋值—重新赋值 78 8.8.2 force与release 79 8.9 握手协议实例 80 第9章 结构建模 83 9.1 模块 83 9.2 端口 83 9.3 模块实例语句 83 9.3.1 悬空端口 84 9.3.2 不同的端口长度 85 9.3.3 模块参数值 85 9.4 外部端口 87 9.5 举例 89 第10章 其他论题 91 10.1 任务 91 10.1.1 任务定义 91 10.1.2 任务调用 92 10.2 函数 93 10.2.1 函数说明部分 93 10.2.2 函数调用 94 10.3 系统任务和系统函数 95 10.3.1 显示任务 95 10.3.2 文件输入/输出任务 97 10.3.3 时间标度任务 99 10.3.4 模拟控制任务 99 10.3.5 定时校验任务 100 10.3.6 模拟时间函数 101 10.3.7 变换函数 102 10.3.8 概率分布函数 102 10.4 禁止语句 103 10.5 命名事件 104 10.6 结构描述方式和行为描述方式的 混合使用 106 10.7 层次路径名 107 10.8 共享任务和函数 108 10.9 值变转储文件 110 10.9.1 举例 111 10.9.2 VCD文件格式 112 10.10 指定程序块 113 10.11 强度 114 10.11.1 驱动强度 114 10.11.2 电荷强度 115 10.12 竞争状态 116 第11章 验证 118 11.1 编写测试验证程序 118 11.2 波形产生 118 11.2.1 值序列 118 11.2.2 重复模式 119 11.3 测试验证程序实例 123 11.3.1 解码器 123 11.3.2 触发器 124 11.4 从文本文件中读取向量 126 11.5 向文本文件中写入向量 127 11.6 其他实例 128 11.6.1 时钟分频器 128 11.6.2 阶乘设计 130 11.6.3 时序检测器 132 第12章 建模实例 136 12.1 简单元件建模 136 12.2 建模的不同方式 138 12.3 时延建模 139 12.4 条件操作建模 141 12.5 同步时序逻辑建模 142 12.6 通用移位寄存器 145 12.7 状态机建模 145 12.8 交互状态机 147 12.9 Moore有限状态机建模 150 12.10 Mealy型有限状态机建模 151 12.11 简化的21点程序 153 附录 语法参考 157 参考文献 172
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值