东北大学电子技术基础-第7章可编程逻辑器.ppt

上传人:牧羊曲112 文档编号:5026438 上传时间:2023-05-30 格式:PPT 页数:96 大小:1.19MB
返回 下载 相关 举报
东北大学电子技术基础-第7章可编程逻辑器.ppt_第1页
第1页 / 共96页
东北大学电子技术基础-第7章可编程逻辑器.ppt_第2页
第2页 / 共96页
东北大学电子技术基础-第7章可编程逻辑器.ppt_第3页
第3页 / 共96页
东北大学电子技术基础-第7章可编程逻辑器.ppt_第4页
第4页 / 共96页
东北大学电子技术基础-第7章可编程逻辑器.ppt_第5页
第5页 / 共96页
点击查看更多>>
资源描述

《东北大学电子技术基础-第7章可编程逻辑器.ppt》由会员分享,可在线阅读,更多相关《东北大学电子技术基础-第7章可编程逻辑器.ppt(96页珍藏版)》请在三一办公上搜索。

1、第七章 可编程逻辑器件,7.1概述7.2可编程逻辑器件基础PLD逻辑表示法逻辑阵列的PLD表示法应用举例7.3 通用阵列逻辑GAL,7.1 概 述 PLD出现的背景,电路集成度不断提高SSIMSILSIVLSI计算机技术的发展使EDA技术得到广泛应用设计方法的发展自下而上自上而下用户需要设计自己需要的专用电路专用集成电路(ASICApplication Specific Integrated Circuits)开发周期长,投入大,风险大可编程器件PLD:开发周期短,投入小,风险小,7.1 概 述 PLD器件的优点,集成度高,可以替代多至几千块通用IC芯片极大减小电路的面积,降低功耗,提高可靠性

2、具有完善先进的开发工具提供语言、图形等设计方法,十分灵活通过仿真工具来验证设计的正确性可以反复地擦除、编程,方便设计的修改和升级灵活地定义管脚功能,减轻设计工作量,缩短系统开发时间,保密性好,7.1 概 述 PLD的发展趋势,向高集成度、高速度方向进一步发展最高集成度已达到400万门向低电压和低功耗方向发展5V3.3V2.5V1.8V更低内嵌多种功能模块RAM,ROM,FIFO,DSP,CPU向数、模混合可编程方向发展,7.1 概 述 大的PLD生产厂家,最大的PLD供应商之一FPGA的发明者,最大的PLD供应商之一ISP技术的发明者提供军品及宇航级产品,7.1 概 述,可编程专用集成电路AS

3、IC(Application Specific Integrated Circuit)是面向用户特定用途或特定功能的大规模、超大规模集成电路。分类:按功能分为数字的、模拟的、数字和模拟混和三种。按制造方式分为全定制、半定制ASIC、可编程三种。,PLD器件的分类按集成度,可编程逻辑器件(Programmable Logic Device)为通用器件,分为低密度PROM,EPROM,EEPROM,PAL,PLA,GAL只能完成较小规模的逻辑电路高密度,已经有超过400万门的器件EPLD,CPLD,FPGA可用于设计大规模的数字系统集成度高,甚至可以做到SOC(System On a Chip),

4、PLD器件的分类按结构特点,基于与或阵列结构的器件阵列型PROM,EEPROM,PAL,GAL,CPLDCPLD的代表芯片如:Altera的MAX系列基于门阵列结构的器件单元型现场可编程逻辑门阵列 FPGA:是集成度和结构复杂度最高的可编程ASIC。运算器、乘法器、数字滤波器、二维卷积器等具有复杂算法的逻辑单元和信号处理单元的逻辑设计可选用FPGA实现。,按制造技术和编程方式进行分类,熔丝或反熔丝编程器件Actel的FPGA器件体积小,集成度高,速度高,易加密,抗干扰,耐高温只能一次编程,在设计初期阶段不灵活SRAM大多数公司的FPGA器件可反复编程,实现系统功能的动态重构每次上电需重新下载,

5、实际应用时需外挂EEPROM用于保存程序EEPROM大多数CPLD器件可反复编程不用每次上电重新下载,但相对速度慢,功耗较大,可编程ASIC的编程方式,可编程ASIC的编程方式有两种:采用专用编程器进行编程在系统编程甩掉了专用编程器,而且也不用将芯片从电路系统取下,只利用计算机和一组下载电缆就可以在系统编程。Lattice和Xilinx等几家大公司现在都有在系统可编程ASIC产品。在系统编程方式方便了用户。,可编程ASIC的一般开发步骤,设计输入(entry)功能模拟(function simulation)逻辑分割(partitioning)布局和布线(place and routing)时

6、间模拟(timing simulation)写入下载数据(download),ASIC开发步骤流程图,TOPDOWN设计思想,自顶向下(TOPDOWN)设计首先是从系统级开始入手。把系统分成若干基本单元模块,然后再把作为基本单元的这些模块分成下一层的子模块。,图7-2top-down设计图,TOPDOWN设计思想,采用TOPDOWN层次结构化设计方法,设计者可在一个硬件系统的不同层次的模块下进行设计。总体设计师可以在上层模块级别上对其下层模块设计者所做的设计进行行为级模拟验证。在TOPDOWN的设计过程中,划分每一个层次模块时要对目标模块做优化,在实现模块时要进行模拟仿真。虽然TOPDOWN的

7、设计过程是理想的,但它的缺点是得到的最小可实现的物理单元不标准,成本可能较高。,BOTTOMUP设计思想,BOTTOMUP层次结构化设计是TOPDOWN设计的逆过程。它虽然也是从系统级开始的,即从图7-2中设计树的树根开始,但在层次模块划分时,首先考虑的是实现模块的基本物理单元是否存在,划分过程必须是从存在的基本单元出发。,BOTTOMUP设计思想,设计树最末枝上的单元要么是已经制造出的单元,要么是已经开发成功的单元,或者是可以买得到的单元。自底向上(BOTTOMUP)的设计过程采用的全是标准单元,通常比较经济。但完全采用自底向上的设计有时不能完全达到指定的设计目标要求。,BOTTOMUP设计

8、思想,用可编程ASIC实现一个好的电子系统设计通常采用TOPDOWN和BOTTOMUP两种方法的结合,充分考虑设计过程中多个指标的平衡。,设计库及库元件,在层次设计中所用的模块有两种:预先设计好的标准模块由用户设计的具有特定应用功能的模块前者一般要存放在EDA开发系统中各种类型的文件库之中,后者必须经过模型仿真和调试证明无误后,建立一个图形符号存放在用户的设计库中准备在更上层的设计中使用。,设计库及库元件,设计库中比较高级的模块一般由两个模型构成:模块的图形符号模块的功能模型图形符号在建立原理图时使用,功能模型在逻辑模拟仿真时使用。,设计库及库元件,模块的功能模型可以是逻辑图形式,也可以是VH

9、DL描述的,还可以是真值表或逻辑方程式描述的。一个已知的图形符号可以用来代表一个或几个功能模型,这些模型的功能相同,参数可以不同。例如2输入与非门7400、74LS00,74S00,功能相同,但是传输延时,功耗不相同。,画层次原理图,画层次原理图类似于用逻辑门符号画一个逻辑图,先将选用的模块符号和连结器符号放在画页上,然后用连线将它们连结起来,最后将选用的符号名放在相应的模块及其结点上。选用符号名要注意遵循以下规则:一般把在一个层次原理图中所使用的模块的每一个拷贝叫做这个模块的例化。,画层次原理图,为了模拟仿真和建立设计文件,每个例化都要起一个名字。,位全加器模块FA4起名为Adder。,画层

10、次原理图,Adder的模块由4个一位全加器子模块FA1实现,这四个子模块分别起名为add0、add1、add2、add3。,画层次原理图,构成一位全加器的各个逻辑门及其信号线也要起一个名,它们的名字分别是1、2、A1、A2、A3、R1。,画层次原理图,为了调试或模拟仿真,常常要研究模块中的一个指定信号。例如,假设要研究图7-3中位全加器FA1的工作情况,需要观察完整系统模拟时的信号x1的值。因为有个FA1的例化,例化名称要被合并成如下的信号名,顶层模块名次层模块名:信号名。因此,要监视全加器add2这个例化中信号线x1的时候,这个信号名应该写成Adderadd2:x1通过上述的书写规则,就可指

11、定顶层模块中adder中的模块add2的信号x1,这个起名规则可以扩展到任何一个层次。,层次联接器符号和总线,为了建立层次原理图,一个抽象级别的模块输入和输出引脚的名称要与次层模块原理图相应信号的名称保持唯一性或者一致性,如图7-所示。,输入连接器,输出连接器,层次联接器符号和总线,当模块有多重输入和输出信号时,层次的相互连接器画成如图7-5所示的总线形式。,A(3:0)=A(3)A(2)A(1)A(0)B(3:0)=B(3)B(2)B(1)B(0)S(3:0)=S(3)S(2)S(1)S(0),层次联接器符号和总线,为了进一步简化模块原理图画法,有时常常在模块上定义多重引脚,如图7-5(b)

12、所示。,每个多重引脚代表一组相关信号的集合,允许把总线直接联接到模块的引脚上,但是必须清楚每条总线代表的是4个信号的联接。,层次化设计的模拟,采用层次设计实现的系统必须进行设计模拟和验证。一个层次设计中最底层的元件或模块必须首先进行模拟仿真,当其工作正确之后,再进行高一抽象级别模块的模拟仿真。最后还要对最上层系统进行模拟仿真,最终完成系统设计。,层次化设计的模拟,在模拟仿真时,首先要将模块用相应的电路来代替,称为展平,展平工作一直做到最底层模块都用基本的逻辑门实现为止。在展平过程中所有元件及所有的信号线都必须有指定过的名称。模拟仿真结果可以是给出正确的波形,也可以是给出一些时延参数。图给出的是

13、用总线表示的波形。,层次化设计的模拟,图给出的是用总线表示的波形。,表格形式的模拟值,波形表示的模拟值,7.2 可编程逻辑器件基础,PLD的逻辑表示PLD中阵列及其阵列交叉点的逻辑表示PLD中基本逻辑单元的PLD表示逻辑阵列的PLD表示法应用举例,PLD的逻辑表示,PLD中阵列及其阵列交叉点的逻辑表示PLD中阵列交叉点的逻辑表示PLD中与阵列和或阵列的逻辑表示,PLD中阵列交叉点的逻辑表示,PLD逻辑阵列中交叉点的连接方式采用图7-7所示的几种逻辑表示。,(a)表示实体连结,就是行线和列线在这个交叉点处实在连接,这个交叉点是不可编程点,在交叉点处打上实心点。,PLD中阵列交叉点的逻辑表示,PL

14、D逻辑阵列中交叉点的连接方式采用图7-7所示的几种逻辑表示。,(b)表示可编程连接。无论或 表示该符号所在行线和列线交叉处是可编程点,具有一个可编程单元。,PLD中阵列交叉点的逻辑表示,PLD逻辑阵列中交叉点的连接方式采用图7-7所示的几种逻辑表示。,在采用熔丝工艺的PLD器件中,器件出厂后用户编程之前,所有可编程点处的熔丝都处于接通状态,习惯上都用表示熔丝接通,因此可编程点上处处都打或。,PLD中阵列交叉点的逻辑表示,PLD逻辑阵列中交叉点的连接方式采用图7-7所示的几种逻辑表示。,PLD器件被用户编程后,可编程点上的熔丝有的烧断,有的接通。编 程后可在编程点上仍打有,这时的表示可编程点被编

15、程后熔丝接通。,PLD中阵列交叉点的逻辑表示,PLD逻辑阵列中交叉点的连接方式采用图7-7所示的几种逻辑表示。,熔丝烧断的可编程点上的消失,行线和列线不相接,这种情况用图(c)表示。,PLD中与阵列和或阵列的逻辑表示,与阵列如图(a)所示。,在二极管与门的各支路与输出之间接入熔丝。熔丝保留的各支路的输入为有效输入,输出F是熔丝保留各支路输入的与逻辑函数。图(b)是PLD表示。,图(a)和图(b)是熔丝全部保留的与阵列表示情况。,F(A,B,C)=0。,PLD中与阵列和或阵列的逻辑表示,图(c)是烧断3个熔丝的情况,图(d)是图(c)的PLD表示。,PLD中与阵列和或阵列的逻辑表示,可编程或阵列

16、,其构成原理与可编程的与阵列相同。,PLD中与阵列和或阵列的逻辑表示,图(c)是烧断1个熔丝的情况,图(d)是图(c)的PLD表示。,PLD的逻辑表示,PLD中基本逻辑单元的PLD表示输入缓冲器和反馈缓冲器输出极性可编程的异或门地址选择可编程的数据选择器可编程数据分配器的逻辑表示激励方式可编程的时序记忆单元的PLD表示 PLD中与阵列的缺省表示双向输入/输出和反馈输入的逻辑表示,输入缓冲器和反馈缓冲器,在PLD中有二种特殊的缓冲器,它们是输入缓冲器和反馈缓冲器,这二种缓冲器有相同的电路构成,图7-10给出它们的PLD表示,它们是单输入、双输出的缓冲器单元,一个是高有效输出端,即同极性输出端。另

17、一个是低有效输出端,即反极性输出端。,输入缓冲器和反馈缓冲器,与曾经学过的输出三态缓冲器不同,注意二者之间的区别。输入缓冲器和反馈缓冲器输出只有0、1两个逻辑状态。而输出三态缓冲器除了有0、1两个逻辑状态外,还有一个称为高阻(Z)的状态。,输出极性可编程的异或门,在PLD中为了实现输出极性可编程,常采用图(a)所示的异或门结构。,当熔丝烧断,异或门输出极性为低有效,即,否则异或门输出高有效Q0=P0=P。,输出极性可编程的异或门,图(b)是编程后熔丝保留,输出极性编程为高有效。,图(c)是编程熔丝烧断,输出极性编程为低有效。,地址选择可编程的数据选择器,地址选择可编程的数据选择器如图7-12所

18、示。,地址选择端编程后,若列线与行线相接且接地,其输入为逻辑0。否则,列线与行线断开其输入为逻辑1。,二选一数据选择器,四选一数据选择器,根据编程情况,地址选择端的输入有00,01,10,11四种情况。,可编程数据分配器的逻辑表示,可编程逻辑分配器如图7-13所示。,图7-13 可编程逻辑分配器,图中的核心部分是可编程逻辑分配器,可编程熔丝S1S0的不同编程值,使乘积项簇分别被分配到n+1号、n号、n-1号、n-2号宏单元。,FUSE1正常时(默认状态)不熔断,乘积项簇的信号传不到n号宏单元。若编程后FUSE1熔断,乘积项簇信号可以传到n号宏单元。,如果FUSE2熔断,异或门反极性传输,否则异

19、或门原极性传输,n号宏单元接收信号与乘积项簇信号同相。,激励方式可编程的时序记忆单元的PLD表示,时序记忆单元有二种,即锁存器和触发器。输出的状态只受输入激励信号控制的时序记忆单元是锁存器。只有在时钟信号控制下才能得到受输入激励信号决定的相应输出状态的时序记忆单元是触发器。二种时序记忆单元的根本区别是输出状态的变化是否取决于时钟信号的控制。,激励方式可编程的时序记忆单元的PLD表示,图7-14是激励方式可编程的时序记忆单元的PLD表示。,PLD中与阵列的缺省表示,在PLD器件与阵列中常看到图7-15中给出的几种表示。输出为Z1的与门4个输入变量全部被编程后输入,4个交叉点均画。因此,,PLD中

20、与阵列的缺省表示,同理:Z2为Z1的缺省表示。这时的阵列交叉点上均未画,而在与门符号内却画有,。,PLD中与阵列的缺省表示,输出为Z3的与门输入阵列交叉点上无,与门符号内也无,这是浮动状态的逻辑表示。浮动输入状态代表与阵列编程后熔丝全部熔断,4个输入全都不同与门相接,相当与门输入悬空,与门输出为高电平,即输出逻辑“1”,双向输入/输出和反馈输入的逻辑表示,双向输入/输出和反馈输入结构是PLD结构的特点之一,乘积项Pn+1为三态输出缓冲器的使能端控制信号。,1,Sm,Sm,Feedback=Sm,双向输入/输出和反馈输入的逻辑表示,由于各阵列交叉点全打有,所以n+1号与门输出为逻辑“0”,三态输

21、出缓冲器禁止,其输出为高阻。,0,高阻,加到与阵列上,逻辑阵列的PLD表示法应用举例,二位串行进位加法器的原理框图如图7-18(a)所示。,其阵列表示如图7-18(b)所示。,逻辑阵列的PLD表示法应用举例,7.3 通用阵列逻辑GAL,GAL(Generic Array Logic)的结构及其工作原理GAL的基本阵列结构GAL的工作模式和逻辑组态GAL16V8的编程GAL22V10介绍 VHDL语言介绍 GAL应用举例,7.3 通用阵列逻辑GAL,GAL的结构及其工作原理GAL的基本阵列结构通用型GAL16V8的电路结构GAL16V8的结构控制字GAL16V8的OLMCGAL的工作模式和逻辑组

22、态GAL16V8的编程,GAL的基本阵列结构,图7-19给出GAL的基本结构框图。,逻辑宏单元,输入/输出口,输入口,时钟信号输入,使能控制,可编程与阵列,固定或阵列,2,3,4,5,6,7,8,9是专用输入引脚,1,11,12,13,14,17,18,19各引脚可通过编程组态设为输入引脚,12,13,14,17,18,19各引脚可通过编程组态设为输出引脚,15,16专用输出引脚,GAL16V8的结构控制字,GAL和PAL不同之处是GAL的输出电路增加了输出逻辑宏单元OLMC(Output Logic MacroCell)。GAL的输出电路可编程。GAL的结构控制字有5种,82位:SYN:同步

23、控制字1位,对8个宏单元是公共的;AC0:结构控制字1位,对8个宏单元是公共的;AC1(n):结构控制字8位,每个宏单元一个;XOR(n):极性控制字8位,每个宏单元一个;PTD:乘积项禁止控制字64位,每个与门一个。,GAL16V8的OLMC的内部电路构成,OLMC的内部电路构成如图7-21所示。,乘积项多路开关,输出多路开关,三态多路开关,反馈多路开关,来自1号引脚,AC0和AC1(n)对TSMUX的全部控制作用见表7-1。,FMUX的全部控制功能如表7-2所示。,GAL的工作模式和逻辑组态,GAL16V8、GAL20V8系列器件的OLMC有寄存器模式、复杂模式、简单模式三种工作模式。用户

24、通过输出引脚定义方程确定OLMC的工作模式。输出引脚定义方程有A型、B型、C型三种。它们与工作模式的关系如表7-3所示。,GAL的工作模式和逻辑组态,输出逻辑宏单元三种模式又分为七种逻辑组态,其隶属关系如表7-4所示。,GAL的工作模式和逻辑组态,(a)寄存器模式寄存器输出组态:,(b)寄存器模式组合输出组态:,引脚1和11为输入,所有输出为组合逻辑输出。1318号宏单元可构成这种组态,(c)复杂模式有反馈组合输出组态:,12,19号宏单元可构成这种组态,(d)复杂模式无反馈组合输出组态:,15,16号宏单元可构成这种组态,(e)简单模式无反馈组合输出组态:,15和16号宏单元也能构成这种组态

25、,(f)简单模式本级组合输出邻级输入组态:,输出缓冲器失效除15和16号宏单元外都可构成这种组态,(g)简单模式邻级输入组态:,ispGAL22V10,In-System Programmable E2CMOS PLDGeneric Array Logic,ispGAL22V10,22V10没有结构体控制位,能实现16V8和20V8所能实现的全部功能;22V10具有更多的乘积项,增加了2个通用的输入端,其输出使能控制比 20V8 更好。22V10的每个输出宏单元可配置成有(或没有)寄存器。22V10的宏单元和16V8的不同。用单个乘积项控制输出缓冲器(寄存器和组合配置)。每个输出至少有8个乘积

26、项是可用的,内部引脚有更多的乘积项可用。引脚1输入的时钟信号作为组合输入,对于任何乘积项都是可用的。,ispGAL22V10,单个乘积项可用来产生一个全局性的异步复位信号,使所有内部触发器都复位为0。单个乘积项可用来产生一个全局性的同步预置信号,使所有内部触发器在时钟的上升沿到来时置位为1。可以通过编程改变输出极性。在寄存器配置下,极性的改变发生在D触发器的输出端,而不是在输入端。,GAL的开发流程(开发步骤),建立用户源文件用户源文件就是设计者书写的描述所要实现逻辑电路功能的软件程序的集合。其软件程序必须符合某一可编程逻辑设计语言的语法规范。现在广泛使用的有ABEL-HDL,VHDL,Ver

27、ilog-VHDL等硬件描述语言。编译用户源文件要想使建立起来的用户源文件变成要下载的数据文件(JEDEC),必须经过若干步的语言处理程序。如语法检查、逻辑化简、功能模拟、时间模拟等。经过专用软件处理后,证明用户建立的源文件正确无误,最后将其转换成要下载的编程数据文件(JEDEC)。把上述的一系列处理过程称为编译。,器件编程在专用的软件系统环境下,启动编程器,使计算机和编程器进行通信。将JEDEC数据文件下载到编程器上。选择目标器件的制造厂家、型号进行器件匹配。将GAL器件插入插座并锁紧。这一步必须注意芯片引脚序号与插座引脚号要对应。否则器件可能被毁坏。下载编程。即将下载到编程器上的JEDEC

28、数据文件写入到GAL芯片中。,GAL的开发流程(开发步骤),实际功能验证将芯片从编程器取下,放到实验电路中或实际工作的系统中进行实际功能验证,如果功能正确,说明开发工作结束。如果功能验证不正确,则还要返回到第一步重新修改设计。,GAL的开发流程(开发步骤),用GAL实现基本逻辑门的设计,用GAL实现基本逻辑门的设计,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity example1 isport(a,b,c,d,e,m,n,p,

29、q,h,i,j:in std_logic;u,v,w,x0,y0,z0:out std_logic);,用GAL实现基本逻辑门的设计,attribute LOC:string;attribute LOC of a:signal is p19;attribute LOC of b:signal is p1;attribute LOC of c:signal is p2;attribute LOC of d:signal is p3;attribute LOC of e:signal is p4;attribute LOC of m:signal is p5;attribute LOC of n:

30、signal is p6;attribute LOC of p:signal is p7;attribute LOC of q:signal is p8;attribute LOC of h:signal is p9;attribute LOC of u:signal is p18;attribute LOC of v:signal is p17;attribute LOC of w:signal is p16;attribute LOC of x0:signal is p15;attribute LOC of y0:signal is p14;attribute LOC of z0:sign

31、al is p13;end;,用GAL实现基本逻辑门的设计,architecture arch_Gate of example1 isbeginu=not a;v=b and c;w=d or e;x0=not(m or n);y0=not(p xor q);z0=not(h and i and j);end arch_Gate;,用GAL实现组合-时序混合逻辑电路,用GAL实现组合-时序混合逻辑电路,library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;ues ieee.std_logic_unsigned

32、.all;entity test2 isport(clk,a,s,b,d,i,e,oe:in std_logic;x1,qd,qa,qb,y:out std_logic);,用GAL实现组合-时序混合逻辑电路,attribute LOC:string;attribute LOC of clk:signal is p1;attribute LOC of a:signal is p2;attribute LOC of s:signal is p3;attribute LOC of b:signal is p4;attribute LOC of d:signal is p5;attribute LO

33、C of i:signal is p8;attribute LOC of e:signal is p9;attribute LOC of oe:signal is p11;attribute LOC of x1:signal is p18;attribute LOC of qd:signal is p16;attribute LOC of qa:signal is p15;attribute LOC of qb:signal is p14;attribute LOC of y:signal is p13;end;,用GAL实现组合-时序混合逻辑电路,architecture exam2_arc

34、hitecture of test2 issignal q:std_logic_vector(1 downto 0);signal qt:std_logic;beginx1=(a and s)or(not s and b);,用GAL实现组合-时序混合逻辑电路,process(clk)begin if(clk=1 and clkevent)then q=q+1;-计数器加1,q为数组qt=d;-D触发器end if;end process;,用GAL实现组合-时序混合逻辑电路,process(oe)beginif oe=0 thenqa=q(0);qb=q(1);qd=qt;elseqa=Z;qb=Z;qd=Z;end if;end process;,用GAL实现组合-时序混合逻辑电路,process(i,e)beginif e=1 theny=not i;elsey=Z;end if;end process;end exam2_architecture;,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号