Verilog与SystemVerilog编程陷阱:如何避免101个常犯的编码错误

这篇是计算机类的优质预售推荐>>>>《Verilog与SystemVerilog编程陷阱:如何避免101个常犯的编码错误》

编辑推荐

纠错式学习,从“陷阱”中学习编程,加深对语言本身的理解。

逆向式学习,从错误中学习避免错误的方法,让读者写出更好的代码。

案例式学习,将101个“陷阱”分类汇编,以针对性案例引导读者掌握编程要点。

译者序

译者序

  随着电子设计自动化(Electronic Design Automation,EDA)技术的广泛应用,使用硬件语言完成现场可编程门阵列(Field-Programmable Gate Array,FPGA)是大势所趋。迄今为止,主要的硬件描述语言包括VHDL、Verilog HDL和SystemVerilog。相比于后两者,VHDL发展更早,语法更为严格,因而对初学者来说上手较慢,在实际使用中经常因为不规范的代码遭遇编译报错。相比而言,Verilog及SystemVerilog具有语法灵活的优势,当然也会因这种灵活性在综合过程中产生程序员意料之外的结果。目前,相比于VHDL,Verilog和其高级版本的SystemVerilog应用更为广泛。这是因为在集成电路(Integrated
Circuit,IC)设计领域,90%以上的公司都采用Verilog进行IC设计。因此对集成电路设计(Application Specific Integrated Circuit, ASIC)人员来说,必须掌握Verilog。另外,由于Verilog和C语言有很多类似的语法和关键字,鉴于C语言普及人群广泛,Verilog更能使初学者突破语言障碍,快速入门。正如我们提到的,Verilog由于其固有的灵活性,便于初学者入门。而也正因于此,过于灵活的语法经常会使工程师们陷入不当使用Verilog的陷阱,从而造成意料之外的错误。

  本书是由Verilog和SystemVerilog方面的资深专家根据自身实际工程经验倾心撰写的一本实用的Verilog和SystemVerilog手册。本书给出了硬件工程师在使用Verilog和SystemVerilog时容易陷入的101个陷阱。

  本书的翻译工作主要由戴成然和高镇完成,其中戴成然完成了前言和第1~4章的翻译,高镇完成了第5~8章的翻译。由于译者水平有限,文中难免出现不妥之处,敬请读者批评指正。

  高镇

  2015年3月

序言

  人的爱好各有不同,有人喜欢收集棒球卡片,有人喜欢收集老旧的汽车杂志,也有人喜欢收集橡皮鸭子,而我喜欢收集Verilog方面的书籍。

  这要追溯到1989年一本用三孔夹夹着的活页《VERILOG-XL Reference Manual Version 1.5a》复印版。当时的Verilog相对简单——令人难以相信的是,现如今已经可以用一种类型的程序分配来设计芯片(在当时非阻塞式分配还不是一种语言)。不仅如此,当时我们只能在VAX或阿波罗工作站上仿真。

  从那时起,我几乎买下了关于Verilog的每一本书。我所写过的书中已经包含了一些综合性的书。将来我将写一本VHDL的必备手册,又或者是一本介绍硬件描述性语言历史的书,当然书的内容大多是有关Verilog的。

  对于这些书,有一件有趣的事儿。在我翻阅它们后,就会把它们放在架子上,很少再次翻阅。我承认当你看到我装满Verilog书的书架时,你会对此留下很深的印象。目光敏锐的客人会注意到我的书是崭新的。确实,我没用过它们,没读过它们,因为它们对我帮助很少。

  令人失望的是,我很难找到一本对应用工程师实用的书。我想要的是一本每天带在身边,及时和有效地助我迈出第一步的书。

  Stu和Don编著了本书。我们认识很多年了,他们在Verilog上有很深的造诣。他们将毕生所学的精华总结成这本非常实用的书。本书一定不会让你失望。

  如果你是一个通过惨痛教训而跳出Verilog陷阱的内行,微笑着对自己说:“太好了,我曾经在这出过问题。”

  欢迎刚开始学习Verilog和SystemVerilog的朋友们!通过阅读本书,你可以拥有向这个领域的两个顶级专家学习的机会。如果你有机会参加这两位专家中任意一位的课程,一定要报名。我保证你不会后悔。

  顺便提一下,我最喜欢的陷阱是“陷阱65:死循环”。因为我曾经犯过这样的错误。相信我,如果你曾经因为建模错误致使打坏计算机,那么这辈子你都不会忘记错误的原因。可是你比我幸运,因为本书可以帮助你。将这本书放在手边,经常翻阅,那么你的模型都可以通过编译,循环都可以终止。

  Steve Golson

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 23:56:33

Verilog与SystemVerilog编程陷阱:如何避免101个常犯的编码错误的相关文章

iOS网络高级编程:iPhone和iPad的企业应用开发之错误处理

本章内容 ●    iOS应用中的网络错误源 ●    检测网络的可达性 ●    错误处理的经验法则 ●    处理网络错误的设计模式 到目前为止,我们所介绍的iPhone与其他系统的网络交互都是基于一切正常这个假设.本章将会放弃这个假设,并深入探究网络的真实世界.在真实世界中,事情是会出错的,有时可能是非常严重的错误:手机进入与离开网络.包丢掉或是延迟:网络基础设施出错:偶尔用户还会出错.如果一切正常,那么编写iOS应用就会简单不少,不过遗憾的是现实并非如此.本章将会探讨导致网络操作失败的几

HAL驱动的串口编程陷阱

http://bbs.elecfans.com/jishu_464356_1_1.html 手上有块NUCLEO STM32L053x板子,用来做串口实验,看了下ST的最新库HAL驱动,于是想用HAL驱动来做串口.使用过程中发现只能发送数据不能接收数据,用逻辑分析仪查看RX,TX引角,都有数据,但就是收不到数据.使用STM32F103传统驱动,一点问题没有,改到HAL怎么就不行了呢?经过一周的调试终于找到了问题所在.首先看STM32F103传通驱动的代码: /** USART1 GPIO Con

基于verilog的FPGA编程经验总结(XILINX ISE工具)

1.用ISE仿真的时候.所用变量一定要初始化. ISE默认初始量为"XXXXX", 而Quarters是默认为"00000"的, 其实实际上, 下到FPGA里后也是默认为0的,只是可以说ISE严谨得令人DT吧.比如说用一个累加器, result = A+B+result ,必须保证在某一刻A, B, result都为定值时, 之后的数据才不会一直为"XXXXX"; 2.所有的中间线(就是module间用来传递参数的信号)都要用wire定义一下.

java编程思想读书笔记 第十二章 通过异常处理错误(下)

1.异常的限制 当覆盖方法的时候,只能抛出在基类方法的异常说明里列出的那些异常.这意味着,当基类使用的代码应用到其派生类对象的时候,一样能够工资,异常也不例外. 下面的例子是在编译时施加在异常上面的限制: public class BaseBallException extends Exception {} public class Foul extends BaseBallException{} public class Strike extends BaseBallException{} p

《C++编程思想》 第七章 常 量 (习题+解答)

一.相关知识点        在 C语言中可以选择这样书写: const bufsize:        这样写在C++中是不对的,而 C编译器则把它作为一个声明,这个声明指明在别的地方有存储分配.因为C默认const是外部连接的, C++默认const是内部连接的,这样,如果在 C++中想完成与C中同样的事情,必须用extern把连接改成外部连接: extern const bufsize;//declaration only 这种方法也可用在C语言中. 指向const的指针 使用指针定义的技

(编程训练)再回首,数据结构——哈夫曼编码的实现

最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会. 希望这些能提供给初学者一些参考. 在VC++6.0下可运行,当初还写了不少注释. [问题描述] 根据给定字符的使用频率,为其设计哈夫曼编码 [基本要求] ·功能:求出n个字符的哈夫曼编码 ·输入:输入n个字符和字符在电文中的使用频率 ·输出:n个字符的哈夫曼编码 [模块划分] 1.    初始化哈夫曼树函数 InitHuffmanTree() 2.    输入权值函数 InputWeight() 3.    选择

近期计算机类精品图书强推重磅一览——互动出版网

1.<Verilog与SystemVerilog编程陷阱:如何避免101个常犯的编码错误> 纠错式学习,从"陷阱"中学习编程,加深对语言本身的理解. 逆向式学习,从错误中学习避免错误的方法,让读者写出更好的代码. 案例式学习,将101个"陷阱"分类汇编,以针对性案例引导读者掌握编程要点. 2.<Python 3面向对象编程> 全面介绍Python强大的面向对象编程特性,是详尽的教程,包含丰富的实例. -通过一步步的教程来学习如何在Python

高质量c c++编程

第1章 文件结构 每一个C++/C程序通常分为两个文件.一个文件用于保存程序的声明(declaration),称为头文件.还有一个文件用于保存程序的实现(implementation),称为定义(definition)文件. C++/C程序的头文件以“.h”为后缀,C程序的定义文件以“.c”为后缀,C++程序的定义文件通常以“.cpp”为后缀(也有一些系统以“.cc”或“.cxx”为后缀). 1.1版权和版本号的声明 版权和版本号的声明位于头文件和定义文件的开头(參见演示样例1-1),主要内容有

zz数字前端及FPGA设计相关书目泛读

以下内容为EETOP 会员:leasor 总结整理 ======================================================== 初学cpu设计(完全教程) -------------------------------------------------- 抛开逻辑架构, 来演绎内核开发, 只不过是照猫画虎, 能有多大的价值, 为什么总有人避重就轻, 先感谢译者的辛勤劳动, 但能不能修整一下框图绘制, 如果你不是pcb工具, fpga ide中都包含了绘制工