收藏 分销(赏)

CH3_单体宣告及资料流模式描述法.ppt

上传人:pc****0 文档编号:12542740 上传时间:2025-10-27 格式:PPT 页数:40 大小:232.50KB 下载积分:10 金币
下载 相关 举报
CH3_单体宣告及资料流模式描述法.ppt_第1页
第1页 / 共40页
CH3_单体宣告及资料流模式描述法.ppt_第2页
第2页 / 共40页


点击查看更多>>
资源描述
第三章,*,第三章,單體宣告及資料流模式描述法,3-1,單體之宣告,3-2,架構之宣告及資料流架構描述法,3-2-1,架構之宣告,3-2-2,資料流模式描述法,1,第三章,單,體及架構是,VHDL,語言之主要部份。單體主要的功能是描述數位電,路之輸出入界面,而架構則是描述電路內部工作的情形。在,VHDL,語言,中提供了單一的單體宣告方式及三種架構描述模式:資料流模式、行為,模式及結構模式。本章之主要目的即為討論單體之宣告以及以資料流模,式為主之架構描述法。其他兩種架構描述法將分別在第四及第五章說明,之。以下為本章討論之重點:,第一、,單體宣告方式:,單體宣告之主要目的為將數位電路的輸出及輸入,接腳定義於,VHDL,程式中,我們在第,3.1,節中將討論這些接腳的,定義方式。,第二、,資料流模式描述法:,以資料流模式為主之架構描述法最大的優點,是布林函數定義明確且設計快速,但其缺點為不易描述複雜的電,路。此種描述法將在第,3.2,節中說明之。,2,第三章,單體之宣告,單體代表一個電路的輸入及輸出界面,亦即單體描述一個電路的外觀。,從單體的宣告中我們可了解其所代表之電路有多少輸出入信號,且那些,信號是輸入、那些是輸出、那些是雙向。在,VHDL,程式中,對於其所描,述之電路只能有一個單體,其基本宣告之方式如下:,entity,單體名稱,is,port(,信號,1,:模式,1,資料型態,1;,信號,2,:模式,2,資料型態,2;,信號,N,:模式,N,資料型態,N);,end,單體名稱,;,在單體宣告中之單體名稱需與該,VHDL,程式之檔案名稱一致。舉例說,明之,若我們擬設計一,41,之多工器,其,VHDL,之檔案名稱為,mux4.vhd,,則單體名稱必需為,mux4,。,3-1,3,第三章,在上述宣告中定義了,N,個輸出入埠,(Port),,而每一個埠均宣告一個信號,物件,同時並定義了該物件之名稱、資料型態及模式。值得注意的是在,單體宣告中所列出的物件都是信號物件,而不會有其他類型之物件。這,些信號物件在單體宣告後就可以使用在程式之任何地方,而不需使用如,2.2,節所討論之方式再宣告。,假如有兩個或兩個以上的輸出入埠其物件擁有相同之模式及型態,則,我們可在宣告時予以合併之。舉例說明,若第,i,及,i+1,輸出入埠擁有相同,之模式及型態,則我們可將下列之宣告,信號名稱,i,:模式,i,資料型態,i;,信號名稱,i+1,:模式,i+1,資料型態,i+1;,合併為,信號名稱,i,信號名稱,i+1,:模式,i,資料型態,i;,4,第三章,單體宣告之模式可有下列的五種選擇:,in,、,out,、,inout,、,buffer,及,linkage,。現將這些模式中常用的三種,in,、,out,、,inout,簡述如下:,1.,in,:,若該埠之模式為,in,,則表示該埠為輸入埠。因此,該埠接受單體,外信號之驅動,但不會對外輸出信號。值得注意的是輸入埠上之信號,只可讓單體外信號驅動,然而單體內信號卻不可驅動它。,2.,out,:,若該埠之模式為,out,,則表示該埠為輸出埠。因此,該埠可驅動,單體外之信號,但不對外接受信號。輸出埠上的信號也不能用來驅動,單體內之信號。,3.,inout,:,若該埠之模式為,inout,,則表示該埠為雙向埠,其具有接受單,體外信號之驅動,且可驅動單體外之信號驅動之功能。值得注意的是,雖然雙向埠具有較容易使用之特點,但若將單體上所有輸出入埠皆宣,告為雙向則可能降低程式之可讀性。因此,依照信號實際上被指定之,功能來宣告其模式可能是較好的作法。,5,第三章,圖,3.1,41,多工器之外觀,以下我們以一,41,之多工器,(Multiplexer),來說明單體宣告之方式:,圖,3.1,為該多工器之外觀,其中,X,及,S,為輸入信號,而,Y,為輸出信號。,由於,X,代表四個輸入訊號,因此在程式中其為具有四個元素之矩陣,,而,S,由於也代表二訊號,因此為具有二個元素之矩陣。該多工器依,S,之數值決定,X,中那一元素作為輸出,Y,。,6,第三章,依圖,3.1,所示之外觀,此多工器之單體宣告為,entity mux4 is,port(,X:in bit_vector(3,downto,0);,S:in bit_vector(1,downto,0);,Y:out bit);,end mux4;,由於,X,及,S,均為輸入信號而,Y,為輸出信號,我們宣告,X,及,S,之模式為,in,而,Y,之模式為,out,。同時,,X,、,S,及,Y,之型態分別被宣告為,bit_vector(3,downto,0),、,bit_vector(1,downto,0),及,bit,。值得注意的是在此宣告中我們只,決定了,X,、,S,及,Y,之模式及型態,但並未敘述這些物件之間的關係,此一,關係會在架構描述中敘述之。,7,第三章,圖,3.2,168,隨機存取記憶體之外觀,接下來我們考慮一,16,個位元組,(168),之隨機存取記憶體,(Random Access,Memory;RAM),其外觀如圖,3.2,所示。由於該記憶體擁有,16,個位元組,且每一位元組之,地址由,adr,代表之,因此,adr,長度應為,4,位元,亦即,adr,為一,std_logic,或,bit,矩陣其具有四個,元素。由於,adr,之值是由外部輸入,物件,adr,之模式應為,in,。每一位元組之內容由,data_bus,代表之,由於一個位元組是八個位元,,data_bus,為一矩陣其具有八個元素。由,於外界輸入可經由,data_bus,來設定位元組,同時位元組之值也可透過,data_bus,來輸出至,外界,,data_bus,之模式為,inout,。最後,該記憶體還有兩個控制訊輸入,rw,及,en,,其中,rw,決定記憶體之模式為讀或寫,而,en,決定記憶體是否在工作狀態,若記憶體不在工作狀,態,則,data_bus,之數值為高阻抗。因此該記憶體單體宣告為,entity ram_16 is,port(,adr,:in std_logic_vector(3,downto,0);,data_bus,:,inout,std_logic_vector(7,downto,0);,rw,:in,std_logic,;,en:in,std_logic,);,end ram_16;,8,第三章,架構之宣告及資料架構描述法,架構主要目地為描述電路內部工作情形,而上一節所討論之單體則描述,電路之外觀,因此單體及架構即可組成完整之,VHDL,程式。由此可見架,構如同單體一樣,是,VHDL,程式中十分重要的部分。本節主要目的即為,討論基本架構宣告之方式,以及其資料流模式描述法。,3-2,9,第三章,架構之宣告應在單體宣告之後,基本架構之宣告方式如下:,architecture,架構名稱,of,單體名稱,is,信號物件宣告,begin,架構描述程式,end,架構名稱,;,在上述架構宣告內之單體名稱應與單體宣告內之單體名稱一致,且,架構描述程式應在宣告內之,begin,及,end,之間。值得注意的是在單體宣告裏,的信號物件可以直接在架構描述程式中使用,無需再另外宣告。,3-2-1,架構之宣告,10,第三章,以下為一個簡單但完整之,VHDL,程式其包含了單體及架構:,entity OR2 is,port(,A,B:in bit;,C:out bit);,end OR2;,architecture OR2_arch of OR2 is,begin,C=A or B;,end OR2_arch;,在上面的例子中,單體名稱及架構名稱分別為,OR2,及,OR2_arch,。從,單體宣告中我們可知此電路有兩個輸入,A,及,B,,且有一個輸出,C,,這些,輸入及輸出信號之型態均為,bit,。從架構中我們可知輸入及輸出間關係為,輸出是兩個輸入執行邏輯,or,運算之結果。,11,第三章,圖,3.3,OR2.vhd,之模擬結果,圖,3.3,顯示,OR2.vhd,之模擬結果,由此結果可知若輸入,A,或,B,為,1,則輸出,C,為,1,,因此,C,確為,A,及,B,執行邏輯,or,運算之結果。,12,第三章,資料流模式描述法是,VHDL,程式中三種架構描述法中之一種。資料流,模式種描述法之特點為該法則並不以敘述電路結構,(structure),之方式來描,述電路之功能。它是透過一些信號設定之指令來完成其描述。不僅如,此,該描述法之另一特點是所有信號設定之指令之執行應為並行處理。,以下為一個使用資料流模式描述法之,VHDL,程式實例:,entity FULL_ADDER_1 is,port(,A,B,CIN:in bit;,SUM,COUT:out bit);,end FULL_ADDER_1;,architecture DATAFLOW of FULL_ADDER_1 is,begin,SUM=A,xor,B,xor,CIN;,COUT=(A and B)or(B and CIN)or(CIN and A);,end DATAFLOW;,3-2-2,資料流模式描述法,13,第三章,該程式所描述的是一位元全加器,其外觀如圖,3.4,所示。,在此一位元全加器中,A,、,B,及,CIN,為輸入而,SUM,及,COUT,為輸出,其,中,SUM,為,A,、,B,及,CIN,之和,而,COUT,為執行加法後之進位。值得注意的是,在輸入信號,A,、,B,或,CIN,中,無論是任何一個發生變化均會讓程式中之所有,的信號設定指令同時啟動及執行。,圖,3.4,一位元全加器,14,第三章,在程式中之信號設定指令為,SUM=A,xor,B,xor,CIN;,COUT=(A and B)or(B and CIN)or(CIN and A);,因此無論是,A,、,B,或,CIN,發生變化,程式會同時執形上述指令以更新,SUM,及,COUT,。圖,3.5,顯示,FULL_ADDER_1.vhd,之模擬結果。由該圖可知,A,、,B,、,CIN,、,SUM,及,COUT,之間的關係符合全加器之輸出入關係,因此,該程式正確的描述了全加器。,圖,3.5,FULL_ADDER_,1.vhd,之模擬結果,15,第三章,由於資料流描述法具有並行處裡的特質,信號設定指令之次序並不會,影響程式執行之結果。因此若我們重新改寫上述之程式為:,entity FULL_ADDER_2 is,port(,A,B,CIN:in bit;,SUM,COUT:out bit);,end FULL_ADDER_2;,architecture DATAFLOW_NEW of FULL_ADDER_2 is,begin,COUT=(A and B)or(B and CIN)or(CIN and A);,SUM=A,xor,B,xor,CIN;,end DATAFLOW_NEW;,此一程式與上一程式之信號設定次序相反,但執行結果卻相同。,16,第三章,圖,3.6,顯示,FULL_ADDER_2.vhd,之模擬結果,該圖之結果確實與圖,3.5,之,結果相同。,在資料流模式描述法中之信號設定指令,除了一般的設定方式外,尚,有下列兩種:選擇式信號設定方式,(Selected Signal Assignment),及條件式,信號設定方式,(Conditional Signal Assignment),。,圖,3.6,FULL_ADDER_2.vhd,之模擬結果,17,第三章,此種設定方式是根據,with select when,語法,而該語法之規則如下:,with,信號,S select,信號,Y=,信號數值,A1 when,信號,S,之數值為,B1,信號數值,A2 when,信號,S,之數值為,B2,信號數值,An when,信號,S,之數值為,Bn,;,在使用此種設定方式時,信號,Y,為我們想要設定的信號,而信號,Y,之值則,由信號,S,之值來決定之。若信號,S,之值為,Bi,,,i=1,n,,則信號,Y,之值會被設,定成,Ai,。,3-2-2-1,選擇式信號設定方式,18,第三章,以下為一,41,多工器,(,外觀如圖,3.1,所示,),完整之,VHDL,程式,其使用,了選擇式信號設定來完成,41,多工器架構之描述。,entity mux4_select is,port(,X:in bit_vector(3,downto,0);,S:in bit_vector(1,downto,0);,Y:out bit);,end mux4_select;,architecture DATAFLOW of mux4_select is,begin,with S select,Y=X(0)when 00,X(1)when 01,X(2)when 10,X(3)when 11;,end DATAFLOW;,在此一程式中,,Y,之值由,S,決定。若,S=00,,則我們用,X(0),來設定,Y,;若,S=01,,我們用,X(1),來設定,Y,;若,S=10,,我們用,X(2),來設定,Y,;若,S=11,,我們用,X(3),來設定,Y,。因此該程式可實現多工器。,19,第三章,圖,3.7,顯示該程式之模擬結果,在圖中我們設定,X=1010,,因此,X(3)=1,,,X(2)=0,,,X(1)=1,且,X(0)=0,。所以當,S=“00”,時,Y,應為,0,,,S=“01”,時,Y,應為,1,,,S=“10”,時,Y,應為,0,,,S=“11”,時,Y,應為,1,。此圖之結果符合,以上的描述。,圖,3.7,mux4_select.vhd,之模擬結果,20,第三章,接下來我們考慮一個,3to8,解碼器,(decoder),,其外觀如圖,3.8,所示:,此解碼器之輸入為,adr,其長度為,3,位元,而輸出為,Y,其長度為,8,位元。,Y,矩陣之,8,個元素中只能有一個元素值為,1,,而其他均應為,0,。在,Y,矩,陣中數值為,1,的元素其位置由,adr,決定之。,圖,3.8,3to8,解碼器之外觀,21,第三章,此解碼器之,VHDL,程式設計也可使用選擇式信號設定來完成,其完整之,程式如下所示:,library,ieee,;,use ieee.std_logic_1164.all;,entity DECODER_3to8 is,port(,adr,:in std_logic_vector(2,downto,0);,Y:out std_logic_vector(7,downto,0),);,end DECODER_3to8;,architecture DATAFLOW of DECODER_3to8 is,begin,with,adr,select,Y=00000001 when 000,00000010 when 001,00000100 when 010,00001000 when 011,00010000 when 100,00100000 when 101,01000000 when 110,10000000 when 111,00000000 when others;,end DATAFLOW;,22,第三章,在該程式中由於宣告了,adr,及,Y,均為,std_logic_vector,,且,std_logic_vector,是定義在,IEEE std_logic_1164,套件中,因此我們必需要在,程式開始時使用下列方式宣告使用該套件:,library,ieee,;,use ieee.std_logic_1164.all;,由該程式可觀察得,在,Y,矩陣中數值為,1,的元素其位置應為,adr,之,十進制值再加一。,23,第三章,圖,3.9,顯示該程式之模擬結果。由於該圖顯示的數字是十六進制,將此十,六進制轉成二進制後,我們發現輸出,Y,與輸入,adr,之間的關係與程式中描,述之關係完全相同。,圖,3.9,DECODER_3to8.vhd,之模擬結果,24,第三章,在許多的應用裏我們希望一個數位電路之輸出不僅只有雙態而是要,求三態,(Tri-State),,也就是說輸出之數值應為,0,、,1,及,Z,,其中,Z,代表高阻抗。若一電路之輸出為,Z,,代表該輸出中斷與外界之連接。,若我們宣告矩陣,Y,為,bit_vector,,則,Y,每一元素之數值需為,0,或,1,,因,此無法達成三態之要求,所以我們應宣告,Y,為,std_logic_vector,之型態以實,現三態輸出。在上面的程式中我們雖使用,std_logic_vector,,但卻沒有實現,三態輸出。,以下我們進一步修正程式以達成三態要求:,25,第三章,library,ieee,;,use ieee.std_logic_1164.all;,entity DECODER_3to8_new is,port(,adr,:in std_logic_vector(2,downto,0);,en:in,std_logic,;,Y:out std_logic_vector(7,downto,0),);,end DECODER_3to8_new;,architecture DATAFLOW of DECODER_3to8_new is,signal,en_adr,:std_logic_vector(3,downto,0);,begin,en_adr,=en&,adr,;,with,en_adr,select,Y=00000001 when 0000,00000010 when 0001,00000100 when 0010,00001000 when 0011,00010000 when 0100,00100000 when 0101,01000000 when 0110,10000000 when 0111,ZZZZZZZZ when others;,end DATAFLOW;,26,第三章,此程式與前一程式最大不同處為此程式又多宣告了一個輸入,en,,其,目的是控制,Y,矩陣是否要輸出,Z,。若,en,數值為,0,,則此電路之輸出與前,一電路一致,但若,en,數值為,1,則無論,adr,之數值為何,Y,之每個元素輸出皆,為高阻抗,Z,。圖,3.10,顯示此程式之模擬結果。由該圖可知若,en=1,則無,論,adr,之值為何,輸出,Y,之數值為高阻抗,Z,。,圖,3.10,DECODER_3to8_new.vhd,之模擬結果,27,第三章,若解碼器有兩個或兩個以上的輸入信號擁有相同的輸出,我們可以,用運算子,|,將這些輸入置於相同的,when,敘述句中。以下為使用運算子,|,的,一個例子:,entity DECODER_3to8_share is,port(,adr,:in std_logic_vector(2,downto,0);,en:in,std_logic,;,Y:out std_logic_vector(7,downto,0),);,end DECODER_3to8_share;,architecture DATAFLOW of DECODER_3to8_share is,signal,en_adr,:std_logic_vector(3,downto,0);,begin,en_adr,=en&,adr,;,with,en_adr,select,Y=00000001 when 0000|0001,00000100 when 0010,00001000 when 0011,00010000 when 0100,00100000 when 0101,01000000 when 0110,10000000 when 0111,ZZZZZZZZ when others;,end DATAFLOW;,28,第三章,在此程式中,若,en_adr,之數值為,“,0000”,或,“,0001”,,輸出,Y,之數值皆,為,00000001,。圖,3.11,顯示此程式之模擬結果。,圖,3.11,DECODER_3to8_share.vhd,之模擬結果,29,第三章,最後我們介紹如何使用,VHDL,描述七段顯示器的解碼電路。圖,3.12,說,明了七段顯示器每一段之信號名稱及顯示位置,而圖,3.13,則為七段顯示解,碼器之外觀。該顯示器裏每一段會被顯示出來假如該段之信號數值為,0,,,反之則為,1,。我們將此解碼器之輸出及輸入關係整理於表,3.1,中。,表,3.1,七段顯示器編碼器之輸出入關係,S(3)S(2)S(1)S(0),ABCDEFG,0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,0000001,0110000,0010010,0000110,1001100,0100100,0111111,0001111,0000000,0000100,圖,3.12,七段顯示器每一段之名稱及顯示位置,圖,3.13,七段顯示器外觀,30,第三章,我們知道此解碼器也可使用選擇式信號設定來完成,其完整之程式如下所示:,library,ieee,;,use ieee.std_logic_1164.all;,entity SEVEN_SEG is,port(S:in std_logic_vector(3,downto,0);,A,B,C,D,E,F,G:out,std_logic,);,end SEVEN_SEG;,architecture DATAFLOW of SEVEN_SEG is,signal Y:std_logic_vector(0 to 6);,begin,with S select,Y=0000001 when 0000,0110000 when 0001,0010010 when 0010,0000110 when 0011,1001100 when 0100,0100100 when 0101,0100000 when 0110,0001111 when 0111,0000000 when 1000,0000100 when 1001,1111111 when others;,A=Y(0);,B=Y(1);,C=Y(2);,D=Y(3);,E=Y(4);,F=Y(5);,G=Y(6);,end DATAFLOW;,31,第三章,圖,3.14,顯示,SEVEN_SEG.vhd,之模擬結果。由此圖我們可觀察得當,S,之,數值分別為,8,、,9,、,1,及,0,時,輸出,A,至,G,符合表,3.1,所列之數值,所以此程,式正確描述了七段顯示器編碼器。,圖,3.14,SEVEN_SEG.vhd,之模擬結果,32,第三章,此種設定方式是根據,when.else,語法,而基本語法之規則如下:,信號,A=,信號,B when,條件敘述,else,信號,C;,此種信號設定之程序為:如果條件敘述成立則我們用信號,B,來設定信號,A,,,否則使用信號,C,設定信號,A,。,以下為一,VHDL,程式,其使用條件式信號設定方式來實現,21,多工器。,entity mux_2 is,port(X1,X2,S:in bit;,Y:out bit);,end mux_2;,architecture DATAFLOW of mux_2 is,begin,Y=X1 when S=1,else X2;,end DATAFLOW;,在此程式中若,S=1,則我們用,X1,來設定,Y,,否則用,X2,來設定,Y,。圖,3.15,顯示,此程式之模擬結果。,3-2-2-2,條件式信號設定方式,33,第三章,在該圖中我們設定,X1=0,及,X2=1,,因此若,S=1,,則輸出,Y=0,,且,若,S=0,,則,Y=1,。此圖之結果符合此一描述。,圖,3.15,mux_2.vhd,之模擬結果,34,第三章,條件式信號設定有一個很大的特點是它可以排列信號,設定之次序。考慮以下之語法:,信號,A=,信號,B1 when,條件敘述,1 else,信號,B2 when,條件敘述,2 else,.,信號,BN when,條件敘述,N else,信號,C;,則信號,A,之設定是有優先次序的,該次序為信號,B1,最,高,,B2,次之,依序到最後為信號,C,。,35,第三章,表,3.2,優先權編碼器之輸出入關係,B(3)B(2)B(1)B(0),A(1)A(0),Active,0000,XXX1,XX10,X100,1000,11,00,01,10,11,0,1,1,1,1,圖,3.16,優先權編碼器之外觀,以下我們利用可以排列信號設定之次序之特,點來設計優先權編碼器,(Priority Encoder),,,其外觀如圖,3.16,所示,當中,B,為輸入其長度,為,4,位元,而,A,為輸出其長度為,2,位元。在矩,陣,B,之元素中以,B(0),之優先權最高,,B(1),次,之,,B(2),再次之,而,B(3),最後。若優先權較,高之元素其值為,1,,則無論優先權較低之,元素值為何,該優先權較高之元素可設定輸,出,A,之數值。若所有元素值皆為零,則我們,設定另一輸出,Active,為,0,。這些關係也整,理在表,3.2,中。,36,第三章,以下為此編碼器之,VHDL,程式:,entity,priority_enc,is,port(B:in,bit_vector,(3,downto,0);,A:out,bit_vector,(1,downto,0);,Active:out bit);,end,priority_enc,;,architecture DATAFLOW of,priority_enc,is,begin,A=00 when B(0)=1 else,01 when B(1)=1 else,10 when B(2)=1 else,11;,Active=0 when B=0000 else 1;,end DATAFLOW;,37,第三章,圖,3.17,顯示,priority_enc.vhd,之模擬結果。當該圖,B,之數值為,1,及,5,時,,B(0)=1,,所以由表,3.2,可知,A,應當為,00,。當,B,之數值為,2,及,6,時,,B(0)=0,且,B(1)=1,,所以,A,應當為,01,。當,B,之數值為,4,時,,B(0)=0,、,B(1)=0,且,B(2)=1,,所以,A,應當為,10,。最後,當,B,分別為,8,及,0,時,,B(0)=0,、,B(1)=0,且,B(2)=0,,所以,A,之值應為,11,。,圖,3.17,priority_enc.vhd,之模擬結果,38,第三章,我們已在前一小節中使用了選擇式信號設定方式來實現,41,多工器,,以下我們將用條件式信號設定方式來實現之。由此我們可知相同的電路,我們可以用不同的,VHDL,信號設定方式實現之。,entity mux4_when is,port(,X:in bit_vector(3,downto,0);,S:in bit_vector(1,downto,0);,Y:out bit);,end mux4_when;,architecture DATAFLOW of mux4_when is,begin,Y=X(0)when S=00 else,X(1)when S=01 else,X(2)when S=10 else,X(3);,end DATAFLOW;,39,第三章,圖,3.18,顯示,mux4_when.vhd,之模擬結果,該結果與圖,3.7,之結果相同,,因此,mux4_when.vhd,也正確的描述了,41,多工器。,圖,3.18,mux4_when.vhd,之模擬結果,40,第三章,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服