资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,基于,FPGA,的数字系统设计,内容,1 可编程逻辑器件(,PLD),2,VHDL,语言基础,3 数字系统设计流程,4,FPGA,系统设计中的几个问题,5,FPGA,数字系统设计练习,1 可编程逻辑器件(,PLD),1.1 概述,1.2,CPLD,1.1,FPGA,PLD(,Programable,Logic Device),可编程逻辑器件,FPGA(Field,Programable,Gate Array),现场可编程门阵列,什么是可编程逻辑器件?,优点,通用性,超大规模集成,高速并行处理,可擦写,缩短系统设计周期,降低开发成本,分类,CPLD:,基于乘积项(,Product-Term),技术,,EEPROM(,或,Flash),工艺,FPGA:,基于查找表技术(,Look-Up table),技术,,SRAM,工艺,分类(续),CPLD,产品系列:,Altera,公司,MAX,系列;,Xilinx,公司,XC9500,系列;,FPGA,产品系列:,Altera,公司,FLEX,系列;,Xilinx,公司,Sparten,Vertex,系列;,基于乘积项的,CPLD,结构(,MAX700),宏单元结构,基于查找表的,FPGA,结构(,Sparten、Vertex,),CLB/SLICE,结构,查找表(,LUT),逻辑实现原理,查找表(,LUT),逻辑实现原理(续),组合逻辑由查找表实现;,查找表可以实现的逻辑与复杂度无关,而取决于输入信号的个数;,信号经过一个,LUT,表的时延是相同的;,分布式(,Distributed)RAM,一个,LUT,表可以实现一个16,X1,的单口,RAM:,同步写入;异步读出;,结合一个触发器可以实现同步读写的单口,RAM;,分布式(,Distributed)RAM,两个,LUT,可以生成一个32,x1,的单口,RAM,,或一个16,x1,的“双口”,RAM;,“双口”,RAM,有一个读写口和一个只读口;,块(,Block)RAM,每块,BlockRAM,具有4,k,比特存储能力;,真正独立的双口,RAM;,深度和数据宽度可以为256,x16、512x8、1024x4、2048x2、4096x1;,2,VHDL,语言基础,2.1,VHDL,语言特点,2.2,VHDL,设计单元,2.3,VHDL,语句,VHDL,语言特点,硬件描述语言(,Hardware Description Language);,并行语句和并行结构;,结构清晰,适合作系统级设计;,VHDL,的基本设计单元,实体(,Entity),结构体(,Architecture),配置(,Configuration),包集合(,Package),库(,Library),实体(,Entity),实体是电子系统的抽象,实体说明用于描述系统的外部接口,;,格式:,Entity,实体名,is,generic,(,类属表);,port,(,端口表);,end,实体名;,例:,entity,mux,is,generic,(,width:integer,range,0,to,7:=2,);,port,(,reset:,in,std_logic;,clk,:,in,std,_logic;,sel :,in,std_logic_vector(1,downto,0);,din0 :,in,std,_logic_vector(width,downto,0,);,din1,:,in,std,_logic_vector(width,downto,0);,din2 :,in,std,_logic_vector(width,downto,0);,din3 :,in,std,_logic_vector(width,downto,0);,dout :,out,std,_logic_vector(width,downto,0),);,end,mux;,结构体(,Architecture),结构体是对实体功能的具体描述。,格式:,architecture,结构体名,of,实体名,is,内部信号定义;,begin,并行处理语句;,end,结构体名;,例:,architecture,behave,of,mux,is,begin,process,(reset,clk),begin,if,reset=1,then,dout 0);,elsif,rising_edge(clk),then,case,sel,is,when,00=dout dout dout dout null;,end,case,;,end,if,;,end,process,;,end,behave;,配置(,Configuration),configuration,mux_cfg,of,mux,is,for,behave,end,for,;,end,mux_cfg;,配置描述实体与结构体之间的连接关系,格式:,Configuration,配置名,of,实体名,is,for,结构体名,end for,;,end,配置名;,例:,配置(,Configuration)(,续),配置也可以描述层与层之间的连接关系;,格式,Configuration,配置名,of,实体名,is,for,结构体名,for all,:,元件实体名,use configuration,元件配置名;,end for,;,end for,;,end,配置名;,例:,Configuration,highlevel_cfg,of,highlevel,is,for,constuct,for all,:,mux,use configuration,mux_cfg;,end for,;,end for,;,end,highlevel_cfg,;,包集合(,Package),包集合中包括一些通用的信号定义、常数定义、数据类型定义、元件定义、函数定义和过程定义等。,格式:,例:,IEEE,的,std_logic_1164,包,package,包集合名,is,信号定义,;,常数定义,;,数据类型定义,;,元件定义,;,函数定义,;,过程定义,;,end,包集合名;,package body,包集合名,is,元件体,;,函数体,;,过程体,;,end,包集合名,;,包集合(,Package)(,续),包集合的声明:,use,库名,.,包集合名,.,all,;,例,:,library,ieee;,use,ieee.std_logic_unsigned.,all,;,use,ieee.std_logic_1164.std_logic;,库(,Library),库是经过编译的设计单元(实体、结构体、配置、包)的集合。库中的资源可以被其他设计重用;,在库中的资源可以被调用以前需要对库进行声明;,VHDL,中的常用库:,VHDL,标准库(,STD,库);,资源库(,IEEE,库、,XilinxCoreLib,库);,当前工作库(,work,库);,用户自定义库;,VHDL,基本设计单元,VHDL,语句,串行语句:,WAIT,语句;,变量赋值语句;,IF,语句;,CASE,语句;,LOOP,语句;,NEXT,语句;,EXIT,语句;,并行语句:,WHEN,ELSE,语句;,WITH,SELECT,语句;,块(,BLOCK,),语句;,进程(,PROCESS,),语句;,可并行亦可串行的语句:,断言(,ASSERT,),语句;,信号赋值语句;,VHDL,中的并行语句,结构体(,Architecture,),中只能使用并行语句;,architecture,behave1,of,sample,is,begin,process,(reset,clk),begin,。,end,process,;,a=b,and,c;,d=a,when,en=1,else,0,end,behave;,architecture,behave2,of,sample,is,Begin,d=a,when,en=1,else,0;,a=b,and,c;,process,(reset,clk),begin,。,end,process,;,end,behave;,VHDL,中的串行语句,在进程(,Process),中只能使用串行语句;,串行语句是串行处理,并行执行的;,process,(reset,clk),begin,if,reset=1,then,a=0;,b=1;,elsif,rising_edge(clk),then,a=b;,b=a;,end,if,;,end,process,;,process,(reset,clk),begin,if,reset=1,then,a=0;,b=1;,elsif,rising_edge(clk),then,b=a;,a=b;,end,if,;,end,process,;,VHDL,中的串行语句(续),process,(reset,clk),begin,if,reset=1,then,a=0;,b=1;,elsif,rising_edge(clk),then,a=1;,a=b;,b=a;,end,if,;,end,process,;,process,(reset,clk),begin,if,reset=1,then,a=0;,b=1;,elsif,rising_edge(clk),then,a=b;,b=a;,a=1;,end,if,;,end,process,;,?,常用的,VHDL,语句,信号赋值语句(,添加新文件-编辑,VHDL,代码-编译,生成,Xilinx Core(Xilinx CoreGenerator 3.1),新建工程-选择元件-配置元件参数,功能仿真(,ActiveHDL 4.2),设置顶层-新建波形文件-添加观察信号-添加激励-仿真,综合(,Symplify Pro 6.0),新建工程-添加文件-选择器件-综合,布线(,Design Manager),新建工程-打开网表文件(.,edf)-,设置布线选项(,Core,路径、延时文件)-设置约束-布线,时延仿真(,ActiveHDL 4.2),添加,time_sim.vhd、time_sim.sdf,文件至工程-清空工作库-编译,time_sim.vhd-,设置顶层-设置延时等级-仿真,4,FPGA,系统设计中的几个问题,4.1 可综合设计,4.2 毛刺和多时钟系统,4.3 系统资源优化,4.4 系统速度优化,可综合设计(1),可综合系统设计是,VHDL,可描述的系统设计的一个子集;,可综合的语句:,赋值语句;,if,语句;,case,语句;,when-else,语句;,process,语句;,不可综合的语句:,assert,语句;,wait,语句;,after,语句;,可综合设计(2),可综合的数据类型:,整型(,integer);,比特和比特矢量型(,bit、bit_vector、std_logic、std_logic_vector);,不可综合的数据类型:,实型(,real);,时间类型(,time);,文件类型(,file);,可综合设计(3),可综合的运算:,逻辑运算;,关系运算;,并置运算;,算术运算中的加、减运算;,不可综合的运算:,算术运算中的除法运算、模运算等;,可综合设计(4),作可综合设计的基本原则:,尽量使用易综合的简单结构进行设计;,避免使用循环(,loop)、,乘法()等可综合、但不易综合的结构;,在系统设计时,先进行结构设计,再进行代码级描述;,毛刺和多时钟系统,组合逻辑必然产生毛刺;,对毛刺不敏感的输入:,锁存器数据输入;,所有同步控制输入;,对毛刺敏感的输入:,所有异步控制输入;,时钟输入;,时钟全局化,在设计时序电路系统时,尽量使用统一的全局时钟,避免使用门控时钟或用局部信号作时钟;,例1:门控时钟;,改用全局时钟:,时钟全局化(续),例2:局部信号时钟:,改用全局时钟:,时钟倍频的方法;,多时钟系统,当系统中存在多个独立的时钟时,每一个时钟控制的信号对于其余时钟来说都是异步的;即使是其余时钟的同步输入,对其产生的毛刺也是敏感的;,例:在一个双时钟系统中,用一个时钟对另一个时钟计数;,稳定性?,时钟同步化,clk_2,对,clk_1,的同步化:,同步化对时钟的上升沿的响应有延时;,同步时钟频率应高于被同步时钟频率;,时钟同步化的,VHDL,描述,process,(reset,clk_1),begin,if,reset=1,then,flag1=0;,elsif,rising_edge(clk_1),then,flag1=,not,flag1;,end,if,;,end,process,;,process,(reset,clk_2),begin,if,reset=1,then,flag2=0;,flag3=0;,clk_2_ce=0;,elsif,rising_edge(clk_2),then,flag2=flag1;,flag3=flag2;,if,flag3/=flag2,the,n,clk_2_ce=1;,else,clk_2_ce=0;,end,if,;,end,if,;,end,process,;,系统资源优化,共享相同的逻辑或运算单元;,例:交织编码器中的读写地址发生器;,现在的综合工具对功能重叠的模块的优化做的很好;,扇出问题;,系统资源优化针对,Xilinx FPGA,的优化(1),LUT,表的使用:,一个,LUT,表可以实现:,一个4输入1输出的组合逻辑;,一个161的单口,RAM;,一个161的,ROM;,一个161的移位寄存器;,针对,Xilinx FPGA,的优化(2),利用,LUT,表可以实现,RAM,的特点,在某些场合可以代替寄存器;,例:一个16拍延时线;,针对,Xilinx FPGA,的优化(3),用,LUT,表无法实现的例子:,带复位端的“,RAM”:,带反馈的移位寄存器:,针对,Xilinx FPGA,的优化(4),分布式,RAM,和块,RAM,的选择,分布式,RAM,适合实现存储量较小的存储器,特别是深度小、位宽大的情况;用,CoreGenerator,可实现的最大的分布式,RAM,为25664比特;,块,RAM,适合实现存储量较大的存储器,特别是深度大,位宽小的情况;一块,BlockRAM,的最大位宽是16比特;,根据硬件资源特点,平均使用,LUT、,触发器和块,RAM,资源;,系统速度优化(1),同步系统的最高工作频率:,逻辑延时和线路延时,系统速度优化(2),提高体统速度的方法:增加锁存器,分割组合逻辑,系统速度优化(3),例:设计一个最大值选择电路;,输入:串行数据流;,输出:最大值;,方案1:直接实现;,方案2:在比较器后加一级锁存;,系统速度优化(4),布线结果:,方案1:124,MHz,方案2:137,MHz,一个问题:,加入锁存器以后电路能否连续工作?,系统速度优化(5)流水线技术,方案3:采用流水线技术使电路连续工作;,修改组合逻辑,考虑流水线上的中间状态;,布线结果:137,MHz,对有反馈的电路使用流水线技术时,一般需要考虑中间状态,5,FPGA,数字系统设计练习,5.1 状态机设计,5.2 异步,FIFO,设计,5.3 维特比译码器设计,状态机设计,目的:,熟悉简单的组合逻辑电路和时序逻辑电路的设计方法;,熟悉,VHDL,语言;,熟悉工具软件的使用;,状态机设计,设计一个用户信令控制器:,输入端口:,clk :,时钟信号,reset:,复位信号,af :,本端挂机信号,,0,表示摘机,ab :,对端挂机信号,,0,表示摘机,输出端口:,bcc :,忙音控制信号,,1,表示输出忙音,brc :,回铃音控制信号,,1,表示输出回铃音,rc :,振铃控制信号,,1,表示振铃,此控制器完成一个电话接续过程中控制忙音,回铃音及振铃输出的功能。,1),复位信号有效,则控制器处于空闲状态;,2),在空闲状态下,如果,ab=1,,,af=0,,,控制器进入主叫状态;如果,ab=0,,,af=0,,,控制,器进入示忙状态;如果,ab=0,,,af=1,,,控制器进入振铃状态;,3),在主叫状态下,如果,af=1,,,控制器回到空闲状态,如果,ab=0,,,控制器进入通话状态;,4),在通话状态下,如果,ab=1,,,控制器进入示忙状态,如果,af=1,,,控制器进入等待状态;,5),在示忙状态下,如果,af=1,,,控制器进入等待状态;,6),在等待状态下,如果,ab=1,,,控制器回到空闲状态;,7),在振铃状态下,如果,af=0,,,控制器进入通话状态,如果,ab=1,,,控制器回到空闲状态;,8),在振铃状态下,输出振铃音;,在示忙状态下,输出忙音;,在主叫状态下,输出回铃音;,在其他状态下,不输出任何音。,异步,FIFO,设计,目的:,熟悉,RAM,的设计方法;,熟悉,Xilinx Core,的使用;,多时钟系统的处理;,要求:,设计一个,FIFO,队列,读写时钟独立,要求对队列空或 者满的状态作出判断,并作相应处理;系统稳定工作。(读时钟速率高于写时钟速率)。,维特比译码器设计,目的:,尝试复杂数字系统的设计;,掌握模块化和层次化设计的方法;,系统的资源优化和性能优化;,要求:,用,FPGA,实现一个维特比译码器;使用流水线技术对其中的“加比选”部分电路进行优化。,谢谢大家!,
展开阅读全文