1、基于PLD的数字系统设计Page 21.PLD的分类集成度集成度低密度:低密度:高密度:高密度:结构特点结构特点阵列型的阵列型的PLD器件(与或阵列)器件(与或阵列)单元型的单元型的PLD器件(逻辑单元)器件(逻辑单元)编程特性编程特性nGAL结构与PAL类 似:与阵列可编程改写;n与PAL的不同的是:PAL的输出口为定型为缓冲器/驱动器,GAL的输出单元为输出逻辑宏单元(OLMC),其结构和功能可由用户改写。Page 32、PLD的结构:(1)PLD的基本结构输入缓冲电路输出缓冲电路或阵列与阵列Page 4(2)基于乘积项的CPLD的基本结构这种CPLD主要包括三块结构:逻辑阵列块(LAB)
2、:由若干个宏单元(Marocell)组成,是CPLD内部最基本的结构可编程连线(PIA)I/O控制块Page 5Page 6Page 7CPLD中的宏单元Page 8(3)基于查找表(LUT)的FPGA的结构 A:查找表(Look-Up-Table)例:LUT实现的四输入与门实际逻辑电路LUT的实现方式 a,b,c,d 输入逻辑输出地址RAM中存储的内容00000000000001000010.0.01111111111n 本质上就是一个本质上就是一个RAMn FPGA中多使用中多使用4输入输入的的LUT,所以每一个,所以每一个LUT可以看成一个有可以看成一个有4位地址位地址线的线的16x1的
3、的RAMPage 90000010100000101输入 A 输入 B 输入C 输入D 查找表输出实际的16x1RAM结构多路选择器Page 10FLEX10K系列器件:Page 11LAB:Page 12逻辑单元LEPage 13进位链连通LAB中的所有LEPage 14两种不同的级联方式Page 15连续布线(Altera 基于查找表(LUT)的 FPGA)Page 16FPGA/CPLD生产商 Page 17LATTICEVANTIS(AMD)ispLSI系列:系列:1K、2K、3K、5K、8K ispLSI1016 、ispLSI2032、ispLSI1032E、ispLSI3256A
4、 MACH系列系列 ispPAC系列:系列:其他其他PLD公司:公司:ACTEL公司:公司:ACT1/2/3、40MXATMEL公司:公司:ATF1500AS系列、系列、40MXCYPRESS公司公司QUIKLOGIC公司公司 CPLD SO MUCH IC!FPGA CPLDPage 183、CPLD和FPGA的性能对比(1)适合结构 CPLD是“逻辑丰富”型的,更适合完成各种算法和组合逻辑,FPGA 是“时序丰富”型的,更适合于完成时序逻辑。原因:CPLD 的一个宏单元可以分解十几个甚至 2030 个组合逻辑输入。而 FPGA 的1 个LUT只能处理4 输入的组合逻辑CPLD 适合用于设计
5、译码等复杂组合逻辑。但 FPGA 的制造工艺确定了 FPGA 芯片中包含的LUT和触发器的数量非常多,集成度更高,而 PLD 一般只能做到512 个逻辑单元,所以如果设计中使用到大量触发器,例如设计一个复杂的时序逻辑,就使用 FPGA。Page 19(2)运行速度 CPLD优于 FPGA。因为:CPLD 是逻辑块级编程,且其逻辑块互连是集总式的,CPLD 通过修改具有固定内连电路的逻辑功能来编程;而 FPGA 是门级编程,且LAB 之间是采用分布式互连,FPGA 主要通过改变内部连线的布线来编程。同时,由于 CPLD 有专用连线每个宏单元相连,信号到每个宏单元的延时相同并且延时最短。因此CPL
6、D 比 FPGA 有较大的时间可预测性,产品可以给出引脚到引脚的最大延迟时间。Page 20(3)编程方式目前的CPLD主要是基于 E2PROM或 FLASH存储器编程,编程次数达 1 万次,其优点是在系统断电后,编程信息不丢失,且无需外部存储器芯片,使用简单。CPLD又可分为在编程器上编程和在系统编程(In System Programma2ble,ISP)两种。ISP器件的优点是不需要编程器,可先将器件装焊于印制板,再经过编程电缆进行编程,编程、调试和维护都很方便。FPGA大部分是基于 SRAM编程其优点是可进行任意次数的编程,并可在工作中快速编程,实现板级和系统级的动态配置,因此可称为可
7、重配置硬件。其缺点是编程信息需存放在外部存储器上,每次上电时,需从器件的外部存储器或计算机中将编程数据写入 SRAM中,使用方法复杂,且编程数据信息在系统断电时丢失。Page 214、CPLD和FPGA的编程与配置 根据器件的不同结构,基于电可擦除存储单元的 EEPROM或 Flash技术的 CPLD的在系统下载称为编程(Program),而把基于 SRAM 查找表结构的FPGA的在系统下载称为配置(Configure)Page 22此接口既可作编此接口既可作编程下载口,也可作程下载口,也可作JTAG接口接口(1)ALTERA 的 ByteBlaster并行下载方式Page 23ByteBla
8、ster支持两种数据下载模式:被动串行同步(PS)方式:可对 ACEX1K,F LEX10K,F LEX6000和 F LEX8000 等器件进行配置;JTAG方式:具有电路边界扫描测试功能。可对 FLEX10K 系列器件进行配置以及对MAX9000,MAX7000S 和 MAX7000A 等系列器件进行在线编程。下载时再结合 Altera 提供的仿真软件Max+plus II或者 Quartus 就可以进行编程与配置。Page 24ISP功能提高设计和应用的灵活性n 减少对器件的触减少对器件的触摸和损伤摸和损伤n 不计较器件的封不计较器件的封装形式装形式n 允许一般的存储允许一般的存储n 样
9、机制造方便样机制造方便n 支持生产和测试支持生产和测试流程中的修改流程中的修改n 允许现场硬件升级允许现场硬件升级n 迅速方便地提升功迅速方便地提升功能能未编程前先焊接安装未编程前先焊接安装系统内编程系统内编程-ISP在系统现场重在系统现场重编程修改编程修改Page 25ByteBlaster程序下载接口n DCLK(时钟信号时钟信号)n CONF DONE(配置控制配置控制),n nCONFIG(配置控制配置控制),n nSTATUS(配置状态配置状态),n DATA0(到器件的数据到器件的数据)n TCK(时钟信号时钟信号);nTDO(来自器件的数据来自器件的数据);nTMS(JTAG状态
10、机控制状态机控制);nTDI(到器件的数据到器件的数据)Page 26JTAG模式下对CPLD(MAX7000AE)器件进行编程Page 27多多CPLD的的ISP方式编程方式编程Page 28PS方式下对 FLEX10K器件进行配置电缆电缆VCC为为+5V,不会对不会对3.3V被编被编程器件造成损坏程器件造成损坏Page 29多FPGA芯片配置电路Page 30(2)用专用配置器件配置 FPGAFPGA 器件有两种配置下载方式:主动配置方式:由 FPG A器件引导配置操作过程,它控制着外部存储器和初始化过程被动配置方式:由外部计算机或控制器控制配置过程。FPG A 在正常工作时,它的配置数据
11、存储在 SRAM中。由于 SRAM的易失性,每次加电时,配置数据都必须重新下载。实验系统中,通常采用外部计算机或控制器进行调试,可使用被动配置方式。当数字系统设计完毕需要正式投入使用时,FPG A将主动从外围专用存储芯片中获得配置数据。FPG A 上电自动配置可采用EPROM,专用的配置器件或 FlashROM等等。Page 31专用专用配置器件配置 FPG APage 32(3)单片机配置FPGAPage 33PS模式配置时序模式配置时序 2us60us5sPage 345、设计实例:多路音频采集系统(1)设计要求:四路模拟音源的同时实时采集。模拟音源可以是麦克风输出或其它音频设备的模拟音频
12、输出。模拟信号的数字化。系统先将模拟信号数字化后,再通过网络发送。采样率:44.1kHz。采样精度:16位。AGC(自动增益控制)功能。提供至少1KB数据缓冲。Page 35(2)系统设计及方案选择Page 36需考虑的因素前置放大器(AIC31)的配置问题;(MCU)A/D变换器的时钟供给问题;(CPLD)数据存储方式:Big endian:低字节放低地址,高字节放高地址。直观的字节序 Little Endian:符合人类思维的字节序数据缓冲区的大小(4x1K)及缓冲方案:FIFO:数据从一侧流入,另一侧流出。FIFO 具有两套数据线而无地址线。高速SRAM切换:用两片SRAM构成,在某一时
13、刻,CPLD和DS80C400分时轮流对读写。总线切换电路复杂。双口 RAM:双口 RAM 具有两套独立的数据、地址和控制总线,可从两个端口同时读写而互不干扰 Page 37n 地址分配问题Page 38CPLD功能块划分:n检测来自微控制器的启动/停止信号;n产生对微控制器的中断信号;n并控制状态LED。n为AIC31提供时钟信号,n接收自AIC31的串行数字音频数据,n音频信号的串并转换,n并行音频数据的RAM 存储。n 产生写产生写RAM的时序,的时序,n 生成写地址;生成写地址;n 接收接收ADC接口传送的数据,并执行接口传送的数据,并执行RAM写操作写操作Page 39(3)CPLD
14、接口设计微控制器接口模块Page 40名称方向描述clkInClock。时钟输入。(22.5792MHz,即每个clk周期约为44ns)resetInReset。复位信号,低电平有效。fullIn高电平有效。来自RAM控制模块,每个缓冲周期末,该信号有效一个clk周期。st_ucInStart。启动/停止信号,低电平:启动;高电平:停止。irq_ucOutInterrupt request。中断请求信号,低有效。当检测到full信号的上升沿时,产生中断,通知网络微处理器读取音频数据并发送到网络。ledOutLED状态控制信号。当系统处于采集状态时,LED闪烁,否则,常亮。sys_enOutSy
15、stem enable。系统使能信号,高有效。当系统处于工作状态时,sys_en有效。Page 41ADC 接口模块AIC31的时序115 162321116153Left channelRight channelWCLKBCLKSDMSBLSB MSBLSBPage 42接口图Page 43端口描述名称方向描述clkInputClock。时钟输入。resetInputReset。复位信号,低电平有效。sys_enInputSystem enable。系统使能信号,高有效。mclkOutput Main clock。AIC31工作的主时钟,与clk同频bclkOutput Bit clock。
16、向AIC31提供的串行数字音频接口的位时钟,由CPLD将clk 16分频得到。wclkOutput Word clock。向AIC31提供的串行数字音频接口的字节选时钟,选择输出左声道数据还是右声道数据。由CPLD将clk 512分频得到。Page 44名称方向描述sd0InputSerial data 0。AIC31的串行数字音频数据。sd1InputSerial data1。AIC31的串行数字音频数据。dsOutput Data valid strobe。数据有效指示信号,上升沿有效。hlbOutput High/low byte。高/低字节指示信号,0为低字节,1为高字节。lrcOut
17、put Left/right channel。左/右声道指示信号,0为左声道,1为右声道。data07:0Output 并行音频数据。data17:0Output 并行音频数据。Page 45RAM控制模块控制模块(ram_control)clkdsce_lwe_laddr_ldata_ldata0data1RAM写时序写时序Page 46名称方向描述clkInputClock。时钟输入。resetInputReset。复位信号,低电平有效。dsInputData valid strobe。数据有效指示信号,上升沿有效。hlbInputHigh/low byte。高/低字节指示信号,0为低字节
18、,1为高字节。lrcInputLeft/right channel。左/右声道指示信号,0为左声道,1为右声道。data07:0Input并行音频数据。data17:0Input并行音频数据。Page 47名称方向描述ce_lOutputChip enable。双口RAM左端口片选信号。oe_lOutputOutput enable。双口RAM左端口读选通信号。we_lOutputWrite enable。双口RAM左端口写选通信号。addr_l12:0OutputAddress bus。双口RAM左端口地址总线。data_l7:0In/OutData bus。双口RAM左端口数据总线。add
19、r12_rOutputAddress bus。双口RAM右端口地址线A12。fullOutput缓冲区写满指示信号。高电平有效。Page 48Page 49Page 50(4)程序设计A:uc_interface:模块功能(每个功能对应一个线程)延时st_uc延迟full信号生成irq _uc 信号生成sys_en信号生成led工作指示信号Page 51library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity uc_interface
20、is Port(reset:in std_logic;clk:in std_logic;st_uc:in std_logic;sys_en:out std_logic;full:in std_logic;irq _uc:out std_logic;led:out sta_logic;)end ad_interface;architecture Behavioral of ad_interface is此处定义信号 常量beginPage 52延时st_ucst_ucclkst_d1st_d2st_d0CPLDst_d0st_d1st_d2&st_d0st_d1st_d2 1st_orst_an
21、dPage 53process(reset,clk)-延时 st_ucbegin if reset=RESET_ACTIVE then st_uc_d0=1;st_uc_d1=1;st_uc_d2=1;elseif clkevent and clk=1 then st_uc_d0=st_uc;st_uc_d1=st_uc_d0;st_uc_d2=st_uc_d1;endifend process;Page 54process(reset,clk)-产生 sys_enbegin if reset=RESET_ACTIVE then s_sys_en=0;elseif clkevent and c
22、lk=1 then if s_sys_en=0 then if(st_uc_d0 or st_uc_d1 or st_uc_d2)=0 then s_sys_en=1 endif elseif s_sys_en=1 then if(st_uc_d0 and st_uc_d1 and st_uc_d2)=1 then s_sys_en=0 endif endif endifend process;Page 55process(reset,clk)-延迟full 信号begin if reset=RESET_ACTIVE then s_full_d0=0;s_full_d1=0;elseif cl
23、kevevt and clk=1 then s_full_d0=full;s_full_d1=s_ full_d0;endifend process;Page 56process(reset,clk)-生成 irq _uc信号begin if reset=RESET_ACTIVE then irq _uc=not IRQ_ACTIVE;elseif clkevevt and clk=1 then if(full or s_full_d0 or s_full_d1)=1 then irq_uc=IRQ_ACTIVE;else irq_uc=not IRQ_ACTIVE;endifendifend
24、 process;Page 57process(reset,clk)-生成led 信号begin if s_sys_en=0 then s_ledcnt 0);elseif clkevevt and clk=1 then if full=1 then s_ledcnt=s_ledcnt+1;endif;endifend process;led=s_ledcnt(LEDCNT_WIDTH-1)Page 58B:ad_interfaceentity ad_interface is Port(reset:in std_logic;clk:in std_logic;sys_en:in std_logi
25、c;sd0:in std_logic;sd1:in std_logic;sck:out std_logic;bck:out std_logic;lrck:out std_logic;ds:out std_logic;-data valid stobe,high edge active hlb:out std_logic;lrc:out std_logic;data0:out std_logic_vector(7 downto 0);data1:out std_logic_vector(7 downto 0);end ad_interface;Page 59ADC工作特性:115 1623211
26、16153Left channelRight channelWCLKBCLKSDMSBLSB MSBLSBPage 60时钟产生器clk_cnt(8)cnt_clrClkcounter&clktickclk_cnt(7)clk_cnt(6)clk_cnt(5)clk_cnt(4)clk_cnt(3)clk_cnt(2)clk_cnt(1)clk_cnt(0)wclkbclksys_en Page 61process(clk,reset)-process to generate the counter begin if reset=RESET_ACTIVE then s_cnt 0);elsif
27、 clkevent and clk=1 then s_cnt=s_cnt+1;end if;end process;Page 62-Output the clock signal-sck =clk;bck =s_cnt(3);lrck=s_cnt(8);Page 63process(reset,clk)-the process to generate the tick signal begin if reset=RESET_ACTIVE then tick=0;elsif clkevent and clk=1 then if s_cnt(7 downto 0)=01111111 then ti
28、ck=1;else tick=0;end if;end if;end process;Page 64hlb与lrc信号的判断Left channelRight channel1816 1816 1WCLKBCLKtickdshlblrcPage 65数据接收主状态机Idlewaitrecvrecvreset assertedreset negatedsys_en=1wclk ringing edgewclk rising edgesys_en=0Page 66音频数据采集示意图Shift_reg1Buffer1Sd1Shift_enLoad_enData1Shift_reg0Buffer0Sd
29、0Data0Page 67 The recieve maim state machine process(reset,clk)beginif reset=RESET_ACTIVE then state if sys_en=1 thenstate=waitrecv;elsestate if s_lrck=1 and s_lrck_d=0 thenstate=recv;else state if s_lrck=1 and s_lrck_d=0 and sys_en=0 then state=idle;elsestate state=idle;end case;end if;end process;
30、Page 69the state machine outputprocess(reset,clk)variable temp:std_logic_vector(2 downto 0);begin if reset=RESET_ACTIVE then s_ds=0;s_hlb=0;s_lrc=0;s_data0 0);s_data1 0);Page 70elsif clkevent and clk=1 then if state=recv then temp:=s_lrck&s_lrck_d&s_tick;case temp is when 111=-left channel,high byte
31、 s_ds=1;s_data0=s_shift_reg0;s_data1=s_shift_reg1;s_hlb=1;s_lrc-right channel,high byte s_ds=1;s_data0=s_shift_reg0;s_data1=s_shift_reg1;s_hlb=1;s_lrc -left channel,low byte s_ds=1;s_data0=s_shift_reg0;s_data1=s_shift_reg1;s_hlb=0;s_lrc -right channel,low byte s_ds=1;s_data0=s_shift_reg0;s_data1=s_s
32、hift_reg1;s_hlb=0;s_lrc s_ds=0;s_data0=s_data0;s_data1=s_data1;s_hlb=s_hlb;s_lrc=s_lrc;end case;Page 73 else s_ds=0;s_data0 0);s_data1 0);s_hlb=0;s_lrc=0;end if;end if;end process;Page 74 process(reset,clk)-process to sample sd0 and sd1 begin if reset=RESET_ACTIVE then s_sd0=0;s_sd1=0;elsif clkevent
33、 and clk=1 then s_sd0=sd0;s_sd1 SHIFT_WIDTH)port map(clk=clk,en =s_shift_reg_en,si =s_sd0,q =s_shift_reg0);shift_reg1_inst:shift generic map(SHIFT_WIDTH=SHIFT_WIDTH)port map(clk=clk,en =s_shift_reg_en,si =s_sd1,q =s_shift_reg1);Page 77shift reg enable controlprocess(state,s_bck,s_bck_d)begin if stat
34、e=recv and s_bck=1 and s_bck_d=0 then s_shift_reg_en=1;else s_shift_reg_en ADDRCNT_WIDTH)Port map(clk=clk,clr=s_addrcnt_clr,-asynchronous clear,active high en=s_addrcnt_en,q=s_addrcnt);Page 83写RAM计数器 wccnt_inst:cnt generic map(CNT_WIDTH=WCCNT_WIDTH)Port map(clk=clk,clr=s_wccnt_clr,-asynchronous clea
35、r,active high en=s_wccnt_en,q=s_wccnt);Page 84process(pre_state,ds,s_ds,s_wccnt)begin case pre_state is when idle =if ds=1 and s_ds=0 thennext_state=write0;elsenext_state if s_wccnt=WCCNT_MAX thennext_state=write1;elsenext_state if s_wccnt=WCCNT_MAX thennext_state=idle;elsenext_state next_state=idle
36、;end case;end process;Page 86process(clk,reset)begin if reset=RESET_ACTIVE then pre_state=idle;elsif clkevent and clk=1 then pre_state=next_state;end if;end process;Page 87计数器控制信号的生成 process(pre_state,s_wccnt,lrc,hlb)begin if(pre_state=write0 or pre_state=write1)then s_wccnt_clr=0;s_wccnt_en=1;else
37、s_wccnt_clr=1;s_wccnt_en=0;end if;Page 88 if pre_state=write1 and s_wccnt=WCCNT_MAX and lrc=1 and hlb=0 then -right channel,low byte,indicate one sample has finished s_addrcnt_en=1;else s_addrcnt_en=0;end if;end process;s_addrcnt_clr s_ce=1;s_we=1;s_dataout 0);s_hlb=0;s_sel 0);when write0=s_ce=0;s_w
38、e=s_wccnt(WCCNT_WIDTH-1);s_dataout=data0;s_hlb=hlb;s_sel s_ce=0;s_we=s_wccnt(WCCNT_WIDTH-1);s_dataout=data1;s_hlb=hlb;s_sel s_ce=1;s_we=1;s_dataout 0);s_hlb=0;s_sel 0);end case;end process;Page 91输出RAM信号 ce=s_ce;oe=1;we=s_we;data=s_dataout;addr=s_sel&s_addrcnt(ADDRCNT_WIDTH-1 downto 0)&s_hlb;Page 92
39、full信号生成 process(reset,clk)begin if reset=RESET_ACTIVE then s_addr_h=0;s_full=0;elsif clkevent and clk=1 then s_addr_h=s_addrcnt(ADDRCNT_WIDTH-1);if s_addr_h=1 and s_addrcnt(ADDRCNT_WIDTH-1)=0 then s_full=1;else s_full=0;end if;end if;end process;full=s_full;Page 93感谢您的关注感谢您的关注本作品采用知识共享署名知识共享署名-非商业性使用非商业性使用 2.5 中国大陆许可协议中国大陆许可协议进行许可。专业交流专业交流模板超市模板超市设计服务设计服务本作品的提供是以适用知识共享组织的公共许可(简称“CCPL”或“许可”)条款为前提的。本作品受著作权法以及其他相关法律的保护。对本作品的使用不得超越本许可授权的范围。如您行使本许可授予的使用本作品的权利,就表明您接受并同意遵守本许可的条款。在您接受这些条款和规定的前提下,许可人授予您本许可所包括的权利。查看全部查看全部NordriDesign中国专业中国专业PowerPoint媒体设计与开发媒体设计与开发