1、通信IC设计 样稿,仅供参考 作者:李庆华 版权所有,转载请标明出处 1 1 第1章 集成电路设计与HDL 1.1 本章概要 本章将简单论述集成电路(IC)的概念与设计原理,并从IC的本质“集成”出发,讲述IC的三个核心议题:“集成什么”、“如何集成”、“如何处理集成带来的利弊”。学习本章后应当建立起IC设计是一个系统工程的概念,知道Verilog HDL是一种硬件描述语言而不是设计语言,硬件电路本质上是并行运行的而且是有时序关系的。 本章的内容安排如下: 第1节从总体上论述什么是IC设计,IC设计的流程以及整体规划的重要性,并强调面向验证和软硬件结合的设计原则。 第2节简要介绍Verilog
2、语法,并通过10个例子讲述如何通过简单的HDL语句描述复杂的硬件电路。本节主要强调HDL给出的描述需要有具体对应的基础电路原型,并明确时序的概念。此外给出了各种常用的验证小技巧,帮助读者快速进行验证设计。 第3节则是对第2节设计方法的一个总结和提炼。本节主要强调必须按照结构化方式设计电路,并需要遵循常规思维模式对复杂模块进行解耦,按照控制与数据分离的原则简化设计。此外,还讲述了芯片中控制流与数据流的设计方法。 第4节则给出逻辑电路的各种设计技巧,引入吞吐率、电路时序等关键性概念,详细介绍了逻辑电路设计常用的优化方法:重定时、折叠、展开与脉动阵列,并给出背后隐藏的设计思想。 第5节则针对IC中的
3、定点化进行论述,强调定点化实质是人与机器的理解如何达到一致。 第6节给出了HDL语言描述规范,并强调遵循规范实质是一种设计模式,能够有效增加设计成功率。 通信IC设计 样稿节选 作者:李庆华 版权所有,转载请标明出处 2 1.2 集成电路设计基础 1.2.1 集成电路的概念 集成电路(Integrated Circuit,缩写为IC)又称芯片,是现代信息社会的基石;就像石油是工业的血液一样,集成电路承载了信息时代的灵魂,是现代技术发展的精华结晶,所有现代的电子设备都必须依赖于芯片才能发挥出完全功效。集成电路在最开始时,只是完成多个基本元器件的集成,但经过数十年的演化,已经演变为一个完整独立的设
4、备形态,单个芯片就可以完成一个传统的设备系统功能,达到真正的System on Chip(SoC)。例如现在任何一台智能手机的处理器芯片,其处理能力就远超上世纪80年代的大型计算机。同时芯片也朝各个应用领域和各种应用场景演进,例如可穿戴式芯片,微机械(MEMS)芯片等。 无论集成电路如何发展,但其最核心的部分,仍然没有改变,那就是“集成”,其所衍生出来的各种学科,大都是围绕着“集成什么”、“如何集成”、“如何处理集成带来的利弊”这三个问题来开展的。所以读者在学习和思考如何进行芯片设计时,必须站在芯片整体解决方案的竞争力、芯片设计生产的复杂度、整体芯片团队设计能力的角度进行思考。最典型的例子就是
5、MTK的终端芯片解决方案,正是由于该芯片整体解决方案的竞争力超强,所以横扫了具备很强通信终端芯片设计能力的TI与Broadcom等公司的对应产品。 1.2.1.1 集成电路的定义 集成电路的正式定义是指,把一定数量的常用电子元件,如电阻、电容、晶体管等,以及这些元件之间的连线,通过半导体工艺集成在一起的具有特定功能的电路。图1-1就是一个典型的集成电路芯片,集成了大量的功能部件,包括模拟电路、数字电路以及CPU。 图1-1典型集成电路芯片 通信IC设计 样稿节选 作者:李庆华 版权所有,转载请标明出处 3 集成电路可以分为模拟芯片、数字芯片和数/模混合芯片三大类。 数字集成电路是基于数字逻辑(
6、布尔代数)设计和运行的,用于处理数字信号的集成电路。根据集成电路的定义,也可以将数字集成电路定义为:将元器件和连线集成于同一半导体芯片上而制成的数字逻辑电路或系统。根据数字集成电路中包含的门电路或元、器件数量,可将数字集成电路分为小规模集成(SSI)电路、中规模集成(MSI)电路、大规模集成(LSI)电路、超大规模集成VLSI电路、特大规模集成(ULSI)电路等。 模拟集成电路主要是指由电容、电阻、晶体管等组成的模拟电路集成在一起用来处理模拟信号的集成电路。与通信信号处理相关的模拟集成电路,主要包括:射频电路(RF)、功率放大器(PA与LNA)、锁相环(PLL)、模拟滤波器、电源管理芯片等。通
7、常模拟芯片与数字芯片需要密切配合才能实现一个完善的功能电路。因此,每个从事算法和通信芯片设计的读者,都应当熟悉上述几类模拟芯片的工作特性,并能根据模拟器件做出有针对性的设计。模拟集成电路的主要构成单片包括:放大器、滤波器、反馈电路、基准源电路、开关电容电路等。 数模混合芯片则是同一芯片中既包含数字电路又包含模拟电路,当前消费电子和无线通信的主芯片通常都是此类芯片。 图1-2例子为无线通信芯片(CMMB)的版图框架,该芯片架构有一定的代表性。 通信IC设计 样稿节选 作者:李庆华 版权所有,转载请标明出处 4 数字基带流水ADC锁相环锁相环数模转换基准源低噪放模拟滤波器混频器芯片管脚图1-2典型
8、数模混合通信芯片内部版图 1.2.1.2 SoC的概念 对于单一功能电路而言,采用纯粹的硬件逻辑设计方案(ASIC),基本能够满足应用需求。但对于通信系统或者移动互联网应用而言,芯片功能需求时刻变化,应对客户群体形形色色,如果采用纯硬件逻辑,必然导致应用市场极为狭窄,所以复杂的系统级芯片必须SoC化或者软件化。 SoC化意味着:同样的芯片,通过加载不同的应用软件,实现不同的功能定义,实现单一芯片的通用化,从而达到单片成本最小化。因此,读者在后续设计中还需要熟悉如何将一个单纯的逻辑电路改造为能够支持各种软件定义的功能器件,实现芯片功能覆盖的软件化。 在芯片中软件化的同时,我们需要了解硬件与软件各
9、自的优缺点: 硬件 优点 吞吐率高、全并行化处理、可以相对软件实现10倍100倍的性能提升; 相对CPU/DSP设计而言,复杂度较低,整体规划简单; 软件设计相对简单,而且代码精简 缺点 成本较高:需要额外的硬件资源,芯片面积相对较大,此外还可能存在大量IP使用费用; 通信IC设计 样稿节选 作者:李庆华 版权所有,转载请标明出处 5 研发走起很长,从概念原型到RTL编码验证只是6个月; 一次成品率很低,通常需要多次迭代验证才能正常工作; 各类IC开发工具开销成本很高; 软件 优点 成本较低,随时添加功能,而且不会随着芯片量产而发生变化; 调试简单,无需考虑时序收敛,整机功耗控制相对容易。 缺
10、点 相对硬件实现而言,性能较差;同时算法实现对CPU/DSP的处理速度、存储容量有较高要求。而且由于软件开发不确定性因素很多,通常在芯片上市后,依然需要发布大量补丁版本 与大家接触最多的SoC芯片,就是当前的智能终端芯片,例如高通的骁龙801处理器或者联发科的MTK6592等。这些芯片都具备多核CPU与GPU,集成多种制式的无线通信模块,支持运行Android(linux的分支之一),能够安装各类应用软件,完成各类轻量计算。图1-3是此类芯片的技术分解图,通过该图可以发现终端芯片设计与设计一套完整的PC系统实际区别不大,核心在于软硬件的集成: 图1-3终端芯片开发的基础与条件 1.2.1.3
11、集成电路设计的分工与合作 当前主流的IC芯片,常常包含上千万个晶体管或者上亿个晶体管,非常的复杂。而芯片作为一次成形的产品,如果出现Bug,将造成极大的损失,因此IC设计必然要求专业化分工与合作,所以复杂IC设计的核心重点在于专业化的组织与管理。只有通过高效的组织与通信IC设计 样稿节选 作者:李庆华 版权所有,转载请标明出处 6 管理,才能保证整个芯片的成功。个人英雄主义在芯片庞大的规模面前就像大海里面的浪花一样,没有太多的涟漪。这是任何一个准备从事IC设计的读者,必须要有的心理准备。 IC设计通常包含多个方向,包括算法设计、系统构架、数字电路设计(数字前端)、模拟电路设计、版图设计、测试验
12、证、数字后端与DFT(Design for Test)、芯片生产测试设计(DFM设计)、芯片固件与软件设计、电路板与应用原型开发等。 上述IC设计方向只有完整的组合在一起,并形成均衡,才能设计出一个完善的、具有一定竞争力且能被市场接受的芯片。图1-4为芯片分工层次图。 图1-4芯片设计中的分工层次 对于系统架构设计工程师而言,其设计的重点是保证IC芯片的整体架构合理,各个基本单元模块功能均衡、不存在设计短板,而且芯片在可控性、可验证性、可测性以及前后芯片产品的可维护性和延续性上具备卓越的性能。系统构架是整个IC设计中最基础的工作,产品是否满足市场和客户需求、上市时间是否领先竞争对手、功能是否具
13、有竞争力、解决方案成本和芯片良率是否可控,都取决于系统构架。 对于算法设计工程师而言,其设计的重点是保证IC芯片能够完成特定功能,且设计的算法具备可实施性。算法工程师能够决定芯片的性能和大部分成本,同时也是系统构架与电路设计的中间桥梁。 对于电路设计工程师而言,其设计的重点在于将算法精确的用电路实现,同时兼顾功耗、成本和电路可测试性。此外还需要独立设计模块控制电路、各种电路胶粘逻辑(glue logic)、时钟系统、复位系统以及全局控制逻辑。 对于测试验证工程师而言,其工作的重点在于根据设计规范(Spec)和设计需求,对电路通信IC设计 样稿节选 作者:李庆华 版权所有,转载请标明出处 7 进
14、行测试验证。验证工作通常包含白盒测试与黑盒测试,往往需要引入很多的测试方法学(VMM)和测试手段,例如OVM/Assertion等。此外还需要对代码进行多种覆盖测试和可靠性、DFT/DFM测试。由于芯片验证的复杂性,往往会引入多个团队对同一款芯片做全方位验证。 对于固件与软件工程师而言,其工作的重点在于配合电路工程师将整个IC 芯片运行起来,充分挖掘出芯片的功能潜力,并提供各种扩展创意。当前的IC设计领域,固件与软件的开发工作量已经占据整个芯片开发的60%以上,而且还在持续增加。出现这种情况的原因在于,单纯的电路逻辑是无法应对灵活多变的市场需求,必须通过随时可变的软件进行应对。例如,现在的LT
15、E终端芯片,除射频信号处理外,所有的基带(Baseband)都是可控和编程的,而协议处理则基本上交给多核CPU或者DSP进行处理。例如很多领先的无线通信芯片设计公司,软件设计划分的更加详细,包括软件平台(操作系统、设备驱动)、物理层协议软件、MAC协议处理、高层协议栈以及应用软件等。所以,对于芯片设计而言,软件就是整个芯片的灵魂,任何一款智能芯片开发首先应当想到如何灵活配置,并引入适当的软件支持。 图1-5是IC设计中常见的软硬件协同开发流程图,读者可以发现软件开发实际上已经在IC设计中占据了很重要的位置: 通信IC设计 样稿节选 作者:李庆华 版权所有,转载请标明出处 8 图1-5芯片的软硬
16、件协同开发流程 讲述IC设计复杂性和分工的主要目的,是为了让读者充分了解到IC设计并不是一个单纯的画电路图或者写代码的过程,而是一个综合的实现过程,多个专业方向配合的过程。因此,读者除了掌握传统的设计方法外,还需要掌握系统设计、算法、验证、软件等基础知识。 1.2.2 IC设计的本质 接触过电子产品的人都知道“摩尔定律”,即:集成电路上所集成元器件数量,每隔18个月就翻一倍;或者微处理器的性能每隔18个月提高一倍,或价格下降一半。这一定律揭示了信息技术进步的速度。 图1-6摩尔定律的典型例子 通信IC设计 样稿节选 作者:李庆华 版权所有,转载请标明出处 9 该定律的起源最初来自于对Intel
17、微处理器的性能与生成工艺的观察。最早的微处理器是Intel的4004,采用10us工艺,只有2300个晶体管,主频为0.74MHz;而在2015年,基于Haswell构架的酷睿i7笔记本计算机CPU,则采用22nm工艺和3D晶体管技术,包含超过10亿个晶体管,工作主频最高可达3.5GHz。从4004到 Sandy Bridge,晶体管的速度提升了5000倍,功耗只有当初的5000分之一,价格则降低到了50000分之一。 对于其他类似的芯片产品,同样遵循摩尔定律。例如大家正在使用的智能手机,正是由于摩尔定律的神奇作用,使大家很快用上了越来越强大,堪比桌面计算机的应用处理器和高速移动网络。 图1-
18、7 Intel处理器的摩尔定律之路 此外,物联网和移动互联网的发展,摩尔定律也在更多的应用领域生效。图1-8是一个移动互联网时代的新摩尔定律示意图。 通信IC设计 样稿节选 作者:李庆华 版权所有,转载请标明出处 10 图1-8摩尔定律的扩展 对于从事IC设计的读者而言,如果想要跟上时代,就必须做到每18个月设计能力应当提升一倍。可能很多读者觉得非常疑惑,这怎么可能?人的能力增长是有限度的,就像一个人无论如何都不可能举起一吨的石头。但事实上,很多技术长青的IC设计公司完全做到了这一点,除了通过有效的团队管理外,其中的关键还包含三点:(1)EDA设计工具的改进;(2)设计与验证方法学的进步;(3
19、)知识产权(IP)的积累和标准化。 1.2.2.1 摩尔定律的内涵 由于芯片工艺的不断进步,设计工具也在同步配套进步,各种设计规范也在不停的引入,因此随时掌握新工具、新特性对于工程师而言至关重要。对于数字IC前端工程师而言,一个合格的标准就是对工具使用的充分熟练与否以及所设计对象规范的深入理解程度,即Specification的掌握程度。 而设计与验证方法学,则需要工程师能够理解完整的设计规则和设计流程,并明白隐藏在规则之后的各种原因以及出发点。例如上世纪80年代,还需要手工搭建各个门级电路,然后形成上千门的规模电路;最早的8086就是纯手工版图搭建;但遵循摩尔定律的发展,很快手工搭建电路不再
20、适应IC设计的需求。上世纪90年代,业内主流的芯片设计手段就变成了Verilog/VHDL。但在2000年后,同样由于摩尔定律的推动,SoC芯片大量出现,因此基于标准化IP的设计方法学出现,这才带来了当前智能手机的繁荣和移动互联网的出现;此外第二代的HLS(高级综合)工具出现,并逐渐走向实用化,很多公司已经采用SystemVerilog/SystemC作为产品快速上市的基本设计手段。又如在2007年前,验证方法都通信IC设计 样稿节选 作者:李庆华 版权所有,转载请标明出处 11 是采用Verilog/e/Vera作为验证语言,各种随机测试方法、PLI/DirectC作为辅助测试手段;但在20
21、07年之后,基于SystemVerilog的VMM/UVM大行其道,各种AIP和VIP全面引入。 此外,由于IC设计在工程上存在很明显的“二八定律”,即大部分成功的项目都是只做20%的更新,其余采用成熟设计或标准IP方案。所以,IP的集成和管理在芯片设计中非常重要。读者很容易注意到:现在的手机主芯片基本上都是基于ARM公司Cortex-A系列的处理器,所设计的总线规范都是遵循AXI或者AHB总线规范,外设也是采用标准的IP构架,只有少量全新设计的功能添加到整个芯片设计中。这就是一种典型的二八渐进式开发。另外,站在长时间的角度观察很多成功公司的芯片Roadmap,同样也会发现,每个芯片系列都基本
22、上基于相同构架,而同一系列之间的变换改动较小,最多不超过20%的全新设计。笔者曾经做过一次全新的WIFI芯片开发,最终也是经过45次的积累,才算完成了最终的构架;后续成功的芯片都是基于该芯片进行少量修改完成的。 因此,读者在开始从事IC设计时(无论这个IC是ASIC还是FPGA),都必须牢牢把握住芯片行业的规律:变化是永恒的,不变的是隐藏其后的追求集成化和系统化。 1.2.2.2 IC设计的核心内容 前面描述了很多的IC 设计理念和规范,但大家可能还是对芯片开发还是会有一定的疑问:究竟什么是芯片开发?芯片开发可以认为就是一种计算的固化过程。对于媒体芯片而言,就是完成一系列的标准数学变换,例如大
23、家熟悉的MP3,从数据到人耳听到的音乐,就是每秒100 次左右的离散余弦变换与子带滤波;而视频图像则同样是一系列离散余弦变换或小波变换。对于2G/3G等无线通信芯片而言,每1Kbit的数据传输就意味着几千次的数据变换和查表映射。对于CPU而言,每一条CPU指令就意味着某个固定的逻辑电路或者固化微码程序被执行。 因此,理解芯片开发是一个计算的固化过程,非常有助于读者判断一段算法是否适合设计为标准的芯片逻辑,或者如何对一个芯片内部进行软硬件划分。此外,由于芯片实际是固化计算的载体,因此选择具体的硬件实现算法以及如何将该算法映射到具体硬件逻辑,就显得非常重要。本书的核心就是围绕这两点进行论述,并通过
24、描述各类信号处理算法的原理,以及对应硬件逻辑映射方案,让读者掌握什么才是真正的算法IC芯片开发。可以认为:“算法加时序”就是IC设计,类似于“算法加上数据结构”就是软件这一概念。 1.2.3 IC设计流程 硬件描述语言(Hardware Design Language,HDL)作为适应摩尔定律而诞生的一门语言,通信IC设计 样稿节选 作者:李庆华 版权所有,转载请标明出处 12 目前在国内还有广泛的市场,也是业内必会的基础设计语言。HDL目前常用的包括Verilog、VHDL、SystemVerilog,其中Verilog与VHDL都在广泛应用,也在不停演进,而SystemVerilog则是V
25、erilog的语法加强版,引入了较多新的设计理念。如果读者不过分追求新潮流和新功能,熟练掌握Verilog是进行硬件逻辑设计比较好的选择。因此,本书后续内容将以Verilog为基础,讲述无线通信的芯片设计原理与方法。 基于HDL的设计流程,主要包含包括系统架构设计,软件结构设计和ASIC硬件设计三大部分。在芯片设计时,必须了解整个系统的应用场景,定义出合理的芯片架构,使得软硬件配合达到系统最佳工作状态。此外,需要建立起以IP复用或更大的平台复用为基础的观念,在整个流程中既要以IP复用为基础,又要将当前设计作为下一轮设计的IP和基础平台。基于HDL设计通常的步骤如下: 1、系统需求制定 系统设计
26、首先从确定所需的功能开始,包含系统基本输入和输出及基本算法需求,以及系统要求的功能、性能、功耗、成本和开发时间等。在这一阶段,通常会将用户的需求转换为用于设计的技术文档,并初步确定系统的设计流程。这一阶段是整个芯片项目开发中最重要的阶段,各类设计框架、验证模型均需在此阶段完成。很多失败的IC设计项目就是由于该阶段重要性被忽略而导致的。 2、高级算法建模与仿真 设计者将使用如C和C+等高级语言创建整个系统的高级算法模型和仿真模型。目前很多的EDA工具均能帮助完成这一步骤。有了高级算法模型,便可以得到软硬件协同仿真所需的可执行的说明文档。此类文档会随着设计进程的深入而不断地完善和细化。 3、软硬件
27、划分过程 设计者通过软硬件划分来决定哪些功能应该由硬件完成,哪些功能应该由软件来实现。此外该步骤还涉及软件硬件顶层设计与内部基本模块划分。对于硬件而言,就是将整体硬件实现框架确定,包括全局模块设定(时钟、复位、功控等)、主控模块实现方案、数据流(Dataflow)分解方案以及接口时序、总线或数据交换接口设计、调试接口以及验证接口。硬件框架确认后,建立各种适合软硬件交互的验证环境。对于软件而言,则是在硬件框架基础上确立软件框架,包括确定HAL(硬件抽象层)、设计驱动与软件平台、底层软件、高层软件、应用软件以及测试软件的层次划分以及相互调用接口。此外,软件还需要设计整体的自动测试框架。如果芯片开发
28、追求高效的软硬件配合,还应当根据敏捷开发的要求,设计以面向测试为中心的软硬件框架。 通信IC设计 样稿节选 作者:李庆华 版权所有,转载请标明出处 13 软硬件划分以及内部框架确认是一个需要反复评估-修改直至满足系统需求的过程。很多重大Bug或者返工基本都是由这一步引入的。 4、软硬件同步设计 由于软硬件的分工已明确,芯片的架构及同软件的接口也已定义,接下来便可以进行软硬件的同步设计了。其中硬件设计包括RTL设计和集成、综合、布局布线及最后的流片。软件设计则包括算法优化、应用开发,以及操作系统、接口驱动和应用软件的开发。 在很多初学者心中,往往认为第4阶段的硬件部分就是完整的IC设计,很多ED
29、A工具厂商也是这样宣传的;实际上这是一种错误的理解,因为IC设计是一个完整的工程设计,而不只是一个简单的编码以及工具编译过程。只有前面的步骤1、2、3完善后,硬件设计才能具备一个良好的基础。如果忽略前面的步骤,一旦某个底层模块功能需要修订或者时序不满足要求,必然会影响周边模块,甚至顶层模块也必须进行修改,整体工程修改量和进度不可控。因此,一个良好的工程项目都是通过完善的设计步骤来保证的。业内也有类似的话:逻辑时序是设计出来的,不是仿出来的,更不是湊出来的。 1.2.3.1 HDL到硬件基本流程 从HDL设计到最终版图实现的设计流程如图1-9 所示,基本上每个步骤都会用到某款EDA工具。虽然设计
30、流程比较复杂,但可以看到最核心的设计源头还是硬件设计定义、模块设计(RTL代码变换)和IP复用: 通信IC设计 样稿节选 作者:李庆华 版权所有,转载请标明出处 14 图1-9硬件设计流程 1.硬件设计定义说明(Hardware Design Specification) 硬件设计定义说明描述芯片总体结构、规格参数、模块划分、使用的总线以及各个模块的详细定义等。 2.模块设计及IP复用(Module Design 2 input 2:0a,b; 3 input Cin; 4 output 2:0 Sum; 5 output Count; 6 assign Count,Sum=a+b+Cin;
31、7 endmodule 描述方法二:基于always语句的行为描述方法,这也是一种组合电路的描述方法。 01 module adder(a,b,Cin,Sum,Count); 02 input 4:0 a,b; 03 input Cin; 04 output reg 4:0 Sum; 05 output reg Count; 06 reg T1,T2,T3; 08 always(a or b or Cin) begin 09 Sum=abCin; 10 T1=A 11 T2=Cin 12 T3=Cin 13 Count=T1|T2|T3; 通信IC设计 样稿节选 作者:李庆华 版权所有,转载请
32、标明出处 19 14 end 15 endmodule 描述方法三:按照门电路方式搭建,属于结构体描述方式,通常在门级结构描述中常见。 01 module adder (a,b,Cin,Sum,Count); 02 input a,b,Cin; 03 output Sum,Count; 04 05 xor a1(s1,a1,b); 06 xor a2(Sum,s1,Cin); 07 and a3(T1,a,b); 08 or a4(T2,a,b); 09 and a5(T3,Cin,T2); 10 or a6(Count,T1,T3); 11 endmodule 2.分频器 下面的代码描述的是
33、一个8分频电路,该电路占空比1:1,是典型的简单时序电路,读者可以从中了解时序电路的复位与控制方法。 01 module clk_div8( 02 input clk,rst, 03 output reg clk8 04 ); 05 reg 2:0 count; 06 07 always(posedge clk) 08 if (rst) begin 09 clk8b) sel_out=in1; else if(a=b) sel_out=in2; else sel_out=in3; 注意,if语句与case语句一样,在描述组合电路时,一定要给出全部分支情况,否则容易生成锁存Latch电路。 对于
34、循环语句,主要包含for、while、forever、repeat四类语句,但只有for语句才有可能具备可综合性,其余均为测试验证所准备。 循环语句for的语法为: for(表达式1;表达式2;表达式3)语句 其实可以将for语句理解为: for(循环变量赋初值;循环结束条件;循环变量增值)执行语句 for循环的例子如下,这是最原始的一个8bit乘法器实现,其中表示左移,等效于乘以2的移位次方: parameter size = 8; regsize-1:0 opa, opb; reg2*size-1:0 result; integer bindex; result=0; for( binde
35、x=0; bindex=size-1; bindex=bindex+1 ) 通信IC设计 样稿节选 作者:李庆华 版权所有,转载请标明出处 30 if(opbbindex) result = result + (opa(bindex); end 读者在检查逻辑综合结果后很容易发现,该代码实现其实是一个全并行的加法器,for语句等效于将以下语句完全展开: if(opbbindex) result = result +(opa(bindex); 所以读者在编写for语句时,一定要理解这是一个并行完全展开语句,而不是串行多周期执行。 1.3.4.3 算术逻辑单元例子 下面的代码,通过case语句给出
36、了一个最简单ALU(算术逻辑单元)的描述方法,方便大家加深印象: module alu #(parameter N=8)( input 2:0 opcode, /操作码 input N-1:0 a, /操作数 input N-1:0 b, /操作数 output regN-1:0 out /操作结果 ); localparam add =3d0; localparam minus=3d1; localparam band =3d2; localparam bor =3d3; localparam bnot =3d4; always(opcode or a or b)/电平敏感的 always
37、块 case(opcode) add: out = a + b; /加操作 minus: out = a - b; /减操作 band: out = a /求与 bor: out = a | b; /求或 bnot: out = a ; /求反 default:out = 8hx ; /未收到指令时,输出不定态 endcase endmodule 这个例子同样是一个组合电路,总共有8种选择,但电路只明确给出前5种选择的结果,其余都通过缺省语句设置为不定态结果。 这个例子引入了两个语法:(1)localparam 用于指定本地参数,主要是取代传统的define 宏定义,因为define 一旦定义
38、后,会全局有效,必须通过undef 配套才能使宏定义失效。新版本的verilog 所以推荐localparam用于设定局部宏参数。(2)引入多个运算操作符。 该例子还引入了基数表示法。我们知道,自然数通常是十进制表示,例如16,-32等等,Verilog支持给变量或信号赋值为自然数,但自然数通常都是默认32位整数,赋予某个变量后会产生各种截断处理,而且在操作时需要十进制转换为二进制,总之就是不够精确和灵活。因此,Verilog最常用的是基数表示法,例如3b011,4d5,5o27,6h3f,就分别表示3bit二进制011,4bit十进制5(为二进制101),5bit八进制27(为二进制10111),6bit十六进制3f(为二进制111111)。基数表示法的通用表示为: size base value