万本电子书0元读

万本电子书0元读

顶部广告

EDA精品智汇馆:Verilog编程艺术电子书

  本书更加注重Verilog编程的方法论和实用性,深地探讨编码风格、语言特性、简洁高效和时钟复位等实际问题,深探讨如何避免使用易混淆和易错误的语句,如何避免前后仿真不一致,如何充分发挥Verilog-2001的特性。

售       价:¥

纸质售价:¥79.00购买纸书

428人正在读 | 3人评论 6.2

作       者:魏家明

出  版  社:电子工业出版社

出版时间:2014-01-01

字       数:180.0万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(1条)
  • 读书简介
  • 目录
  • 累计评论(1条)
本书深地探讨了Verilog编程,分为七个部分:设计原则、语言特性、书写文档、高级设计、时钟和复位、验证之路、其他介绍。本书对这些部分做了重的探讨:Verilog编码风格、Verilog-2001的新特性、简洁高效的编程、容易出错的语言元素、可配置设计、时钟生成、复位设计、验证方法等。另外,本书还对SystemVerilog做了简单的介绍。<br/>【推荐语】<br/>本书更加注重Verilog编程的方法论和实用性,深地探讨编码风格、语言特性、简洁高效和时钟复位等实际问题,深探讨如何避免使用易混淆和易错误的语句,如何避免前后仿真不一致,如何充分发挥Verilog-2001的特性。<br/>【作者】<br/>作者具有多年的Verilog设计经验,参与了多个芯片的设计工作,重在前端设计(设计、验证、综合、和STA等)。<br/>
目录展开

序言

前言

第一部分 设计原则

第1章 美的设计

1.1 美学观点

1.2 美是修养

1.3 专业术语

第2章 高效之道

2.1 敏捷开发

2.2 代码质量

2.3 版本控制

2.4 提早集成

第3章 组织管理

3.1 植物分类

3.2 SoC特性

3.3 设计流程

3.4 仔细规划

3.5 管理表格

3.6 模块层次

3.7 目录组织

第4章 使用工具

4.1 使用Emacs

4.1.1 Emacs介绍

4.1.2 Emacs安装

4.1.3 常用快捷键

4.1.4 我的.emacs

4.1.5 cua-base.el

4.1.6 verilog-mode.el

4.1.7 shell buffer

4.2 使用Shell

4.2.1 Shell介绍

4.2.2 Shell例子

4.2.3 Perl例子

4.3 使用CVS

4.3.1 CVS介绍

4.3.2 CVS术语

4.3.3 CVS初始化

4.3.4 CVS常用命令

第5章 编码风格

5.1 干干净净

5.2 代码划分

5.3 代码要求

5.3.1 Verilog部分

5.3.2 SystemVerilog部分

5.4 名字定义

5.5 书写格式

5.5.1 模块端口声名

5.5.2 模块实例化

5.5.3 函数和任务调用

5.5.4 书写语句

5.5.5 书写表达式

5.6 添加注释

5.7 参数化

5.8 lint检查

第二部分 语言特性

第6章 Verilog特性

6.1 Verilog标准

6.2 抽象级别

6.3 可综合子集

6.4 保持一致

第7章 常数

7.1 整数(integer)

7.2 实数(real)

7.3 字符串(string)

7.4 标识符(identifier)

第8章 数据类型

8.1 线网(net)

8.1.1 wire和tri

8.1.2 wor、wand、trior、triand

8.1.3 tri0、tri1

8.1.4 uwire

8.1.5 supply0、supply1

8.1.6 驱动强度

8.1.7 默认net

8.2 变量(variable)

8.3 线网和变量的区别

8.4 向量(vector)

8.5 数组(array)

8.6 多维数组

第9章 表达式

9.1 操作符(Operator)

9.1.1 操作符的优先级(Operator priority)

9.1.2 表达式中使用整数

9.1.3 算数操作符(Arithmetic operators)

9.1.4 算术表达式中的regs和integers

9.1.5 比较操作符(Compare operators)

9.1.6 逻辑操作符(Logical operators)

9.1.7 位运算操作符(Bitwise operators)

9.1.8 归约操作符(Reduction operators)

9.1.9 移位操作符(Shift operators)

9.1.10 条件操作符(Conditional operator)

9.1.11 连接操作符(Concatenations)

9.2 操作数(Operands)

9.2.1 向量的抽取(bit-select and part-select)

9.2.2 part-select的例子

9.2.3 数组的访问

9.2.4 字符串

9.3 表达式位长(Expression bit lengths)

9.3.1 表达式位长规则

9.3.2 表达式位长问题的例子A

9.3.3 表达式位长问题的例子B

9.3.4 表达式位长问题的例子C

9.3.5 表达式位长问题的例子D

9.3.6 表达式位长问题的例子E

9.4 符号表达式(Signed expressions)

9.4.1 表达式类型规则

9.4.2 计算表达式的步骤

9.4.3 执行赋值的步骤

9.4.4 signed表达式中处理x和z

9.4.5 signed应用的例子

9.4.6 signed应用的错误

9.5 赋值和截断(Assignments and truncation)

9.6 与x/z比较

第10章 赋值操作

10.1 连续赋值

10.2 过程赋值

第11章 门级和开关级模型

11.1 门和开关的声明语法

11.1.1 门和开关类型

11.1.2 驱动强度

11.1.3 延迟

11.1.4 实例数组

11.2 and、nand、nor、or、xor、xnor

11.3 buf、not

11.4 bufif1、bufif0、notif1、notif0

11.5 MOS switches

11.6 Bidirectional pass switches

11.7 pullup、pulldown

第12章 用户定义原语

12.1 UDP定义

12.1.1 UDP状态表

12.1.2 状态表符号

12.2 组合UDP

12.3 电平敏感时序UDP

12.4 沿敏感时序UDP

第13章 行为模型

13.1 概览

13.2 过程赋值

13.2.1 阻塞赋值

13.2.2 非阻塞赋值

13.3 过程连续赋值

13.3.1 assign和deassign过程语句

13.3.2 force和release过程语句

13.4 条件语句

13.5 循环语句

13.5.1 for循环例子

13.5.2 disable语句

13.6 过程时序控制

13.6.1 延迟控制(Delay control)

13.6.2 事件控制(Event control)

13.6.3 命名事件(Named events)

13.6.4 事件or操作符(Event or operator)

13.6.5 隐含事件列表(Implicit event_expression list)

13.6.6 电平敏感事件控制(Level-sensitive event control)

13.6.7 赋值间时序控制(Intra-assignment timing controls)

13.7 块语句

13.7.1 顺序块(Sequential block)

13.7.2 并行块(Parallel block)

13.7.3 块名字(Block names)

13.7.4 开始和结束时间(Start and finish times)

13.8 结构化过程

13.8.1 initial construct

13.8.2 always construct

13.8.3 always的敏感列表

13.8.4 并发进程

13.9 always有关的问题

13.9.1 敏感列表不完整

13.9.2 赋值顺序错误

第14章 case语句

14.1 case语句定义

14.2 case语句的执行

14.3 Verilog和VHDL对比

14.4 case的应用

14.5 casez的应用

14.6 描述状态机

14.7 casex的误用

14.8 casez的误用

14.9 full_case和parallel_case

14.10 full_case

14.10.1 不是full的case语句

14.10.2 是full的case语句

14.10.3 使用full_case综合指令

14.10.4 full_case综合指令的缺点

14.10.5 使用full_case指令后还是生成Latch

14.11 parallel_case

14.11.1 不是parallel的case语句

14.11.2 是parallel的case语句

14.11.3 使用parallel_case综合指令

14.11.4 parallel_case综合指令的缺点

14.11.5 没有必要的parallel_case指令

14.12 综合时的警告

14.13 case语句的编码原则

第15章 task和function

15.1 task和function之间的不同点

15.2 task的声明和使能

15.2.1 task的声明

15.2.2 task的使能和参数传递

15.2.3 task的内存使用和并发进程

15.3 disable语句

15.3.1 disable语句的例子A

15.3.2 disable语句的例子B

15.4 function的声明和调用

15.4.1 function的声明

15.4.2 function的返回值

15.4.3 function的调用

15.4.4 function的规则

15.4.5 constant function

15.5 task的误用

15.6 function的误用

第16章 调度和赋值

16.1 仿真过程

16.2 事件仿真

16.3 仿真参考模型

16.4 分层事件队列

16.4.1 事件队列分类

16.4.2 事件队列特性

16.4.3 事件调度例子

16.5 确定性和不确定性

16.5.1 确定性(Determinism)

16.5.2 不确定性(Nondeterminism)

16.6 赋值的调度含义

16.6.1 连续赋值

16.6.2 过程连续赋值

16.6.3 阻塞赋值

16.6.4 非阻塞赋值

16.6.5 开关处理

16.6.6 端口连接

16.6.7 任务和函数

16.7 阻塞赋值和非阻塞赋值

16.7.1 阻塞赋值

16.7.2 非阻塞赋值

16.8 赋值使用原则

16.9 自己触发自己

16.10 仿真零延迟RTL模型

16.11 惯性延迟和传输延迟

16.11.1 门级仿真中的传输延迟

16.11.2 各种#delay的位置

16.11.3 仿真时钟生成方法

16.12 延迟线模型

16.13 使用#1延迟

16.14 多个公共时钟和竞争条件

16.15 避免混杂阻塞赋值和非阻塞赋值

16.16 RTL和门级混合仿真

16.16.1 RTL-to-Gates仿真

16.16.2 Gates-to-RTL仿真

16.16.3 有时钟偏差的门级时钟树

16.16.4 有时钟偏差的Vendor模型

16.16.5 错误的Vendor模型

16.16.6 结论和建议

16.17 带有SDF延迟的门级仿真

16.17.1 全系统仿真

16.17.2 软件要花钱

16.17.3 门级回归仿真

16.18 验证平台技巧

16.18.1 在0时刻复位

16.18.2 时钟沿之后复位

16.18.3 创建仿真时钟

16.18.4 在无效沿输入激励

第17章 层次结构

17.1 模块

17.1.1 模块定义

17.1.2 模块实例

17.2 参数

17.2.1 参数声明

17.2.2 参数调整

17.2.3 参数传递

17.2.4 参数依赖

17.2.5 内部参数

17.2.6 clog2

17.2.7 指数**

17.3 端口

17.3.1 端口声明

17.3.2 端口连接

17.3.3 实数传递

17.4 Generate语句

17.4.1 Loop generate construct

17.4.2 Conditional generate construct

17.5 实例数组

17.6 层次名字

第18章 系统任务和函数

18.1 显示任务

18.1.1 显示和写出任务

18.1.2 探测任务

18.1.3 监控任务

18.2 文件读写

18.2.1 打开和关闭文件

18.2.2 文件输出

18.2.3 字符串输出

18.2.4 文件输入

18.2.5 文件定位

18.2.6 刷新输出

18.2.7 错误状态

18.2.8 检查文件尾部

18.2.9 加载文件数据

18.3 时间比例

18.3.1 $printtimescale

18.3.2 $timeformat

18.4 仿真控制

18.4.1 $finish

18.4.2 $stop

18.5 仿真时间

18.6 转换函数

18.7 概率分布

18.7.1 $random

18.7.2 $dist_functions

18.8 命令行输入

18.8.1 $test$plusargs

18.8.2 $value$plusargs

18.9 数学运算

18.9.1 整数函数

18.9.2 实数函数

18.10 波形记录

第19章 编译指令

19.1 `celldefine和`endcelldefine

19.2 `default_nettype

19.3 `define和`undef

19.4 `ifdef、`else、`elsif、`endif、`ifndef

19.5 `include

19.6 `resetall

19.7 `line

19.8 `timescale

19.9 `unconnected_drive和`nounconnected_drive

19.10 `begin_keywords和`end_keywords

19.11 `pragma

第20章 Specify块

20.1 specify块声明

20.2 speparam

20.3 模块路径声明

20.3.1 模块路径要求

20.3.2 简单路径

20.3.3 沿敏感路径

20.3.4 状态依赖路径

20.4 模块路径延迟

第21章 时序检查

21.1 概览

21.2 使用稳定窗口的时序检查

21.2.1 $setup、$hold、$setuphold

21.2.2 $recovery、$removal、$recrem

21.3 时钟和控制信号的时序检查

21.3.1 $skew、$timeskew、$fullskew

21.3.2 $width

21.3.3 $period

21.3.4 $nochange

21.4 使用notifier响应时序违反

21.5 使用条件事件

21.6 时序检查中的Vector

21.7 Negative timing check

第22章 反标SDF

22.1 SDF标注器

22.2 SDF construct到Verilog的映射

22.2.1 SDF路径延迟到Verilog的映射

22.2.2 SDF时序检查到Verilog的映射

22.2.3 SDF互连延迟的标注

22.3 $sdf_annotate

22.4 SDF文件例子

第23章 编程语言接口

23.1 PLI

23.2 DirectC

23.3 SystemVerilog

第24章 综合指令

24.1 Synopsys综合指令

24.2 使用综合指令

24.3 使用translate_off/on

24.4 误用translate_off/on

24.5 使用attribute

第三部分 书写文档

第25章 书写文档

25.1 文档格式

25.2 定义文档

25.3 应用文档

25.4 设计文档

25.5 备份文档

25.6 GPIO设计

第26章 GPIO应用文档

26.1 Overview

26.2 Register Description

26.2.1 PIN Level Register (PIN)

26.2.2 Data Register (DAT)

26.2.3 Data Set Register (DATS)

26.2.4 Data Clear Register (DATC)

26.2.5 Mask Register (IM)

26.2.6 Mask Set Register (IMS)

26.2.7 Mask Clear Register (IMC)

26.2.8 PULL Enable Register (PEN)

26.2.9 PEN Enable Set Register Register (PENS)

26.2.10 PEN Enable Clear Register Register (PENC)

26.2.11 PSEL Select Register (PSEL)

26.2.12 PSEL Enable Set Register Register (PSELS)

26.2.13 PSEL Enable Clear Register Register (PSELC)

26.2.14 Function Register (FUN)

26.2.15 Function Set Register (FUNS)

26.2.16 Function Clear Register (FUNC)

26.2.17 Select Register (SEL)

26.2.18 Select Set Register (SELS)

26.2.19 Select Clear Register (SELC)

26.2.20 Direction Register (DIR)

26.2.21 Direction Set Register (DIRS)

26.2.22 Direction Clear Register (DIRC)

26.2.23 Trigger Register (TRG)

26.2.24 Trigger Set Register (TRGS)

26.2.25 Trigger Clear Register (TRGC)

26.2.26 FLAG Register (FLG)

26.2.27 FLAG Clear Register (FLGC)

26.3 Program Guide

26.3.1 GPIO Function Guide

26.3.2 Alternate Function Guide

26.3.3 Interrupt Function Guide

26.3.4 Disable Interrupt Function Guide

第27章 GPIO设计文档

27.1 文件列表(见表27-1)

27.2 端口列表(见表27-2)

27.3 配置参数(见表27-3)

第四部分 高级设计

第28章 使用IP

28.1 Cadence的IP

28.2 Cadence的VIP

28.3 Synopsys的IP

28.4 DesignWare Building Block

28.5 在FPGA上使用DesignWare

第29章 代码优化

29.1 代码可读

29.2 简洁编码

29.3 优化逻辑

29.4 优化迟到信号

29.5 括号控制结构

第30章 状态机设计

30.1 状态机类型

30.2 状态编码方式

30.3 二进制编码FSM

30.3.1 两个always块

30.3.2 重要的编码规则

30.3.3 错误状态的转换

30.3.4 next的默认值

30.4 独热码编码FSM

30.5 寄存器输出

第31章 可配置设计

31.1 格雷码转换

31.2 通用串行CRC

31.2.1 general_crc.v

31.2.2 testbench

31.3 FIFO控制器

31.4 RAM Wrapper例子

31.4.1 常规方法

31.4.2 名字规范化

31.4.3 RF1_wrapper.v

31.4.4 gen_wrapper.pl

31.4.5 ram_def.txt例子

31.4.6 生成wrapper

31.5 可配置的GPIO设计

31.5.1 gpio.v

31.5.2 gpio_params.v

31.5.3 gpio_check.v

31.5.4 gpio_reg.v

31.5.5 gpio_sync.v

31.6 可配置的BusMatrix

31.6.1 BusMatrix简介

31.6.2 设计ABM

31.6.3 mini_abm

31.6.4 large_abm

31.7 可配置的Andes Core N801

31.8 可配置的ARM926EJS

31.9 灵活的coreConsultant

第32章 可测性设计

32.1 内部扫描

32.2 内建自测

32.3 边界扫描

第五部分 时钟和复位

第33章 异步时序

33.1 亚稳态

33.2 MTBF

33.3 同步器

33.3.1 电平同步器

33.3.2 边沿检测同步器

33.3.3 脉冲检测同步器

33.4 同步多位数据

33.5 异步FIFO

33.6 Design Ware

33.7 DW_fifoctl_s2_sf

33.8 门级仿真

第34章 时钟生成

34.1 同步电路

34.2 设计原则

34.3 分频器

34.3.1 1/n分频器

34.3.2 n/d分频器

34.4 时钟切换

34.5 时钟生成

第35章 时钟例子

35.1 Overview

35.2 CGU Clock

35.2.1 Clock List

35.2.2 Clock Diagram(见图35-1)

35.2.3 Clock Divider Rate(见表35-1)

35.3 Register Description(见表35-2)

35.3.1 CGU PLL Divider Register (CGU_PDR)

35.3.2 CGU Counter Regsister (CGU_CNT)

35.3.3 CGU PLL Control Register (CGU_PCR)

35.3.4 CGU Low Power Control Register (CGU_LPC)

35.3.5 CGU Status Register (CGU_CST)

35.3.6 CGU Divider 0 Register (CGU_DV0→1/s)

35.3.7 CGU Divider 1 Register (CGU_DV1→1/x)

35.3.8 CGU Divider 2 Register (CGU_DV2→1/n)

35.3.9 CGU Divider 3 Register (CGU_DV3→1/n)

35.3.10 CGU Divider 4/5/6/7 Register (CGU_DV4/5/6/7→n/d)

35.3.11 CGU Divider 8 Register (CGU_DV8→n/d)

35.3.12 CGU Divider 9 Register (CGU_DV9→n/d)

35.3.13 CGU Module Stop 0 Register (CGU_MS0)

35.3.14 CGU Module Stop 1 Register (CGU_MS1)

35.3.15 CGU Module Stop 2 Register (CGU_MS2)

35.3.16 CGU Reset Control Register (CGU_RCR)

35.3.17 CGU Reset Status Register (CGU_RST)

35.4 PLL Structure

35.4.1 Frequency Calculation

35.4.2 VCO Frequency Limitation

35.4.3 PFD Clock Frequency Limitation

35.5 PLL Control

35.6 Sleep and Wakeup

35.6.1 State switch

35.6.2 How to wakeup

35.7 Module Stop

35.8 Application Notes

第36章 复位设计

36.1 复位的用途

36.2 寄存器编码风格

36.2.1 有/无同步复位寄存器

36.2.2 寄存器推导原则

36.3 同步复位

36.3.1 编码风格和电路

36.3.2 同步复位的优点

36.3.3 同步复位的缺点

36.4 异步复位

36.4.1 编码风格和电路

36.4.2 既有异步复位又有异步置位的寄存器

36.4.3 异步复位的优点

36.4.4 异步复位的缺点

36.5 异步复位的问题

36.5.1 复位recovery时间

36.5.2 复位撤销经历不同的时钟周期

36.6 复位同步器

36.6.1 复位同步器有亚稳态吗?

36.6.2 错误的ASIC Vendor模型

36.6.3 有缺点的复位同步器

36.6.4 复位时的仿真验证

36.7 复位分布树

36.7.1 同步复位分布技巧

36.7.2 异步复位分布技巧

36.7.3 复位分布树的时序分析

36.8 复位毛刺的过滤

36.9 异步复位的DFT

36.10 多时钟复位的问题

36.10.1 非协调的复位撤销

36.10.2 顺序协调的复位撤销

36.11 结论

第六部分 验证之路

第37章 验证之路

37.1 整洁验证

37.2 验证目标

37.3 验证流程

37.4 验证计划

37.5 随机验证

37.6 直接验证

37.7 白盒验证

37.8 模块验证

37.9 系统验证

37.9.1 验证重点

37.9.2 验证环境

37.9.3 IP互连

37.9.4 性能验证

37.10 DFT验证

37.11 网表验证

37.12 高级抽象

37.13 灵活验证

37.14 ARM926EJS的Validation环境

37.14.1 Validation tools

37.14.2 Validation configuration files

37.14.3 Validation test suites

37.14.4 Validation flow

37.14.5 Building the model

37.14.6 Running Validation test suites

37.14.7 Debugging a single Validation test

37.15 AHB BusMatrix的验证

37.16 某芯片的SoC验证环境

第七部分 其他介绍

第38章 SystemVerilog特性

38.1 SystemVerilog与SystemC比较

38.2 SystemVerilog的特点

38.3 新的数据类型

38.3.1 整型和实型

38.3.2 新的操作符

38.3.3 数组

38.3.4 队列

38.3.5 枚举类型

38.3.6 结构体和共同体

38.4 always_comb、always_latch和always_ff

38.5 unique和priority

38.6 loop、break和continue

38.7 task和function

38.7.1 静态和自动作用域

38.7.2 参数传递

38.7.3 参数中的默认值

38.8 Port connection

38.9 Tag

38.10 Interface

38.11 class和object

38.11.1 对象的概念

38.11.2 类的创建

38.11.3 类的继承

38.11.4 类的randomize

38.11.5 类的cover group

38.12 VMM、OVM和UVM

参考文献

累计评论(1条) 1个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部