FPGA萬花筒之(六):FPGA的基本結構

姓名:張俸璽 學號:20012100022 學院:竹園三號書院

轉自https://blog.csdn.net/k331922164/article/details/829263426

【嵌牛導讀】FPGA杉辙,可編程門陣列,作為一種較為新型的技術草慧,為大多數(shù)人所陌生监透。如今,F(xiàn)PGA成為一個技術熱門属拾。那么将谊,對于一個FPGA,它的基本結構是什么渐白?本文對這個問題做出了解答尊浓。

【嵌牛鼻子】FPGA Xilinx Altera Cyclone

【嵌牛提問】FPGA的基本結構是什么?

【嵌牛正文】

FPGA的基本結構

FPGA由6部分組成纯衍,分別為可編程輸入/輸出單元栋齿、基本可編程邏輯單元、嵌入式塊RAM襟诸、豐富的布線資源瓦堵、底層嵌入功能單元和內(nèi)嵌專用硬核等。

每個單元簡介如下:

1.可編程輸入/輸出單元(I/O單元)

目前大多數(shù)FPGA的I/O單元被設計為可編程模式歌亲,即通過軟件的靈活配置菇用,可適應不同的電器標準與I/O物理特性;可以調(diào)整匹配阻抗特性陷揪,上下拉電阻惋鸥;可以調(diào)整輸出驅動電流的大小等。


2.基本可編程邏輯單元

FPGA的基本可編程邏輯單元是由查找表(LUT)和寄存器(Register)組成的悍缠,查找表完成純組合邏輯功能卦绣。FPGA內(nèi)部寄存器可配置為帶同步/異步復位和置位、時鐘使能的觸發(fā)器扮休,也可以配置成為鎖存器迎卤。FPGA一般依賴寄存器完成同步時序邏輯設計。一般來說玷坠,比較經(jīng)典的基本可編程單元的配置是一個寄存器加一個查找表蜗搔,但不同廠商的寄存器和查找表的內(nèi)部結構有一定的差異劲藐,而且寄存器和查找表的組合模式也不同。

學習底層配置單元的LUT和Register比率的一個重要意義在于器件選型和規(guī)模估算樟凄。由于FPGA內(nèi)部除了基本可編程邏輯單元外聘芜,還有嵌入式的RAM、PLL或者是DLL缝龄,專用的Hard IP Core等汰现,這些模塊也能等效出一定規(guī)模的系統(tǒng)門,所以簡單科學的方法是用器件的Register或LUT的數(shù)量衡量叔壤。

3.嵌入式塊RAM

目前大多數(shù)FPGA都有內(nèi)嵌的塊RAM瞎饲。嵌入式塊RAM可以配置為單端口RAM、雙端口RAM炼绘、偽雙端口RAM嗅战、CAM、FIFO等存儲結構俺亮。

CAM驮捍,即為內(nèi)容地址存儲器。寫入CAM的數(shù)據(jù)會和其內(nèi)部存儲的每一個數(shù)據(jù)進行比較脚曾,并返回與端口數(shù)據(jù)相同的所有內(nèi)部數(shù)據(jù)的地址东且。簡單的說,RAM是一種寫地址本讥,讀數(shù)據(jù)的存儲單元珊泳;CAM與RAM恰恰相反。

除了塊RAM囤踩,Xilinx和Lattice的FPGA還可以靈活地將LUT配置成RAM旨椒、ROM晓褪、FIFO等存儲結構堵漱。

4.豐富的布線資源

布線資源連通FPGA內(nèi)部所有單元,連線的長度和工藝決定著信號在連線上的驅動能力和傳輸速度涣仿。布線資源的劃分:

1)全局性的專用布線資源:以完成器件內(nèi)部的全局時鐘和全局復位/置位的布線勤庐;

2)長線資源:用以完成器件Bank間的一些高速信號和一些第二全局時鐘信號的布線(這里不懂什么是“第二全局時鐘信號”);

3)短線資源:用來完成基本邏輯單元間的邏輯互連與布線好港;

4)其他:在邏輯單元內(nèi)部還有著各種布線資源和專用時鐘愉镰、復位等控制信號線。

由于在設計過程中钧汹,往往由布局布線器自動根據(jù)輸入的邏輯網(wǎng)表的拓撲結構和約束條件選擇可用的布線資源連通所用的底層單元模塊丈探,所以常常忽略布線資源。其實布線資源的優(yōu)化與使用和實現(xiàn)結果有直接關系拔莱。

5.底層嵌入功能單元

底層嵌入功能單元是指通用程度較高的嵌入式功能模塊碗降。如鎖相環(huán)(Phase Locked Loop,PLL)隘竭、DLL(Delay Locked Loop)、DSP(Digital Signal Processing)和CPU等讼渊。

6.內(nèi)嵌專用硬核

與“底層嵌入單元”是有區(qū)別的动看,這里指的硬核主要是那些通用性相對較弱,不是所有FPGA器件都包含硬核爪幻。

CycloneⅡ簡介

CYCLONEⅡ系列FPGA器件由美國Altera公司出品菱皆,屬于中端產(chǎn)品。采用了90nm的工藝挨稿,增加了片內(nèi)邏輯單元數(shù)仇轻。為了方便說明,在此僅選用EP2C5進行分析講解奶甘。

FPGA的命名規(guī)則

先了解一下FPGA的命名規(guī)則拯田,這樣就可以從芯片名字的角度來看這是怎么樣性能的一款芯片了。

例如EP2C20F484C6甩十,含義:

EP——工藝船庇,

2C——cyclone2,

20——LE數(shù)量約為20K,

F——封裝形式侣监,

484——管腳數(shù)鸭轮,

C——溫度范圍(確定其是工業(yè)級,軍品級橄霉,還是商業(yè)級)窃爷,

6——速度(數(shù)字越小速度越快)。

1.邏輯單元與邏輯陣列

? ? 邏輯單元(Logic Element姓蜂,LE)在FPGA器件內(nèi)部按厘,用于完成用戶邏輯的最小單元。一個邏輯陣列包含16個邏輯單元以及一些其他資源钱慢, 在一個邏輯陣列內(nèi)部的16個邏輯單元有更為緊密的聯(lián)系逮京,可以實現(xiàn)特有的功能。

一個邏輯單元主要由以下部件組成:一個四輸入的查詢表(LookUp Table束莫,LUT)懒棉,一個可編程的寄存器,一條進位鏈览绿,一條寄存器級連鏈策严。

查詢表: 用于完成用戶需要的邏輯功能,CYCLONEⅡ系列的查詢表是4輸入1輸出的饿敲,可以完成任意4輸入1輸出的組合邏輯妻导。

可編程寄存器:可以配置成D觸發(fā)器,T觸發(fā)器,JK觸發(fā)器倔韭,SR觸發(fā)器暑脆。每個寄存器包含4個輸入信號,數(shù)據(jù)輸入狐肢、時鐘輸入添吗、時鐘使能、復位輸入份名。

一個邏輯單元包含3個輸出碟联,兩個用于驅動行連接、列連接僵腺、直接連接鲤孵,另外一個用于驅動本地互聯(lián)。 這三個輸出是相互獨立的辰如。輸出信號可以來自于查詢表也可以來自于寄存器普监。

本地互連通路是邏輯陣列的重要組成部分,芯片級設計思路上的考慮與節(jié)省我們就不討論琉兜,從實際運用出發(fā)凯正,直接看看這個互連通路是干什么用的。本地互連通路提供了一種邏輯陣列內(nèi)部的連接方式豌蟋, 邏輯陣列內(nèi)部還包含一種對外的高速連接通路廊散,稱之為直接連接通路。

直接連接通路連接的是相鄰的邏輯陣列梧疲,或者與邏輯陣列相鄰的M4K存儲器塊允睹、乘法器、鎖相環(huán)等幌氮。

CYCLONEⅡ系列FPGA的邏輯單元有兩種工作模式:普通模式和算數(shù)模式缭受。

普通模式適合于一般的邏輯運算。算數(shù)模式適用于實現(xiàn)加法器该互、計數(shù)器米者、累加器、比較器等慢洋。

邏輯陣列的主體是16個邏輯單元塘雳,另外還有一些邏輯陣列內(nèi)部的控制信號以及互連通路陆盘。前面所講的互聯(lián)通路和直接連接通路就是邏輯陣列中的部分普筹。

邏輯陣列還包括一些控制信號:兩個時鐘信號,兩個時鐘使能信號隘马,兩個異步復位信號太防,一個同步復位信號,一個同步加載信號。

2.內(nèi)部連接通路

在FPGA內(nèi)部存在各種連接通路蜒车,連接不同的模塊讳嘱,比如邏輯單元之間、邏輯單元與存儲器之間酿愧。FPGA內(nèi)部資源是按照行列的形式排列的沥潭,所以連接通路也分為行列的。

行連接又分為R4連接嬉挡、R24連接和直接連接钝鸽。R4連接就是連接4個邏輯陣列,或者3個邏輯陣列和1個存儲塊庞钢, 或者3個邏輯陣列和1個乘法器拔恰。簡單地說就是連接4個模塊吧。R24就是24個模塊基括。列連接是C4颜懊,C16,含義不用說了吧风皿,是連接4個模塊和16個模塊河爹。

3.時鐘資源

CYCLONEⅡ系列FPGA有關時鐘資源部分主要包括全局時鐘樹和鎖相環(huán)兩部分。

全局時鐘樹又稱全局時鐘網(wǎng)絡桐款,負責把時鐘分配到器件內(nèi)部的各個單元昌抠,控制器件內(nèi)部所有資源。鎖相環(huán)則可以完成分頻鲁僚、倍頻炊苫、移項等相關時鐘的基本操作。

全局時鐘樹是一種時鐘網(wǎng)絡結構冰沙,可以為FPGA內(nèi)部的所有資源提供時鐘信號侨艾,這些資源包括內(nèi)部的寄存器、內(nèi)部的存儲器拓挥、輸入輸出管腳寄存器等唠梨。

CYCLONEⅡ系列FPGA中每條全局時鐘樹都對應一個時鐘控制模塊,時鐘控制模塊的作用是從多個時鐘源種選擇一個連接到全局時鐘樹侥啤,進而提供給片內(nèi)的各種資源当叭。這些時鐘源包括鎖相環(huán)的輸出,專用時鐘引腳的輸入盖灸,兩用時鐘引腳的輸入或者內(nèi)部邏輯蚁鳖。

專用時鐘引腳是為時鐘輸入專門設計的引腳,在有可能的情況下應該盡量將時鐘信號連接到專用管腳上赁炎。EP2C5有8個專用時鐘引腳(CLK)醉箕,4個位于芯片左側,4個位于芯片右側。

兩用時鐘引腳(DPCLK)通常用于介入時鐘或者異步控制信號讥裤,EP2C5有8個兩用時鐘引腳放棒,芯片每一側兩個。CYCLONEⅡ系列FPGA允許對兩用時鐘引腳的輸入延時進行設置己英,是我們更好地控制時序间螟。

置于CYCLONEⅡ系列FPGA對全局時鐘樹的使用方式和限制,在此也不一一羅列開來损肛,也要注意的是寒亥,時鐘的鏈接也會受到這樣或者那樣的限制,如果在實際電路的過程中出現(xiàn)了問題荧关,自然也會在編譯過程中提示出來的溉奕,所以切記不要將所有警告都忽略掉,因為這些警告可能是程序設計中的漏洞忍啤,當某種狀態(tài)浮現(xiàn)的時候會導致程序運行的不穩(wěn)定加勤。

鎖相環(huán)在FPGA中除了分頻、倍頻操作外同波,還進場用于內(nèi)部時鐘和外部時鐘保持沿同步鳄梅,提供需要的外部時鐘輸出等。EP2C5包含兩個鎖相環(huán)(PLL1,PLL2)未檩。

鎖相環(huán)支持單端時鐘輸入和差分時鐘輸入查吊。 當采用單端時鐘輸入的時候CLK0~3作為時鐘源提供給鎖相環(huán)氏豌,當采用差分時鐘輸入的時候逢渔,CLK0递雀、CLK1提供給PLL1,CLK2悲雳、CLK3提供給PLL2挎峦。只有專用的時鐘輸入引腳的時鐘信號才能驅動鎖相環(huán)。

鎖相環(huán)最主要的目的是產(chǎn)生一個和外部輸入始終保持同步的時鐘信號合瓢,包括頻率同步和相位同步坦胶。將鎖相環(huán)的特性和功能總結一下有:分頻倍頻、相移晴楔、設置占空比顿苇、片內(nèi)外時鐘輸出、時鐘切換税弃、鎖定指示纪岁、反饋模式、控制信號钙皮。

鎖相環(huán)結構里有PFD蜂科,相頻鑒別器(Phase Frequency Detector, PFD)顽决。什么是PFD呢短条,其作用是比較反饋時鐘信號同參考時鐘信號的相位關系导匣,然后給出控制信號用于調(diào)節(jié)壓控振蕩器的產(chǎn)生的時鐘頻率。鎖相環(huán)結構里還有兩個預分頻器和三個后分頻器(又稱后比例計數(shù)器)茸时。

鎖定檢測部分用于檢測當前鎖相環(huán)的狀態(tài)贡定,當參考時鐘和反饋回來的時鐘子信號同步的時候,鎖相環(huán)進入鎖定狀態(tài)可都。

完成反饋是鎖相環(huán)最核心部分缓待,CYCLONEⅡ系列FPGA的鎖相環(huán)有三種反饋模式。

普通模式:將全局時鐘樹的時鐘信號反饋給相頻鑒別器渠牲,從而保證內(nèi)部寄存器的輸入時鐘與外部輸入始終保持相位同步旋炒。

零延時模式:鎖相環(huán)將專用的外部輸出時鐘引腳的輸出時鐘反饋給相頻鑒別器,從而保證輸出時鐘引腳上的時鐘信號和輸入引腳上的時鐘是沿對齊的签杈。

無補償模式:鎖相環(huán)竟不會對全局時鐘樹作補償瘫镇,也不對外部時鐘輸出引腳作補償。這樣做的好處是可以簡化反饋電路答姥,改善時鐘性能铣除。

4.內(nèi)部存儲器

CYCLONEⅡ系列FPGA的內(nèi)部存儲器是以M4K存儲器塊的形式存在的,每一個存儲器塊的大小為4608bit鹦付。M4K塊包括輸入/輸出寄存器尚粘,作用相信大家都知道。還擁有本地互聯(lián)通路敲长,作用前面講過了哦郎嫁。

好的。直接來看端口吧祈噪,從端口看作用行剂,了解怎樣去控制。

clock——輸入——時鐘信號

clock_en——輸入——時鐘使能信號

aclr——輸入——異步復位信號

renwe——輸入——讀寫使能信號

byteena——輸入——字節(jié)使能信號

addressstall——輸入——地址鎖存信號

address——輸入——地址

datain——輸入——數(shù)據(jù)輸入

dataout——輸出——數(shù)據(jù)輸出

看了這些端口以及端口說明钳降,相信作用就不言而喻了吧厚宰,換而言之,當我們想使用內(nèi)部存儲模塊的時候遂填,控制好這些端口的數(shù)據(jù)流就能夠使用好這部分的資源了铲觉,當然存儲器的使用離不開時序的控制,如果沒有得到自己想要的結果吓坚,極有可能是時序控制部分出了問題撵幽。

CYCLONEⅡ系列FPGA中的M4K存儲器可以被配置成以下模式:

單口模式:存儲器不能同時進行讀寫操作。

簡單雙口模式:支持同時對存儲器進行讀寫操作礁击,讀端口和寫端口可以位寬不同盐杂,如果對同一地址進行讀寫逗载,則輸出端數(shù)據(jù)為改地址更新前的數(shù)據(jù)。

完全雙口模式:兩個端口可以任意組合链烈,同時為寫端口厉斟,同時為讀端口,或者一個為寫端口一個為讀端口强衡。存儲器位寬不能為32或36擦秽。潛在威脅,如果兩端口同時向一個地址寫入數(shù)據(jù)的時候漩勤,會導致該地址中的數(shù)據(jù)出現(xiàn)不可預知的狀況感挥。

移位寄存器模式:節(jié)約用邏輯單元中構建寄存器而消耗。利用時鐘下降沿寫入數(shù)據(jù)越败,時鐘上升沿讀出數(shù)據(jù)触幼,配置好該模式后是自動完成的哦。

只讀存儲器模式:存儲器的內(nèi)容通過存儲器初始化文件(.mif)指定究飞。

FIFO模式:用于數(shù)據(jù)的緩沖置谦、多路數(shù)據(jù)的對齊、變換時鐘域等噪猾。

5.乘法器

在數(shù)字信號處理運算中霉祸,主要包括濾波、快速傅里葉變換袱蜡、離散余弦變換等丝蹭。在寫運算常常會涉及到大量的乘法運算,所以在FPGA中設計了嵌入的乘法器坪蚁,專門用在這方面的信號處理奔穿。如果使用邏輯單元來搭建乘法器,會消耗不少邏輯單元并且會抑制運算速度的提高敏晤。

嵌入的乘法器包含有可選的輸入/輸出寄存器贱田。寄存器的使用會提高電路性能但是會產(chǎn)生延時。乘法模塊還包括兩個控制信號嘴脾,signa和signb來控制乘數(shù)A和乘數(shù)B是否有符號男摧。另外一個乘法器還可以拆開成兩個并行的乘法器,例如EP2C5有1個18bit*18bit的乘法器译打,可以作為兩個9bit*9bit的乘法器使用耗拓,但是需要注意的是,符號控制信號就一對奏司,所以要求兩個乘法器在相同位置的數(shù)據(jù)輸入必須同時為符號數(shù)或者無符號數(shù)乔询。

6.輸入/輸出引腳

在學習這一節(jié)之前我一直很迷惑,為什么FPGA會分成多個bank,每一個bank之間好像是獨立的又好像有聯(lián)系韵洋「偷螅看書之后才明白每一組bank都有單獨的供電電源黄锤,所以我們在使用的時候可以根據(jù)要求,為不同的組提供不同的電壓食拜,從而實現(xiàn)在不同輸入/輸出組內(nèi)使用不同的輸入/輸出標準鸵熟。

在輸入/輸出引腳和FPGA內(nèi)部邏輯單元之間存在輸入/輸出單元(IOE),每個輸入輸出單元包含1個輸出緩沖和3個寄存器监婶。3個寄存器分別用于鎖存輸入數(shù)據(jù)旅赢、輸出數(shù)據(jù)齿桃、和輸出數(shù)據(jù)使能信號惑惶。

由于FPGA常常會用于做信號的匹配,所以涉及到輸入/輸出單元的知識點也不少短纵,在此也就簡單羅列一下带污。

一個輸入/輸出組可以同時支持單端標準個差分標準,只要器需要的VCCIO相同香到。

若干個輸入/輸出單元構成一個輸入/輸出模塊位于芯片的外圍鱼冀。輸入/輸出模塊可以提供兩組輸出信號,io_datain0和io_datain1悠就。輸入/輸出模塊的輸入信號由兩部分構成:一部分有行引腳時鐘或列引腳時鐘提供千绪,另一部分由邏輯陣列提供。

一個輸入/輸出單元有8個輸入信號梗脾,這些信號從邏輯陣列以及行引腳時鐘傳送來的信號中產(chǎn)生荸型。輸入/輸出單元中的3個寄存器被分為兩組,數(shù)據(jù)輸入寄存器為一組炸茧,數(shù)據(jù)輸出寄存器和輸出使能寄存器為另一組瑞妇,有各自的時鐘和時鐘使能信號。

輸入/輸出單元中的輸出緩沖支持調(diào)節(jié)引腳的驅動電流梭冠≡可設置輸出緩沖的電壓轉換速度。輸出緩沖可設置為開漏輸出模式控漠。輸入輸出單元包含總線保持電路蔓倍。包含一個可選的上拉電阻。

CYCLONEⅡ系列FPGA還有片內(nèi)終端串接電阻盐捷,可以用來匹配傳輸線的特性阻抗偶翅。終端電阻的使用可以防止傳輸線上的信號反射,保持信號的完整性毙驯。在使用片內(nèi)的終端串接電阻的時候倒堕,不能設置輸入輸出引腳的驅動電流。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爆价,一起剝皮案震驚了整個濱河市垦巴,隨后出現(xiàn)的幾起案子媳搪,更是在濱河造成了極大的恐慌,老刑警劉巖骤宣,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秦爆,死亡現(xiàn)場離奇詭異,居然都是意外死亡憔披,警方通過查閱死者的電腦和手機等限,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芬膝,“玉大人望门,你說我怎么就攤上這事∶趟” “怎么了筹误?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長癣缅。 經(jīng)常有香客問我厨剪,道長,這世上最難降的妖魔是什么友存? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任祷膳,我火速辦了婚禮,結果婚禮上屡立,老公的妹妹穿的比我還像新娘直晨。我一直安慰自己,他們只是感情好侠驯,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布抡秆。 她就那樣靜靜地躺著,像睡著了一般吟策。 火紅的嫁衣襯著肌膚如雪儒士。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天檩坚,我揣著相機與錄音着撩,去河邊找鬼。 笑死匾委,一個胖子當著我的面吹牛拖叙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赂乐,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼薯鳍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了挨措?” 一聲冷哼從身側響起挖滤,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤崩溪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后斩松,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伶唯,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年惧盹,在試婚紗的時候發(fā)現(xiàn)自己被綠了乳幸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡钧椰,死狀恐怖粹断,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情演侯,我是刑警寧澤姿染,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布背亥,位于F島的核電站秒际,受9級特大地震影響,放射性物質發(fā)生泄漏狡汉。R本人自食惡果不足惜娄徊,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盾戴。 院中可真熱鬧寄锐,春花似錦、人聲如沸尖啡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衅斩。三九已至盆顾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間畏梆,已是汗流浹背您宪。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奠涌,地道東北人宪巨。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像溜畅,于是被迫代替她去往敵國和親捏卓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容