电子设计自动化第四章_第1页
电子设计自动化第四章_第2页
电子设计自动化第四章_第3页
电子设计自动化第四章_第4页
电子设计自动化第四章_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章第四章 VHDLVHDL设计进阶设计进阶第一节第一节 4位加法计数器的位加法计数器的VHDL描述描述【例【例4-20】ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : BUFFER INTEGER RANGE 15 DOWNTO 0 ) ; END ; ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = Q + 1 ; END IF; END PROCESS ;END bhv;4 4位加法计数器的另一种表达方式位加法计数器的另一种表达方

2、式【例【例4-21】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY CNT4 IS PORT ( CLK : IN STD_LOGIC ; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ; END ; ARCHITECTURE bhv OF CNT4 ISSIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 T

3、HEN Q1 = Q1 + 1 ; END IF; Q 0) ; -计数器复位计数器复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿检测时钟上升沿 IF EN = 1 THEN -检测是否允许计数检测是否允许计数 IF CQI 0);-大于大于9,计数值清零,计数值清零 END IF; END IF; END IF; IF CQI = 1001 THEN COUT = 1; -计数大于计数大于9,输出进位信,输出进位信号号 ELSE COUT = 0; END IF; CQ XOTHERS=X) 为了简化表达才使用短语为了简化表达才使用短语“(OTHERS=X

4、)”,这是,这是一个省略赋值操作符,它可以在较多位的位矢量赋值一个省略赋值操作符,它可以在较多位的位矢量赋值中作省略化的赋值,如以下语句:中作省略化的赋值,如以下语句: SIGNAL d1 : STD_LOGIC_VECTOR(4 DOWNTO 0); VARIABLE a1 : STD_LOGIC_VECTOR(15 DOWNTO 0); . d1 0); a1 := (OTHERS=0) ;图图4-15 例例4-22的工作时序的工作时序第二节 不同工作方式的时序电路设计不同工作方式的时序电路设计二、VHDL数据对象(Data Object) 在在VHDL语言中语言中,凡可以赋于一个值凡可以

5、赋于一个值的客体叫的客体叫对象对象(object)。VHDL对象包对象包含有专门数据类型,主要有含有专门数据类型,主要有3个基本类型:个基本类型:常量常量(constant)、)、信号信号(signal)、)、变量变量(variable)。)。1、常量(CONSTANT)(1)使用范围使用范围:常量是全局量,在结:常量是全局量,在结构体描述、包集合说明、实体说明、构体描述、包集合说明、实体说明、过程说明、函数调用说明和过程说明过程说明、函数调用说明和过程说明中使用。中使用。 (2)常量赋值后,在)常量赋值后,在VHDL程序中程序中始始终不变终不变;常量;常量只能赋值一次只能赋值一次; 常量是设

6、计者给实体中某一常量名赋予常量是设计者给实体中某一常量名赋予的固定值。一般地,常量赋值在程序开的固定值。一般地,常量赋值在程序开始前进行说明,数据类型在实体说明语始前进行说明,数据类型在实体说明语句中指明句中指明。 常量说明的一般格式如下常量说明的一般格式如下: CONSTANT 常数名常数名:数据类型数据类型:=表达表达式式;CONSTANT FBT:STD_LOGIC_VECTOR:=“010110”;CONSTANT DATAIN:INTEGER:=15;2、变量(VARIABLE)(1)使用范围使用范围:变量是局部量,在进程说明、函数调:变量是局部量,在进程说明、函数调用说明、过程说明

7、中使用。用说明、过程说明中使用。(2)变量是一个)变量是一个局部量局部量,变量的赋值立即生效,不产,变量的赋值立即生效,不产生赋值延时。生赋值延时。变量书写的一般定义格式为变量书写的一般定义格式为: VARIABLE 变量名变量名:数据类型数据类型 :=表达式表达式; (3) 赋值格式赋值格式: 变量名变量名:=表达式表达式; VARIABLE a:INTEGER RANGE 0 TO 15; VARIABLE d:STD_LOGIC;3、信号(SIGNAL)(1)使用范围使用范围:信号是全局量,在结构体描:信号是全局量,在结构体描述、包集合说明、实体说明中使用。述、包集合说明、实体说明中使用

8、。(2)信号是电子电路内部硬件实体相互连接)信号是电子电路内部硬件实体相互连接的抽象表示。信号通常在构造体、包集合和的抽象表示。信号通常在构造体、包集合和实体说明中使用,其实体说明中使用,其书写格式为书写格式为: SIGNAL 信号名信号名:数据类型数据类型 :=表达式表达式;有关信号的赋值规则有关信号的赋值规则:“:=”表示对信号直接赋值,可用来表示表示对信号直接赋值,可用来表示信号初始值不产生延时。信号初始值不产生延时。“=”表示代入赋值,是变量之间信号的表示代入赋值,是变量之间信号的传递,代入赋值法允许产生延时。传递,代入赋值法允许产生延时。 信号的赋值可以出现在一个进程中,也信号的赋值

9、可以出现在一个进程中,也可以直接出现在结构体的并行语句结构可以直接出现在结构体的并行语句结构中,但运行含义不同,前者为顺序信号中,但运行含义不同,前者为顺序信号赋值,后者属于并行信号赋值,其赋值赋值,后者属于并行信号赋值,其赋值操作是独立进行的。操作是独立进行的。Signal a,b,c,x,y,z: integer;.Process (a,b,c)Begin y=a+b; z=c-x; y=b;End process;4、进程中的信号与变量赋值语句进程中的信号与变量赋值语句 一般地,从硬件电路系统来看,变量和一般地,从硬件电路系统来看,变量和信号相当于逻辑电路系统中的信号相当于逻辑电路系统中

10、的连线上的连线上的信号值信号值;常量相当于电路中的;常量相当于电路中的恒定电平恒定电平。 从行为仿真和从行为仿真和VHDL语句功能上看,信语句功能上看,信号与变量的差异在于号与变量的差异在于接受和保持信号的接受和保持信号的方式与传递的区域大小上方式与传递的区域大小上。综合后对应。综合后对应的硬件电路结构中信号和变量没有区别。的硬件电路结构中信号和变量没有区别。 信号信号SIGNAL 变量变量VARIABLE基本用法基本用法 用于作为电路中的信号连线用于作为电路中的信号连线 用于作为进程中局部数据存储单元用于作为进程中局部数据存储单元适用范围适用范围 在整个结构体内的任何地方都能适用在整个结构体

11、内的任何地方都能适用只能在所定义的进程中使用只能在所定义的进程中使用行为特性行为特性 在进程的最后才对信号赋值在进程的最后才对信号赋值 立即赋值立即赋值表表5-1 信号与变量赋值语句功能的比较信号与变量赋值语句功能的比较【例【例6-1】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC); END ; ARCHITECTURE bhv OF DFF3 IS BEGIN PROCESS (CLK) VARIABLE QQ : S

12、TD_LOGIC ; BEGIN IF CLKEVENT AND CLK = 1 THEN QQ := D1 ; END IF; Q1 = QQ; END PROCESS ; END ;OPOPCPIPQD【例例6-2】 . . . ARCHITECTURE bhv OF DFF3 IS SIGNAL QQ : STD_LOGIC ; BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK =1 THEN QQ = D1 ; END IF; Q1 = QQ; END PROCESS ; END ;【例【例6-3】 LIBRARY IEEE ; USE IEE

13、E.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC); END ; ARCHITECTURE bhv OF DFF3 IS SIGNAL A,B : STD_LOGIC ; BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN A = D1; B = A; Q1 =B; END IF; END PROCESS ; END ;【例【例6-4】LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.

14、ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC); END ; ARCHITECTURE bhv OF DFF3 IS BEGIN PROCESS (CLK) VARIABLE A,B : STD_LOGIC ; BEGIN IF CLKEVENT AND CLK =1 THEN A:= D1; B := A; Q1 = B; END IF; END PROCESS ; END ;DQDQDQDQD 1Q 1D 1Q 1C LKC LK图图6-2例例6-3的的RTL电路电路 图图6-1 例例6-4的的

15、RTL电路电路【例【例6-6】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC);END mux4;ARCHITECTURE body_mux4 OF mux4 ISsignal muxval : integer range 7 downto 0;BEGINprocess(i0,i1,i2,i3,a,b)begin muxval = 0;if (a = 1) then muxval = muxval + 1; en

16、d if;if (b = 1) then muxval q q q q null;end case;end process; END body_mux4;【例【例6-7】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC);END mux4;ARCHITECTURE body_mux4 OF mux4 ISBEGINprocess(i0,i1,i2,i3,a,b)variable muxval : integer r

17、ange 7 downto 0;begin muxval := 0;if (a = 1) then muxval := muxval + 1; end if;if (b = 1) then muxval := muxval + 2; end if;case muxval is when 0 = q q q q null;end case;end process; END body_mux4;图图6-3 例例6-6的的RTL电路电路例例6-4的的RTL电路电路图图6-5 例例6-6的错误的工作时序的错误的工作时序图图6-6 例例6-7的正确工作时序的正确工作时序三、三、 带有并行置位的移位寄存器

18、带有并行置位的移位寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SHFRT IS - 8位右移寄存器位右移寄存器 PORT ( CLK,LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB : OUT STD_LOGIC );END SHFRT;ARCHITECTURE behav OF SHFRT IS BEGIN PROCESS (CLK, LOAD) VARIABLE REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF C

19、LKEVENT AND CLK = 1 THEN IF LOAD = 1 THEN - 装载新数据装载新数据 REG8 := DIN; ELSE REG8(6 DOWNTO 0) := REG8(7 DOWNTO 1); END IF; END IF; QB = REG8(0); END PROCESS; - 输出最低位输出最低位END behav;【例4-23】图图4-16 例例4-23的工作时序的工作时序(1 1)在第)在第一个时钟到来时,一个时钟到来时,LOADLOAD恰为高电平恰为高电平(2 2)第二个时钟,以及以后的时钟信号都是移位时钟)第二个时钟,以及以后的时钟信号都是移位时钟(3

20、 3)第二)第二个时钟后,个时钟后,QBQB输出了右移出的第输出了右移出的第2 2个位个位11第三节第三节 双向电路和三态控制电路设计双向电路和三态控制电路设计 在在FPGA的开发设计中可应用的开发设计中可应用VHDL语语言描述三态控制电路。通过言描述三态控制电路。通过STD_LOGIC中的中的Z对变量赋值,引对变量赋值,引入三态门,在控制信号的控制下可使其入三态门,在控制信号的控制下可使其输出量呈高阻态。输出量呈高阻态。一、三态门设计【例【例6-9】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY tri_s IS port ( enable :

21、 IN STD_LOGIC; datain : IN STD_LOGIC_VECTOR(7 DOWNTO 0); dataout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END tri_s ; ARCHITECTURE bhv OF tri_s ISBEGINPROCESS(enable,datain) BEGIN IF enable = 1 THEN dataout = datain ; ELSE dataout =ZZZZZZZZ ; END IF ;END PROCESS;END bhv;图图6-8 8位位3态控制门电路态控制门电路注意注意:(1)需将信号定

22、义为)需将信号定义为STD_LOGIC数据数据类型,才能将类型,才能将Z赋给变量,每个赋给变量,每个Z表示一个逻辑位。表示一个逻辑位。(2)表示高阻态)表示高阻态Z必须大写。必须大写。(3)对于目标器件为)对于目标器件为FPGA/CPLD的,的,三态门的适配视具体器件决定。三态门的适配视具体器件决定。二、双向端口设计 用用INOUT模式设计双向端口必须考虑端模式设计双向端口必须考虑端口的三态控制,即双向端口在完成输入口的三态控制,即双向端口在完成输入功能时,必须使原来成输出模式的端口功能时,必须使原来成输出模式的端口呈高阻态,否则,待输出的外部数据会呈高阻态,否则,待输出的外部数据会与端口处原

23、有的电平发生与端口处原有的电平发生“线与线与”,导,导致无法将外部数据正确的读入,从而实致无法将外部数据正确的读入,从而实现双向的功能。现双向的功能。【例【例6-10】library ieee;use ieee.std_logic_1164.all;entity tri_state isport (control : in std_logic; in1: in std_logic_vector(7 downto 0); q : inout std_logic_vector(7 downto 0); x : out std_logic_vector(7 downto 0);end tri_sta

24、te;architecture body_tri of tri_state isbeginprocess(control,q,in1)beginif (control = 0) then x = q ; else q = in1; x=ZZZZZZZZ ;end if;end process;end body_tri;图图6-10 例例6-10的仿真波形图的仿真波形图【例【例6-11】(以上部分同上例)(以上部分同上例)process(control,q,in1)beginif (control=0) then x = q ; q = ZZZZZZZZ; else q = in1; x =ZZ

25、ZZZZZZ;end if;end process;end body_tri;图图6-12 例例6-11的仿真波形图的仿真波形图图图6-9 例例6-10的综合结果的综合结果图图6-11 例例6-11的综合结果的综合结果三、三态总线电路设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY tristate2 IS port ( input3, input2, input1, input0 : IN STD_LOGIC_VECTOR (7 DOWNTO 0); enable : IN STD_LOGIC_VECTOR(1 DOWNTO 0); outp

26、ut : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);END tristate2 ; ARCHITECTURE multiple_drivers OF tristate2 ISBEGINPROCESS(enable,input3, input2, input1, input0 ) BEGIN IF enable = 00 THEN output = input3 ; ELSE output Z); END IF ; IF enable = 01 THEN output = input2 ; ELSE output Z); END IF ; IF enable = 10

27、THEN output = input1 ; ELSE output Z); END IF ; IF enable = 11 THEN output = input0 ; ELSE output Z); END IF ;END PROCESS;END multiple_drivers;图图6-13 例例6-12错误的综合结果错误的综合结果【例【例6-13】library ieee;use ieee.std_logic_1164.all;entity tri isport (ctl : in std_logic_vector(1 downto 0); datain1, datain2,datai

28、n3, datain4 : in std_logic_vector(7 downto 0); q : out std_logic_vector(7 downto 0) );end tri;architecture body_tri of tri isbegin q Z) ; q Z) ; q Z) ; q Z) ;end body_tri;图图6-14 例例6-13正确的综合结果正确的综合结果四、顺序条件语句IF语句条件语句条件语句:根据制定根据制定的条件来确定语句的条件来确定语句执行顺序。执行顺序。(1)IF 条件句条件句 Then 顺序语句顺序语句 END IF ;(2)IF 条件句条件句

29、 Then 顺序语句顺序语句 ELSE 顺序语句顺序语句 END IF ;(3)IF 条件句条件句 Then IF 条件句条件句 Then . END IF END IF (4)IF 条件句条件句 Then 顺序语句顺序语句 ELSIF 条件句条件句 Then . ELSE 顺序语句顺序语句 END IF【例【例6-14】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY coder IS PORT ( din : IN STD_LOGIC_VECTOR(0 TO 7); output : OUT STD_LOGIC_VECTOR(0 TO 2) )

30、;END coder;ARCHITECTURE behav OF coder IS SIGNAL SINT : STD_LOGIC_VECTOR(4 DOWNTO 0); 表表6-2 8线线-3线优先编码器真值表线优先编码器真值表 输输 入入 输输 出出din0 din1 din2 din3 din4 din5 din6 din7 din0 din1 din2 din3 din4 din5 din6 din7 output0 output1 output2 output0 output1 output2 x x x x x x x 0 0 0 0 x x x x x x x 0 0 0 0 x

31、 x x x x x 0 1 1 0 0 x x x x x x 0 1 1 0 0 x x x x x 0 1 1 0 1 0 x x x x x 0 1 1 0 1 0 x x x x 0 1 1 1 1 1 0 x x x x 0 1 1 1 1 1 0 x x x 0 1 1 1 1 0 0 1 x x x 0 1 1 1 1 0 0 1 x x 0 1 1 1 1 1 1 0 1 x x 0 1 1 1 1 1 1 0 1 x 0 1 1 1 1 1 1 0 1 1 x 0 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1

32、 1 1 1注:表中的注:表中的“x”为任意,类似为任意,类似VHDL中的中的“”值。值。BEGIN PROCESS (din) BEGIN IF (din(7)=0) THEN output = 000 ; ELSIF (din(6)=0) THEN output = 100 ; ELSIF (din(5)=0) THEN output = 010 ; ELSIF (din(4)=0) THEN output = 110 ; ELSIF (din(3)=0) THEN output = 001 ; ELSIF (din(2)=0) THEN output = 101 ; ELSIF (din

33、(1)=0) THEN output = 011 ; ELSE output = 111 ; END IF ; END PROCESS ; END behav;第四节 进程语句结构1、进程的特点进程的特点(1)进程内部的所有语句都是)进程内部的所有语句都是顺序执行顺序执行的。的。(2)多进程之间是)多进程之间是并行执行并行执行的,并可以的,并可以访问结构体或实体中所定义的信号。访问结构体或实体中所定义的信号。(3)进程的启动进程的启动是由进程标识符后的信是由进程标识符后的信号敏感变量表所标明的信号来触发启动号敏感变量表所标明的信号来触发启动进程的活动,也可以用进程的活动,也可以用WAIT语句等

34、待语句等待一个触发条件的成立。一个触发条件的成立。2、PROCESS 语句的格式进程标号进程标号: PROCESS (敏感信号参数敏感信号参数表表) IS进程说明部分进程说明部分BEGIN 顺序描述语句顺序描述语句;END PROCESS 进程标号进程标号;进程语句的说明进程语句的说明A、每个进程可以包含、每个进程可以包含一个标号一个标号;B、进程说明部分进程说明部分:定义该进程所需的局部数据:定义该进程所需的局部数据环境。环境。C、顺序描述语句部分是一段顺序执行的语句,、顺序描述语句部分是一段顺序执行的语句,描述该进程的行为。描述该进程的行为。D、PROCESS中,规定了每个进程语句在它的中

35、,规定了每个进程语句在它的敏感信号的值改变是都敏感信号的值改变是都必须立即完成必须立即完成某一行为,某一行为,这一行为由顺序语句完成。这一行为由顺序语句完成。3、PROCESS 组成A、进程说明部分定义一些、进程说明部分定义一些局部变量局部变量:如数据类:如数据类型、常量、变量、属性、子程序等。型、常量、变量、属性、子程序等。B、顺序描述语句分为:赋值语句、进程启动语、顺序描述语句分为:赋值语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳句、子程序调用语句、顺序描述语句和进程跳出语句等。出语句等。C、敏感信号参数表敏感信号参数表需列出启动本进程可读入的需列出启动本进程可读入的信号名(当

36、有信号名(当有WAIT语句是例外)。语句是例外)。PROCESS语句结构语句结构进程说明进程说明顺序描述语句顺序描述语句敏感信号参数表敏感信号参数表信号赋值语句变量赋值语句进程启动语句子程序调用语句顺序描述语句进程跳出语句进程语句的性质进程语句的性质A、一个结构体中可以包含、一个结构体中可以包含多个进程多个进程;B、进程之间是、进程之间是并行并行的;的;C、进程的顺序描述语句之间是、进程的顺序描述语句之间是顺序执行顺序执行的。的。D、进程语句具有并行性和顺序性,原因是它本、进程语句具有并行性和顺序性,原因是它本身是并行语句,而进程语句是由顺序语句组成身是并行语句,而进程语句是由顺序语句组成的。

37、的。 在在VHDL程序中,进程语句使用的是最频程序中,进程语句使用的是最频繁和最能体现繁和最能体现VHDL语言特点的一个语句。语言特点的一个语句。4、进程要点:1)在同一结构体中的任一进程是一个独立的)在同一结构体中的任一进程是一个独立的无无限循环限循环的程序结构,它没有返回语句。的程序结构,它没有返回语句。2)进程有两种状态:)进程有两种状态:执行状态执行状态和和等待状态等待状态。当条件满足时,进入执行状态;否则进入等待状当条件满足时,进入执行状态;否则进入等待状态。态。3)进程启动到进程结束的时间与任何外部因素无进程启动到进程结束的时间与任何外部因素无关。关。4)在同一结构体中的不同进程是

38、在同一结构体中的不同进程是并行运行并行运行的,但的,但同一进程中的逻辑描述语句则是同一进程中的逻辑描述语句则是顺序运行顺序运行的,的,因而在进程中只能设置顺序语句。因而在进程中只能设置顺序语句。5)、进程的激活必须由、进程的激活必须由敏感信号敏感信号中定义中定义的任何一个敏感信号的变化启动,否则的任何一个敏感信号的变化启动,否则必须有一个显式的必须有一个显式的WAIT语句来激励。语句来激励。6)、结构体中的多个进程之所以能、结构体中的多个进程之所以能并行并行同步运行同步运行,一个重要的原因是进程之间,一个重要的原因是进程之间的通信是通过传递信号和共享变量值实的通信是通过传递信号和共享变量值实现的。现的。7)、进程分为、进程分为组合进程组合进程和和时序进程时序进程。*组合进程的所

温馨提示

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

评论

0/150

提交评论