VLSI设计课件三硬件描述语言VHDL_第1页
VLSI设计课件三硬件描述语言VHDL_第2页
VLSI设计课件三硬件描述语言VHDL_第3页
VLSI设计课件三硬件描述语言VHDL_第4页
VLSI设计课件三硬件描述语言VHDL_第5页
已阅读5页,还剩174页未读 继续免费阅读

下载本文档

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

文档简介

1、P1,第3章 硬件描述语言VHDL,Design Entry,P2,3.1 硬件描述语言概述 3.2 VHDL语言基本结构 3.3 VHDL语言主要描述语句 3.4 VHDL语言组合逻辑设计 3.5 VHDL语言时序逻辑设计 3.6 VHDL语言的状态机设计 3.7 VHDL描述方法对电路结构的影响 3.8 VHDL的Testbench的编写方法 3.9 Modelsim仿真软件介绍,P3,3.1 硬件描述语言概述,HDL (Hardware Description Language):硬件描述语言 是一种形式化方法描述数字电路和系统的语言。利用这种 语言,数字电路系统的设计可以从上层到下层(

2、从抽象到 具体)逐层描述自己的设计思想,用分层次的模块来表示 极其复杂的数字系统。然后利用EDA工具,逐层仿真验证, 再利用综合工具把HDL转换为门级网表,最后用ASIC或FP GA自动布局布线工具,把网表转换成具体的电路。 目前,美国硅谷约有90以上的ASIC和FPGA采用HDL进 行设计。HDL发展至今已有20多年的历史,并成功的应用于 EDA设计的各个阶段:建模、仿真、验证和综合等。,1. HDL语言,P4,2.几种代表性的HDL语言,VHDL VHDL是美国国防部在20世纪70年代末80年代初提出的VHSIC(Very High Speed Integrated Circuit)计划的

3、产物,1981年提出了一种新的硬件描述语言,称为VHSIC Hardware Description Language 也就是我们熟知的VHDL。 Verilog HDL Verilog HDL是在C语言基础上发展起来的一种硬件描述语言,它是由GDA(Gateway Design Automation)公司的Phil Moorby于1983年创建的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。,P5,Superlog 集合了Verilog的简洁、C语言的强大、功能验证和系统级结构设计等特征,是一种高速的硬件描述语言。由Phil Moorby与Peter Fla

4、ke和一家叫做CoDesign Automation的EDA公司合作,在Verilog语言的基础上,结合高级语言C、C甚至Java等语言的特点,进行扩展,于1999年发布了SuperlogTm系统设计语言,同时开发了两个工具:SystemSimtm(用于系统开发)和SystemExtm(用于高级验证)。 SystemC 由Synopsys和Coware合作为满足SOC要求开发的(在系统芯片各个设计中,像系统定义、软硬件的划分、设计实现等)一种能同时实现较高层次的软件和硬件描述的系统级设计语言。著名公司Cadence也于2001年加入了SystemC联盟。,P6,3.VHDL语言的特点,VHDL

5、具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。 VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。 VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和对已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个开发组共同并行工作才能实现。 对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。 VHDL对设计的描述具

6、有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。,P7,4.VHDL语言描述方式,Behavioral(行为级描述):就是对整个系统的数学模型进行描述。只表示输入/出之间的转换行为,不包含任何结构信息,无需关注设计功能的门级实现。其抽象程度比RTL描述方式和结构描述方式更高。在程序中大量采用算术运算、关系运算、惯性延时、传输延时等难以进行逻辑综合和不能进行逻辑综合的VHDL语句。,P8,RTL(Register transfer Level):即寄存器传输级描述,也称为数据流描述。既表示了设计单元的行为,又隐含该设计单元的结构。 描述电路的功能

7、和结构 调用特殊的硬件 用于综合,P9,Structural Level(结构级描述):描述该设计单元的硬件结构、把已有的设计单元方便地用到新的设计中,使用元件例化语句及配置语句来描述元件的类型及元件的互联关系。结构描述方式的基本框架为用COMPONENT语句指明电路中所用的已生成的模块,用PORTMAP()语句将模块连接起来。 元件描述用于声明端口类型和数据类型 COMPONENT ISPORT ( : ;. : ; END COMPONENT; 元件配置用于映射端口 : PORT MAP( = ; ; = ;),P10,3.2 VHDL语言基本结构,库说明包集合实体构造体(配置) 库(li

8、brary):用来存放已经编译的实体、构造体、包集合和配置,库一般可由用户产生或者由ASIC芯片制造商提供。 包集合(package):存放各设计模块都能共享的数据类型、常数和子程序。 实体(Entity):系统的外部接口关系。 构造体(Architecture):描述系统内部的结构和行为。 配置(configuration):用于从库中选取所需的单元,来组成系统设计的不同版本。,一.VHDL 语言的基本结构,P11,一个完整的设计单元结构 LIBRARY IEEE; 库 USE IEEE.STD_LOGIC_1164.ALL; 包集合 ENTITY 实体名字 IS 实体 PORT (端口名,

9、); END 实体名; ARCHITCTURE 构造体名 OF 实体名 IS 结构体 定义语句:信号常数,数据类型等 BEGIN 并发语句 END 构造体名;,P12,二. VHDL语言的基本单元,实体构造体基本单元(主体) 1:VHDL语言描述方法 电原理图(或电路符号)的描述方式,其中a,b是输入,C是输出,C=AB。 如果用VHDL 语言来描述此电路:实体描述输入、输出,构造体描述功能。,P13,2:实体说明表示方法 ENTITY 实体名 IS PORT (端口名,); END 实体名; 说明: 1:实体名可用英文字母、数字、下划线表示 ,名字开头只能为 英文字母,结尾不能用下划线。 2

10、:PORT(端口名:方向 数据类型);端口名与实体名命名规则 相同。 方向表示: IN 表示输入 OUT 表示输出(构造体内部不能再使用) INOUT 表示输入/输出 BUFFER 表示输出端带有反馈类型。(构造体内部可再使用),P14,数据类型: VHDL有10种数据类型,在逻辑电路设计中只使用两种。 BIT :位 ( 0,1) BIT_VECTOR :位矢量 (“10101101”) 表示数据总线 D0-D7的数据类型: BIT_VECTOR(7 DOWNTO 0); library ieee; use ieee.std_logic_1164.all; Entity Mux is port

11、(d0,d1,sel:in std_logic; q:out std_logic; bus:out std_logic_vector(7 downto 0); end Mux; 例中BIT数据用std_logic说明,Bus的BIT_VECTOR用std_logic_vector说明是完全等效的。,P15,3:构造体 构造体用来描述实体的功能 ARCHITCTURE 构造体名 OF 实体名 IS 定义语句:内部信号,常数,数据类型,函数等的定义 BEGIN 并发语句 END 构造体名; 构造体的名称可由设计者命名。通常根据描述的对象把构 造体命名为behav(behavioral)行为描述,r

12、tl寄存器 传输描述,struct(structural)结构描述。,P16,常数、变量、信号所描述的对象,对象:VHDL语言中,可以赋予一个值的对象就称为客体或对象。 信号(SIGNAL): 对应物理意义上是实际电路连接线。 变量(VARIABLE): 相当于暂存寄存器,变量值不是最终结果。 常数(CONSTANT): 如电源、地等,用来描述固定的值。 信号量和变量的区别: 信号量是全局量(Architecture、Package、entity)变量是局部量(Process、Function、Procedure) 信号赋值用“=”,而变量用“:”。 信号和变量可以相互代入。 如:a 是变量,

13、b是信号,则a:=b;b=a; 变量是立即赋值的,而信号量是在进程结束时赋值的。,P17,常数、变量、信号的区别,相同点:值可变,可综合为逻辑或线 不同点:变量赋值有立即性,且只用于process,subprogram中(VHDL-1076-87),而信号除此之外,还可用于并行语句中 应用: 简单计算 signal 复杂计算 variable 中间结果 variable,P18,signal a, b, c, x, y : integer process(a, b, c) begin c = a; x = c + 2; c = b; y = c + 4; end process;,signal

14、 a, b, x, y : integer process(a, b, c) variable c : integer; begin c := a; x = c + 2; c := b; y = c + 4; end process;,P19,属性描述,描述时钟边沿的属性EVENT EVENT属性属于信号类属性。描述信号边沿出现的时刻 时钟上升沿表示: IF(clkEVENT AND clk=1)THEN q=d; IF CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0) THEN q=d; -确保CLK的变化是一次上升沿的跳变 IF CLK=1 AND CL

15、KLAST_VALUE=0THEN q=d;,P20,三.库、包集合及配置,库(library):用来存放已经编译的实体、构造体、包集合和配置,库一般可由用户产生或者由ASIC芯片制造商提供。 包集合(package):存放各设计模块都能共享的数据类型、常数和子程序。 配置(configuration):用于从库中选取所需的单元,来组成系统设计的不同版本。 库的功能和表示(Library): 库的功能类似于目录: 存放编译后的数据集合,单元,构造体,实体等,使得设计者可以共享已经编译过的设计结果。库的说明总是放在设计单元的最前面。 Library 库名; 库的好处在于使设计者可以共享已经编译过

16、的设计结果,在VHDL中可以存在多个不同的库,但库之间是相互独立的,不可嵌套。,P21,库的种类,STD库:任何包集合都可不作任何说明便可以使用。 如:VHDL标准库中定义BIT、BIT_VECTOR等。 IEEE库:美国电子电器工程师协会定义的库,在使用其中的包集合之前应先说明。 如:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; 面向用户的ASIC库:为了进行门级仿真,各个公司提供面向ASIC的逻辑门库,例设计单片机、乘法器、接口等电路时,并不需要用用户设计这些器件,直接可调用。 工作库Work:现行工作库,用户设计好电路经过编译后放入工作库中。 用户

17、定义库:为了方便工作,用户自己设计的单元可以作为用户自定义库。,P22,包 集 合,包集合(package): 相当于高级语言中的INCLUDE语句。包集合包含信号的定义、 常数定义、数据类型定义、元器件定义、函数定义、过程定义 等。包集合是一个可编译的设计单元,也是库结构中的一个层 次。要使用包集合时可以用USE语句说明。 如:Use ieee.std_logic_1164.all; 该语句表示在VHDL程序中要使用名为 Std_logic_1164 的包集合中所有定义或说明项。,P23,PACKAGE 包集合名 IS 说明语句 END 包集合名; PACKAGE BODY 包集合名 IS

18、语句 END 包集合名;,P24,Modelsim仿真库,P25,配 置,配置(Configuration)语句描述层与层之间的连接关系及实体结构之间的连接关系。设计者可以利用配置语句来选择不同的构造体,使其与要设计的实体相对应。在仿真某个实体时,可以利用配置来选择不同的构造体,进行性能对比试验以获得性能最佳的构造体。 Configuration 配置名 Of 实体名 语句说明 End 配置名;,P26,3.3 VHDL语言的主要描述语句,两类描述语句: 一:顺序语句(Sequential) 二:并发语句(Concurrent),P27,一、顺序描述语句,顺序语句是按出现的次序加以执行。只能出

19、现在进程或子程序中,由它定义进程所操作的算法。 涉及到的系统行为:有时序控制流、控制、条件和迭带等; 语句的功能操作 :有算术、逻辑运算;信号和变量的赋值,子程序调用等。 WAIT 语句 断言语句 信号代入语句 变量赋值语句 IF语句 CASE语句 LOOP语句 NEXT语句 EXIT语句 过程调用语句 NULL语句,P28,1.WAIT语句,书写格式 WAIT :无限等待 WAIT ON 信号 :信号变化前处于等待,变化后进程执行,结束挂起 等待状态 WAIT UNTIL *条件:条件满足后,结束等待状态。 WAIT FOR 时间 :时间到后,结束等待。 2:说明 可以将上述WAIT 语句“

20、或”起来 带*号的WAIT 语句可以进行逻辑综合功能,其余只能进行行为描述。 无敏感量进程是无限等待循环的进程。,P29,2.IF语句,If 语句是根据所制指定的条件来确定执行那些语句。用于选择器、比较器、译码器和条件控制的逻辑设计。 三种类型: 1:开关控制(门闩控制) IF 条件 THEN END IF; 2: 2选1控制 IF 条件 顺序语句 ELSE 顺序语句 END IF; 3: 多选择控制 IF 条件1 THEN . ELSIF 条件2 THEN End IF;,P30,P31,Library ieee; use ieee.std_logic_1164.all; entity Mu

21、x41 is Port(input :in std_logic_vector(3 downto 0); Sel(in std_logic _vector(1 downto 0); Y:out std_logic); End mux41; ARCHITECTURE rtl OF mux41 IS BEGIN PROCESS(input,sel),BEGIN IF(sel=“00”)THEN Y=input(0); ELSIF (sel=“01”)THEN Y=input(1); ELSIF(sel=“10”)THEN Y=input(2); ELSE Y=input(3); END IF; EN

22、D PROCESS; END rtl;,P32,3.CASE 语句,Case语句用来描述总线或编码、译码的行为,从许多不同语句的序列中选择其中之一执行的行为。虽然If语句也有类似功能,但Case语句的可读性比If语句强。 语句格式: CASE 表达式 IS WHEN 条件表达式=顺序语句; END CASE;,P33,ARCHITECTURE rtl OF max41 IS BEGIN PROCESS(sel,input) BEGIN CASE sel IS WHEN “00”=YYYYY=Z; END CASE; END PROCESS; END rtl;,P34,CASE 语句与IF 语句

23、的区别,IF语句按条件顺序处理(可设计优先级编码器),而CASE语句按条件是无顺序处理(并行),从而CASE语句不能用来设计优先编码器。 CASE语句必须列出所有条件,IF语句不一定,一般来说,列出所有条件是不大可能的,故在CASE语句中,常常在最后有WHEN OTHERS 语句。 描述总线或编码、译码的行为Case语句的可读性比If语句强。,P35,4.LOOP语句,LOOP语句用于描述迭代电路,即将相同功能的电路串连起 来,通常有两种描述方式。 1:FOR循环变量 标号:FOR 循环变量 IN 离散范围 LOOP 顺序语句 END LOOP 标号; 如:累加计算 ASUM:for I in

24、 1 to 9 loop sum:=sum+i;-sum初始值为0 end loop ASUM;,P36,2.WHILE LOOP语句。 标号: WHILE 条件 LOOP 顺序处理语句 END LOOP 标号; 没有给出循环次数的范围,而是给出了循环执行顺序语句的条件;没有自动递增循环变量的功能,所以必须在顺序处理语句中增加一条循环次数计算语句,用于循环控制。循环控制条件为布尔表达式,当条件为“真”时,则进行循环;如果条件为“假”,则结束循环。 WHILE( i10) LOOP sum:= sum+i; i:=i+1; END LOOP;,P37,二.并发描述语句,Process 进程语句

25、Concurrent Signal Assignment 并发信号代入语句 Conditional Signal Assignment 条件信号代入语句 Selective Signal Assignment 选择信号代入语句 Concurrent Procedure Call 并发过程调用语句 Block 块语句,P38,1.进程语句,进程语句是最主要的并发语句,也是最能体现硬件描述语言特点的一条语句。在一个构造体中,多个进程语句可同时并发运行。 进程语句主要有以下几个特点: 它可以与其它进程并发运行,并可存取实体或构造体中定义的信号。 进程语句是并发语句,而进程结构中的语句是顺序语句,是按

26、顺序一条一条执行的。 进程的启动可用敏感量或在进程中包含WAIT语句。 进程之间的同步和通信是通过信号量传递来实现的。 进程中只能定义常数、变量,不能定义信号量。,P39,2.并发信号代入语句,信号代入语句用在并发执行场合就是并发信号代入语句。 一个并发语句可以写成一个进程。 如:Process(a,b) Begin c=a AND b; End Process; c=a AND b是一个并发语句,这里a,b都是信号量;代 入符号 “=”右边可以用算术运算表达式、逻辑表达式或关系操作表达式来表示。,P40,3.条件代入语句,条件代入语句可根据不同条件将不同的表达式代入信号量 书写格式为: 目的

27、信号量 = 表达式1 when 条件1 else 表达式2 when 条件2 else 表达式3 when 条件3 else ELSE 表达式n;,P41,例:用条件信号代入语句描述四选一,Entity mux41 is Port(i0,i1,i2,i3,a,b:in std_logic; q:out std_logic); End mux41; Architecture rtl of mux41 is Signal:sel std_logic_vector(1 downto 0); Begin sel=b ,P42,4.选择信号代入语句,选择信号代入语句类似于CASE语句,它对表达式进行测

28、试,当表达式取值不同时,将使不同的值代入目的信号量 书写格式为: WITH 表达式 SELECT 目的信号量 = 表达式1 WHEN 条件1, 表达式2 WHEN 条件2, 表达式n WHEN 条件n, 表达式n+1 WHEN others;,P43,LIBRARY IEEE; USE IEEE.std_logic_1164.all; ENTITY mux 21 IS PORT (a, b, sel : in std_logic ; q : out std_logic); END mux21; ARCHITECTURE with-select-when OF mux21 IS BEGIN wi

29、th sel select q = a when 1, b when 0, X when others; END with-select-when;,例:2选1电路,P44,组合逻辑电路:用各种门电路组成的,用于实现某种功 能的复杂逻辑电路。 特点:某一时刻的输出状态仅由该时刻电路的输入信号 决定,而与该电路在此输入信号之前所具有的状 态无关。 常用组合逻辑主要包括: 简单门电路 编、译码器 三态门电路、总线缓冲器,3.4 VHDL语言组合逻辑设计,P45,1.简单门电路,2输入 “与非”门电路 library ieee; use ieee.std_logic_1164.all; entity

30、 nand2 is port(a,b:in std_logic; y:out std_logic); End nand2; Architecture beh of nand2 is Begin y=a Nand b; End nand2;, ELSE CASE Din IS when 000 = Dout Dout = 00000010;,P47,when 010 = Dout Dout Dout Dout Dout Dout Dout = 00000000; END CASE; END IF; END PROCESS; End RTL;,P48,synplify综合,“111”,“111”,

31、“110”,“000”,Dout7,Dout0,Synplify pro综合电路,P49,优先级编码器(8-3) entity priority is port(Input : in std_logic_vector(7 downto 0); output: out std_logic_vector(2 downto 0); End priority; architecture a of priority is begin process (input) begin if Input(7) = 1 then output = 111; elsif Input(6) = 1 then outpu

32、t = 110; elsif Input(5) = 1 then output = 101; elsif Input(4) = 1 then output = 100; elsif Input(3) = 1 then output = 011; elsif Input(2) = 1 then output = 010; elsif Input(1) = 1 then output = 001; elsif Input(0) = 1 then output = 000; end if; end process; end a;,P50,Synplify pro综合,P51,3.三态门及总线缓冲器,

33、三态门电路 Entity tri_gate is port(din,en:in std_logic; dout:out std_logic); End tri_gate; Architecture a of tri_gate is begin Process(din,en) begin If(en=1)then dout=din;-0,1态 else dout=Z; -高阻态 End if; End process; End a;,Synplify Pro综合,P52,双向总线缓冲器 功能:双向总线缓冲器有两个输入输 出端a和b,一个方向控制端dr和一个 选通端en。 当en=1时双向总线缓冲

34、器未被 选通a和b都呈高阻态; 当en=0时双向总线缓冲器选通 如果dr=0,a=b; (ba) 如果dr=1,b=a; (ab),P53,Library ieee; Use ieee.std_logic_1164.all; Entity tri_bigate is Port(a,b:inout std_logic_vector(7 downto 0); en:in std_logic; dr:in std_logic); End tri_bigate; Architecture rtl of tri_bigate is Signal aout,bout:std_logic_vector(7

35、downto 0); Begin Process (a, dr, en) begin If(en=0)and (dr=1)then bout=a;,P54,else bout=“ZZZZZZZZ”; End if; b=bout; End process; process (b, dr, en) begin If(en=0)and (dr=0)then aout=b; else aout=“ZZZZZZZZ”; End if; a=aout; End process; End rtl;,P55,时序逻辑电路? 是具有记忆(或内部状态)的电路,即时序逻辑电路的输出不但与当前的输入状态有关,而且与

36、以前的输入状态有关。时序电路的内部状态元件可以由边沿敏感的触发器或由电平敏感的锁存器实现,但大多数时序电路采用触发器来实现。 时序电路分类: 时序电路可分为同步时序电路和异步时序电路两种,大部分时序电路为同步时序电路。 常用时序逻辑主要包括: 触发器 寄存器 计数器 分频器,3.5 VHDL语言时序逻辑设计,P56,时钟信号和复位信号的描述,时钟信号描述 上升沿:IF(clkEVENT AND clk=1)THEN 下降沿:IF(clkEVENT AND clk=0)THEN 复位信号描述 (1)异步复位描述 PROCESS(clk,reset) BEGIN IF(reset=0)THEN q

37、=0; ELSIF (clkEVENT AND clk=1)THEN q=d; END IF; END PROCESS;,(2)同步复位描述 PROCESS(clk) BEGIN IF(clkEVENT AND clk=1)THEN IF(reset=0)THEN q=0; ELSE q=d; END IF; End if; End process;,P57,1.触发器,D触发器 Entity dff1 IS PORT (clk ,d ,reset : in STD_LOGIC; q : out STD_LOGIC); END dff1; ARCHITECTURE rtl OF dff1 IS

38、 BEGIN PROCESS (clk, reset) BEGIN IF(reset=0) THE q=0; ELSIF (clkEVENT AND clk=1)THE q= d; END IF; END PROCESS; END rtl;,P58,2.寄存器,移位寄存器(多级延迟) ENTITY reg1 IS PORT ( d : in BIT; clk: in BIT; q : out BIT); END reg1; ARCHITECTURE reg1 OF reg1 IS SIGNAL a, b : BIT; BEGIN PROCESS (clk) BEGIN IF clkevent

39、and clk=1 THEN a = d; b = a; q = b; END IF; END PROCESS; END reg1;,P59,串转并移位寄存器 library ieee; use ieee.std_logic_1164.all; entity parltostr is port(clr,clk,din:in std_logic; q:out std_logic_vector(7 downto 0); end parltostr; Architecture rtl of parltostr is signal temp :std_logic_vector(7 downto 0);

40、 begin process(clk,clr) begin if clr=1 then,P60,temp=00000000; elsif clkevent and clk=1then temp(0)= din; temp(1)= temp(0); temp(2)= temp(1); temp(3)= temp(2); temp(4)= temp(3); temp(5)= temp(4); temp(6)= temp(5); temp(7)= temp(6); q=temp; end if; end process; end rtl;,P61,Synplify pro综合,P62,P63,位串转

41、并移位寄存器,总线数据串转并移位寄存器,P64,3.计数器,10进制计数器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; ENTITY count10 IS PORT(reset,clk:IN STD_LOGIC; q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END count10; architecture rtl OF count10 IS BEGIN PROCESS(clk) VARIABLE q

42、10:INTEGER range 0 to 9; BEGIN,P65,IF(clkevent and clk=1)THEN IF(reset=1)THEN q10:=0; ELSIF(q10=9)THEN q10:=0; ELSE q10:=q10+1; END IF; END IF; q=conv_std_logic_vector(q10,4);-数据类型转换 END PROCESS; end rtl;,P66,课堂练习:参考实例设计一个有异步清零端的25进制减法计数器,P67,4.分频器,在具体的电路设计中,可能需要很多种不同频率的时钟,但时钟源往往只有一个,这时候就需要分频得到我们需要的

43、时钟频率,同时也能满足时钟同步设计。最常用的分频器设计采用计数器对时钟进行分频系数计数,采用调整范围计数或采用组合逻辑实现需要的频率时钟的占空比值。 10分频器的设计 Library ieee; USE IEEE.STD_LOGIC_1164.ALL; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; ENTITY count10 IS PORT(reset,clk:IN STD_LOGIC; clk1:out std_logic; q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END cou

44、nt10;,P68,architecture rtl OF count10 IS signal q10:INTEGER range 0 to 9; BEGIN P1:PROCESS(clk)-计数 BEGIN IF(clkevent and clk=1)THEN IF(reset=1)THEN q10=0; ELSIF(q10=9)THEN q10=0; ELSE q10=q10+1; END IF; END IF; q=conv_std_logic_vector(q10,4); END PROCESS;,P69,P2:process(clk,q10)-分频 begin if clkevent

45、 and clk=1 then if q105 then -占空比设置 clk1=0; else clk1=1; end if; end if; end process; end rtl;,Synplify pro综合RTL视图,P71,课堂练习:对40MHz的源时钟信号进行32分频,占空比为50%,P72,整奇数占空比为50%的分频器如何设计?,P73,50%占空比计算:clk_5=clk_5_1 or clk_5_2,P74,process1: -占空比40的5分频(上升延) process(clk,reset) begin if reset= 0 then temp1=0; elsif

46、clkevent and clk=1 then if temp1=4 then temp1=0; else temp1=temp1+1; end if; if 1temp1 then clk1=0; else clk1=1; end if; end if; end process;,P75,process2:-占空比40的5分频(下降延) process(clk,reset) begin if reset= 0 then temp2=0; elsif clkevent and clk=0 then if temp2=4 then temp2=0; else temp2=temp2+1; end

47、 if; if 1temp2 then clk2=0; else clk2=1; end if; end if; end process;,process3:-或运算 process(clk1,clk2) begin clk_5=clk1 or clk2; end process; end Behavioral;,Synplify pro综合RTL视图,P77,课堂练习:设计一个占空比为50%的3分频器 思考题:如果是设计任意整数分频器、半整数分频呢?,半整奇数(N/2)分频器如何设计?,例如2.5分频方法: CLK_5为CLK的50%占空比的5倍分频 CLK与CLK的XOR为2.5分频的计数

48、时钟 计数为0,1输出为高1,2为低0,Synplify pro综合RTL视图,50%占空比输出,与输入时钟异或输出,P80,3.6 VHDL语言的状态机设计,有限状态机的类型: Moor状态机: 输出仅与当前状态有关而与输入无关 Mealy状态机:输出与当前状态和输入都有关系 有限状态转移图表示方法:,P81,状态机结构图,A,B,C,(Moor Only),P82,状态机的定义,定义状态机数据类型 状态编码采用二进制编码 语法: TYPE State is (s0,s1,s2,s3,s4,s5); 特点: s0=000,s1=001,s2=010,. 状态编码采用其他码型 语法: TYPE

49、 State is (s0,s1,s2,s3,s4,s5); ATTRIBUTE ENUM_ENCODING : string; State: TYPE is 000 001 011 010 110 111 101 100; 特点: s0=000,s1=001,s2=011,. 其他常用码型 Gray码(格雷码):相邻状态只变化1比特 One-Hot码型:每个状态只有1位有效,其他各位都无效 例如:s0=000001,s1=000010,s2=000100,. 定义状态机信号 一般定义:Signal PresentState,NextState: State; 隐性的定义状态机:Signal

50、PresentState: std_logic_vector(2 downto 0);,P83,状态机的实现,实现状态转移 process(clk) begin if clkevent and clk=1 then PresentState=NextState; end if; end process; ,判断移出状态及输出 process(input,PresentState) begin case PresentState is when s0= . when s1= . when others= . end case; end process;,P84,VHDL设计状态机实例,Moor型

51、状态机 library ieee; use ieee.std_logic_1164.all; entity moore is port( clk, rst:in std_logic; id:in std_logic_vector(3 downto 0); y:out std_logic_vector(1 downto 0); end moore; architecture archmoore2 of moore is Signal state: std_logic_vector(2 downto 0); constant state0: std_logic_vector(2 downto 0)

52、 := 000; constant state1: std_logic_vector(2 downto 0) := 010; constant state2: std_logic_vector(2 downto 0) := 011; constant state3: std_logic_vector(2 downto 0) := 110; constant state4: std_logic_vector(2 downto 0) := 111;-二进制码定义 begin moore: process (clk, rst) begin if rst=1 then state = state0;-

53、初始状态 elsif (clkevent and clk=1) then,P85,case state is when state0 = if id = x3 then state state if id = x7 then state if id x7 then state = state0; elsif id = x9“then state = state4;,else state if id = xb then state state = state0; end case; end if; end process; y = state(1 downto 0); end archmoore

54、2;,P86,状态机综合结果图(synplify pro综合),State Machine,Synplify/Synplify Pro具有的FSM View功能,P87,P88,课堂练习:用Moor型状态机设计6进制计数器(画出状态转移图)?,P89,Mealy型状态机 library ieee; use ieee.std_logic_1164.all; entity mealy1 is port( clk, rst:in std_logic; id:in std_logic_vector(3 downto 0); y:out std_logic_vector(1 downto 0); end

55、 mealy1; architecture archmealy of mealy1 is type states is (state0, state1, state2, state3, state4); signal state: states;-状态类型定义 begin moore: process (clk, rst) begin if rst=1 then state = state0;-初始态 y = “00”;-初始态输出,P90,elsif (clkevent and clk=1) then case state is when state0 = if id = x3 then s

56、tate state if id = x7 then state ,if id if id = xb then state = state0; y = 00; else state = state4; y = 11; end if; end case; end if; end process; end archmealy;,P91,状态机综合结果图(synplify pro综合),State machine,P92,P93,课堂练习:用Mealy型状态机设计6进制计数器(画出状态转移图)?,P94,利用状态机设计序列检测器(“11100101”),library ieee; use ieee.std_logic_1164.all; entity FSM is port(clk, rst, a : in

温馨提示

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

评论

0/150

提交评论