logo资料库

夏宇闻Verilog经典教程.pdf

第1页 / 共334页
第2页 / 共334页
第3页 / 共334页
第4页 / 共334页
第5页 / 共334页
第6页 / 共334页
第7页 / 共334页
第8页 / 共334页
资料共334页,剩余部分请下载后查看
第一章 数字信号处理、计算、程序、 算法和硬线逻辑的基本概念
1.1 数字信号处理
1.2 计算(Computing)
1.3 算法和数据结构
1.4 编程语言和程序
1.5 系统结构和硬线逻辑
1.6 设计方法学
1.7 专用硬线逻辑与微处理器的比较
1.8 C 语言与硬件描述语言在算法运算电路设计的关系和作用
第二章 Verilog HDL设计方法概述
2.1.硬件描述语言HDL
2.2.Verilog HDL的历史
2.3.Verilog HDL和 VHDL的比较
2.4. Verilog HDL目前的应用情况和适用的设计
2.5.采用Verilog HDL设计复杂数字电路的优点
2.6.采用硬件描述语言(Verilog HDL)的设计流程简介
2.7.小结
2.8 思考题
第三章 Verilog HDL的基本语法
3.1.简单的Verilog HDL模块
3.1.1.简单的Verilog HDL程序介绍
3.1.2.模块的结构
3.1.3.模块的端口定义
3.1.4.模块内容
3.2.数据类型及其常量、变量
3.2.1.常量
一.数字
二.参数(Parameter)型
3.2.2 变量
一. wire型
二. reg型
三. memory型
3.3. 运算符及表达式
3.3.1.基本的算术运算符
3.3.2.位运算符
3.3.3 逻辑运算符
3.3.4.关系运算符
3.3.5.等式运算符
3.3.6.移位运算符
3.3.7.位拼接运算符
3.3.8.缩减运算符
3.3.9.优先级别
3.3.10.关键词
3.4 赋值语句和块语句
3.4.1 赋值语句
3.4.2 块语句
一.顺序块
二. 并行块
三. 块名
四. 起始时间和结束时间
3.5.条件语句
3.5.1. if_else语句
3.5.2. case语句
3.5.3.由于使用条件语句不当在设计中生成了原本没想到有的锁存器
3.6.循环语句
3.6.1.forever语句
3.6.2.repeat语句
3.6.3.while语句
3.6.4.for语句
3.7.结构说明语句
3.7.1.initial语句
3.7.2.always语句
3.7.3.task和function说明语句
一.task和function说明语句的不同点
二. task说明语句
三.function说明语句
3.8.系统函数和任务
3.8.1.$display和$write任务
3.8.2.系统任务$monitor
3.8.3.时间度量系统函数$time
3.8.4.系统任务$finish
3.8.5.系统任务$stop
3.8.6.系统任务$readmemb和$readmemh
3.8.7.系统任务 $random
3.9.编译预处理
3.9.1.宏定义 `define
3.9.2.“文件包含”处理`include
3.9.3.时间尺度 `timescale
3.9.4.条件编译命令`ifdef、`else、`endif
3.10.小结
3.11.思考题
第四章 不同抽象级别的Verilog HDL模型
4.1.门级结构描述
4.1.1.与非门、或门和反向器等及其说明语法
4.1.2.用门级结构描述D触发器
4.1.3.由已经设计成的模块来构成更高一层的模块
4.1.4 用户定义的原语(UDP)
4.2.Verilog HDL的行为描述建模
4.2.1仅用于产生仿真测试信号的Verilog HDL行为描述建模
4.2.2.Verilog HDL建模在TOP-DOWN设计中的作用和行为建模的可综合性问题
4.3.用Verilog HDL建模进行TOP-DOWN设计的实例
4.4.小结
4.5.思考题
第五章 基本运算逻辑和它们的 Verilog HDL 模型
5.1 加法器
5.2 乘法器
5.3 比较器
5.4 多路器
5.5 总线和总线操作
5.6 流水线(pipeline)
第六章 运算和数据流动控制逻辑
6 6..1 数字逻辑电路的种类:
6.2 数字逻辑电路的构成
6.3 数据流动的控制
6.4 为什么在 Verilog HDL 设计中一定要用同步而不能用异步时序逻辑
第七章 有限状态机和可综合风格的Verilog HDL
7.1.有限状态机
7.1.1用Verilog HDL语言设计可综合的状态机的指导原则
7.1.2典型的状态机实例
7.1.3.综合的一般原则
7.2. 可综合风格的Verilog HDL模块实例
7.2.1.组合逻辑电路设计实例
7.2.2. 时序逻辑电路设计实例
7.2.3.状态机的置位与复位
7.2.3.1. 状态机的异步置位与复位
7.2.3.2. 状态机的同步置位与复位
7.2.4.深入理解阻塞和非阻塞赋值的不同
阻塞赋值
非阻塞赋值
Verilog 模块编程要点
Verilog 的层次化事件队列
自触发 always 块
移位寄存器模型
阻塞赋值及一些简单的例子
原则 1 :时序电路建模时,用非阻塞赋值
原则 2 :锁存器电路建模时,用非阻塞赋值
原则 3 :用 always 块描述组合逻辑时,应采用阻塞赋值语句
原则 4:在同一个 always 块中描述时序和组合逻辑混合电路时,用非阻塞赋值
原则 5:不要在同一个 always 块中同时使用阻塞和非阻塞赋值
原则 6:严禁在多个 always 块中对同一个变量赋值
原则 7:用$strobe 系统任务来显示用非阻塞赋值的变量值
总结:
7.2.5. 复杂时序逻辑电路设计实践
[例1] 一个简单的状态机设计--序列检测器
[例2]EEPROM读写器件的设计
1. 二线制I C CMOS 串行EEPROM的简单介绍
2. I 2 C (Inter Integrated Circuit)总线特征介绍
3. 二线制I 2 C CMOS 串行EEPROM读写操作
1) EEPROM 的写操作(字节编程方式)
2)二线制I C CMOS 串行EEPROM 的读操作
4. EEPROM的Verilog HDL 程序
1) EEPROM的行为模型
2 ) EEPROM读写器的可综合的Verilog HDL模型
3 ) EEPROM的信号源模块和顶层模块
思考题:
第八章 可综合的VerilogHDL设计实例
简化的RISC CPU设计简介
8.1.什么是CPU?
8.2. RISC CPU结构
8.2.1时钟发生器
8.2.2 指令寄存器
8.2.3.累加器
8.2.4.算术运算器
8.2.5.数据控制器
8.2.6.地址多路器
8.2.7.程序计数器
8.2.8.状态控制器
8.2.9.外围模块
8.3. RISC_CPU 操作和时序
8.3.1.系统的复位和启动操作
8.3.2.总线读操作
8.3.3写总线操作
8.4.RISC_CPU寻址方式和指令系统
8.5. RISC_CPU模块的调试
8.5.1. RISC_CPU模块的前仿真
8.5.2. RISC_CPU模块的综合
8.5.3.RISC_CPU模块的优化和布局布线
思考题
第九章 虚拟器件和虚拟接口模型
9.1 虚拟器件和虚拟接口模块的供应商
9.2 虚拟模块的设计
例 1]. 模数转换器 AD7886 仿真模型(虚拟模块)的设计
9.3 虚拟接口模块的实例
[例 1].“商业化”的虚拟模块之一:Intel USART 8251A
[例 2]. “商业化”的虚拟模块之二: Intel 8085a 微处理器的行为描述模块
思考题:
第十章 设计练习进阶
练习一.简单的组合逻辑设计
练习二. 简单时序逻辑电路的设计
练习三. 利用条件语句实现较复杂的时序逻辑电路
练习四. 设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别
练习五. 用 always 块实现较复杂的组合逻辑电路
练习六. 在 Verilog HDL 中使用函数
练习七. 在 Verilog HDL 中使用任务(task)
练习八. 利用有限状态机进行复杂时序逻辑的设计
练习九.利用状态机的嵌套实现层次结构化设计
练习十. 通过模块之间的调用实现自顶向下的设计
练习十一. 简单卷积器的设计
附录一:A/D 转换器的 Verilog HDL 模型和建立模型所需要的技术参数
附录二. 2K*8 位 异步 CMOS 静态 RAM HM-65162 模型
练习十二 利用 SRAM 设计一个 FIFO
参考资料
作者编后记
第一章数字信号处理、计算、程序、算法和硬线逻辑的基本概念 ----------------------------------------------------------------------------------------------------------------------------------------- 第一章 数字信号处理、计算、程序、 算法和硬线逻辑的基本概念 引言: 现代计算机与通讯系统电子设备中广泛使用了数字信号处理专用集成电路,它们主要 用于数字信号传输中所必需的滤波、变换、加密、解密、编码、解码、纠检错、压缩、解 压缩等操作。这些处理工作从本质上说都是数学运算。从原则上讲,它们完全可以用计算 机或微处理器来完成。这就是为什么我们常用 C、Pascal 或汇编语言来编写程序,以研究 算法的合理性和有效性的道理。 在数字信号处理的领域内有相当大的一部分工作是可以事后处理的。我们可以利用通 用的计算机系统来处理这类问题。如在石油地质调查中,我们通过钻探和一系列的爆破, 记录下各种地层的回波数据,然后用计算机对这些数据进行处理,去除噪声等无用信息, 最后我们可以得到地层的构造,从而找到埋藏的石油。因为地层不会在几年内有明显的变 化,因此花几十天的时间把地层的构造分析清楚也能满足要求。这种类型的数字信号处理 是非实时的,用通用的计算机就能满足需要。 还有一类数字信号处理必须在规定的时间内完成,如在军用无线通信系统和机载雷达系统 中我们常常需要对检测到的微弱信号增强、加密、编码、压缩,在接收端必须及时地解压 缩、解码和解密并重现清晰的信号。我们很难想象用一个通用的计算机系统来完成这项工 作,因此,我们不得不自行设计非常轻便小巧的高速专用硬件系统来完成该任务。 有的数字信号处理对时间的要求非常苛刻,以至于用高速的通用微处理器芯片也无法在规 定的时间内完成必须的运算。我们必须为这样的运算设计专用的硬线逻辑电路,这可以在 高速 FPGA 器件上实现或制成高速专用集成电路。这是因为通用微处理器芯片是为一般目的 而设计的,运算的步骤必须通过程序编译后生成的机器码指令加载到存贮器中,然后在微 处理器芯片控制下,按时钟的节拍,逐条取出指令、分析指令,然后执行指令,直至程序 的结束。微处理器芯片中的内部总线和运算部件也是为通用的目的而设计,即使是专为信 号处理而设计的通用微处理器,因为它的通用性,也不可能为某一个特殊的算法来设计一 系列的专用的运算电路,而且其内部总线的宽度也不能随意改变,只有通过改变程序,才 能实现这个特殊的算法。因而其运算速度就受到限制。 本章的目的是想通过对数字信号处理、计算(Computing)、算法和数据结构、编程语言和 程序、体系结构和硬线逻辑等基本概念的介绍,了解算法与硬线逻辑之间的关系从而引入 利用 Verilog HDL 硬件描述语言设计复杂的数字逻辑系统的概念和方法。向读者展示一种 九十年代才真正开始在美国等先进的工业国家逐步推广的数字逻辑系统的设计方法。借助 于这种方法,在电路设计自动化仿真和综合工具的帮助下,只要我们对并行的计算结构有 1
第一章数字信号处理、计算、程序、算法和硬线逻辑的基本概念 ----------------------------------------------------------------------------------------------------------------------------------------- 一定程度的了解,对有关算法有深入的研究,我们完全有能力设计并制造出有自己知识产 权的 DSP(数字信号处理)类和任何复杂的数字逻辑集成电路芯片,为我国的电子工业和 国防现代化作出应有的贡献。 1.1 数字信号处理 大规模集成电路设计制造技术和数字信号处理技术,近三十年来,各自得到了迅速的发展。 这两个表面上看来没有什么关系的技术领域实质上是紧密相关的。因为数字信号处理系统 往往要进行一些复杂的数学运算和数据的处理,并且又有实时响应的要求,它们通常是由 高速专用数字逻辑系统或专用数字信号处理器所构成,电路是相当复杂的。因此只有在高 速大规模集成电路设计制造技术进步的基础上,才有可能实现真正有意义的实时数字信号 处理系统。对实时数字信号处理系统的要求不断提高,也推动了高速大规模集成电路设计 制造技术的进步。现代专用集成电路的设计是借助于电子电路设计自动化(EDA)工具完成 的。学习和掌握硬件描述语言(HDL)是使用电子电路设计自动化(EDA)工具的基础。 1.2 计算(Computing) 说到数字信号处理,我们自然就会想到数学计算(或数学运算)。现代计算机和通信系统中 广泛采用了数字信号处理的技术和方法。基本思路是先把信号用一系列的数字来表示,如 是连续的模拟信号,则需通过采样和模拟数字转换,把信号转换成一系列的数字信号,然 后对这些数字信号进行各种快速的数学运算,其目的是多种多样的,有的是为了加密,有 的是通过编码来减少误码率以提高信道的通信质量,有的是为了去掉噪声等无关的信息也 可以称为滤波,有的是为了数据的压缩以减少占用的频道…。有时我们也把某些种类的数 字信号处理运算称为变换如离散傅利叶变换(DFT)、离散余弦变换(DCT)、小波变换(Wavelet T)等。 我们这里所说的计算是从英语 Computing 翻译过来的,它的含义要比单纯的数学计算广泛 得多。“Computing 这门学问研究怎样系统地有步骤地描述和转换信息,实质上它是一门覆 盖了多个知识和技术范畴的学问,其中包括了计算的理论、分析、设计、效率和应用。它 提出的最基本的问题是什么样的工作能自动完成,什么样的不能。”(摘自 Denning et al., “Computing as a Discipline,” Communication of ACM, January,1989)。 本文中凡提到计算这个词处,指的就是上面一段中 Computing 所包含的意思。由传统的观 点出发,我们可以从三个不同的方面来研究计算,即从数学、科学和工程的不同角度。 由比较现代的观点出发,我们可以从四个主要的方面来研究计算,即从算法和数据结构、 编程语言、体系结构、软件和硬件设计方法学。本课本的主题是从算法到硬线逻辑的实现, 因此我们将从算法和数据结构、编程语言和程序、体系结构和硬线逻辑以及设计方法学等 方面的基本概念出发来研究和探讨用于数字信号处理等领域的复杂硬线逻辑电路的设计技 术和方法。特别强调利用 Verilog 硬件描述语言的 Top-Down 设计方法的介绍。 2
第一章数字信号处理、计算、程序、算法和硬线逻辑的基本概念 ----------------------------------------------------------------------------------------------------------------------------------------- 1.3 算法和数据结构 为了准确地表示特定问题的信息并顺利地解决有关的计算问题,我们需要采用一些特殊方 法并建立相应的模型。所谓算法就是解决特定问题的有序步骤,所谓数据结构就是解决特 定问题的相应的模型。 1.4 编程语言和程序 程序员利用一种由专家设计的既可以被人理解,也可以被计算机解释的语言来表示算法问 题的求解过程。这种语言就是编程语言。由它所表达的算法问题的求解过程就是程序。我 们已经熟悉通过编写程序来解决计算问题, C、Pascal、Fortran、Basic 或汇编语言语言 是几种常用的编程语言。如果我们只研究算法,只在通用的计算机上运行程序或利用通用 的 CPU 来设计专用的微处理器嵌入系统,掌握上述语言就足够了。如果还需要设计和制造 能进行快速计算的硬线逻辑专用电路,我们必须学习数字电路的基本知识和硬件描述语言。 因为现代复杂数字逻辑系统的设计都是借助于 EDA 工具完成的,无论电路系统的仿真和综 合都需要掌握硬件描述语言。在本书中我们将要比较详细地介绍 Verilog 硬件描述语言。 1.5 系统结构和硬线逻辑 计算机究竟是如何构成的?为什么它能有效地和正确地执行每一步程序?它能不能用另外 一种结构方案来构成?运算速度还能不能再提高?所谓计算机系统结构就是回答以上问题 并从硬线逻辑和软件两个角度一起来探讨某种结构的计算机的性能潜力。比如, Von Neumann(冯诺依曼)在 1945 设计的 EDVAC 电子计算机,它的结构是一种最早的顺序机执 行标量数据的计算机系统结构。顺序机是从位串行操作到字并行操作,从定点运算到浮点 运算逐步改进过来的。由于 Von Neumann 系统结构的程序是顺序执行的,所以速度很慢。 随着硬件技术的进步,不断有新的计算机系统结构产生,其计算性能也在不断提高。计算 机系统结构是一门讨论和研究通用的计算机中央处理器如何提高运算速度性能的学问。对 计算机系统结构的深入了解是设计高性能的专用的硬线逻辑系统的基础,因此将是本书讨 论的重点之一。但由于本书的重点是利用 Verilog HDL 进行复杂数字电路的设计技术和方 法,大量的篇幅将介绍利用 HDL 进行设计的步骤、语法要点、可综合的风格要点、同步有 限状态机和由浅入深的设计实例。 1.6 设计方法学 复杂数字系统的设计是一个把思想(即算法)转化为实际数字逻辑电路的过程。我们都知 道同一个算法可以用不同结构的数字逻辑电路来实现,从运算的结果说来可能是完全一致 的,但其运算速度和性能价格比可以有很大的差别。我们可用许多种不同的方案来实现能 实时完成算法运算的复杂数字系统电路,下面列出了常用的四种方案:1)以专用微处理机 芯片为中心来构成完成算法所需的电路系统;2)用高密度的 FPGA(从几万门到百万门);3) 3
第一章数字信号处理、计算、程序、算法和硬线逻辑的基本概念 ----------------------------------------------------------------------------------------------------------------------------------------- 设计专用的大规模集成电路(ASIC);4)利用现成的微处理机的 IP 核并结合专门设计的高 速 ASIC 运算电路。究竟采用什么方案要根据具体项目的技术指标、经费、时间进度和批量 综合考虑而定。 在上述第二、第三、第四种设计方案中,电路结构的考虑和决策至关重要。有的电路结构 速度快,但所需的逻辑单元多,成本高;而有的电路结构速度慢,但所需的逻辑单元少, 成本低。复杂数字逻辑系统设计的过程往往需要通过多次仿真,从不同的结构方案中找到 一种符合工程技术要求的性能价格比最好的结构。一个优秀的有经验的设计师,能通过硬 件描述语言的顶层仿真较快地确定合理的系统电路结构,减少由于总体结构设计不合理而 造成的返工,从而大大加快系统的设计过程。 1.7 专用硬线逻辑与微处理器的比较 在信号处理专用计算电路的设计中,以专用微处理器芯片为中心来构成完成算法所需的电 路系统是一种较好的办法。我们可以利用现成的微处理器开发系统,在算法已用 C 语言验 证的基础上,在开发系统工具的帮助下,把该 C 语言程序转换为专用微处理器的汇编再编 译为机器代码,然后加载到样机系统的存储区,即可以在开发系统工具的环境下开始相关 算法的运算仿真或运算。采用这种方法,设计周期短、可以利用的资源多,但速度、能耗、 体积等性能受该微处理器芯片和外围电路的限制。 用高密度的 FPGA(从几万门到几十万门)来构成完成算法所需的电路系统也是一种较好的 办法。我们必须购置有关的 FPGA 开发环境、布局布线和编程工具。有些 FPGA 厂商提供的 开发环境不够理想,其仿真工具和综合工具性能不够好,我们还需要利用性能较好的硬件 描述语言仿真器、综合工具,才能有效地进行复杂的 DSP 硬线逻辑系统的设计。由于 FPGA 是一种通用的器件,它的基本结构决定了对某一种特殊应用,性能不如专用的 ASIC 电路。 采用自行设计的专用 ASIC 系统芯片(System On Chip), 即利用现成的微处理机 IP 核或 根据某一特殊应用设计的微处理机核(也可以没有微处理机核),并结合专门设计的高速 ASIC 运算电路,能设计出性能价格比最高的理想数字信号处理系统。这种方法结合了微处 理器和专用的大规模集成电路的优点,由于微处理器 IP 核的挑选结合了算法和应用的特 点,又加上专用的 ASIC 在需要高速部分的增强,能“量体裁衣”, 因而各方面性能优越。 但由于设计和制造周期长、投片成本高,往往只有经费充足、批量大的项目或重要的项目 才采用这一途径。当然性能优良的硬件描述语言仿真器、综合工具是不可缺少的,另外对 所采用的半导体厂家基本器件库和 IP 库的深入了解也是必须的。 以上所述算法的专用硬线逻辑实现都需要对算法有深入的了解,还需掌握硬件描述语言和 相关的 EDA 仿真、综合和布局布线工具。 1.8 C 语言与硬件描述语言在算法运算电路设计的关系和作用 数字电路设计工程师一般都学习过编程语言、数字逻辑基础、各种 EDA 软件工具的使用。 4
第一章数字信号处理、计算、程序、算法和硬线逻辑的基本概念 ----------------------------------------------------------------------------------------------------------------------------------------- 就编程语言而言,国内外大多数学校都以 C 语言为标准,只有少部分学校使用 Pascal 和 Fortran。 算法的描述和验证常用 C 语言来做。例如要设计 Reed-Solomen 编码/解码器,我们必须先 深入了解 Reed-Solomen 编码/解码的算法,再编写 C 语言的程序来验证算法的正确性。运 行描述编码器的 C 语言程序,把在数据文件中的多组待编码的数据转换为相应的编码后数 据并存入文件。再编写一个加干扰用的 C 语言程序,用于模拟信道。它能产生随机误码位 (并把误码位个数控制在纠错能力范围内)将其加入编码后的数据文件中。运行该加扰程 序,产生带误码位的编码后的数据文件。然后再编写一个解码器的 C 语言程序,运行该程 序把带误码位的编码文件解码为另一个数据文件。只要比较原始数据文件和生成的文件便 可知道编码和解码的程序是否正确(能否自动纠正纠错能力范围内的错码位)。用这种方法 我们就可以来验证算法的正确性。但这样的数据处理其运行速度只与程序的大小和计算机 的运行速度有关,也不能独立于计算机而存在。如果要设计一个专门的电路来进行这种对 速度有要求的实时数据处理,除了以上介绍的 C 程序外,还须编写硬件描述语言(如 Verilog HDL 或 VHDL)的程序,进行仿真以便从电路结构上保证算法能在规定的时间内完成,并 能与前端和后端的设备或器件正确无误地交换数据。 用硬件描述语言(HDL)的程序设计硬件的好处在于易于理解、易于维护、调试电路速度 快、有许多的易于掌握的仿真、综合和布局布线工具,还可以用 C 语言配合 HDL 来做逻 辑设计的前后仿真,验证功能是否正确。 在算法硬件电路的研制过程中,计算电路的结构和芯片的工艺对运行速度有很大的影响。 所以在电路结构确定之前,必须经过多次仿真: 1) C 语言的功能仿真。 2) C 语言的并行结构仿真。 3) Verilog HDL 的行为仿真。 4) Verilog HDL RTL 级仿真。 5) 综合后门级结构仿真。 6) 布局布线后仿真。 7) 电路实现验证。 下面介绍用 C 语言配合 Verilog HDL 来设计算法的硬件电路块时考虑的三个主要问题: 为什么选择 C 语言与 Verilog HDL 配合使用? C 语言与 Verilog HDL 的使用有何限制? 如何利用 C 来加速硬件的设计和故障检测? 1) 为什么选择 C 语言与 Verilog 配合使用 首先,C 语言很灵活,查错功能强,还可以通过 PLI(编程语言接口)编写自己的系 统任务直接与硬件仿真器(如 Verilog-XL)结合使用。C 语言是目前世界上应用最为 广泛的一种编程语言,因而 C 程序的设计环境比 Verilog HDL 的完整。此外,C 语言 5
第一章数字信号处理、计算、程序、算法和硬线逻辑的基本概念 ----------------------------------------------------------------------------------------------------------------------------------------- 可应用于许多领域,有可靠的编译环境,语法完备,缺陷较少。 比较起来, Verilog 语 言只是针对硬件描述的,在别处使用(如用于算法表达等)并不方便。而且 Verilog 的 仿真、综合、查错工具等大部分软件都是商业软件,与 C 语言相比缺乏长期大量的使 用,可靠性较差,亦有很多缺陷。所以,只有在 C 语言的配合使用下,Verilog 才能更 好地发挥作用。 面对上述问题,最好的方法是 C 语言与 Verilog 语言相辅相成,互相配合使用。这就是 既要利用 C 语言的完整性,又要结合 Verilog 对硬件描述的精确性,来更快更好地设 计出符合性能要求的硬件电路系统。利用 C 语言完善的查错和编译环境,设计者可以 先设计出一个功能正确的设计单元,以此作为设计比较的标准。然后,把 C 程序一段 一段地改写成用并型结构(类似于 Verilog)描述的 C 程序,此时还是在 C 的环境里, 使用的依然是 C 语言。如果运行结果都正确,就将 C 语言关键字用 Verilog 相应的关 键字替换,进入 Verilog 的环境。将测试输入同时加到 C 与 Verilog 两个单元,将其输 出做比较。这样很容易发现问题的所在,然后更正,再做测试,直至正确无误。剩下 的工作就交给后面的设计工程师继续做。 2) C 语言与 Verilog 语言互相转换中存在的问题 这样的混合语言设计流程往往会在两种语言的转换中会遇到许多难题。例如, 怎样把 C 程序转换成类似 Verilog 结构的 C 程序,来增加并行度,以保证用硬件实现时运行速 度达到设计要求;又如怎样不使用 C 中较抽象的语法:例如迭代,指针,不确定次数 的循环等等,也能来表示算法(因为转换的目的是要用可综合的 Verilog 语句来代替 C 程序中的语句,而可用于综合的 Verilog 语法是相当有限的,往往找不到相应的关键字 来替换)。 C 程序是一行接一行依次执行的,属于顺序结构,而 Verilog 描述的硬件是可以在同一 时间同时运行的,属于并行结构。这两者之间有很大的冲突。而 Verilog 的仿真软件也 是顺序执行的,在时间关系上同实际的硬件是有差异的,可能会出现一些无法发现的 问题。 Verilog 可用的输出输入函数很少。C 语言的花样则很多,转换过程中会遇到一些困难。 C 语言的函数调用与 Verilog 中模块的调用也有区别。C 程序调用函数是没有延时特性 的,一个函数是唯一确定的,对同一个函数的不同调用是一样的。而 Verilog 中对模块 的不同调用是不同的,即使调用的是同一个模块,必须用不同的名字来指定。Verilog 的语法规则很死,限制很多,能用的判断语句有限。仿真速度较慢,查错功能差,错 误信息不完整。仿真软件通常也很昂贵,而且不一定可靠。C 语言没有时间关系,转 换后的 Verilog 程序必须要能做到没有任何外加的人工延时信号,也就是必须表达为有 限状态机,即 RTL 级的 Verilog,否则将无法使用综合工具把 Verilog 源代码转化为门 级逻辑。 3) 如何利用 C 语言来加快硬件的设计和查错 6
第一章数字信号处理、计算、程序、算法和硬线逻辑的基本概念 ----------------------------------------------------------------------------------------------------------------------------------------- 下表中列出了常用的 C 与 Verilog 相对应的关键字与控制结构 C sub-function if-then-else Case {,} For While Break Define Int Printf Verilog module, function, task if-then-else Case begin, end For While Disable Define Int monitor, display,strobe 下表中,列出了 C 与 Verilog 相对应的运算符 C * / + - % ! && || > < >= <= == != ~ & | ^ ~^ >> << ?: Verilog * / + - % ! && || > < >= <= == != ~ & | ^ ~^ >> << ?: 功能 乘 除 加 减 取模 反逻辑 逻辑且 逻辑或 大于 小于 大于等于 小于等于 等于 不等于 位反相 按位逻辑与 按位逻辑或 按位逻辑异或 按位逻辑同或 右移 左移 同等於 if-else 敘述 从上面的讨论我们可以总结如下: C 语言与 Verilog 硬件描述语言可以配合使用,辅助设计硬件 C 语言与 Verilog 硬件描述语言很象,只要稍加限制,C 语言的程序很容易转成 Verilog 的程序 7
第一章数字信号处理、计算、程序、算法和硬线逻辑的基本概念 ----------------------------------------------------------------------------------------------------------------------------------------- 美国和中国台湾地区逻辑电路设计和制造厂家大都以 Verilog HDL 为主,中国大陆地区目 前学习使用 VHDL 的较多。到底选用 VHDL 或是 Verilog HDL 來配合 C 一起用,就留給各位 自行去決定。但从学习的角度来看,Verilog HDL 比較簡單,也與 C 语言较接近,容易掌 握。从使用的角度,支持 Verilog 硬件描述语言的半导体厂家也较支持 VHDL 的多。 总结: 本章介绍了信号处理与硬线逻辑设计的关系,以及有关的基本概念。引入了 Verilog HDL 硬件描述语言,向读者展示一种九十年代才真正开始在美国等先进的工业国家逐步推广的 数字逻辑系统的设计方法。借助于这种方法,在电路设计自动化仿真和综合工具的帮助下, 我们完全有能力设计并制造出有自己知识产权的 DSP(数字信号处理)类和任何复杂的数 字逻辑集成电路芯片,为我国的电子工业和国防现代化作出应有的贡献。在下面的各章里 我们将分步骤地详细介绍这种设计方法。 思考题: 1) 什么是信号处理电路? 2) 为什么要设计专用的信号处理电路? 3) 什么是实时处理系统? 4) 为什么要用硬件描述语言来设计复杂的算法逻辑电路? 5) 能不能完全用 C 语言来代替硬件描述语言进行算法逻辑电路的设计? 6) 为什么在算法逻辑电路的设计中需要用 C 语言和硬件描述语言配合使用来提高设计效 率? 8
分享到:
收藏