版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、采用VHDL进行高层次设计ASIC技术的发展 由于所设计的系统的规模已从几十几百门增加到几万几十万门,使得从前电子工程师所熟悉的画电路图、真值表和卡诺图的设计方法已经远远不能满足数字系统的复杂性要求第1页/共361页ASIC技术的发展 高层次设计方法HLD(High Level Design)是从八十年代末以来,最新专用集成电路设计的、最先进的设计方法,它为用户设计更大规模、更高水平、性能优良的数字系统提供了可靠的保证第2页/共361页HLD符合目前对电路的两个要求 Time to Market:对于通信领域来说,快速推出市场需要的系统具有非常重要的价值,HLD使得快速设计较大的芯片成为可能。
2、 SOC:目前对数子系统的需求是规模越来越大,HLD非集成电路专业背景的通信厂商设计大规模芯片提供了可能第3页/共361页设计技术的发展使得HLD成为可能 1,000,000 High Level Design gates 1990s Synthesis 100,000 gates Gate Level Design 1980s Place & Route1,000 gates Layout Design 1970s第4页/共361页设计技术的发展使得HLD成为可能 采用最原始的版图设计只需要相应的图形编辑工具 采用电路图设计就需要相应的布局布线工具 采用HDL语言设计电路就需要相应的综合工具
3、支持 结论:正是综合技术的提出使得HLD成为可能第5页/共361页电路设计方法 由底向上的设计(Bottom-up):从结构层开始,采用结构化单元和由少数行为级模块构成的层次式模型,逐级向上搭建出符合要求的系统。 自顶而下的设计(Top-Down):先对所要设计的系统进行功能描述,然后逐步分块细化,直至结构化最底层的具体实现第6页/共361页Top- -Down的优越性 提高设计生产的效率:自顶向下的设计方法允许设计者从一个高抽象层次上对系统的功能进行定制,而不需要考虑门级的具体实现方法,这充分体现了工艺无关性的基本设计思想。设计者只需要写出设计中所需部件的硬件描述语言代码或者是其它类型的模型
4、,设计工具就会根据编写的高层描述生成门级的实现,这就大大减少了设计者以往必须花费在设计细节上的时间第7页/共361页Top- -Down的优越性 增加了设计的重用性:在大多数的自顶向下设计过程中,对设计的描述都保持在一个通用的工艺水平上,它不是为某一厂家的工艺库而特意定制的,也就是说,设计是与工艺无关的,所以在实现设计时不必使用某一特定厂家的工艺,这样就极大的提高了设计的可重用性,如果需要改变设计所使用的工艺,只需要将设计在相应的工艺库上映设即可。第8页/共361页Top- -Down的优越性 错误的早期发觉:可以带来好处 1、减少产品开发周期 2、降低开发成本 3、增加设计一次成功通过的可能
5、性第9页/共361页电路设计应该采用的方法 强调进行系统开发的方式:首先进行系统分析,给出Specification,划分模块,明确模块接口,确定模块内部功能,此时应该编写详细的设计说明文档,之后才是编程,调试。 目前国内很难达到这个层次,但一般较大的设计都是多个设计者完成,因此模块划分和确定接口信号是非常重要的,可以极大的减少设计的调试时间。模块尽量以寄存器为边界,这样对于联调和最后的系统集成非常方便。 建立合理的设计习惯对于今后的工作的效率会有巨大帮助第10页/共361页设计技术的发展 CAD:Schematics EDA:HDL VHDL和Verilog是影响最广的两种HDL。 VHDL
6、相对于Veirlog而言,它在语法上更严谨一些,虽然这样也使它失去了一些灵活性和多样性,但从文档纪录、综合以及器件和系统级的仿真上讲VHDL是一种更好的选择。第11页/共361页VHDL语言 在1981年,美国国防部提出了一种新的硬件描述语言,称之为VHSIC Hardware Description Language,也就是我们现在所说的VHDL,它是美国国防部委托IBM和Texas Instruments联合开发的。 1986年,VHDL被建议作为IEEE标准,经过了多次更改后,直到1987年12月,它才被接纳为IEEE1076标准。该标准经过不断完善和更新,目前的标准为IEEE1164,
7、它已被绝大多数IC生产厂家和EDA工具供应商所接受。当前几乎所有的EDA软件,象Synopsys、Mentor Graphics、InovaEDA、Cadence等,均支持该标准。第12页/共361页VHDL语言的特点 VHDL是工业标准的文本格式语言 VHDL能同时支持仿真和综合 VHDL是一种并发执行的语言 VHDL支持结构化设计和TOP-DOWN设计方法 VHDL的描述与工艺无关 支持多风格的描述方法第13页/共361页数字系统描述的Gajski图第14页/共361页VHDL描述数字电路的层次 采用VHDL语言描述电路时,我们将电路的描述分为行为(Behavioral)和寄存器传输级(R
8、egister Transfer Level)和门级描述(Gate Level)三个层次。这样的划分是根据寄存器和组合逻辑的确定性而言的 行为级:寄存器和组合逻辑都不明确 RTL级:寄存器明确,组合逻辑不明确。 门级:寄存器和组合逻辑都明确第15页/共361页三种描述层次的比较 在目前的实际设计工作中,行为描述和门级描述都很少用到。门级描述投入大量精力描述电路的具体细节,无法体现出高层描述的优点。行为描述的抽象层次太高,综合工具无法很好的理解设计者的意图,综合出的电路距离设计者的实际要求有很大差距,并且目前主流的综合工具都不具有这种功能,目前有一些推出的行为综合器如Synopsys的Behav
9、ioral Complier,但用户的反映都不是很良好第16页/共361页使用VHDL描述组合逻辑的方法 在使用VHDL描述组合逻辑电路时,根据描述风格的不同,我们将它分为行为级描述、结构流(Data Flow)描述和结构级(Structural Level)描述。这里的行为级(Behavioral Level)描述和前面的行为描述(Behavioral)从概念上是有区别的,或者说是行为描述具体在组合逻辑中的定义。行为级描述是指一个组合逻辑的功能已经明确,但它的具体实现结构没有确定,但限定使用组合逻辑实现。第17页/共361页高层次设计流程第18页/共361页一、系统功能分析 进行系统功能分析
10、的目的是在进行系统设计之前明确系统的需求,也就是确定系统所要完成的功能、系统的输入输出、以及这些输入输出之间的关系等,并且要确定系统的时序要求。 系统功能分析的另外一个目的,就是系统的模块划分。在系统分析时,应根据功能的耦合程度,将系统划分为不同的功能模块,每一个功能都映射到一个模块,同时还需要确定模块之间的相互关系,这是模块化设计的基本要求。第19页/共361页二、体系结构设计 体系结构设计又是整个系统设计阶段最重要的工作,它的首要任务就是数据通路和控制通路的设计。在数字系统的设计中,系统的控制是建立在数据通路的基础之上的,不同的数据通路对应了不同的控制通路。数据通路的设计包括被处理数据的类
11、型分析、处理单元的划分、以及处理单元之间的关联程度等。控制通路是数据通路上数据传输的控制单元,用于协调数据处理单元之间的关系,控制通路的设计主要包括数据的调度、数据的处理算法和正确的时序安排等。 数据通路和控制通路的设计并不是截然分开的,有时在确定好数据通路后,由于时序或数据的调度等问题,而不得不重新修改数据通路。所以数据通路与控制通路的设计往往要经过许多次反复才能达到最优的效果第20页/共361页三、系统描述 谓系统描述也就是使用VHDL语言对系统进行编码。在进行大型软件的开发时,编码相对于前面所进行的系统划分工作相比就显得不是那么重要,但在使用硬件描述语言进行数字电路描述时,情况则完全不同
12、,因为语言的描述直接决定着电路的性能,不好的编码将无法反映所确定的体系结构,可能导致前面所做的工作完全浪第21页/共361页四、系统功能仿真 系统的功能仿真(Functional Simulation)是用来验证设计者所编写的VHDL代码是否完成了预定的功能。几乎所有的高层设计软件都支持语言级的系统仿真,这样在系统综合前就可以通过系统功能仿真来验证所设计系统的功能正确与否。 在语言级系统仿真时,要求设计者使用VHDL语言所提供的丰富的仿真语句来编写系统的测试基准程序(Testbench)。测试基准程序在高层次设计中占有非常重要的地位,不仅在系统功能仿真时被用来作为功能验证的基准,而且在门级仿真
13、与后时序仿真都要以此为基准。第22页/共361页综合优化阶段 综合器对系统的综合优化主要分为两步:第一步是将硬件描述语言翻译成门电路,第二步是对产生的电路进行优化。主要工作是在第二步进行的,判断一个综合器性能的标准也是基于这一方面的。 系统优化的目的就是花费最小的硬件资源满足最大的 时 序 要 求 , 所 以 系 统 优 化 就 是 在 系 统 的 速 度(Speed)和面积(Area)之间找到一个最佳方案(Trade-off)。系统优化的关键在于系统约束条件(Constraints)的设定,施加到系统的约束条件将使综合器对系统的优化按照设计者所期望的目标进行。第23页/共361页系统实现 如
14、果系统综合优化的结果满足设计者的要求,就可以进行系统实现的工作。在一般的ASIC设计中,设计者应该将综合后电路的网表(Netlist)文件和设计的时序要求,交给IC生产厂家进行下一步的工作。这是国内一般的做法,专业的微电子公司将会参与更多的后面的layout的工作。第24页/共361页设计风格描述 设计描述的风格直接控制着EDA工具综合的结果。描述同一功能的两段RTL描述能产生出时序和面积上完全不同的电路,好的描述方式就是易于被综合器识别并可以被综合出设计者期望的电路,电路的质量取决于工程师使用的描述风格和综合工具的能力。我将会在外面介绍。第25页/共361页我个人对高层次设计方法的理解 硬件
15、描述语言-schematic(netlist)-版图 综合工具 布局布线工具 高级语言-汇编语言-机器语言 高 级 语 言 编 译 器 机 器 语 言 编 译 器(assembler) 目前国内还有很多人不认同采用HDL的高层次设计方法,其实就是不能理解综合工具的作用,但映射到不认同C编译器或BASIC编译器的作用确是荒谬的。 我认为高层次设计方法实际就是牺牲描述精确度来换取描述效率,在某些具体应用中是不适用的,比如最先进的处理器研 究 。 但 对 于 通 常 应 用 背 景 的 数 字 系 统 来 说 T i m e t o Market是非常重要的,高层次设计方法可以极大的提高设计的效率。
16、 随着综合工具性能的不断提高,高层设计方法的应用范围会越来越广。第26页/共361页VHDL语言基础第27页/共361页设计实体和结构体的概念 VHDL把一个电路模块看作一个单元,对任何一个单元的描述包括接口描述和内部特性描述两个部分。接口描述称为设计实体(entity),它提供该单元的公共信息,如名称、端口等;内部特性描述称为结构体(architecture),它定义单元的内部操作特性。 一个结构体可以对应多个实体,结构体和实体的绑定关系称为配置(configuration)。 一个电路单元只能有一个entity,下面是一个最简单的例子,描述的电路是一个半加器第28页/共361页一个半加器的
17、VHDL描述 entity halfadder is port (a, b: in bit; sum, carry: out bit);end halfadder;architecture behavior of halfadder is beginprocess(a, b) beginif (a=1 and b=1) then carry=1;else carry=0;end if; if (a /= b) then sum=1; else sum=0; end if;end process;end behavior;第29页/共361页Entity的描述entity 实体名 is 类属参数
18、说明 端口说明end 实体名;entity mux isgeneric ( m : time := 1ns);port (d0, d1, sel : in bit;q: out bit);end mux;第30页/共361页端口的方向 in(输入)、out(输出,结构体内部不能再使用)、inout(输入输出双向)、buffer(输出,结构体内可再使用) 不提倡使用buffer型,可以在内部在起一个名字)第31页/共361页结构体的框架architecture 结构体名 of 实体名 is定义语句begin 并行处理语句end 结构体名; 定义语句位于architecture和begin之间,用
19、于对结构体内部所使用的信号、常数、数据类型、函数等进行定义。信号定义和端口说明一样,应有信号名和数据类型,因它是内部使用,不需要有方向的说明。 并行处理语句处于语句begin和end之间,具体描述了结构体的行为及其连接关系。在结构体中的语句都是可以并行执行的,语句的执行顺序不以书写的语句顺序为执行顺序。第32页/共361页Entity和architecture 总结 一个单元只有一个设计实体,而结构体的个数可以不限。也就是说,一个设计实体可以对应于多个结构体。这种方式的意义在于:每个结构体代表该电路的某一方面的特性(如行为特性、结构特性等),而且,即使是同一特性的描述,也可以有不同的抽象层次。
20、第33页/共361页在一个单元中引用另外一个单元architecture structure of fulladder issignal ts: bit;signal tc1, tc2: bit;component halfadderport (a, b: in bit; sum, carry: out bit);end component; beginU0: halfadder port map (a, b, ts, tc1);U1: halfadder port map (ts, cin, sum, tc2)end structure;第34页/共361页设计库 库(library)是经过
21、编译后的数据的集合,它存放程序包定义、设计实体定义、结构体定义和配置定义。 在VHDL中,库的说明总是放在设计单元的最前面,如: library IEEE; use IEEE.std_logic_1164.all; 这样,在设计单元内就可以使用库中的数据。 在VHDL中,可以存在多个不同的库,但是库与库之间是独立的,不能互相嵌套。当前在VHDL中存在的库大致包括:标准库、工艺库、用户自定义的库和WORK库。其中, WORK库是现行工作库,设计者描述的VHDL不需要任何说明,都可以存放在WORK库中 ,而且对WORK库的使用不需要任何说明。第35页/共361页常用的数据类型 在设计可综合电路是常
22、用的类型 整形(一般只在作下标时用,内部) std_logic,std_logic_vector(9值逻辑),端口都用这两种类型 类型之间的转化 首先说明IEEE.std_logic_unsigned库 conv_integer(),conv_std_logic_vector(integer,n)第36页/共361页Std_logic和std_logic_vector Std_logic信号用单引号,比如a=1; std_logic_vector用双引号,比如a=“111”; 对于所有bit都相同的std_logic_vector,可以使用1)来赋值 使用&可以将位数较短的std_logic_
23、vector型组合为数位较长的std_logic_vector型第37页/共361页九值逻辑 1-force 1 0-force 0 X-Force Unknown Z-High Impedance U-Uninitialized W-Weak unknown H-Weak 1 L-Weak 0 - dont care在可综合电路中设计中需要的:1,0,Z,X,-Z用来描述三态X用来赋不可能出现的缺省值-用来赋无关值,利于优化U在仿真中会遇到,没有初始化,在功能仿真中按照else来计算,在后仿真中则会传递,导致错误第38页/共361页常用的运算符 逻辑运算符 not、and、or、nand、n
24、or、xor 算术运算符 +和-,其它运算符,/,*,mod对于一般的可综合电路来讲,都不使用,因为它们的算法都比较复杂,综合器综合的效果不好,需要是用户自己设计算法,比如采用booth算法实现乘法 连接运算符&,比较常用 关系运算符=、/=、=都非常常用 赋值运算符=,:=第39页/共361页逻辑运算 And or nand xor nor not 操作数必须类型和长度都相同 注意使用括号 c=a and b and c c=(a and b) and c -?一样不一定一样第40页/共361页关系运算符 ,= 只要是同一类型,长度不同可以比较在synopsys中是可以的,比如“11111”
25、“1100” 这是因为定义了IEEE.std_logic_unsigned库第41页/共361页Std_logic_unsigned库function =(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;function (L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;function (L: STD_LOGIC_VECTOR; R: INTEG
26、ER) return BOOLEAN;function (L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;function =(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: ST
27、D_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;function =(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;第42页/共361页加法运算 最常见的加一计数器可以写成: A=A+1这是因为在unsigned 中定义了function +(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function +(L: STD_LO
28、GIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR; function +(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function +(L: STD_LOGIC_VECTOR; R: STD_LOGIC) return STD_LOGIC_VECTOR; function +(L: STD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;第43页/共361页引用库文件 这个预先定义的包文件std_logic_unsig
29、ned.vhd被已经被预先编译的IEEE库中,因此设计者在使用上面的操作时,需要使用IEEE.std_logic_unsigned.all;否则编译时就会出错. 用户可以自己包文件,编译到指定库中,并在源文件中引用这个包文件: use my_library.my_package.all第44页/共361页进程process 一个进程就相当于一个并行的语句,它的内部时串行的进程名:process (进程敏感信号列表)begin顺序描述语句;end process process语句从process开始,到end process结束,进程名可以省略。第45页/共361页Process的例子mux2
30、: process(a, b, s)beginif (s=0) then f=a;else f=b;end if;end process; 进程的所有输入信号应该放在敏感表内,否则会造成前后仿真不符第46页/共361页信号和变量 信号在电路模块之间传递信息,signal用在模块内部,具体表现在变量在entity的端口和architecture内说明,variable在process内部说明,无法传递到process外面 赋给变量的值则立即成为当前值,而赋给信号的值必须在进程结束后才能成为当前值。第47页/共361页顺序语句 Wait if ; case loop 对于一般的可综合电路描述,这四
31、种顺序语句已经足够了第48页/共361页Wait 语句 Wait until clkevent and clk=1 then 用来描述寄存器 在testbench中描述延迟时可以使用wait for xxx ns; 敏感表相当于一个wait on语句第49页/共361页进程的启动 process(a, b, s)beginif (s=0) then f=a;else f=b;end if;-wait on a,b,s进程在这个地方挂起end process;第50页/共361页IF语句 IF condition1 THEN sequence_of_statements1ELSIF condit
32、ion2 THEN sequence_of_statements2 ELSE sequence_of_statements3 END IF; 其中括号内为可选部分,它表示当条件1成立时,执行顺序语句序列1;当条件2成立时,执行顺序语句序列2;否则执行顺序语句序列3。ELSEIF付句可以重复,但ELSE付句只能有一条。第51页/共361页IF语句 注意如果if引导event代表时钟,此时不能有else复句 用户组合逻辑的if,如果没有else付句,一定要在IF语句前面有缺省赋值,否则会造成不需要的latch第52页/共361页IF语句 IF语句对应的电路就是多选电路,比如 if select=1
33、 then output=a; else output sequence_of_statements1; WHEN choices2= sequence_of_statements1; END CASE 其中条件有如下四种表达方法: WHEN 值 = WHEN 值值值 = WHEN 值 TO 值 = WHEN others = 选择项必须覆盖表达式所有选项,不足时其它选项包括在others项中。第54页/共361页Case语句 Case语句对应的是无优先级的多选 如果在case中给多个信号赋值一定要在前面有缺省赋值. 大家看下面的程序有什么问题?第55页/共361页Case语句Process(
34、decoder_in)beginCASE decoder_in IS W H E N “ 0 0 0 ” = decoder_out decoder_out decoder_out decoder_out decoder_out decoder_out decoder_out decoder_out decoder_outX);第56页/共361页Loop语句FOR identifier IN discrete_range LOOP sequence_of_statemetns END LOOP ; LOOP语句适用于描述有重复操作,或模块需要很强的迭代能力时使用。如下电路完成对输入的8位向量
35、的翻转,即信号的高位与低位对调: FOR i IN 0 TO 7 LOOP output_vector(i)=input_vector(7-i); END LOOP;第57页/共361页loop语句 上述程序中i为循环变量,在VHDL中不允许任何对循环变量的赋值,也就是说不允许在任何函数返回值中存在循环变量,或在任何过程的输出与双向参量中存在循环变量。并且循环变量不用显式说明,它的作用域仅存在于循环语句内部,因此不允许在循环语句内部存在于循环变量同名的变量或信号第58页/共361页进制 B(binary) O(octal) X(Hexadecimal) 通常情况下我们都用二进制 对于位宽为4n
36、的用16进制极为方便,在VHDL的语言规定中,可以使用=X”0F”赋值,但synopsys到9910才支持,如果工具不支持只能使用2进制.第59页/共361页理解并行的概念 在architecture中的语句都是并行的,它们的执行顺序和位置无关,一个process相当于一个并行语句. 比如在architecture 中存在: D=A+E; A=B+C; 将产生两个加法器,第二个输出作为第一个的一个输入在仿真时,当B或C变化时,激活语句2,当A或E变化时,激活语句2. 本质:在现实电路中,各个部件是并行工作的,一个部件的输入变化,才会引起这个部件的输出变换.第60页/共361页避免组合环 在一般
37、情况下不要使用组合环,尤其是不要用行为级描述组合环,如果需要使用电路图形式,并在设计中不要优化这个模块第61页/共361页练习 写一个带有异步复位同步置数的增量计数器Clk 时钟load 同步置数信号rst 异步清零data 置入数据count 计数器输出第62页/共361页lIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter IS PORT (clk :IN std_logic; load :IN std_logic; rst :IN std_logic; data :I
38、N std_logic_vector(7 downto 0); count :OUT std_logic_vector(7 downto 0);END counter;ARCHITECTURE arc_counter OF counter IS SIGNAL cnt :std_logic_vector(7 downto 0); BEGIN PROCESS(clk,rst) BEGIN IF rst =1 THEN cnt0); ELSIF clkevent AND clk=1 THEN IF load=1 THEN cnt=data; ELSE cnt=cnt-1; END IF; END I
39、F; END PROCESS; count=cnt;END arc_counter;第63页/共361页敏感表Process(a,b) begin s=a; t=b; v=s or t; end processProcess(a,b,s,t) begin s=a; t=b; v=s or t; end process仿真和综合的区别?结论:出现在赋值号左边的都应该写在敏感表中第64页/共361页LatchProcess(x,z) begin if x=1 then y=z; end if;end process;X=0时需要保存原值,导致产生一个latch第65页/共361页使用VHDL描述基
40、本电路第66页/共361页原因 采用HDL语言进行数字电路设计的流程中最重要的环节就是将语言描述转化为电路,将你的设计付诸实现,因此你必须知道所描述的语言对应的电路,只有这样综合工具才会输出一个可预知的、准确的、高质量的结果,满足设计者对电路功能、时序和面积上的要求。数字电路都是由一些基本单元连接而成的,只有能准确的描述这些常见电路才有可能使用这些模块构建更复杂的数字电路,因此熟悉数字电路中一些常见电路的描述是进行大规模系统设计的基础第67页/共361页RTL电路模型第68页/共361页结论 对于RTL电路的描述主要就是针对时序部件和组合逻辑的描述,如果设计者在使用VHDL语言进行描述时,能遵
41、照组合逻辑和时序电路描述的规范,那么就可以使综合工具明确设计者的意图,综合出设计者期望的电路。第69页/共361页数字系统的结构 除了调用的一些宏单元模块时序电路、组合逻辑以及总线和存储单元,这四种基本单元就可以构成各种各样的数字电路。 我个人的理解,不知道对不对?第70页/共361页时序部件 时序逻辑电路在任一时刻的输出信号不但与当时的输入信号有关,而且还依赖于电路原来的状态,因此这类电路必须具有记录过去状态的能力。时序逻辑电路中最基本的记忆部件就是就是触发器(flip-flop)和锁存器(latch),它们都是一位的存储单元,多位存储单元就可以构成寄存器(Register)第71页/共36
42、1页LATCH 锁存器是电平触发的,锁存器的值在时钟的一个逻辑状态可以更改,在另一个逻辑状态被保存下来,因此在使能阶段输入端的一个毛刺也会导致电路的误操作,无法阻止毛刺的传播,容易产生较多的竞争冒险现象。从数字电路教材中,我们可以知道锁存器的优点是面积小、功耗低、速度较快,因此在许多全定制和半定制ASIC设计中会使用锁存器单元,但在使用FPGA或CPLD实现电路时,应该避免使用锁存器。第72页/共361页寄存器的描述 PROCESS BEGIN WAIT UNTIL (edge) END PROCESS; 或 PROCESS(sensitivity list) BEGIN IF (edge)
43、END IF; END PROCESS;第73页/共361页时钟沿描述使用WAIT语句时,进程不需要敏感表,WAIT UNTIL语句就相当于敏感表的功能。在使用IF语句时应该将时钟信号放入敏感表中。对于时钟的跳变有两种描述方法,event属性或函数调用。如下所示: clkevent AND clk=1 -上跳沿的event属性描述 clkevent AND clk=0 -下跳沿的event属性描述 rising_edge(clk) -上跳沿的函数调用 falling_edge(clk) -下跳沿的函数调用在电路设计中,应使用event属性来描述时钟跳变,因为一些VHDL的综合工具并不支持函数调
44、用,并且函数只检测0到1和1到0的跳变,无法检测出X到1或0到X,这对于使用的九值逻辑是不适合的。第74页/共361页时钟沿描述时钟沿在作为IF或ELSIF语句的条件时,只可以单独使用,不能和其他条件共存,如下面的语句就是错误的: IF (edge AND rst=1) THEN同时当某一IF语句或ELSIF语句后有时钟沿做条件时,就不可以在有ELSE付句,如下面的语句描述也是错误的: IF rst=1 THEN Sequential_statement ELSIF (edge) THEN Sequential_statement ELSE Sequential_statement END I
45、F;第75页/共361页异步复位和同步复位 记忆部件在电路加电后其状态是不确定的,它的初值应由复位信号来设置,根据设置的时机不同,可分为同步置位和异步置位。所谓同步置位是指置位信号只有在给定的时钟沿下才可以完成工作;而异步复位是指复位信号一旦生效存储部件就会被置位。其原理如下图所示第76页/共361页Asyn reset 和syn reset第77页/共361页异步复位的VHDL描述PROCESS(sensitivity list) BEGIN IF (reset) THEN ELSIF (set)THEN ELSIF (edge) THEN END IF; END PROCESS;此时的敏感
46、表只需要异步负位信号和时钟信号即可,IF语句相对于WAIT语句更灵活一些第78页/共361页强调在FPGA设计中尽量不要使用latch第79页/共361页触发器描述LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff IS PORT ( data :IN std_logic; clk :IN std_logic; q :OUT std_logic); END dff; ARCHITECTURE dff OF dff IS BEGIN PROCESS BEGIN WAIT UNTIL clkevent AND clk=1; q=data; E
47、ND PROCESS; END dff;第80页/共361页电路图第81页/共361页带异步复位上沿的D触发器LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff_asyn_reset IS PORT ( data :IN std_logic; clk :IN std_logic; reset :IN std_logic; q :OUT std_logic); END dff_asyn_reset; ARCHITECTURE dff_asyn_reset OF dff_asyn_reset IS BEGIN PROCESS(clk,rese
48、t) BEGIN IF reset = 0THEN q=0; ELSIF clkevent AND clk =1 THEN q=data; END IF; END PROCESS; END dff_asyn_reset;第82页/共361页电路图第83页/共361页带异步置位复位的上跳沿D触发器LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff_asyn IS PORT ( data :IN std_logic; clk :IN std_logic; preset :IN std_logic; reset :IN std_logic; q
49、 :OUT std_logic); END dff_asyn_preset; ARCHITECTURE dff_asyn OF dff_asyn IS BEGIN PROCESS(clk,preset,reset) BEGIN IF preset = 0THEN q=1; ELSIF reset = 0THEN q=0; ELSIF clkevent AND clk =1 THEN q=data; END IF; END PROCESS; END dff_asyn;第84页/共361页电路图第85页/共361页带异步复位和输入使能的上跳沿D触发器LIBRARY IEEE;USE IEEE.ST
50、D_LOGIC_1164.ALL; ENTITY dff_ck_en IS PORT ( data :IN std_logic; clk :IN std_logic; reset :IN std_logic; en :IN std_logic; q :OUT std_logic); END dff_ck_en; ARCHITECTURE dff_ck_en OF dff_ck_en IS BEGIN PROCESS(clk,reset) BEGIN IF reset=0 THEN q=0; ELSIF clkevent AND clk=1 THEN IF en=1THEN q=data; EN
51、D IF; END IF; END PROCESS; END dff_ck_en;第86页/共361页电路图第87页/共361页计数器 计数器是数字系统中使用最多的时序电路。它不仅能用于对时钟脉冲计数,还可用于定时、分频、产生节拍脉冲以及进行数字运算等。稍微复杂的数字系统,几乎都包含计数器。按计数器中触发器翻转的次序,可以把计数器分为同步式和异步式两种。在同步计数器中,当时钟脉冲输入时触发器的翻转是同时的,而在异步计数器中,触发器则不是同时翻转的 一般的设计中都使用同步计数器第88页/共361页带异步清零和计数使能的8位同步计数器LIBRARY IEEE; USE IEEE.STD_LOGIC
52、_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY counter8 IS PORT (clk :IN std_logic; en :IN std_logic; rst :IN std_logic; count :OUT std_logic_vector(7 downto 0); END counter8; ARCHITECTURE counter8 OF counter8 IS SIGNAL cnt :std_logic_vector(7 downto 0); BEGIN PROCESS(clk,en,cnt,rst) BEGIN IF rs
53、t =0THEN cnt0); ELSIF clkevent AND clk=1 THEN IF en=1 THEN cnt=cnt+1; END IF; END IF; END PROCESS; count=cnt; END counter8;第89页/共361页RTL视图第90页/共361页建议 大家在初期的练习中,对于简单电路可以使用synplify综合后观察它的RTL视图,比较自己对模块的基本理解,可以提高对vhdl描述和综合的认识。第91页/共361页移位操作LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_U
54、NSIGNED.ALL; ENTITY shift IS PORT(clk :IN std_logic; rst :IN std_logic; data : IN std_logic; Q : OUT std_logic_vector(7 downto 0); END shift; ARCHITECTURE shift OF shift IS SIGNAL Q_temp:std_logic_vector(7 downto 0); BEGIN PROCESS(rst,clk) BEGIN IF rst=1 THEN Q_temp0); ELSIF clkevent AND clk=1 THEN
55、Q_temp=Q_temp(6 downto 0)&data; END IF; END PROCESS; Q=Q_temp; END shift; 第92页/共361页电路图第93页/共361页练习 描述一个串并转换电路,并行输出位8位,搜索到同步字AA后开始发送一个同步标记,以后每组一个字,发一次.第94页/共361页结果Process(Q_temp,data) variable compare_AA:std_logic_vector(7 downto 0) begin compare_AA:=Q_temp(6 downto 0)&data; IF compare_AA=“10101010”
56、 then same_with_AA=1; else same_with_AA=0; end if;end process;process(rst,clk) begin if rst=1 then word_counter_enable=0; elsif clkevent and clk=1 then if same_with_AA=1 then word_counter_enable=1; end if; end if;end process;第95页/共361页结果Process(rst,clk) begin if rst=1 then word_counter=“000”; elsif
57、clkevent and clk=1 then if word_counter_enable=1 then word_counter= word_counter+1; end if; end if;end process;process(word_coutner) begin if word_counter=“001” then word_syn=1; else word_syn=0; end if;end process;第96页/共361页组合电路的描述 在RTL电路模型中,处于各个寄存器之间的部分都是组合逻辑电路,相对于寄存器的描述,组合逻辑的描述相对模糊,设计者只能大约的估计出组合部分
58、的面积和时延,而组合逻辑在很大程度上决定着电路的面积和速度,因此对于组合电路的准确描述就显得十分重要。只有了解基本组合单元的特点,才能使由VHDL语言描述产生的电路符合设计者时序和面积上的要求。 组合逻辑的特点是在任何时刻电路的输出仅仅取决于该时刻的输入信号,而与这一时刻输入信号作用前电路原来的状态没有任何关系。在电路结构上基本是由逻辑门组成,只有从输入到输出的通路,没有从输出反馈到输入的回路。 虽然逻辑电路由于具体问题的不同而千差万别,但其中也有若干种电路在各类数字系统中大量的出现,并且其它许多电路都是在它们的基础上变化得到的,下面就介绍如何用VHDL语言来描述这些基本电路。第97页/共36
59、1页多选电路 ENTITY pri_mux IS PORT ( input_a :IN std_logic; input_b :IN std_logic; input_c :IN std_logic; input_d :IN std_logic; select_a :IN std_logic; select_b :IN std_logic; select_c :IN std_logic; pout :OUT std_logic); END pri_mux; ARCHITECTURE pri_mux OF pri_mux IS BEGIN PROCESS(input_a,input_b,inpu
60、t_c,input_d,select_a,select_b,select_c) BEGIN IF select_a=1 THEN pout= input_a; ELSIF select_b=1 THEN pout= input_b; ELSIF select_c=1 THEN pout= input_c; ELSE pout pout pout pout pout pout=input_d;第100页/共361页电路图第101页/共361页无优先级的译码器ENTITY decoder ISPORT ( Ain : IN std_logic_vector(2 downto 0); en : IN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国广东省电子竞技市场发展前景预测及投资战略咨询报告
- 2023-2029年中国科技旅游行业市场发展现状及未来发展趋势预测报告
- 2025年中国血液回收机市场深度分析及投资战略咨询报告
- 2024年音乐教育市场发展前景预测及投资战略咨询报告
- 企业2024年环保措施执行报告
- 2019-2025年中国金融信息化市场全景评估及发展趋势研究预测报告
- 房产租赁合同范文的解约条件
- 2025年不锈钢管状电动卷帘门项目投资可行性研究分析报告
- 2025年中国素颜霜行业发展趋势预测及投资战略咨询报告
- 2025年时尚戒指项目投资可行性研究分析报告
- 狮子王影视鉴赏
- 一年级数学加减法口算题每日一练(25套打印版)
- 2024年甘肃省武威市、嘉峪关市、临夏州中考英语真题
- DL-T573-2021电力变压器检修导则
- 绘本《图书馆狮子》原文
- 安全使用公共WiFi网络的方法
- 2023年管理学原理考试题库附答案
- 【可行性报告】2023年电动自行车相关项目可行性研究报告
- 欧洲食品与饮料行业数据与趋势
- 放疗科室规章制度(二篇)
- 中高职贯通培养三二分段(中职阶段)新能源汽车检测与维修专业课程体系
评论
0/150
提交评论