资源描述
EDA技术期末考试复习资料什么是EDA?本意:Electronic Design Automation在教材中“EDA”是指依赖于功能强大的计算机,在EDA工具软件平台上,对以硬件描叙语言HDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、逻辑化简、逻辑分割、逻辑综合、结构综合(布局布线),以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。EDA技术的实现目标:完成专用集成电路ASIC的设计和实现(这种说 法太片面)实现ASIC的三种途径:可编程逻辑器件CPLD、FPGA 半定制或全定制ASIC、混合ASIC常用硬件描述语言(HDL):VHDL Verilog HDL System Verilog System CVerilogHDL与VHDL的比较:VHDL来源于古老的Ada语言,VerilogHDL来源于C语言,VerilogHDL受到一线工作的工程师的青睐。90%以上的公司采用verilogHDL进行IC设计,ASIC设计必须学习VerilogHDL,VerilogHDL在工业界通用些,VHDL在大学教学中使用较多VerilogHDL在系统级抽象方面比VHDL差一些,在门级开关电路描叙方面VerilogHDL比VHDL强很多VHDL比较严谨,VerilogHDL格式要求宽松些集成电路设计的层次:抽象层次时序单位基本单位电路的功能(行为)描述系统级System数据处理进程及通信自然语言描述或相互通信的进程行为级(算法级)Algorithm运算步运算的控制行为有限状态机、数据流图、控制流图寄存器传输级(RTL)时钟周期寄存器、计数器、多路选择器、算术逻辑单元布尔方程、二元决策图、有限状态机逻辑门级Logic延时与门、或门、触发器、锁存器等原理图,VHDL门(电路)级Gate物理时间晶体管、R、L、C电压、电流之间的微分方程物理级(版图级)Layout几何图形几何图形(硅表面上的扩散区、多晶硅和金属等)隐含在器件的物理方程中综合(synthesis)将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。(是从外文翻过来的别扭的句子)从算法表示转换到寄存器传输级,即行为综合从RTL级表示转换到逻辑门的表示,即逻辑综合从逻辑门表示转换为版图表示,即版图综合或结构综合功能仿真和时序仿真:1. 功能仿真:是直接对VHDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计的要求的过程,仿真过程不涉及任何具体器件的硬件特性。2. 时序仿真:就是接近真实器件运行特性的仿真,仿真文件中己包含了器件硬件特性参数,因而,仿真精度高。CPLD还是FPGA?:CPLD分解组合逻辑的功能很强,一个宏单元就可以分解十几个甚至2030多个组合逻辑输入。而FPGA的一个LUT只能处理4输入的组合逻辑,因 此,CPLD适合用于设计译码等复杂组合逻辑。 但FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的数量非常多,往往都是几千上万,CPLD一般只能做到512个逻辑单元,而且如果用芯片价 格除以逻辑单元数量,FPGA的平均逻辑单元成本大大低于CPLD。 所以如果设计中使用到大量触发器,例如设计一个复杂的时序逻辑,那么使用FPGA就是一个很好选择。 同时CPLD拥有上电即可工作的特性,而大部分FPGA需要一个加载过程,所以,如果系统要可编程逻辑器件上电就要工作,那么就应该选择CPLD。 CPLD有被FPGA取代的可能.CPLD和FPGA的编程和配置:编程工艺有三种1.基于电可擦除存储单元的EEPROM或FLASH技术:多数CPLD2.基于SRAM查找表的编程单元:多数FPGA3.基于反熔丝编程单元:比如Actel公司的FPGA编程方式有很多种 ISP:使用Jtag接口 PS(被动串行) PP(被动并行) AS(主动串行) AP(主动并行) JTAG第一个VHDLD的例子设计单元的基本构造:一个设计单元都是由实体说明和构造体两部分组成。实体的功能是对这个设计单元与外部电路进行接口描叙。实体是设计单元的表层,实体说明部分规定了设计单元的输入输出接口信号或引脚,它是设计单元对外的一个通信界面。结构体定义了设计单元的具体构造和操作(行为)。每个实体可以有多个结构体,不同的结构体对应着实体不同的结构和算法实现方案,其间的各结构体的地位是相等的。端口说明PORTS:端口说明是基本设计实体(单元)与外部接口的描述,也可以说是对外部引脚信号的名称、数据类型和输入输出方向的描述。一般书写格式如下:PORT(端口名,端口名:方向 数据类型; 端口名,端口名:方向 数据类型;端口模式: 数据类型:BIT:只能赋值为1或0 结构体的组成部分:对数据类型、常数、信号、子程序和元件等元素的说明部分 描叙设计单元逻辑行为的、以各种不同的描叙风格表达的功能描述语句。u 进程语句u 信号赋值语句u 子程序调用语句 以元件例化语句为特征的外部元件(设计单元)端口间的连接。结构体一般语言格式: ARCHITECTURE 结构体名 OF 实体名 IS 说明语句 BEGIN 功能描述语句 END ARCHITECTURE 结构体名;进程语句(PROCESS): 所有的顺序语句都只能在进程(PROCESS)中使用,进程内是顺序执行,进程与进程间是并发的。 进程是最关键的并发语句,其它并发语句:并发信号赋值、条件信号赋值、选择信号赋值、并发过程调用等可以看作是PROCESS语句的简化形式。进程的启动和敏感信号列表: 进程的两个状态:执行和挂起 初始起动时,进程处于执行状态,进程中的语句从前向后逐句执行一遍。 当最后一句语句执行完后,返回到进程开始的PROCESS语句,进程处于挂起状态。 只要进程的敏感信号列表中任何一个信号发生变化,进程又处于执行状态。然后再挂起,再执行,一直循环下去。例4-1,4-2和4-3综合后的RTL视图:RTL的介绍RTL View 也就是通常所讲的能够查看VHDL或者Verilog HDL对应的电路原理图。这个功能对于使用HDL进行逻辑设计的人员还是很有用的,一方面可以充分理解HDL和硬件电路的对应关系,另一方面可以更加方便的查找设计中的错误。异步时序电路设计: 一个时钟进程只能构成对应单一时钟信号的时序电路。 构成时序电路的进程称为时钟进程。 异步逻辑最好用多个时钟进程语句来构成。并置操作符(连接操作符)&: 把操作数或数组合并起来形成新的数组。SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0);SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0);.A = 1 & 0 & d(1) & 1; -元素与元素并置,并置后数组长度为4.IF a & d = “101011 THEN . -在IF条件句中可以使用并置符用VHDL实现组合逻辑和时序逻辑的方法:4.4 计数器设计:例4-20 4位二进制加法计数器ENTITY CNT4 IS PORT (CLK: IN BIT;Q: BUFFER INTEGER RANGE 15 DOWNTO 0); -Q为BUFFER模式END;ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS(CLK) BEGIN IF CLKEVENT AND CLK=1 THEN Q = Q+1; -在符号=两边都出现了Q END IF;END PROCESS;END bhv; (加粗字体重要)例4-22中的新语句现象: 变量(VARIABLE): 与SIGNAL一样也是数据对象 SIGNAL用“X): 用X给位矢量的某一部分位赋值后,再给剩余的位赋值。例1:SIGNAL d1 : STD_LOGIC_VECTOR (4 DOWNTO 0); d1 0);等同于d10)等同于a1:=“0000000000000000”例3: d11,3=1,OTHERS=0)等同于d1的第一位和每3位赋值为1,其它位赋值为0问题:为什么说RST是异步复位信号?为什么说EN是同步使能信号?PROCESS (CLK,RST,EN)BEGIN IF RST =1 THEN CQI := (OTHERS = 0); -计数器异步复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF EN =1 THEN -检测是否允许计数(同步使能)进行渐进式综合: 渐进式综合是自上而下和自下而上渐进式编译流程的组成部分,可以将设计中的实体指定为设计分区,在上面逐渐进行 Analysis & Synthesis,而不会影响工程的其他部分。 设计完成后,渐进式综合只更新重新综合的设计部分,从而缩短了综合时间,减少了对运行时存储器的占用。您可以修改并重新综合设计的一部分,而不会影响其他部分,这意味着在没有改动的部分,已寄存和已结合的节点名称保持不变。成功进行工程及其所有分区的 Analysis & Synthesis 之后,单个分区必须合并到一起,作为完整工程的一部分再次进行编译。 信号(signal)与变量(variable): 变量只能用在Process内部,变量不能用于Process间进行通信 变量与信号的数据类型相同 对变量的赋值马上有效,对信号的赋值是计划,是排队 变量的主要作用是在进程中作为临时的数据存储单元(不全对)Moore型状态机: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FSM2 IS PORT ( clk,reset,in1 : IN STD_LOGIC; out1 : OUT STD_LOGIC_VECTOR(3 downto 0); END;ARCHITECTURE bhv OF FSM2 IS TYPE state_type IS (s0, s1, s2, s3); SIGNALcurrent_ state,next_state: state_type;BEGIN P1:PROCESS(clk,reset) BEGIN IF reset = 1 THEN current_state = s0; ELSIF clk=1 AND clkEVENT THEN current_state IF in1=1THEN next_state=s1; ELSE next_state IF in1=0THEN next_state=S2; ELSE next_state IF in1=1THEN next_state=S3; ELSE next_state IF in1=0THEN next_state=S0; ELSE next_state IF in1=1THEN out1=“1001”; ELSE out1 IF in1=0THEN out1=1100; ELSE out1 IF in1=1THEN out1=1111; ELSE out1 IF in1=1THEN out1=0000; ELSE out1=1111; END IF; end case; END PROCESS; end bhv;
展开阅读全文