基于FPGA的单片机接口扩展设计.docx

上传人:b****5 文档编号:7673673 上传时间:2023-01-25 格式:DOCX 页数:33 大小:697.23KB
下载 相关 举报
基于FPGA的单片机接口扩展设计.docx_第1页
第1页 / 共33页
基于FPGA的单片机接口扩展设计.docx_第2页
第2页 / 共33页
基于FPGA的单片机接口扩展设计.docx_第3页
第3页 / 共33页
基于FPGA的单片机接口扩展设计.docx_第4页
第4页 / 共33页
基于FPGA的单片机接口扩展设计.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

基于FPGA的单片机接口扩展设计.docx

《基于FPGA的单片机接口扩展设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的单片机接口扩展设计.docx(33页珍藏版)》请在冰豆网上搜索。

基于FPGA的单片机接口扩展设计.docx

基于FPGA的单片机接口扩展设计

基于FPGA的单片机接口扩展设计

摘要

你的内容似乎是“硬件设计”,注意将开题报告中的课题类型一览和论文相对应。

当今电子产品逐渐趋于智能化、人性化,电子产品的发展已经离不开单片机。

随着人们消费要求的提高,对电子产品的功能要求越来越高,电子产品的升级换代逐渐受到主控芯片资源匮乏的约束,而更换高级的CPU又会带来产品版本的不兼容和成本大幅上升的风险,而且会造成设计难度加大,设计周期变长。

随着可编程逻辑器件及EDA技术的发展,可编程逻辑器件的价格越来越低,在系统设计中经常会用到FPGA扩展单片机的相关资源,来实现低成本、高性能的产品设计。

单片机具有性价比高、功能灵活、易于人机对话、强大的数据处理能力等特点;而FPGA则具有高度、高可靠性以及开发便捷、规范等特点,根据两者的特点,设计一种基于C8051F340单片机与ActelFPGA的总线接口逻辑电路,实现单片机与可编程逻辑器件数据与控制信息的可靠通信,运用此接口通过VerilogHDL编程可为单片机扩展通用I/O和一些带有硬件协议的特殊接口,例如I2C接口、SPI接口、PCI接口和通用串口等。

关键词:

单片机,FPGA,接口扩展,总线接口,VerilogHDL

写的太笼统,第一段压缩,第二段具体化,摘要是毕业设计的浓缩,别人通过摘要可以了解你的设计的具体和细节内容。

THEDESIGNOFLCDDISPLAYSYSTEM

BASEDONMCU

ABSTRACT

在此处键入英文摘要内容

KEYWORDS:

 

前言

微控制器是现代电子产品中不可缺少的一个部分,各大半导体厂商在不断推出复杂的高级CPU的同时,也同时推出了一些的超小封装的微控制芯片,这种超小封装的控制器适用于特定的某一方面,与通用的CPU相比具有体积小、功耗低、成本低等优点,在便携式电子产品中有着广泛的应用。

但是这种超小封装的微控制芯片的I/O数量十分有限,接口单一,限制了控制器的挂接设备的数量和种类。

随着电子产品逐渐趋于集成化、智能化、便携化,人机交互、通信互联、多设备管理等任务大大了加重了对电子产品的“心脏”——微控制器的运作负担,尤其是对主控芯片的I/O数量和一些特殊接口的需求,使得一些低端控制器能胜任的工作不得不交由价格昂贵的高级控制芯片来完成,以获得更多的I/O和特殊接口,然而这无疑加大了产品的成本,削弱了产品的市场竞争力。

随着电子技术的发展,可编程逻辑器件的集成度越来越高,而成本却越来越低,现在已有半导体厂商推出了价格十分低廉的FPGA芯片,为上述问题的解决提供了另一种思路:

用FPGA为那些I/O数量不足或是缺少某些特殊接口的微控制器扩展接口和I/O而不必采用价格更贵的高端控制器芯片。

而且为了适应电子产品不断智能化的要求,系统运行的任务越来越多,某些复杂的算法亦可交由FPGA来完成,为产品的更新换代节省成本,而且由于FPGA是硬线逻辑,比软件模拟接口具有实时性好、处理速度快等优点,能减轻主控芯片的运行负担,增加系统的管理能力,使系统更加稳定、高效!

 

第1章绪论

§1.1设计思想概述

FPGA作为一种新型的可编程逻辑器件,可以取代现有的全部微机接口芯片,实现微机系统中的存储器、地址译码等多种功能,具有更高的密度、更快的工作速度和更大的编程灵活性,被广泛的应用于各种电子类产品中。

在功能上,单片机具有性价比高、功能灵活、易于人机对话、强大的数据处理能力等特点;而FPGA具有高速、高可靠性以及开发便捷、规范等优点,因此两类器件相组合的电路结构将在许多高性能仪器仪表和电子产品中被广泛应用。

基于这种需求,本文设计了C8051F340单片机与FPGA的总线接口逻辑电路,实现了单片机与FPGA数据与控制信息的可靠通信,是FPGA与单片机优势互补,组成灵活的、软硬都可现场编程的控制系统。

§1.2ActelProASIC3系列FPGA概述

Actel公司是单芯片FPGA解决方案的领导性厂商,早期以反熔丝FPGA为主,致力于航天航空以及军事领域,造就了其在可靠性、安全性等领域上独领风骚的辉煌。

ActelFlash架构的FPGA无需配置芯片,其开关结构采用130nm的Flash工艺,具有掉电非易失特点,一旦完成编程后,配置数据就会成为FPGA结构的固有部分,在系统上电时无需从外部载入配置数据。

Actel特有的带模拟功能FPGA--Fusion,在ProASIC3的基础上增加了ADC、FlashMemory、模拟IO、RTC等部件,使单个芯片的集成度更高,不仅大大降低了PCB板的面积,降低成本,更是提高了安全性和可靠性,并实现了单芯片的解决方案。

ActelFlash架构的FPGA具有类似于ASIC的功率特性,无需上电启动功耗和配置功耗,其无论是静态功耗和动态功耗都比基于SRAM的FPGA低很多,特别适用于电池供电产品和其它对功耗敏感的应用,而功耗是基于SRAMFPGA器件所面对的难题。

另外Fusion可实现自睡眠模式,通过内部的LDO和RTC可实现睡眠和唤醒模式;IGLOO系列特别为手持设备设计,最低静态功耗可达5μW,其独特的Flash*Freeze模式无需关断电源、外部时钟即可进入低功耗模式,并能保存RAM的内容数据。

ActelFlash架构的FPGA具有上电即可运行(LAPU)特性,上电时间非常短,一般只需要几十微秒,无需特别的上电时序要求,这种上电即行特性可以为外部器件提供时钟、复位信号等,取代复位芯片、时钟调整电路、数据地址译码电路等,简化整个系统的设计同时提高了安全性,因此ActelFPGA可以用于对上电时间有苛刻要求的场合。

ActelFlash架构的FPGA具有两种加密功能,FlashLock和AES,这种特性只有在非易失性的Flash架构的FPGA才能实现,FlashLock和AES都具有128位的密钥,FlashLock用于保护器件非授权的访问,例如:

编程、擦除、校验等;AES是国际上标准的加密算法,取代先前的56位DES加密算法,可以对用户的编程文件进行加密,经过加密的编程文件可以进行任何途径传输,为远程升级提供了保障。

ActelFlash架构的FPGA对固件错误有很好的免疫作用,所谓固件错误是指当大气中产生的高能中子轰击到FPGA的配置单元或者布线结构的时候,使得晶体管状态发生了改变,导致系统的一次彻底的实效,这种错误将会一直存在并被检查修正为止,固件错误问题在基于SRAM的FPGA中普遍存在,并且是不可能避免,而基于Flash架构的FPGA对大气中的高能中子有很好的免疫作用。

§1.3C8051F340单片机概述

C8051F340/1/2/3/4/5/6/7器件是完全集成的混合信号片上系统型MCU。

下面列出了一些主要特性:

下面加上标点

◆高速、流水线结构的8051兼容的微控制器内核(可达48MIPS)

◆全速、非侵入式的在系统调试接口(片内)

◆通用串行总线(USB)功能控制器,有8个灵活的端点管道,集成收发器和1KFIFORAM

◆电源稳压器

◆真正10位200ksps的单端/差分ADC,带模拟多路器

◆精确校准的12MHz内部振荡器和4倍时钟乘法器

◆多达64KB的片内FLASH存储器

◆硬件实现的SMBus/I2C、增强型UART(最多两个)和增强型SPI串行接口

◆具有5个捕捉/比较模块和看门狗定时器功能的可编程计数器/定时器阵列(PCA)

◆片内上电复位、VDD监视器和时钟丢失检测器

◆多达40个端口I/O(容许5V输入)

具有片内上电复位、VDD监视器、电压调整器、看门狗定时器和时钟振荡器的C8051F340/1/2/3/4/5/6/7器件是真正能独立工作的片上系统。

FLASH存储器还具有在系统重新编程能力,可用于非易失性数据存储,并允许现场更新8051固件。

用户软件对所有外设具有完全的控制,可以关断任何一个或所有外设以节省功耗。

片内SiliconLabs二线(C2)开发接口允许使用安装在最终应用系统上的产品MCU进行非侵入式(不占用片内资源)、全速、在系统调试。

调试逻辑支持观察和修改存储器和寄存器,支持断点、单步、运行和停机命令。

在使用C2进行调试时,所有的模拟和数字外设都可全功能运行。

两个C2接口引脚可以与用户功能共享,使在系统调试功能不占用封装引脚。

每种器件都可在工业温度范围(-45℃到+85℃)内用2.7V-5.25V的电压工作。

电源电压大于3.6V时,必须使用内部稳压器。

对于USB通信,电源电压最小值为3.0V。

端口I/O和/RST引脚都容许5V的输入信号电压。

C8051F340/1/2/3/4/5/6/7采用48脚TQFP封装或32脚LQFP封装。

C8051F340单片机的系统原理框图如图1-1所示。

第2章单片机与FPGA接口的设计

§2.1接口方式选择

单片机与FPGA的接口方式一般有两种:

◆独立方式

◆总线方式

独立方式即单片机与FPGA地位平等,不存在主、从机之分,采用通用的通信接口(例如串口)与FPGA进行数据传输和通信,此种方法占用I/O数目非常少,但是通信双方需要制定详细可靠的数据传输和通信协议,时序复杂且不易抽象,而且由于是串口传输,数据速率低,尤其当FPGA挂接的外设较多时这种通信方式的缺点尤为突出。

单片机与FPGA以总线方式通信,即将FPGA挂接在单片机外部扩展总线上,FPGA占用单片机的外部RAM的地址空间,属于单片机的从设备。

以这种方式通信有许多其他方式不具备的优点:

◆C8051F系列单片机具有很强的外部总线扩展能力,利用片外三总线结构很容易实现单片机与FPGA的总线接口,对于单片机来说其内部的EMIF接口属于纯硬件时序,且并行传输,速度快,通信可靠。

◆对与FPGA来说其内部是硬线逻辑电路,非常方便与高速时序电路接口,在FPGA中通过逻辑切换,单片机易于与SRAM或ROM接口。

◆单片机有直接访问外部总线的指令MOVX,,采用EMIF通信接口编程十分高效、简洁,速度要比前一种方式快得多。

综合上述特点,单片机与FPGA的接口初步选定为总线方式。

§2.2总线的复用性选择

C8051F系列单片机的外部总线有两种配置方式:

◆数据总线和地址总线复用的方式

◆非复用方式

在复用方式,单片机的数据总线和地址总线的低8位共享相同的端口引脚:

AD[7:

0]。

在该方式下,要用一个外部锁存器(74HC373或相同功能的逻辑门)保持外部总线地址的低8位。

外部锁存器由ALE(地址锁存使能)信号控制,ALE信号由外部存储器接口逻辑驱动。

图2-1给出了复用方式配置的一个例子。

图2-1单片机外部总线复用方式配置示例

字体格式请核对

在复用方式,可以根据ALE信号的状态将外部MOVX操作分成两个阶段。

在第一个阶段,ALE为高电平,地址总线的低8位出现在AD[7:

0]。

在该阶段,地址锁存器的‘Q’输出与‘D’输入的状态相同。

ALE由高变低时标志第二阶段开始,地址锁存器的输出保持不变,即与锁存器的输入无关。

在第二阶段稍后,当/RD或/WR有效时,数据总线控制AD[7:

0]端口的状态。

在非复用方式,数据总线和地址总线是分开的。

图2-2给出了非复用方式配置的一个例子。

图2-2单片机外部总线非复用方式配置示例

下面这段话到底是复用还是非复用?

本设计中C8051F340单片机为48脚封装,总共有4个8位端口,非复用外部总线要占用3个端口,再加上4根控制总线,I/O消耗的数目过多。

在非复用方式下只需占用单片机2个8位端口和4根控制线即可实现总线连接,另外FPGA内部可以实现总线复用方式下的地址锁存器的逻辑功能,单片机就可以在不需要外加锁存器的情况下与FPGA采用总线复用的接口通信,单片机仅通过二十根I/O线在FPGA与单片机之间进行通信和控制信息交换,这样可以节省单片机和FPGA芯片的I/O线。

综上所述,C8051f340单片机与FPGA接口采用数据总线和地址总线复用的方式,且不需外部锁存器,示意原理如图2-3所示

图2-3单片机和FPGA总线接口方式原理框图

§2.3总线复用方式的配置

§2.3.1总线接口配置

配置外部存储器接口的过程包括下面5个步骤:

1.配置相应端口引脚的输出方式为推挽或漏极开路(最常用的是推挽方式),并在交叉开关中跳过这些引脚。

2.配置对应EMIF引脚的端口锁存器为休眠态(通常将它们设置为逻辑‘1’)。

3.选择复用方式。

4.选择存储器模式(只用片内存储器、不带块选择的分片方式、带块选择的分片方式或只用片外存储器)。

5.设置与片外存储器或外设接口的时序

§2.3.2总线的端口配置

当采用复用方式时,外部总线接口位于端口4、3和1(访问片外存储器时)。

使用EMIF时,应用P1SKIP寄存器将交叉开关配置为跳过控制线P1.7(/WR)、P1.6(/RD)和P1.3(ALE)。

外部存储器接口只在执行片外MOVX指令期间使用相关的端口引脚。

一旦MOVX指令执行完毕,端口锁存器或交叉开关重新恢复对端口引脚的控制。

端口锁存器应被明确地配置为使外部存储器接口引脚处于休眠状态(不使用时),通常将它们设置为逻辑‘1’。

在执行MOVX指令期间,外部存储器接口将禁止所有作为输入的那些引脚的驱动器(例如,读操作期间的Data[7:

0])。

端口引脚的输出方式(无论引脚被配置为漏极开路或是推挽方式)不受外部存储器接口操作的影响,始终受PnMDOUT寄存器的控制。

在大多数情况下,所有EMIF引脚的输出方式都应被配置为推挽方式。

§2.4总线复用方式的时序逻辑

采用总线方式的数据传输和通信接口重要的是要详细了解C8051F340单片机的总线读写时序,根据时序图来设计逻辑结构,其通信的时序必须遵循单片机内固定的总线方式读、写时序。

FPGA的逻辑设计也相对比较复杂,在程序设计上必须与接口的单片机程序相结合,严格安排单片机能访问的I/O空间。

在复用方式下,C8051F340单片机的读写时序如图2-4和图2-5所示。

图2-4复用方式16位MOVX时序

图2-5带块选择的复用8位MOVX时序

在总线应用时,单片机的P4口是作为地址/数据总线分时复用的,因此应在总线接口模块中设计一个三态缓冲器,实现P4口的三态接口;又因为单片机在访问外部空间时,它的地址为16位,因此借助地址锁存使能信号ALE在FPGA中实现高8位与低8位地址的编码,组合成16位地址,然后再根据单片机的读写信号,实现对FPGA的读写操作。

通过对单片机总线读、写时序的分析,设计了图2-6所示的接口电路。

在FPGA中,设计了两个模块:

一个是总线接口模块,负责单片机与FPGA的总线接口逻辑;另一个是寄存器单元及外部接口模块,运用总线接口模块来操作此模块。

图2-6单片机与FPGA总线接口逻辑图

 

第3章FPGA的扩展实例

这里叫实例不太合适

§3.1I2C总线在FPGA上的模拟实现

§3.1.1I2C概述

I2C总线是Philips推出的芯片间串行传输总线,因为其具有连线少(仅需一条串行时钟线和一条串行数据线),允许多主机控制,具有裁决和同步功能,可随添加或摘除总线上的子器件等诸多优点,所以已被广泛应用。

另外由于Philips和其他厂商提供了种类众多的I2C兼容芯片,促使其成为世界性的工业标准。

I2C总线最主要的优点是其简单性和有效性。

由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。

总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。

I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主总线。

一个主控能够控制信号的传输和时钟频率。

当然,在任何时间点上只能有一个主控。

I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。

在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。

各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。

CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。

这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。

I2C总线在传送数据过程中共有三种类型信号,它们分别是:

开始信号、结束信号和应答信号。

CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接到应答信号后,根据实际情况作出是否继续传递信号的判断。

若未收到应答信号,由判断为受控单元出现故障。

I2C规则:

◆空闲时SCL和SDA必须保证为高电平,以等待起始位的发生。

◆启动和停止条件。

在SCL稳定为高电平期间,SDA产生一个由高电平到低电平的跳变,此时即可启动总线;结束条件与此相反,在SCL稳定为高电平期间,SDA产生一个由低电平到高电平的跳变。

◆位传送。

位传送发生在SCL稳定在高电平期间,此时不允许SDA线上发生数据跳变,否则会导致总线失控。

每个时钟脉冲传送一个数据位。

◆应答位。

在启动条件和停止条件之间传送器给接收器的数据个数没有限制,每个8位字节后加一个应答位。

主传送器产生高电平的应答位,由接收器将该位拉低,称为应答信号(ACK);主器件为接收器时,在接收了最后一个字节后不发应答信号,称为非应答信号(NOACK)。

从器件必须在接收到每个字节后产生一个应答位,主器件也必须在接收从传送器传送的每个字节后产生一个应答位。

◆写模式。

主传送器首先向数据线发送从接受器地址,地直末尾一位为0,表示要进行写操作,得到应答后便向从接收器发送数据,每发送一个字节,读取一次应答位,为ACK则接着发送,位NOACK则发送停止位。

数据传送完后同样发送停止位。

◆读模式。

同样由主传送器发送从接收器地址,地址末尾一位为1,表示要进行读操作。

读完一个字节后发送应答位,如果想继续操作,发送ACK,如果想结束读操作,发送NOACK。

§3.1.2I2C接口设计

要使接口模块正常工作,CPU必须首先要通知模块执行什么操作,而后再把需要的数据依次送入模块中,考虑到I2C总线的速率可以在0-3.4Mbit/s之间,为了适应不同外设的需要,模块还应在CPU的控制下自由调整数据传送速率。

因此,CPU应能够向模块发送数据速率控制数据、I2C总线工作模式控制数据、信息交换数据,同时还能从模块中读取工作状态数据、模块接收数据。

据此设计出基于FPGA的I2C总线接口模块如图3-1所示。

图3-1I2C总线接口模块

该设计由7个单元组成,它们分别是:

用于调整I2C总线数据传输速率的Clock单元;用于实现同CPU并行接口的PcPort单元;用于产生I2C总线工作时序的I2CStep单元;用于产生数据传输时序的BitTiming单元;用于产生I2C总线使能信号的EnI2C单元;用于产生I2C总线接口模块工作状态指示的Status单元;用于产生I2C总线接口时钟信号SDL和数据串行输入输出信号SDA的I2CPORT单元。

◆Clock单元

整个接口模块以CPU的系统时钟作为主时钟信号,模块传输数据的速率受该时钟频率的控制,时钟频率高则模块传数据的速率也高,反之亦然。

考虑到各种具有I2C总线接口的芯片的工作速率差别较大(从几十Kbits/s到几Mbits/s),该接口模块的工作速率必须能够灵活调整,以适应不同外设芯片的接口需要。

Clock单元实际上就是一个分频器,它在输出频率控制码CKSEL[7..0]的控制下产生对PCCLK分频后合适的时钟信号供I2C接口使用。

◆I2CStep单元

通过对I2C总线各种工作模式的分析,可知不同的工作模式都是按特定的工作流程串行输入、输出数据的,例如字节写模块的工作流程为:

发送开始信号、串行输出被叫芯片的片选地址、发送写信号、等待被叫芯片响应、串行输出被叫芯片存储单元的地址、等待被叫芯片响应、串行输出写入的数据、等待被叫芯片响应、发送结束信号结束本次操作。

为了使接口模块正确工作,模块在接收到来自MCU的工作模式控制信号I2CMD[2..0]后,根据工作模式的不同产生接口模块工作流程。

当前流程结束后有Status单元产生IncStep信号,控制工作流程指向下一阶段。

该模块的功能类似一个计数器,它在I2CMD[2..0]和I2CMD[2..0]Step的共同作用下,产生长度不等的工作流程信号Step[6..0]。

◆BitTiming单元

在I2C总线工作流程的不同阶段,I2C接口模块需要按一定的时序完成不同的工作,通过对总线数据传输模块的分析可知,在一个数据传输模式的所有工作流程中,输入、输出8位数据的工作流程用时最长,需要25个工作时序周期,为了满足所有工作流程的需要,工作时序BitTiming单元被设计成最长可产生31个时钟周期的工作时序。

该单元在IncStep=‘1’时复位工作时序;在EnTiming信号有效后的每个SysCLK的上升沿使工作时序信号EnTiming加1,用于控制I2CPORT单元按给定的时序串行输入、输出数据信息。

◆Status单元

在I2C总线工作过程中,MCU需要随时了解I2C接口模块的发送数据寄存器是否为空、接收寄存器是否准备数据好、从机响应信号是否正确、当前工作流程是否完成等工作状态,只有在发送数据为空时,MCU才可以向接口模块写入待传送数据;只有在接受数据寄存器准备好后,MCU才可以从接口模块读入正确的接收数据;从机响应信号不正确时,MCU应立即发出结束信号结束本次操作;当前工作流程未完成前不能进行下一流程。

这些状态信号全部由Status单元产生。

在该单元中,共有4种输出信号,它们分别是:

用于指示发送数据寄存器是否为空的TxSTS状态,该状态在MCU写入数据后置‘1’,数据被发送后清‘0’;用于指示接收数据准备好状态的RxSTS信号,该信号在模块接收到完整的数据后置‘1’,数据被MCU读后清‘0’;用于指示模块工作状态的ACKSTS信号,该信号在模块工作正常(接收到从机响应信号)时自动置‘1’,工作不正常时自动清‘0’;用于使工作流程指向下一阶段的IncStep信号,该信号在当前工作流程完成后由模块自动产生,用于使模块的工作流程指向下一阶段。

◆EnI2C单元

在I2C总线接口模块中,BitTiming单元何时开始产生工作时序,需要时序信号控制,I2CPORT单元何时向I2C总线输出信息、何时从I2C总线上读入信息也需要时序信号控制。

这些控制时序的产生由EnI2C单元完成。

EnI2C单元在I2CMD[2..0]、Step[6..0]、TxSTS、RxSTS等信号的控制下,从预先存储于单元内部的一组I2C工作时序信息中读出当前时序信息输出,控制BitTiming和I2CPORT单元完成。

◆I2CPORT单元

本单元是整个设计的核心,用于完成数据的I2C总线输出及I2C总线输入数据的读入。

同时产生接口模块的各种工作状态。

该单元的工作过程为:

在SysCLK的下降沿分别读入工作使能信号和工作时序信

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1