EDA第4章VHDL设计初步_第1页
EDA第4章VHDL设计初步_第2页
EDA第4章VHDL设计初步_第3页
EDA第4章VHDL设计初步_第4页
EDA第4章VHDL设计初步_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

EDA第4章VHDL设计初步硬件描述语言基础·程序结构·文本输入设计方法·典型设计实例Contents本章目录EDA第4章VHDL设计初步,涵盖语言概述、基本单元、文本输入与程序设计。01VHDL语言概述02VHDL语言的基本单元及其构成03VHDL文本输入设计方法04VHDL程序设计举例CHAPTER01VHDL语言概述从硬件描述语言的起源、特点与程序设计约定建立基础认知CHAPTER04·HDLOVERVIEW常用硬件描述语言简介硬件描述语言(HDL)是用软件方式描述数字电路结构与行为的标准化工具。VHDL和VerilogHDL是当前两大主流HDL,前者以严谨性和强类型著称,后者以灵活性和简洁性见长,两者均已纳入IEEE标准,在FPGA/CPLD开发中被广泛使用。VHDL1983年美国国防部资助开发,1987年成为IEEE1076标准。语法严谨、类型系统强大,支持层次化设计与多层级抽象。强类型欧洲主流适用于航空航天、国防等高可靠性复杂系统的设计验证。IEEE1076·1987VerilogHDL1984年GatewayDesignAutomation开发,1995年成为IEEE1364标准。语法接近C语言,学习曲线平缓。C-like语法北美主流在ASIC设计与中小型FPGA开发中占据主导地位,生态成熟。IEEE1364·1995SystemVerilogVerilog的超集,扩展了面向对象编程与高级验证功能,2005年成为IEEE1800标准。OOP支持UVM基础已成为现代芯片验证工程的主流语言,支持约束随机与功能覆盖率。IEEE1800·2005选型建议语言选择应综合考虑项目规模、团队背景与产业生态三大因素。大型系统级设计倾向VHDLIC前端设计倾向Verilog验证环境采用SystemVerilog规模·场景·团队CHAPTER04·VHDLVHDL的核心特点VHDL兼具强大的多层次设计能力和严谨的语言特性。它支持行为、数据流、结构三种描述方式,天然适配数字电路的并发特性,同时强类型检查和丰富的库管理机制为大型数字系统设计提供了可靠的工程保障。多层次设计能力支持从系统级、算法级、RTL级到门级的多层次描述,同一电路可在不同抽象层级进行建模与验证多层次抽象提供行为描述、数据流描述和结构描述三种建模方式,设计者可根据需求灵活选择或混合使用三种建模天然支持并发语句执行,精确对应数字电路中多个信号同时变化的物理并行特性并发执行严谨的语言特性强类型语言机制要求所有数据对象必须先声明后使用,编译阶段即可捕获类型不匹配等常见错误强类型检查类属(GENERIC)参数允许对设计实体的端口宽度、延时等参数进行灵活配置,显著提升模块复用性GENERIC库(LIBRARY)和程序包(PACKAGE)机制支持设计资源的统一管理与跨项目共享,适合大型工程协作LIBRARYChapter4·SyntaxVHDL程序设计约定VHDL遵循一套严格的书写规范,包括标识符命名规则、关键字大小写约定、注释格式等。这些约定虽然不影响编译结果,但直接影响代码的可读性、可维护性和团队协作效率,是良好编程习惯的基础。大小写约定VHDL不区分大小写,ENTITY与entity等价;推荐关键字大写、自定义标识符小写,以提升代码可读性。标识符命名必须以字母开头,可含字母、数字和下划线,禁止下划线结尾或连续双下划线(cnt_8合法,_cnt、cnt__8非法)。注释格式注释以双减号--起始,编译器忽略该行所有内容;多行注释需每行都加--,不支持块注释语法。语句与分号每条语句以分号结束,多条可同行用空格分隔;为可读性推荐每条独占一行并适当缩进。HDLCOMPARISON主流硬件描述语言对比不同硬件描述语言在设计哲学、类型系统、标准化程度和应用领域上各有侧重。VHDL以严谨著称适用于高可靠性系统,Verilog以灵活见长主导商业IC设计,SystemVerilog则统一了设计与验证的需求。主流硬件描述语言特性对比语言名称IEEE标准类型系统核心特点典型应用领域VHDLIEEE1076强类型语法严谨、描述能力强、支持多层次建模军工航天、FPGA系统级设计VerilogHDLIEEE1364弱类型语法灵活、接近C风格、学习曲线平缓ASIC设计、中小型FPGA项目SystemVerilogIEEE1800扩展强类型面向对象、断言验证、覆盖率驱动芯片验证、SoC设计AHDL非IEEE弱类型Altera专用、语法简单、工具绑定AlteraCPLD教学与简易设计总结:VHDL与VerilogHDL为两大主流HDL,SystemVerilog统一设计与验证,AHDL仅用于Altera生态CHAPTER02VHDL语言的基本单元及其构成深入解析实体、结构体与程序基本结构,掌握VHDL核心语法框架VHDLFundamentals入门实例:2选1多路选择器的VHDL描述2选1多路选择器是学习VHDL的经典入门案例,可直观理解实体与结构体两大核心组成部分,建立电路功能到代码表达的映射关系。01两个数据输入d0、d1,一个选择端sel;sel=0时输出y=d0,sel=1时输出y=d1。这是数字电路中最基础的数据选择逻辑,体现了条件控制的硬件实现方式。SEL→Y02通过ENTITY声明四个端口(d0、d1、sel、y),均定义为STD_LOGIC类型。实体定义了元件的外部接口,是VHDL模块化的基础,明确了信号流向与数据类型。ENTITY03ARCHITECTURE中使用WHEN-ELSE条件信号赋值:y<=d0WHENsel='0'ELSEd1。结构体描述内部实现,条件赋值语句直观对应多路选择器的逻辑功能。WHEN-ELSE04完整展示"声明端口→描述行为"的基本编程范式,是后续复杂设计的语法模板。掌握这一范式,可快速扩展到多路选择器、译码器等组合逻辑电路的设计。范式模板CHAPTER04·VHDLFUNDAMENTALSVHDL程序的基本结构一个完整的VHDL程序遵循"库引用→实体→结构体"的三层架构,三者缺一不可,共同构成VHDL设计的基本框架。库与程序包引用LIBRARY语句声明资源库,USE语句指定程序包std_logic_1164定义9值逻辑类型,是几乎所有设计的基础依赖常用库还包括ieee.std_logic_arith和ieee.std_logic_unsignedIEEE实体(ENTITY)定义外部端口接口:名称、方向(IN/OUT/INOUT)与数据类型相当于电路芯片的引脚定义,决定模块与外部世界的信号通道实体名称需与文件名一致,是设计层次化的基本单元PORT结构体(ARCHITECTURE)描述内部逻辑功能,是电路功能实现的核心区域支持并行语句、顺序语句或元件例化,同一实体可有多个结构体常用描述风格:行为级、数据流级、结构级,可混合使用BEHAVIORVHDL·第4章·实体实体(ENTITY)的语法与端口定义实体是VHDL设计的接口层,通过PORT语句定义电路的所有外部端口及其方向和数据类型。ENTITY语法格式SYNTAXENTITY实体名ISPORT(端口列表);ENDENTITY实体名;—每个端口需声明名称、方向和数据类型四种端口方向PORTMODEIN纯输入(外部→内部)·OUT纯输出(不可内部回读)·INOUT双向端口·BUFFER可内部回读的输出核心数据类型DATATYPESTD_LOGIC单比特类型(9种状态)·STD_LOGIC_VECTOR多比特总线,如data:INSTD_LOGIC_VECTOR(7DOWNTO0)定义8位输入CHAPTER04·VHDL结构体(ARCHITECTURE)的构成与描述方式结构体是VHDL设计的功能实现层,提供行为描述、数据流描述和结构描述三种建模方式,可灵活组合满足不同设计场景。ARCHITECTURE结构体语法框架ARCHITECTURE结构体名OF实体名IS[声明区]BEGIN[语句区]ENDARCHITECTURE;声明区:可定义信号、常量、元件、类型和子程序等设计元素,为语句区提供数据对象支持PROCESS行为描述方式通过PROCESS进程语句和顺序语句(如IF-THEN-ELSE、CASE)描述电路功能,类似软件编程思维,适合复杂控制逻辑典型应用:状态机设计、算法实现、复杂时序控制,强调功能而非具体电路结构DATAFLOW数据流描述方式使用并行信号赋值语句(如WHEN-ELSE、WITH-SELECT)直接表达输入输出的逻辑关系,更贴近硬件实现典型应用:组合逻辑电路、布尔表达式、多路选择器,语句间为并行执行关系VHDLArchitecture三种结构体描述方式的对比行为描述、数据流描述和结构描述各有适用场景:实际设计中往往采用混合策略,顶层结构描述+底层行为/数据流描述。三种结构体描述方式对比描述方式核心语法优势局限性适用场景行为描述PROCESS+IF/CASE顺序语句抽象度高,逻辑表达灵活,易于描述复杂算法和控制流程综合效率可能较低,时序控制依赖综合工具优化复杂状态机、控制逻辑、算法密集型模块数据流描述并行赋值语句、WHEN-ELSE条件赋值综合效率高,直接映射硬件结构,时序特性明确可控复杂逻辑表达冗长,可读性随规模下降组合逻辑电路、简单时序电路、算术运算单元结构描述COMPONENT声明+PORTMAP实例化层次化设计清晰,模块化复用性强,便于团队协作与维护需要预先了解子模块接口定义,依赖底层模块可用性大型系统顶层集成、IP核复用、多模块协同设计三种描述方式各有优势,实际设计推荐顶层结构描述+底层行为/数据流描述的混合策略VHDLCodeAnalysis2选1多路选择器代码逐行解析通过对2选1多路选择器VHDL代码的逐行分析,可以清晰看到库引用、实体定义、结构体实现三个层次的具体语法写法。每一行代码都对应VHDL语法规范中的特定规则,理解这些规则是从"看懂代码"到"编写代码"的关键跨越。01LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;这两行引入IEEE标准库和逻辑类型包,是使用STD_LOGIC类型的前提条件IEEE116402ENTITYmux21ISPORT(d0,d1,sel:INSTD_LOGIC;y:OUTSTD_LOGIC);定义实体端口,注意多个同类型端口可用逗号合并声明ENTITY03y<=d0WHENsel='0'ELSEd1;结构体使用条件赋值实现选择功能,sel为'0'时输出d0,否则输出d1WHEN…ELSEChapter03VHDL文本输入设计方法基于EDA工具平台,走通项目建立、代码编译、排错与时序仿真的完整设计流程QUARTUS·VHDLWORKFLOW项目建立与VHDL源文件输入EDA工具中以"项目"为核心组织设计文件。正确建立项目并规范命名VHDL源文件是设计流程的第一步,命名一致性直接影响编译和综合结果。FPGA开发板·EDA实验室工作环境01

创建项目:File→NewProjectWizard,指定项目名称、工作目录和顶层实体名,三者保持一致02

创建源文件:File→New→VHDLFile,扩展名.vhd,文件名推荐与实体名相同(如mux21.vhd)03

编写与保存:在文本编辑器中输入VHDL代码,利用语法高亮与自动缩进,完成后Save到项目目录STEP01—PROJECTSETUP工程设定与目标器件选择将VHDL设计文件设定为工程顶层文件并正确选择目标器件,是确保编译结果能够正确映射到硬件的关键步骤。顶层文件决定了综合的起点,目标器件决定了适配的约束条件,两者缺一不可。01设定顶层文件—通过Project→SetasTop-levelEntity将当前VHDL文件设为工程顶层文件,编译器以顶层文件为入口进行综合和层次化处理Top-levelEntity02选择目标器件—在Assignments→Device中选择目标FPGA/CPLD器件,需指定器件系列(如CycloneIV)、速度等级和封装型号CycloneIV03关键影响—器件选择直接影响引脚分配、逻辑资源利用率和时序性能,选择错误会导致编译失败或下载后功能异常Timing&I/OCOMPILATION&DEBUGGINGVHDL文本编译与排错方法VHDL编译过程包括语法分析、逻辑综合、适配布局等多个阶段。掌握常见编译错误的类型和排查技巧,能够显著提升设计效率。编译错误信息中的行号和错误类型是定位问题的关键线索。全编译流程通过Processing→StartCompilation启动全编译流程,编译器依次执行分析与综合、适配、时序分析和编程文件生成四个阶段常见语法错误缺少分号或括号、端口名称拼写错误、信号类型不匹配(如将INTEGER赋值给STD_LOGIC)、未声明即使用等类型匹配排错技巧优先修正编译器报告的第一个错误后重新编译,单个语法错误常引发多个级联报错;关注Message窗口中的Error级别信息级联报错TIMINGSIMULATION时序仿真流程与波形验证时序仿真是VHDL设计验证的核心环节,通过矢量波形文件设置激励并观察响应,可在不依赖硬件的情况下验证电路逻辑正确性。仿真文件准备STEP01创建矢量波形文件(.vwf),通过Edit→Insert→InsertNodeorBus添加设计中的所有输入输出端口节点,建立完整的信号监控列表。STEP02为输入信号设置激励波形:时钟信号用OverwriteClock设置周期,其他信号手动设定各时间段逻辑值,构建完整的测试激励场景。仿真执行与分析STEP03通过Processing→StartSimulation启动时序仿真,仿真器根据输入激励和综合后网表计算输出波形,生成带延迟信息的时序响应。STEP04观察输出波形是否符合设计预期:对照真值表检查所有输入组合下的输出值,重点关注信号延迟、建立保持时间以及潜在的毛刺现象。CHAPTER04VHDL程序设计举例通过D触发器、全加器和计数器三个经典实例,从组合逻辑到时序逻辑逐步实战演练VHDLCaseStudy实例一:D触发器的VHDL描述D触发器是时序逻辑电路的最基本单元,其核心特征是在时钟边沿触发数据锁存。通过D触发器的VHDL实现,可以学习PROCESS进程语句、敏感信号列表和时钟边沿检测这三个时序电路编程的核心语法要素。时钟边沿锁存在时钟CLK上升沿到来时将输入D的值锁存至输出Q,非上升沿时刻Q保持不变,体现了时序电路的"记忆"特性。上升沿触发实体端口定义实体包含D(IN)、CLK(IN)、Q(BUFFER)三个端口,Q设为BUFFER是因为内部需读取Q值来生成反相输出Qn。BUFFERPROCESS进程语句结构体中使用PROCESS(CLK)进程,敏感信号仅含CLK;通过IF条件检测上升沿并执行Q<=D锁存赋值操作。CLK'EVENT边沿检测语法CLK'EVENT是VHDL属性函数,检测信号是否发生变化;与CLK='1'联用构成上升沿检测,也可用rising_edge(CLK)替代。rising_edgeEDA·VHDL设计初步D触发器的关键语法与仿真要点D触发器VHDL实现中的PROCESS进程、时钟边沿检测和BUFFER端口模式是时序电路设计的三大核心语法。仿真验证时应重点观察输出Q仅在时钟上升沿更新、非边沿时刻保持不变的特性。核心语法要素⚡PROCESS(CLK)进程语句敏感信号列表仅含CLK,进程仅在时钟变化时触发执行,非CLK变化时进程挂起。这是时序电路与组合电路的根本区别。⏱️边沿检测CLK'EVENTANDCLK='1'或rising_edge(CLK)检测上升沿;下降沿用CLK='0'或falling_edge(CLK)。边沿检测确保状态仅在特定时刻翻转。🔁BUFFER端口模式允许实体内部读取输出端口的当前值,实现Qn对Q的逻辑反相输出,满足触发器互补输出的设计需求。仿真验证要点📊波形设置与观察为CLK设置周期性时钟信号,为D设置不规则波形,观察Q是否仅在CLK上升沿跟随D值。非边沿时刻Q应保持不变,这是验证时序逻辑正确性的关键。✓互补关系验证任何时刻Qn应始终为Q的逻辑反,验证BUFFER端口读取自身输出值的功能正确性。同时检查建立时间和保持时间是否满足器件手册要求。🎯测试向量设计设计覆盖所有输入组合的测试向量,包括D=0/1在CLK上升沿前后的变化,验证触发器的状态转换表和亚稳态规避能力。CHAPTER04·VHDLDESIGN实例二:1位二进制全加器的VHDL描述1位全加器是数字算术电路的基础构件,完成两个加数和低位进位的三输入加法运算。通过全加器的VHDL实现,可以掌握数据流描述方式中并行信号赋值语句的使用方法,以及如何将布尔表达式直接映射为VHDL代码。01三个输入A、B(加数)和Cin(低位进位),两个输出Sum(和)和Cout(进位),实现A+B+Cin的二进制加法运算3IN·2OUT02Sum=AXORBXORCin(三输入异或);Cout=(AANDB)OR(CinAND(AXORB)),可直接映射为VHDL并行赋值语句BOOLEAN03ARCHITECTURE中使用两条并行赋值语句分别描述Sum和Cout的逻辑关系,代码简洁直观,综合效率高DATAFLOW04全加器是构建多位加法器的基础模块,多个1位全加器通过进位链级联即可实现4位、8位甚至更多位的二进制加法器CASCADEVERIFICATION1位全加器真值表与仿真验证真值表是全加器功能验证的标准参照,列出了全部8种输入组合对应的Sum和Cout输出。仿真验证时逐一比对波形结果与真值表,确保每种输入条件下输出均正确,是确认VHDL设计功能正确性的最基本方法。1位全加器真值表ABCinSum(和)Cout(进位)十进制结果0000000011010101010110121001011010121100121111138种输入组合覆盖全加器所有逻辑状态,Sum和Cout的取值可由真值表推导验证VHDL·CASESTUDY实例三:4位加法计数器的VHDL描述4位加法计数器综合了时序逻辑与算术运算,是本章最复杂的实例。通过该设计可掌握程序包引入、信号优先级控制和循环回绕的实现方法。01计数器功能4位二进制计数(0~15循环),CLR异步清零,EN计数使能,每个CLK上升沿若EN有效则计数值加1。0–15CYCLE02程序包引入需额外引入STD_LOGIC_UNSIGNED.ALL,使STD_LOGIC_VECTOR类型支持加减运算,否则编译器报类型不匹配错误。UNSIGNED03信号优先级控制PROCESS中先判断CLR='1'则清零,ELSEIF判断EN='1'则计数,体现异步清零优先于同步计数的设计逻辑。CLR>EN04聚合表达式与自增OTHERS=>'0'将向量所有位赋值为0;Q<=Q+1利用UNSIGNED包实现STD_LOGIC_VECTOR的自增运算。Q<=Q+1SIMULATION&WAVEFORM4位加法计数器仿真波形分析计数器仿真需验证三大核心行为:正常递增计数(0~15循环回绕)、异步清零(CLR不依赖时钟沿立即生效)和使能控制(EN为低时计数暂停)。通过波形观察可直观确认VHDL设计的时序逻辑是否符合预期。仿真设置要点01CLR先设为高电平持续一段时间完成初始清零,之后拉低进入正常计数模式;EN设为高电平使能计数。这是确保计数器从已知状态开始工作的基础配置。CLR→高电平清零→正常计数02CLK设置为周期方波信号,仿真时间应覆盖至少16个时钟周期以观察完整的0~15计数循环,确保回绕行为正确。≥16CLKCycles·完整循环验证波形验证重点01正常计数:Q值在每个CLK上升沿递增1,从0000到1111后回绕至0000,验证4位二进制计数的完整循环特性。0000→1111→0000·回绕验证02异步清零:CLR拉高瞬间Q立即变为0000,无需等待下一个CLK上升沿;EN拉低后Q值保持不变直到EN再次拉高,验证控制信号优先级。AsyncReset·Immediate·无时钟延迟CHAPTERREVIEW本章知识体系总结第4章围绕VHDL设计初步构建了从理论认知到实践操作的完整知识体系。概述部分奠定语言基础,基本结构部分建立语法框架,设计方法部分走通工具流程,实例部分巩固编程技能。四个环节环环相扣,为后续VHDL进阶学习打下坚实基础。OVERVIEW语言基础(概述)01掌握VHDL与Verilog等HDL的差异与适用场景,理解VHDL强类型、多层次描述和并发执行的核心特点02熟记VHDL书写约定:标识符命名规则、大小写规范、注释格式和语句结束符HDLFUNDAMENTALSSTRUCTURE语法框架(结构)01掌握"库引用→实体→结构体"三层程序结构,能正确定义端口方向与数据类型02理解行为描述、数据流描述和结构描述三种建模方式的特点与适用场景SYNTAXFRAMEWORKPRACTICE实践技能(设计与实例)01独立完成Quartus平台项目建立、代码输入、编译排错和时序仿真全流程02掌握D触发器、全加器和计数器三种典型电路的VHDL实现DESIGN&IMPLEMENTATIONChapter04·DebuggingVHDL编程常见错误与调试技巧VHDL强类型语言的特性使得类型不匹配成为最常见的编译错误来源。理解信号与变量的区别、正确使用赋值运算符、确保库引用完整,是避免80%以上常见编译错误的关键。掌握系统化的调试方法能显著提升设计效率。类型不匹配错误STD_LOGIC与STD_LOGIC_VECTOR不可混用,INTEGER与STD_LOGIC_VECTOR运算需引入UNSIGNED/SIGNED包进行类型转换。STD_LOGIC赋值运算符混淆信号赋值使用"<=",变量赋值使用":=";PROCESS外部只能使用信号赋值,变量仅在PROCESS内部有效。<=vs:=库引用遗漏

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论