彈性緩沖器模塊及傳輸接口的彈性緩沖方法
【專利摘要】一種彈性緩沖器模塊,包括一存儲(chǔ)器單元、一寫入控制模塊以及一讀取控制模塊。存儲(chǔ)器單元用以接收、儲(chǔ)存并輸出來自傳輸側(cè)的一數(shù)據(jù)序列。寫入控制模塊用以移除數(shù)據(jù)序列中至少部分的輔助數(shù)據(jù),并且將移除輔助數(shù)據(jù)后的數(shù)據(jù)序列寫入至存儲(chǔ)器單元。讀取控制模塊用以讀取存儲(chǔ)器單元所儲(chǔ)存的數(shù)據(jù)序列,并且添加輔助數(shù)據(jù)至數(shù)據(jù)序列來調(diào)整傳輸側(cè)的寫入狀態(tài)與接收側(cè)的讀取狀態(tài)。另外,一種傳輸接口的彈性緩沖方法亦被提出。
【專利說明】彈性緩沖器模塊及傳輸接口的彈性緩沖方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明是有關(guān)于一種緩沖器模塊及數(shù)據(jù)緩沖方法,且特別是有關(guān)于一種傳輸接口的彈性緩沖器模塊及其數(shù)據(jù)緩沖方法。
【背景技術(shù)】
[0002]高速傳輸接口已廣泛應(yīng)用在計(jì)算機(jī)或高效能芯片間的傳輸,例如高速外圍零件連接接口 (Peripheral Component Interconnect Express, PCI Express)、通用序列總線
3.0 (Universal Serial Bus3.0,USB 3.0)等。此等高速傳輸接口通常是由兩對(duì)低壓的差動(dòng)對(duì)(differential pair)所組成,其一用于傳輸,另一則用于接收。通??拷幚砥鞯亩它c(diǎn),稱作上游端口(upstream port, UP),遠(yuǎn)離處理器的端點(diǎn),稱為下游端口(downstreamport,DP)。上游端口的傳輸端連接下游端口的接收端;上游端口的接收端連接下游端口的傳輸端。
[0003]為了提高傳統(tǒng)并列(parallel)接口的傳輸速度,高速傳輸接口一般會(huì)采用低壓的差動(dòng)傳輸,利用差動(dòng)特性消弭噪聲干擾,并且降低電壓而提高傳輸速度,以達(dá)到每秒千兆位(gigabyte per second,Gbps)的速度等級(jí)。此外,高速傳輸接口通常具備一邏輯電路來將高速傳輸接口的模擬信號(hào)轉(zhuǎn)成其它層級(jí)(layer)協(xié)議的接口電路。其中,接收端的邏輯電路需處理接收端與另一端口的傳輸端間的時(shí)序不同步的問題。時(shí)序不同步造成的原因,除了 UP與RX不同電路系統(tǒng)外,還有擴(kuò)頻控制(spread spectrum clocking, SSC)與缺乏共享時(shí)鐘。規(guī)格上,通常定義一補(bǔ)償符號(hào)(symbol)來作為輔助數(shù)據(jù),以提供速度調(diào)整的彈性,此輔助數(shù)據(jù)通常不具備數(shù)據(jù)消息。功能上,當(dāng)接收端的速度慢于傳輸端,以致于接收端來不及處理傳輸端的數(shù)據(jù)時(shí),接收端電路便將輔助數(shù)據(jù)直接由原本的數(shù)據(jù)序列移除,以避免溢位(overflow)。反之,當(dāng)接收端的速度快于傳輸端,傳輸端來不及提供接收端數(shù)據(jù)時(shí),接收端電路便在原本數(shù)據(jù)序列中,增加輔助數(shù)據(jù),以避免欠位(underflow)。
[0004]在已知技術(shù)中,一般解決數(shù)據(jù)序列速度差異的方法,通常會(huì)設(shè)計(jì)一個(gè)彈性緩沖器,并在此彈性緩沖器上,增加緩沖管理電路,以避免欠位和溢位的情形發(fā)生。然而,已知的數(shù)據(jù)緩沖方法通常需要較大的緩沖空間,并且可容忍的傳輸端與接收端的速度差較小。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種彈性緩沖器模塊,其以較小的緩沖空間即可達(dá)到數(shù)據(jù)緩沖的目的,并且可容忍的傳輸端與接收端的速度差較大。
[0006]本發(fā)明提供一種傳輸接口的彈性緩沖方法,其以較小的緩沖空間即可達(dá)到數(shù)據(jù)緩沖的目的,并且可容忍的傳輸端與接收端的速度差較大。
[0007]本發(fā)明提供一種彈性緩沖器模塊,包括一存儲(chǔ)器單元、一寫入控制模塊以及一讀取控制模塊。存儲(chǔ)器單元配置于一傳輸側(cè)與一接收側(cè)之間,用以接收、儲(chǔ)存并輸出來自傳輸側(cè)的一數(shù)據(jù)序列。寫入控制模塊配置于傳輸側(cè),用以移除數(shù)據(jù)序列中至少部分的輔助數(shù)據(jù),并且將移除輔助數(shù)據(jù)后的數(shù)據(jù)序列寫入至存儲(chǔ)器單元。讀取控制模塊配置于接收側(cè),用以讀取存儲(chǔ)器單元所儲(chǔ)存的數(shù)據(jù)序列,并且添加輔助數(shù)據(jù)至數(shù)據(jù)序列來調(diào)整傳輸側(cè)的一寫入狀態(tài)與接收側(cè)的一讀取狀態(tài)。
[0008]在本發(fā)明的一實(shí)施例中,上述的彈性緩沖器模塊還包括一狀態(tài)檢查單元。狀態(tài)檢查單元用以檢查存儲(chǔ)器單元的一運(yùn)作狀態(tài)。并且,狀態(tài)檢查單元將運(yùn)作狀態(tài)的檢查結(jié)果輸出至讀取控制模塊。讀取控制模塊根據(jù)檢查結(jié)果來添加輔助數(shù)據(jù)至數(shù)據(jù)序列。
[0009]在本發(fā)明的一實(shí)施例中,上述的狀態(tài)檢查單元將檢查結(jié)果輸出至寫入控制模塊。寫入控制模塊根據(jù)檢查結(jié)果來移除數(shù)據(jù)序列中的輔助數(shù)據(jù)。
[0010]在本發(fā)明的一實(shí)施例中,上述的狀態(tài)檢查單元是根據(jù)傳輸側(cè)的一寫入狀態(tài)與接收側(cè)的一讀取狀態(tài)來檢查存儲(chǔ)器單元的運(yùn)作狀態(tài)。
[0011]在本發(fā)明的一實(shí)施例中,上述的寫入控制模塊包括一寫入指針產(chǎn)生單元以及一寫入控制單元。寫入指針產(chǎn)生單元用以產(chǎn)生一寫入指針。寫入指針指示數(shù)據(jù)序列寫入至存儲(chǔ)器單元的地址。寫入控制單元用以接收數(shù)據(jù)序列,移除數(shù)據(jù)序列中的輔助數(shù)據(jù),并且根據(jù)寫入指針來將移除輔助數(shù)據(jù)后的數(shù)據(jù)序列寫入至存儲(chǔ)器單元。
[0012]在本發(fā)明的一實(shí)施例中,上述的讀取控制模塊包括一讀取指針產(chǎn)生單元以及一讀取控制單元。讀取指針產(chǎn)生單元用以產(chǎn)生一讀取指針。讀取指針指示數(shù)據(jù)序列儲(chǔ)存在存儲(chǔ)器單元的地址。讀取控制單元用以根據(jù)讀取指針來讀取存儲(chǔ)器單元所儲(chǔ)存的數(shù)據(jù)序列,并且添加輔助數(shù)據(jù)至數(shù)據(jù)序列。
[0013]在本發(fā)明的一實(shí)施例中,上述的彈性緩沖器模塊還包括一輔助判斷單元。輔助判斷單元用以記錄被移除的輔助數(shù)據(jù)的一第一信息以及被添加的輔助數(shù)據(jù)的一第二信息。并且,輔助判斷單元根據(jù)第一信息及第二信息來判斷讀取控制模塊所輸出的數(shù)據(jù)序列的輔助數(shù)據(jù)的整體是被添加還是被移除,并且將一判斷結(jié)果輸出至配置于接收側(cè)的一控制器。
[0014]在本發(fā)明的一實(shí)施例中,上述的輔助判斷單元包括一第一計(jì)數(shù)單元、一第二計(jì)數(shù)單元以及一補(bǔ)償檢查單元。第一計(jì)數(shù)單元電性連接至寫入控制模塊,用以計(jì)數(shù)被移除的輔助數(shù)據(jù)的一第一數(shù)量。第二計(jì)數(shù)單元電性連接至讀取控制模塊,用以計(jì)數(shù)被添加的輔助數(shù)據(jù)的一第二數(shù)量。補(bǔ)償檢查單元用以根據(jù)第一數(shù)量及第二數(shù)量來判斷讀取控制模塊所輸出的數(shù)據(jù)序列的輔助數(shù)據(jù)的整體是被添加還是被移除,并且將判斷結(jié)果輸出至配置于接收側(cè)的控制器。
[0015]在本發(fā)明的一實(shí)施例中,上述的輔助數(shù)據(jù)是一傳輸接口標(biāo)準(zhǔn)所定義的跳躍順序組(skip ordered set)中的跳躍符號(hào)(skip symbol)。
[0016]在本發(fā)明的一實(shí)施例中,上述的傳輸接口標(biāo)準(zhǔn)是序列先進(jìn)附件(Serial AdvancedTechnology Attachment, SATA)標(biāo)準(zhǔn)、高速外圍零件連接接口(Peripheral ComponentInterconnect Express, PCI Express)標(biāo)準(zhǔn)或通用序列總線 3.0 (Universal Serial Bus3.0,USB 3.0)標(biāo)準(zhǔn)。
[0017]在本發(fā)明的一實(shí)施例中,上述的存儲(chǔ)器單元在寫入狀態(tài)與讀取狀態(tài)的操作下維持在一非溢位狀態(tài)。
[0018]在本發(fā)明的一實(shí)施例中,上述的讀取控制模塊通過添加輔助數(shù)據(jù)至數(shù)據(jù)序列來調(diào)整該傳輸側(cè)的一寫入速度與接收側(cè)的一讀取速度的差值在一容許范圍內(nèi)。
[0019]本發(fā)明提供一種傳輸接口的彈性緩沖方法。此傳輸接口用以將一數(shù)據(jù)序列從一傳輸側(cè)傳遞至一接收側(cè)。彈性緩沖方法包括如下步驟。接收來自傳輸側(cè)的數(shù)據(jù)序列。移除數(shù)據(jù)序列中至少部分的輔助數(shù)據(jù),并且將移除輔助數(shù)據(jù)后的數(shù)據(jù)序列寫入至一存儲(chǔ)器單元。讀取存儲(chǔ)器單元所儲(chǔ)存的數(shù)據(jù)序列。添加輔助數(shù)據(jù)至數(shù)據(jù)序列。
[0020]在本發(fā)明的一實(shí)施例中,上述的彈性緩沖方法還包括根據(jù)傳輸側(cè)的一寫入狀態(tài)與接收側(cè)的一讀取狀態(tài)來檢查存儲(chǔ)器單元的一運(yùn)作狀態(tài)。
[0021]在本發(fā)明的一實(shí)施例中,上述的移除數(shù)據(jù)序列中的輔助數(shù)據(jù)的步驟是根據(jù)檢查結(jié)果來移除數(shù)據(jù)序列中的輔助數(shù)據(jù)。
[0022]在本發(fā)明的一實(shí)施例中,上述的添加輔助數(shù)據(jù)至數(shù)據(jù)序列的步驟是根據(jù)檢查結(jié)果來添加輔助數(shù)據(jù)至數(shù)據(jù)序列。
[0023]在本發(fā)明的一實(shí)施例中,上述的將移除輔助數(shù)據(jù)后的數(shù)據(jù)序列寫入至存儲(chǔ)器單元的步驟包括如下步驟。產(chǎn)生一寫入指針。根據(jù)寫入指針來將移除輔助數(shù)據(jù)后的數(shù)據(jù)序列寫入至存儲(chǔ)器單元。寫入指針指示數(shù)據(jù)序列寫入至存儲(chǔ)器單元的地址。
[0024]在本發(fā)明的一實(shí)施例中,上述的讀取存儲(chǔ)器單元所儲(chǔ)存的數(shù)據(jù)序列的步驟包括如下步驟。產(chǎn)生一讀取指針。根據(jù)讀取指針來讀取存儲(chǔ)器單元所儲(chǔ)存的數(shù)據(jù)序列。讀取指針指示數(shù)據(jù)序列儲(chǔ)存在存儲(chǔ)器單元的地址。
[0025]在本發(fā)明的一實(shí)施例中,上述的彈性緩沖方法還包括如下步驟。記錄被移除的輔助數(shù)據(jù)的一第一信息以及被添加的輔助數(shù)據(jù)的一第二信息。根據(jù)第一信息及第二信息來判斷讀取控制模塊所輸出的數(shù)據(jù)序列的輔助數(shù)據(jù)的整體是被添加還是被移除。將一判斷結(jié)果輸出至配置于接收側(cè)的一控制器。
[0026]在本發(fā)明的一實(shí)施例中,上述的記錄第一信息以及第二信息的步驟包括如下步驟。計(jì)數(shù)被移除的輔助數(shù)據(jù)的一第一數(shù)量。計(jì)數(shù)被添加的輔助數(shù)據(jù)的一第二數(shù)量。
[0027]在本發(fā)明的一實(shí)施例中,上述的判斷數(shù)據(jù)序列的輔助數(shù)據(jù)的整體是被添加還是被移除的步驟包括根據(jù)第一數(shù)量及第二數(shù)量來判斷讀取控制模塊所輸出的數(shù)據(jù)序列的輔助數(shù)據(jù)的整體是被添加還是被移除。
[0028]在本發(fā)明的一實(shí)施例中,上述的添加輔助數(shù)據(jù)至數(shù)據(jù)序列的步驟包括添加輔助數(shù)據(jù)至數(shù)據(jù)序列來調(diào)整傳輸側(cè)的一寫入速度與接收側(cè)的一讀取速度的差值在一容許范圍內(nèi)。
[0029]基于上述,在本發(fā)明的范例實(shí)施例中,彈性緩沖器模塊在數(shù)據(jù)寫入至存儲(chǔ)器單元前即移除數(shù)據(jù)序列中的部分輔助數(shù)據(jù),因此存儲(chǔ)器單元以較小的緩沖空間即可達(dá)到數(shù)據(jù)緩沖的目的,并且可容忍的傳輸端與接收端的速度差較大。
[0030]為讓本發(fā)明的上述特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉實(shí)施例,并配合所附圖式作詳細(xì)說明如下。
【專利附圖】
【附圖說明】
[0031]圖1繪示本發(fā)明一相關(guān)技術(shù)的彈性緩沖器模塊100的概要示意圖。
[0032]圖2繪示本發(fā)明一實(shí)施例的彈性緩沖器模塊200的概要示意圖。
[0033]圖3繪示本發(fā)明另一實(shí)施例的彈性緩沖器模塊300的概要示意圖。
[0034]圖4繪示圖3實(shí)施例的彈性緩沖器模塊300的概要示意圖。
[0035]圖5繪示本發(fā)明一實(shí)施例的傳輸接口的彈性緩沖方法的步驟流程圖。
[0036]圖6繪示本發(fā)明另一實(shí)施例的傳輸接口的彈性緩沖方法的步驟流程圖。
[0037][主要元件標(biāo)號(hào)說明][0038]100、200、300:彈性緩沖器模塊110:補(bǔ)償符號(hào)調(diào)整單元
[0039]120:彈性緩沖器130、240、340:狀態(tài)檢查單元
[0040]210,310:存儲(chǔ)器單元220、320:寫入控制模塊[0041]230、330:讀取控制模塊322:寫入控制單元
[0042]324:寫入指針產(chǎn)生單元332:讀取控制單元
[0043]334:讀取指針產(chǎn)生單元350:輔助判斷單元
[0044]352:第一計(jì)數(shù)單元354:第二計(jì)數(shù)單元
[0045]356:補(bǔ)償檢查單元RX:接收側(cè)
[0046]TX:傳輸側(cè)AP_W:寫入地址
[0047]D_W:寫入數(shù)據(jù)
[0048]D_W’:移除部分補(bǔ)償符號(hào)后的數(shù)據(jù)序列
[0049]AP_R:讀取地址D_R:讀取數(shù)據(jù)
[0050]S500、S510、S520、S530、S600、S610、S620、S630、S640、S650、S660、S670:傳輸接
口的彈性緩沖方法的步驟
【具體實(shí)施方式】
[0051]圖1繪示本發(fā)明一相關(guān)技術(shù)的彈性緩沖器模塊100的概要示意圖。請(qǐng)參考圖1,在此例中,一個(gè)輔助數(shù)據(jù)調(diào)整單元Iio置于彈性緩沖器120的寫入端,用以根據(jù)寫入地址AP_W將寫入數(shù)據(jù)D_W依序?qū)懭肫渚彌_區(qū)。另一方面,彈性緩沖器模塊100還包括一個(gè)狀態(tài)檢查單元130,其用以監(jiān)控傳輸側(cè)TX的數(shù)據(jù)寫入狀態(tài)與接收側(cè)RX的數(shù)據(jù)讀取狀態(tài),并且據(jù)此判斷彈性緩沖器120的運(yùn)作狀態(tài)目前是處于接近欠位狀態(tài)或溢位狀態(tài)。此處狀態(tài)檢查單元130所監(jiān)控的狀態(tài)例如是傳輸側(cè)TX的數(shù)據(jù)寫入速度與接收側(cè)RX的數(shù)據(jù)讀取速度。通常,輔助數(shù)據(jù)調(diào)整單元110會(huì)根據(jù)狀態(tài)檢查單元130的判斷結(jié)果,實(shí)時(shí)地移除多余的輔助數(shù)據(jù)或添加輔助數(shù)據(jù),以維持傳輸側(cè)TX的數(shù)據(jù)寫入速度與接收側(cè)RX的數(shù)據(jù)讀取速度在一安全值內(nèi)。如圖1所示,在緩沖區(qū)中,兩數(shù)據(jù)S1、S2之間包括了多個(gè)輔助數(shù)據(jù)CS-1至CS-N。然而,此作法能容忍的傳輸側(cè)TX與接收側(cè)RX的速度差較小,而且所需的緩沖區(qū)空間較大。另外,在此例中,輔助數(shù)據(jù)調(diào)整單元110也可以置于緩沖區(qū)的讀出端。
[0052]圖2繪示本發(fā)明一實(shí)施例的彈性緩沖器模塊200的概要示意圖。請(qǐng)參考圖2,本實(shí)施例的彈性緩沖器模塊200包括一存儲(chǔ)器單元210、一寫入控制模塊220、一讀取控制模塊230以及一狀態(tài)檢查單元240。在本實(shí)施例中,彈性緩沖器模塊200至少適用于一存儲(chǔ)器儲(chǔ)存裝置的連接器(未繪示),以作為傳輸數(shù)據(jù)的彈性緩沖之用。此存儲(chǔ)器儲(chǔ)存裝置的連接器是兼容于序列先進(jìn)附件(Serial Advanced Technology Attachment, SATA)標(biāo)準(zhǔn)。然而,必須了解的是,本發(fā)明不限于此,連接器亦可以是符合電氣和電子工程師協(xié)會(huì)(Institute of Electrical and Electronic Engineers, IEEE) 1394標(biāo)準(zhǔn)、高速外圍零件連接接口 (Peripheral Component Interconnect Express, PCI Express)標(biāo)準(zhǔn)、通用序列總線(Universal Serial Bus, USB)標(biāo)準(zhǔn)、安全數(shù)字(Secure Digital, SD)接口標(biāo)準(zhǔn)、存儲(chǔ)棒(Memory Stick,MS)接口標(biāo)準(zhǔn)、多媒體儲(chǔ)存卡(Multi Media Card,MMC)接口標(biāo)準(zhǔn)、小型快閃(Compact Flash, CF)接口標(biāo)準(zhǔn)、集成式驅(qū)動(dòng)電子接口 (Integrated Device Electronics,IDE)標(biāo)準(zhǔn)或其它適合的標(biāo)準(zhǔn)。[0053]在本實(shí)施例中,存儲(chǔ)器單元210配置于傳輸側(cè)TX與接收側(cè)RX之間。存儲(chǔ)器單元210包括多個(gè)緩沖區(qū),用以接收、儲(chǔ)存并輸出來自傳輸側(cè)TX的數(shù)據(jù)序列D_W,以作為傳輸接口的數(shù)據(jù)緩沖之用,其【具體實(shí)施方式】包括以先進(jìn)先出(first-1n-first-out, FIFO)電路來實(shí)施之。因此,來自傳輸側(cè)TX的數(shù)據(jù)序列D_W是根據(jù)存儲(chǔ)器單元210所接收的次序依序被儲(chǔ)存在其緩沖區(qū)塊,以讓后端對(duì)應(yīng)的數(shù)據(jù)接收裝置,例如讀取控制模塊230,也根據(jù)此一次序依序讀取數(shù)據(jù)序列D_R。
[0054]在本實(shí)施例中,寫入控制模塊220配置于傳輸側(cè)TX。一般而言,本實(shí)施例的寫入控制模塊220在接收到輔助符號(hào)后即會(huì)將其移除,除非狀態(tài)檢查單元240的檢查結(jié)果為存儲(chǔ)器單元210處于一不正常狀態(tài),例如,讀寫指標(biāo)太接近時(shí),此時(shí)寫入控制模塊220會(huì)暫停移除輔助符號(hào)。上述操作的其中一種實(shí)施態(tài)樣包括寫入控制模塊220根據(jù)狀態(tài)檢查單元240所提供的信息來移除數(shù)據(jù)序列D_W中的至少部分的輔助數(shù)據(jù),并且根據(jù)寫入指針將移除輔助數(shù)據(jù)后的數(shù)據(jù)序列D_W’寫入至存儲(chǔ)器單元210的緩沖區(qū)。此處的輔助數(shù)據(jù)除了補(bǔ)償符號(hào)以外,亦可為數(shù)據(jù)序列中形式上所需要的封包數(shù)據(jù)。在此例中,寫入至緩沖區(qū)的數(shù)據(jù)序列D_W’例如包括圖1的數(shù)據(jù)S1、CS-1、S2。因此,相較于圖1的相關(guān)技術(shù),本實(shí)施例的寫入控制模塊220將原本的多個(gè)輔助數(shù)據(jù)CS-1至CS-N轉(zhuǎn)換為單一輔助數(shù)據(jù)CS-1。也就是說,寫入控制模塊220在存儲(chǔ)器單元210的寫入端將連續(xù)的輔助數(shù)據(jù)CS-1至CS-N至少部分移除或重新編輯,僅留下部分輔助數(shù)據(jù),例如單一輔助數(shù)據(jù)CS-1。惟應(yīng)注意者是,所留下的單一輔助數(shù)據(jù)在此例中是以輔助數(shù)據(jù)CS-1來例示說明,本發(fā)明并不限于此。在其它實(shí)施例中,所留下的輔助數(shù)據(jù)的數(shù)量并不限于一個(gè),并且也不限于是第一個(gè)輔助數(shù)據(jù)CS-1。根據(jù)本范例實(shí)施例所的揭露的精神,寫入控制模塊220只要移除至少一輔助數(shù)據(jù)即可減少緩沖區(qū)的空間,并不限于所移除的對(duì)象及數(shù)量。
[0055]在本實(shí)施例中,讀取控制模塊230配置于接收側(cè)RX,用以讀取存儲(chǔ)器單元230所儲(chǔ)存的數(shù)據(jù)序列D_R,并且根據(jù)狀態(tài)檢查單元240所提供的信息來添加輔助數(shù)據(jù)至數(shù)據(jù)序列D_R,其功能至少在于用以調(diào)整傳輸側(cè)TX的一寫入狀態(tài)與接收側(cè)的一讀取狀態(tài)RX。在此例中,讀取控制模塊230調(diào)整傳輸側(cè)TX的數(shù)據(jù)寫入速度與接收側(cè)RX的數(shù)據(jù)讀取速度的差值在一容許范圍內(nèi)。其中,在本范例實(shí)施例中的寫入狀態(tài),例如是指一寫入速度或?qū)懭氲刂?,而讀取狀態(tài),例如是指一讀取速度或讀取地址,但不應(yīng)以此為限。
[0056]在本實(shí)施例中,狀態(tài)檢查單元240用以根據(jù)傳輸側(cè)TX的寫入速度與接收側(cè)RX的讀取速度來檢查存儲(chǔ)器單元210是否維持在非溢位狀態(tài),亦即運(yùn)作穩(wěn)定或是在欠位狀態(tài),并且將檢查結(jié)果輸出至寫入控制模塊220及讀取控制模塊230。另外,本實(shí)施例的輔助數(shù)據(jù)例如補(bǔ)償符號(hào),其是一傳輸接口標(biāo)準(zhǔn)所定義的跳躍順序組中的跳躍符號(hào)。上述的傳輸接口標(biāo)準(zhǔn)至少包括SATA標(biāo)準(zhǔn)、PCI Express標(biāo)準(zhǔn)或USB 3.0標(biāo)準(zhǔn)。舉例而言,USB 3.0標(biāo)準(zhǔn)所定義的跳躍順序組包括兩個(gè)跳躍符號(hào),在傳送側(cè)TX每次需傳送至少一組跳躍順序組。一般而言,USB 3.0的傳輸接口的傳送側(cè)TX的跳躍順序組會(huì)在2至5組之間。也就是說,跳躍符號(hào)有4至10個(gè)。另一方面,PCI Express標(biāo)準(zhǔn)所定義跳躍順序組包括一個(gè)起始信號(hào),例如C0M,加上兩個(gè)跳躍符號(hào),在傳送端每次需傳送一組跳躍順序組。一般而言,PCI Express的傳輸接口的傳送側(cè)TX的跳躍符號(hào)有2至5個(gè)。
[0057]簡(jiǎn)單來說,本范例實(shí)施例將原本的多個(gè)輔助數(shù)據(jù)轉(zhuǎn)換為單一輔助數(shù)據(jù)。在存儲(chǔ)器單元210的寫入端,寫入控制模塊220將連續(xù)的輔助數(shù)據(jù)移除,以留下單一輔助數(shù)據(jù)。在存儲(chǔ)器單元210的讀取端,增加一讀取控制模塊230,用以調(diào)整傳送側(cè)TX與接收側(cè)RX傳輸速度的不同。由于數(shù)據(jù)進(jìn)入緩沖區(qū)前,其序列中的部分輔助數(shù)據(jù)已被移除,因此狀態(tài)檢查單元240所輸出的檢查結(jié)果是存儲(chǔ)器單元210處于欠位狀態(tài),因此在讀取端的寫入控制模塊220可動(dòng)態(tài)地增加輔助數(shù)據(jù),使得緩沖區(qū)回到安全準(zhǔn)位,亦即使得數(shù)據(jù)寫入速度與接收側(cè)RX的數(shù)據(jù)讀取速度的差值在容許范圍內(nèi)。在本范例實(shí)施例中,連續(xù)的輔助數(shù)據(jù)其呈現(xiàn)在數(shù)據(jù)序列的狀態(tài)中至少包括兩種不同的實(shí)施態(tài)樣,包括連續(xù)無間斷的輔助數(shù)據(jù),其數(shù)據(jù)序列的態(tài)樣例如是D0、CS、CS、Dl,以及一固定間隔內(nèi)的輔助數(shù)據(jù),其數(shù)據(jù)序列的態(tài)樣例如是D0、CS、D1、D2、CS、D3等。其中,CS為輔助數(shù)據(jù),DO至D3為所欲傳輸?shù)臄?shù)據(jù)。
[0058]在圖1的相關(guān)技術(shù)中,為了避免欠位或者溢位,彈性緩沖器120通常必須在安全臨界上,提供足夠數(shù)據(jù)緩沖區(qū)給傳送側(cè)TX與接收側(cè)RX以處理傳輸速度的差異。本范例實(shí)施例由于存儲(chǔ)器單元210在寫入狀態(tài)與讀取狀態(tài)的調(diào)整下可以維持在非溢位狀態(tài),因此緩沖區(qū)空間在設(shè)計(jì)時(shí)可不需考慮溢位狀態(tài)的發(fā)生,故緩沖區(qū)空間可為原本所需容量的一半。另夕卜,本范例實(shí)施例由于傳送側(cè)TX的寫入控制模塊220可將輔助數(shù)據(jù)移除,等同于將傳送側(cè)TX的寫入速度降頻,因此可容忍傳送側(cè)TX有較高的操作頻率。
[0059]在本發(fā)明的范例實(shí)施例中,彈性緩沖器模塊也可還包括一輔助判斷單元,以在數(shù)據(jù)緩沖過程中,記錄所移除的禍所添加的輔助數(shù)據(jù)的數(shù)量,以提供輔助數(shù)據(jù)的整體為增加或減少的信息。
[0060]圖3繪示本發(fā)明另一實(shí)施例的彈性緩沖器模塊300的概要示意圖。請(qǐng)參考圖2及圖3,本實(shí)施例的彈性緩沖器模塊300類似于圖2的彈性緩沖器模塊200,惟兩者之間主要的差異例如在于彈性緩沖器模塊300還包括一輔助判斷單元350,詳細(xì)說明如下。
[0061]在本實(shí)施例中,寫入控制模塊320根據(jù)狀態(tài)檢查單元340的檢查結(jié)果,例如存儲(chǔ)器單元310為欠位狀態(tài)或接近溢位狀態(tài),來移除數(shù)據(jù)序列D_W中的輔助數(shù)據(jù)。讀取控制模塊330也是根據(jù)狀態(tài)檢查單元340檢查結(jié)果來添加輔助數(shù)據(jù)至數(shù)據(jù)序列D_R。為了判斷讀取控制模塊330所輸出的數(shù)據(jù)序列D_R的輔助數(shù)據(jù)的整體相較于數(shù)據(jù)序列D_W是被添加還是被移除,輔助判斷單元350用以記錄被移除的輔助數(shù)據(jù)的數(shù)量以及被添加的輔助數(shù)據(jù)的數(shù)量,并且據(jù)此判斷輔助數(shù)據(jù)的整體是被添加還是被移除,以將一判斷結(jié)果輸出至配置于接收側(cè)的一控制器,用以提供此控制器作為錯(cuò)誤檢測(cè)的參考數(shù)據(jù)。此控制器例如是存儲(chǔ)器儲(chǔ)存裝置的存儲(chǔ)器控制器(未繪示)。
[0062]圖4繪示圖3實(shí)施例的彈性緩沖器模塊300的概要示意圖。請(qǐng)參考圖4,本實(shí)施例的寫入控制模塊320包括一寫入控制單元322以及一寫入指針產(chǎn)生單元324。寫入控制單元322用以接收數(shù)據(jù)序列D_W。此處的數(shù)據(jù)序列D_W可能包括多個(gè)輔助數(shù)據(jù)CS-1至CS-N。寫入控制單元322根據(jù)狀態(tài)檢查單元340的檢查結(jié)果來移除數(shù)據(jù)序列D_W中的部分輔助數(shù)據(jù)。接著,寫入控制單元322根據(jù)一寫入指針AP_W來將移除輔助數(shù)據(jù)后的數(shù)據(jù)序列D_W’寫入至存儲(chǔ)器單元的緩沖區(qū)。在此例中,移除輔助數(shù)據(jù)后的數(shù)據(jù)序列0_胃’例如包括S1、CS-1、S2。也就是說,寫入控制單元322將連續(xù)的多個(gè)輔助數(shù)據(jù)CS-1至CS-N移除,僅留下單一個(gè)輔助數(shù)據(jù)CS-1,以節(jié)省緩沖空間。寫入指針產(chǎn)生單元324用以產(chǎn)生寫入指針AP_W。寫入指針AP_W指示數(shù)據(jù)序列D_W’寫入至存儲(chǔ)器單元310的地址。
[0063]在本實(shí)施例中,讀取控制模塊330包括一讀取控制單元332以及一讀取指針產(chǎn)生單元334。讀取控制單元332用以根據(jù)一讀取指針AP_R來讀取存儲(chǔ)器單元310的緩沖區(qū)所儲(chǔ)存的數(shù)據(jù)序列,例如為S1、CS-1、S2,且其讀取方式遵循先進(jìn)先出規(guī)則。并且,讀取控制單元332根據(jù)狀態(tài)檢查單元340的檢查結(jié)果來添加輔助數(shù)據(jù)至數(shù)據(jù)序列D_R。讀取指針產(chǎn)生單元334用以產(chǎn)生讀取指針AP_R。讀取指針AP_R指示數(shù)據(jù)序列儲(chǔ)存在存儲(chǔ)器單元310的地址。
[0064]在本實(shí)施例中,輔助判斷單元350包括一第一計(jì)數(shù)單元352、一第二計(jì)數(shù)單元354以及一補(bǔ)償檢查單元356。第一計(jì)數(shù)單元352電性連接至寫入控制單元322,用以計(jì)數(shù)被移除的輔助數(shù)據(jù)的數(shù)量。第二計(jì)數(shù)單元354電性連接至讀取控制單元332,用以計(jì)數(shù)被添加的輔助數(shù)據(jù)的數(shù)量。補(bǔ)償檢查單元用以根據(jù)被移除的輔助數(shù)據(jù)的數(shù)量及被添加的輔助數(shù)據(jù)的數(shù)量來判斷讀取控制單元322所輸出的數(shù)據(jù)序列D_R的輔助數(shù)據(jù)的整體,相較于數(shù)據(jù)序列D_ff是被添加還是被移除,并且將判斷結(jié)果輸出至配置于接收側(cè)RX的控制器。
[0065]圖5繪示本發(fā)明一實(shí)施例的傳輸接口的彈性緩沖方法的步驟流程圖。請(qǐng)同時(shí)參照?qǐng)D2及圖5,本實(shí)施例的彈性緩沖方法例如適用于上述范例實(shí)施例所揭露的任一彈性緩沖模塊,此方法包括如下步驟。在步驟S500中,彈性緩沖器模塊200接收來自傳輸側(cè)TX的數(shù)據(jù)序列D_W。接著,在步驟S510中,彈性緩沖器模塊200移除數(shù)據(jù)序列D_W中至少部分的輔助數(shù)據(jù),并且將移除輔助數(shù)據(jù)后的數(shù)據(jù)序列0_胃’寫入至其自身的存儲(chǔ)器單元210。之后,在步驟S520中,彈性緩沖器模塊200讀取存儲(chǔ)器單元210所儲(chǔ)存的數(shù)據(jù)序列D_R。繼之,在步驟S530中,彈性緩沖器模塊200添加輔助數(shù)據(jù)至數(shù)據(jù)序列D_R來調(diào)整傳輸側(cè)TX的寫入狀態(tài)與接收側(cè)RX的讀取狀態(tài)。
[0066]圖6繪示本發(fā)明另一實(shí)施例的傳輸接口的彈性緩沖方法的步驟流程圖。請(qǐng)同時(shí)參照?qǐng)D3及圖6,本實(shí)施例的彈性緩沖方法例如適用于上述圖3實(shí)施例所揭露的彈性緩沖模塊300,此方法包括如下步驟。在步驟S600中,彈性緩沖器模塊300接收來自傳輸側(cè)TX的數(shù)據(jù)序列D_W,并且產(chǎn)生一寫入指針AP_W。接著,在步驟S610中,彈性緩沖器模塊300移除數(shù)據(jù)序列D_W中至少部分的輔助 數(shù)據(jù),并且根據(jù)寫入指針八?_胃來將移除輔助數(shù)據(jù)后的數(shù)據(jù)序列0_評(píng)’寫入至其自身的存儲(chǔ)器單元310。于此同時(shí),在步驟S620中,彈性緩沖器模塊300根據(jù)傳輸側(cè)TX的寫入狀態(tài)與接收側(cè)RX的讀取狀態(tài)來檢查存儲(chǔ)器單元310的運(yùn)作狀態(tài)是處于接近溢位狀態(tài)或欠位狀態(tài)。之后,在步驟S630中,彈性緩沖器模塊300產(chǎn)生一讀取指針AP_R,并且據(jù)此讀取存儲(chǔ)器單元310所儲(chǔ)存的數(shù)據(jù)序列D_R。繼之,在步驟S640中,彈性緩沖器模塊300添加輔助數(shù)據(jù)至數(shù)據(jù)序列D_R來調(diào)整傳輸側(cè)TX的寫入狀態(tài)與接收側(cè)RX的讀取狀態(tài)。
[0067]此外,為了獲得數(shù)據(jù)序列D_R的輔助數(shù)據(jù)的整體是被添加還是被移除的信息,本實(shí)施例的彈性緩沖方法還包括在步驟S650中,彈性緩沖器模塊300記錄被移除的輔助數(shù)據(jù)的一第一信息以及被添加的輔助數(shù)據(jù)的一第二信息。接著,在步驟S660中,彈性緩沖器模塊300根據(jù)第一信息及第二信息來判斷讀取控制模塊330所輸出的數(shù)據(jù)序列D_R的輔助數(shù)據(jù)的整體是被添加還是被移除。之后,在步驟S670中,彈性緩沖器模塊300再將判斷結(jié)果輸出至配置于接收側(cè)RX的控制器。
[0068]應(yīng)注意的是,本實(shí)施例的步驟S620及步驟S650至S670在彈性緩沖方法的操作期間是可以隨時(shí)進(jìn)行的,步驟S620及步驟S650至S670在此例中的執(zhí)行順序僅用以例示說明,并不用以限制本發(fā)明。
[0069]另外,本發(fā)明的實(shí)施例的彈性緩沖方法可以由圖2至圖4實(shí)施例的敘述中獲致足夠的教示、建議與實(shí)施說明,因此不再贅述。
[0070]綜上所述,在本發(fā)明的范例實(shí)施例中,彈性緩沖器模塊在數(shù)據(jù)寫入至存儲(chǔ)器單元前即移除數(shù)據(jù)序列中的部分輔助數(shù)據(jù),因此存儲(chǔ)器單元以較小的緩沖空間即可達(dá)到數(shù)據(jù)緩沖的目的。并且,由于傳送側(cè)的寫入控制模塊持續(xù)地將輔助數(shù)據(jù)移除,等同于將傳送側(cè)的寫入速度降頻,因此可容忍傳送側(cè)有較高的操作頻率。
[0071]雖然本發(fā)明已以實(shí)施例揭露如上,然其并非用以限定本發(fā)明,任何所屬【技術(shù)領(lǐng)域】中具有通常知識(shí)者,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可作些許的更動(dòng)與潤(rùn)飾,故本發(fā)明的保護(hù)范圍當(dāng)視所附的權(quán)利要求范圍所界定者為準(zhǔn)。
【權(quán)利要求】
1.一種彈性緩沖器模塊,包括: 一存儲(chǔ)器單元,配置于一傳輸側(cè)與一接收側(cè)之間,用以接收、儲(chǔ)存并輸出來自該傳輸側(cè)的一數(shù)據(jù)序列; 一寫入控制模塊,配置于該傳輸側(cè),用以移除該數(shù)據(jù)序列中至少部分的輔助數(shù)據(jù),并且將移除輔助數(shù)據(jù)后的該數(shù)據(jù)序列寫入至該存儲(chǔ)器單元;以及 一讀取控制模塊,配置于該接收側(cè),用以讀取該存儲(chǔ)器單元所儲(chǔ)存的該數(shù)據(jù)序列,并且添加輔助數(shù)據(jù)至該數(shù)據(jù)序列。
2.根據(jù)權(quán)利要求1所述的彈性緩沖器模塊,還包括: 一狀態(tài)檢查單元,用以檢查該存儲(chǔ)器單元的一運(yùn)作狀態(tài),并且該狀態(tài)檢查單元將該運(yùn)作狀態(tài)的檢查結(jié)果輸出至該讀取控制模塊,該讀取控制模塊根據(jù)該檢查結(jié)果來添加輔助數(shù)據(jù)至該數(shù)據(jù)序列。
3.根據(jù)權(quán)利要求2所述的彈性緩沖器模塊,其中該狀態(tài)檢查單元將該檢查結(jié)果輸出至該寫入控制模塊,該寫入控制模塊根據(jù)該檢查結(jié)果來移除該數(shù)據(jù)序列中的輔助數(shù)據(jù)。
4.根據(jù)權(quán)利要求2所述的彈性緩沖器模塊,其中該狀態(tài)檢查單元是根據(jù)該傳輸側(cè)的一寫入狀態(tài)與該接收側(cè)的一讀取狀態(tài)來檢查該存儲(chǔ)器單元的該運(yùn)作狀態(tài)。
5.根據(jù)權(quán)利要求1所述的彈性緩沖器模塊,其中該寫入控制模塊包括: 一寫入指針產(chǎn)生單元,用以產(chǎn)生一寫入指針,其中該寫入指針指示該數(shù)據(jù)序列寫入至該存儲(chǔ)器單元的地址;以及 一寫入控制單元,用以接收該數(shù)據(jù)序列,移除該數(shù)據(jù)序列中的輔助數(shù)據(jù),并且根據(jù)該寫入指針來將移除輔助數(shù)據(jù)后的該數(shù)據(jù)序列寫入至該存儲(chǔ)器單元。
6.根據(jù)權(quán)利要求1所述的彈性緩沖器模塊,其中該讀取控制模塊包括: 一讀取指針產(chǎn)生單元,用以產(chǎn)生一讀取指針,其中該讀取指針指示該數(shù)據(jù)序列儲(chǔ)存在該存儲(chǔ)器單元的地址;以及 一讀取控制單元,用以根據(jù)該讀取指針來讀取該存儲(chǔ)器單元所儲(chǔ)存的該數(shù)據(jù)序列,并且添加輔助數(shù)據(jù)至該數(shù)據(jù)序列。
7.根據(jù)權(quán)利要求1所述的彈性緩沖器模塊,還包括: 一輔助判斷單元,用以記錄被移除的輔助數(shù)據(jù)的一第一信息以及被添加的輔助數(shù)據(jù)的一第二信息,并且根據(jù)該第一信息及該第二信息來判斷該讀取控制模塊所輸出的該數(shù)據(jù)序列的輔助數(shù)據(jù)的整體是被添加還是被移除,并且將一判斷結(jié)果輸出至配置于該接收側(cè)的一控制器。
8.根據(jù)權(quán)利要求7所述的彈性緩沖器模塊,其中該輔助判斷單元包括: 一第一計(jì)數(shù)單元,電性連接至該寫入控制模塊,用以計(jì)數(shù)被移除的輔助數(shù)據(jù)的一第一數(shù)量; 一第二計(jì)數(shù)單元,電性連接至該讀取控制模塊,用以計(jì)數(shù)被添加的輔助數(shù)據(jù)的一第二數(shù)量;以及 一補(bǔ)償檢查單元,用以根據(jù)該第一數(shù)量及該第二數(shù)量來判斷該讀取控制模塊所輸出的該數(shù)據(jù)序列的輔助數(shù)據(jù)的整體是被添加還是被移除,并且將該判斷結(jié)果輸出至配置于該接收側(cè)的該控制器。
9.根據(jù)權(quán)利要求1所述的彈性緩沖器模塊,其中輔助數(shù)據(jù)為一傳輸接口標(biāo)準(zhǔn)所定義的跳躍順序組中的跳躍符號(hào)。
10.根據(jù)權(quán)利要求9所述的彈性緩沖器模塊,其中該傳輸接口標(biāo)準(zhǔn)為序列先進(jìn)附件標(biāo)準(zhǔn)、高速外圍零件連接接口標(biāo)準(zhǔn)或通用序列總線3.0標(biāo)準(zhǔn)。
11.根據(jù)權(quán)利要求1所述的彈性緩沖器模塊,其中該存儲(chǔ)器單元維持在一非溢位狀態(tài)。
12.根據(jù)權(quán)利要求1所述的彈性緩沖器模塊,其中該讀取控制模塊通過添加輔助數(shù)據(jù)至該數(shù)據(jù)序列來調(diào)整該傳輸側(cè)的一寫入速度與該接收側(cè)的一讀取速度的差值在一容許范圍內(nèi)。
13.一種傳輸接口的彈性緩沖方法,該傳輸接口用以將一數(shù)據(jù)序列從一傳輸側(cè)傳遞至一接收側(cè),該彈性緩沖方法包括: 接收來自該傳輸側(cè)的該數(shù)據(jù)序列; 移除該數(shù)據(jù)序列中至少部分的輔助數(shù)據(jù),并且將移除輔助數(shù)據(jù)后的該數(shù)據(jù)序列寫入至一存儲(chǔ)器單元; 讀取該存儲(chǔ)器單元所儲(chǔ)存的該數(shù)據(jù)序列;以及 添加輔助數(shù)據(jù)至該數(shù)據(jù)序列。
14.根據(jù)權(quán)利要求13所述的彈性緩沖方法,還包括: 根據(jù)該傳輸側(cè)的一寫入 狀態(tài)與該接收側(cè)的一讀取狀態(tài)來檢查該存儲(chǔ)器單元的一運(yùn)作狀態(tài)。
15.根據(jù)權(quán)利要求14所述的彈性緩沖方法,其中移除該數(shù)據(jù)序列中的輔助數(shù)據(jù)的步驟是根據(jù)該檢查結(jié)果來移除該數(shù)據(jù)序列中的輔助數(shù)據(jù)。
16.根據(jù)權(quán)利要求14所述的彈性緩沖方法,其中添加輔助數(shù)據(jù)至該數(shù)據(jù)序列的步驟是根據(jù)該檢查結(jié)果來添加輔助數(shù)據(jù)至該數(shù)據(jù)序列。
17.根據(jù)權(quán)利要求13所述的彈性緩沖方法,其中將移除輔助數(shù)據(jù)后的該數(shù)據(jù)序列寫入至該存儲(chǔ)器單元的步驟包括: 產(chǎn)生一寫入指針;以及 根據(jù)該寫入指針來將移除輔助數(shù)據(jù)后的該數(shù)據(jù)序列寫入至該存儲(chǔ)器單元, 其中該寫入指針指示該數(shù)據(jù)序列寫入至該存儲(chǔ)器單元的地址。
18.根據(jù)權(quán)利要求13所述的彈性緩沖方法,其中讀取該存儲(chǔ)器單元所儲(chǔ)存的該數(shù)據(jù)序列的步驟包括: 產(chǎn)生一讀取指針;以及 根據(jù)該讀取指針來讀取該存儲(chǔ)器單元所儲(chǔ)存的該數(shù)據(jù)序列, 其中該讀取指針指示該數(shù)據(jù)序列儲(chǔ)存在該存儲(chǔ)器單元的地址。
19.根據(jù)權(quán)利要求13所述的彈性緩沖方法,還包括: 記錄被移除的輔助數(shù)據(jù)的一第一信息以及被添加的輔助數(shù)據(jù)的一第二信息;以及 根據(jù)該第一信息及該第二信息來判斷該讀取控制模塊所輸出的該數(shù)據(jù)序列的輔助數(shù)據(jù)的整體是被添加還是被移除; 將一判斷結(jié)果輸出至配置于該接收側(cè)的一控制器。
20.根據(jù)權(quán)利要求19所述的彈性緩沖方法,其中記錄該第一信息以及該第二信息的步驟包括: 計(jì)數(shù)被移除的輔助數(shù)據(jù)的一第一數(shù)量;以及計(jì)數(shù)被添加的輔助數(shù)據(jù)的一第二數(shù)量。
21.根據(jù)權(quán)利要求20所述的彈性緩沖方法,其中判斷該數(shù)據(jù)序列的輔助數(shù)據(jù)的整體是被添加還是被移除的步驟包括: 根據(jù)該第一數(shù)量及該第二數(shù)量來判斷該讀取控制模塊所輸出的該數(shù)據(jù)序列的輔助數(shù)據(jù)的整體是被添加還是被移除。
22.根據(jù)權(quán)利要求13所述的彈性緩沖方法,其中輔助數(shù)據(jù)為一傳輸接口標(biāo)準(zhǔn)所定義的跳躍順序組中的跳躍符號(hào)。
23.根據(jù)權(quán)利要求22所述的彈性緩沖方法,其中該傳輸接口標(biāo)準(zhǔn)為序列先進(jìn)附件標(biāo)準(zhǔn)、高速外圍零件連接接口標(biāo)準(zhǔn)或通用序列總線3.0標(biāo)準(zhǔn)。
24.根據(jù)權(quán)利要求13所述的彈性緩沖方法,其中該存儲(chǔ)器單元在該寫入狀態(tài)與該讀取狀態(tài)的操作下維持在一非溢位狀態(tài)。
25.根據(jù)權(quán)利要求13所述的彈性緩沖方法,其中添加輔助數(shù)據(jù)至該數(shù)據(jù)序列的步驟包括: 添加輔助數(shù)據(jù)至該數(shù)據(jù)序列來調(diào)整該傳輸側(cè)的一寫入速度與該接收側(cè)的一讀取速度的差值在一容許范圍內(nèi)。
【文檔編號(hào)】G06F3/06GK103577112SQ201210256946
【公開日】2014年2月12日 申請(qǐng)日期:2012年7月23日 優(yōu)先權(quán)日:2012年7月23日
【發(fā)明者】陳志銘 申請(qǐng)人:群聯(lián)電子股份有限公司