国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

優(yōu)秀的 Verilog/FPGA開源項(xiàng)目之 USB通信

OpenFPGA ? 來源:OpenFPGA ? 作者:碎碎思 ? 2021-11-02 14:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

優(yōu)秀的 Verilog/FPGA開源項(xiàng)目介紹(五)- USB通信

USB是我們生活中非常非常常見的接口,鼠標(biāo)、鍵盤以及常見的U 盤等,可以說現(xiàn)在的USB設(shè)備已經(jīng)滲透到生活中的方方面面,下面就介紹幾個(gè)開源的USB IP,供大家學(xué)習(xí)。

0-官方網(wǎng)站

https://www.usb.org/?

很多人花各種XX幣下載各種標(biāo)準(zhǔn),其實(shí)太浪費(fèi)時(shí)間和精力了,這里介紹一個(gè)網(wǎng)站--usb.org。

USB Implementers Forum, Inc. 是一家非營利性公司,由開發(fā)通用串行總線規(guī)范的公司集團(tuán)創(chuàng)立。USB-IF 的成立是為了為通用串行總線技術(shù)的進(jìn)步和采用提供支持組織和論壇。該論壇促進(jìn)了高質(zhì)量兼容 USB 外圍設(shè)備(設(shè)備)的開發(fā),并促進(jìn)了 USB 的優(yōu)勢(shì)和通過一致性測(cè)試的產(chǎn)品質(zhì)量。

1-usbcorev

項(xiàng)目地址

https://github.com/avakar/usbcorev?

項(xiàng)目簡介

該IP可以將全速 (12Mbps) USB 2.0 設(shè)備內(nèi)核嵌入到 FPGA 設(shè)計(jì)中。

接口部分

我們知道USB接口使用了差分結(jié)構(gòu),所以接口部分還是很復(fù)雜的。

980b5e2c-3b8a-11ec-82a9-dac502259ad0.png

由于 USB 在其半雙工差分線上使用了一些奇怪的信號(hào),因此需要做一些工作才能將其連接到核心。以下五個(gè)信號(hào)連接到USB 信號(hào)的 D+ 和 D- 。

  • input rx_j -- D+/D-線上的微分值

  • input rx_se0 -- 單端零檢測(cè):應(yīng)在 D+ 和 D- 線均為零時(shí)設(shè)置

  • output tx_se0-- 在兩條 USB 線上傳輸零;優(yōu)先于tx_j

  • output tx_j-- 傳輸tx_j到 D+ 和~tx_jD-

  • output tx_en -- 啟用發(fā)射器

如果使用的 FPGA 沒有差分接收器,那么可以簡單地使用兩個(gè)引腳并按如下方式連接它們。但是,如果沒有差分接收器,這將超出 USB 規(guī)范。

inoutusb_dp;
inoutusb_dn;

//...

wireusb_tx_se0,usb_tx_j,usb_tx_en;
usbusb0(
.rx_j(usb_dp),
.rx_se0(!usb_dp&&!usb_dn),

.tx_se0(usb_tx_se0),
.tx_j(usb_tx_j),
.tx_en(usb_tx_en));

assignusb_dp=usb_tx_en?(usb_tx_se0?1'b0:usb_tx_j):1'bz;
assignusb_dn=usb_tx_en?(usb_tx_se0?1'b0:!usb_tx_j):1'bz;

對(duì)于 Xilinx Spartan 6 系列,使用四個(gè)物理引腳如下。

//Thesepinsareconfiguredasdifferentialinputs.Unfortunately,
//youcan'tusesingle-endedreceiversnortransmittersonthesepins.
inputusb_sp;
inputusb_sn;

//Thesepinsaresingle-endedinouts.
inoutusb_dp;
inoutusb_dn'

//...

IBUFDSusb_j_buf(.I(usb_sp),.IB(usb_sn),.O(usb_rx_j_presync));
synchusb_j_synch(clk_48,usb_rx_j_presync,usb_rx_j);
synchusb_se0_synch(clk_48,!usb_dp&&!usb_dn,usb_rx_se0);

wireusb_tx_se0,usb_tx_j,usb_tx_en;
usbusb0(
.rx_j(usb_rx_j),
.rx_se0(usb_rx_se0),

.tx_se0(usb_tx_se0),
.tx_j(usb_tx_j),
.tx_en(usb_tx_en));

assignusb_dp=usb_tx_en?(usb_tx_se0?1'b0:usb_tx_j):1'bz;
assignusb_dn=usb_tx_en?(usb_tx_se0?1'b0:!usb_tx_j):1'bz;

注意接收器之后的同步。

無論在哪個(gè)引腳上傳輸,都需要在線路上增加串阻,通常大約 27 歐姆就可以了。

還需要將 D+ 線增加1.5K的 3.3V 上拉。如果您想動(dòng)態(tài)連接/分離到總線,可以直接或通過 FPGA 上的引腳拉動(dòng)它。確保永遠(yuǎn)不要下拉線路,上拉引腳的唯一有效輸出是1'b1和1'bz。

2-no2usb

https://github.com/no2fpga/no2usb?

該項(xiàng)目是Lattice眾多擁簇的一員的項(xiàng)目,平臺(tái)也是運(yùn)行在ice40中,之前我也做了一個(gè)開發(fā)板(),奈何國內(nèi)對(duì)這個(gè)感興趣的不過,也就沒怎么推廣。

下面簡單介紹一下這個(gè)項(xiàng)目。

概述

該 fpga 內(nèi)核僅使用普通 FPGA CMOS IO 實(shí)現(xiàn) USB 全速 SIU(Server Interface Unit)。

  • 小巧高效(最初針對(duì) ice40)
  • 靈活,動(dòng)態(tài) EP 配置
  • 時(shí)鐘

該項(xiàng)目目前只運(yùn)行在ice40芯片(Apple曾使用的)上,目前在適配ecp5(lattice)。

說明

?

https://github.com/smunaut/ice40-playground/tree/master/cores

?

3-tinyfpga_bx_usbserial(USB轉(zhuǎn)串口 SPI)

?

https://github.com/davidthings/tinyfpga_bx_usbserial

?

這個(gè)項(xiàng)目的起源也很有意思,ice40系列FPGA是使用SPI接口燒寫程序的(類似JTAG),使用時(shí)需要一個(gè)USB轉(zhuǎn)SPI芯片作為“JTAG”,常用的就是FT232/FT2232等,但是FTDI的芯片價(jià)格普遍比較貴(差不多和ICE40一樣價(jià)格甚至更貴),本項(xiàng)目的起源就是為了節(jié)省這一芯片,使用FPGA本身實(shí)現(xiàn)USB-SPI。

項(xiàng)目起源地址

?

https://github.com/tinyfpga/TinyFPGA-Bootloader

?

簡介

Lawrie Griffiths 深入研究了這段代碼的"暗盒",并做了大量工作將其更改為 USB - SERIAL 橋接器,將用戶視為串行端口,而不是 SPI 主機(jī)。他還創(chuàng)造了一些很好的例子,他的工作在這里:

?

https://github.com/lawrie/tiny_usb_examples

?

本項(xiàng)目針對(duì)以上兩個(gè)項(xiàng)目做了一些改善。并且做了很多改善,不僅使用ICE40系列FPGA還適配了XIlinx A7 FPGA,同時(shí)ECP5(Lattice)也可以使用。

項(xiàng)目資源使用如下:

Info:Deviceutilisation:
Info:ICESTORM_LC:1093/768014%
Info:ICESTORM_RAM:2/326%
Info:SB_IO:9/2563%
Info:SB_GB:8/8100%
Info:ICESTORM_PLL:1/250%
Info:SB_WARMBOOT:0/10%

項(xiàng)目的README中有詳細(xì)的介紹及使用教程,這里就介紹的這里,畢竟不是完整的USB通信。

4-眾多IP核

?

https://github.com/ultraembedded/cores

?

這個(gè)項(xiàng)目不僅不包括了USB(主要是USB1.1),還包括很多常見的低速接口-SPI UART I2S等等

每個(gè)IP都有完整的說明,自己去看吧,非常適合新手調(diào)試接口。

5-usb_cdc(設(shè)備類)

?

https://github.com/ultraembedded/core_usb_cdc

?

USB的CDC類是USB通信設(shè)備類 (Communication Device Class)的簡稱。CDC類是USB組織定義的一類專門給各種通信設(shè)備(電信通信設(shè)備和中速網(wǎng)絡(luò)通信設(shè)備)使用的USB子類。

簡介

該項(xiàng)目是一個(gè)簡單的 USB 外設(shè)接口(設(shè)備)實(shí)現(xiàn),可枚舉為高速 (480Mbit/s) 或全速 (12Mbit/s) CDC-ACM 設(shè)備。

該 IP 具有用于輸入和輸出數(shù)據(jù)的簡單 FIFO 接口(有效、數(shù)據(jù)、接受),以及用于連接到 USB PHY 的 UTMI 接口。

特征

  • 高速或全速 USB CDC 設(shè)備。
  • 硬件枚舉 - 無需軟件干預(yù)。
  • UTMI PHY 接口
  • 具有握手功能的簡單 8 位數(shù)據(jù)輸入/輸出接口(符合 8 位寬 AXI4-Stream 接口)。
  • 配置/要求(全速(12Mbit/s))

文件說明

Configuration/Requirements(FullSpeed(12Mbit/s))

Top:usb_cdc_core
Clock:clk_i-48MHzor60MHz
Reset:rst_i-Asynchronous,activehigh
VID/PIDcanbechangedinusb_desc_rom.v
Param:USB_SPEED_HS="False"
Configuration/Requirements(HighSpeed(480Mbit/s))

Top:usb_cdc_core
Clock:clk_i-60MHz
Reset:rst_i-Asynchronous,activehigh
VID/PIDcanbechangedinusb_desc_rom.v
Param:USB_SPEED_HS="True"

該項(xiàng)目在仿真下驗(yàn)證,在 FPGA 上針對(duì) Linux、Windows 和 MAC OS-X 進(jìn)行了測(cè)試。

6-www-asics-ws的項(xiàng)目

?

https://github.com/www-asics-ws

?

www-asics-ws項(xiàng)目中包含了USB1.1和USB2.0設(shè)備類USB IP。
usb1_device

  • USB 1.1 兼容功能
  • 支持硬件枚舉
  • 無需微控制器/CPU
  • 基于 FIFO 的接口
  • 用 Verilog 編寫
  • 完全可合成
  • 仿真及硬件測(cè)試

usb2_dev

這是一個(gè)符合 USB 2.0 標(biāo)準(zhǔn)的內(nèi)核。由于接口速度高,此內(nèi)核需要外部 PHY。已開發(fā)出用于 USB 的行業(yè)標(biāo)準(zhǔn) PHY 接口。該接口稱為USB Transceiver Macrocell Interface或簡稱UTMI。USB 內(nèi)核的主機(jī)接口符合 WISHBONE SoC 標(biāo)準(zhǔn)。有關(guān) USB 標(biāo)準(zhǔn)和完整規(guī)范的更多信息,請(qǐng)?jiān)L問www.usb.org。有關(guān) WISHBONE SoC 的更多信息和完整規(guī)范,請(qǐng)?jiān)L問www.opencores.org。UTMI 規(guī)范(以及其他各種有用的 USB 文件)可以從這里下載:https : //www.intel.com/content/www/us/en/io/universal-serial-bus/universal-serial-bus-specifications .html

參考意義不大,不能直接在FPGA中使用,需要搭配PHY使用。

7-usbhostslave

?

https://github.com/freecores/usbhostslave

?

該項(xiàng)目已使用 Quartus 6.0 成功編譯并且USBHostSlave 已經(jīng)在 SystemC 和 Altera Nios 開發(fā)套件 Cyclone 版中進(jìn)行了測(cè)試。

整個(gè)項(xiàng)目文檔說明很少,但是看提交記錄該項(xiàng)目完成度很高,還是適合入坑。

優(yōu)秀的 Verilog/FPGA開源項(xiàng)目介紹(四)- Ethernet

9-core_usb_sniffer

?

https://github.com/ultraembedded/core_usb_sniffer

?

這個(gè)內(nèi)核是一個(gè) HS/FS USB2.0 分析器(USB 總線嗅探器)。

內(nèi)核監(jiān)控 UTMI 接口,并通過 AXI-4 總線主接口將看到的流量記錄到內(nèi)存緩沖區(qū)。

可以連續(xù)提取日志格式(連續(xù)捕獲模式),也可以在內(nèi)存緩沖區(qū)已滿時(shí)內(nèi)核停止捕獲(一次性模式)。

IP 的配置是使用 AXI4-Lite 從接口執(zhí)行的。

該內(nèi)核已用于生產(chǎn)USB 2.0 捕獲設(shè)備(https://github.com/ultraembedded/usb2sniffer)這是實(shí)現(xiàn)的案例。

10-商業(yè)IP

?

https://www.synopsys.com/designware-ip/interface-ip/usb.html

?

商業(yè)IP肯定首推來自老牌大廠新思,新思科技在2018年推出基于HAPS-80 FPGA的硬件原型驗(yàn)證平臺(tái)上部署了USB 3.2設(shè)備IP和主機(jī)IP。這些FPGA硬件原型驗(yàn)證平臺(tái)在FinFET工藝節(jié)點(diǎn)的FPGA中使用了USB PHY。解決方案如下:

有需要的可以去上面的網(wǎng)站了解,需要money的IP,所以我就不過多介紹了,個(gè)人也不會(huì)選用,大公司自然有銷售對(duì)接。

以上就是今天推薦的項(xiàng)目,這里建議第一個(gè)和第五個(gè)項(xiàng)目可以入坑,其他看自己需求。

最后,還是感謝各個(gè)大佬開源的項(xiàng)目,讓我們受益匪淺。后面有什么感興趣方面的項(xiàng)目,大家可以在后臺(tái)留言或者加微信留言,今天就到這,我是爆肝的碎碎思,期待下期文章與你相見。

編輯:jq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1660

    文章

    22411

    瀏覽量

    636279
  • USB 2.0
    +關(guān)注

    關(guān)注

    1

    文章

    42

    瀏覽量

    17654
  • IP
    IP
    +關(guān)注

    關(guān)注

    5

    文章

    1863

    瀏覽量

    155835
  • PHY
    PHY
    +關(guān)注

    關(guān)注

    2

    文章

    335

    瀏覽量

    54079

原文標(biāo)題:優(yōu)秀的 Verilog/FPGA開源項(xiàng)目介紹(五)- USB通信

文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    開源項(xiàng)目USB協(xié)議分析儀總體介紹

    USB 開發(fā)、逆向工程總被工具功能單一卡殼,這款USB 多功能工具直接拿捏痛點(diǎn),集協(xié)議分析、設(shè)備創(chuàng)建、MitM 攻擊、安全研究于一體,趕緊碼住!FPGA 可編程 + 全場(chǎng)景覆蓋!
    的頭像 發(fā)表于 02-05 10:19 ?286次閱讀
    <b class='flag-5'>開源</b><b class='flag-5'>項(xiàng)目</b><b class='flag-5'>USB</b>協(xié)議分析儀總體介紹

    FPGA 入門必看:Verilog 與 VHDL 編程基礎(chǔ)解析!

    很多開發(fā)者第一次接觸FPGA,都會(huì)有同樣的疑問:FPGA是硬件,不是軟件,怎么寫程序?答案就是用硬件描述語言(HDL),最常用的就是Verilog和VHDL。今天,我們就帶你入門,搞清楚FPG
    的頭像 發(fā)表于 01-19 09:05 ?450次閱讀
    <b class='flag-5'>FPGA</b> 入門必看:<b class='flag-5'>Verilog</b> 與 VHDL 編程基礎(chǔ)解析!

    如何使用FPGA實(shí)現(xiàn)SRIO通信協(xié)議

    本例程詳細(xì)介紹了如何在FPGA上實(shí)現(xiàn)Serial RapidIO(SRIO)通信協(xié)議,并通過Verilog語言進(jìn)行編程設(shè)計(jì)。SRIO作為一種高速、低延遲的串行互連技術(shù),在高性能計(jì)算和嵌入式系統(tǒng)中廣
    的頭像 發(fā)表于 11-12 14:38 ?5766次閱讀
    如何使用<b class='flag-5'>FPGA</b>實(shí)現(xiàn)SRIO<b class='flag-5'>通信</b>協(xié)議

    開源FPGA硬件】硬件黑客集結(jié):開源FPGA開發(fā)板測(cè)評(píng)活動(dòng)全網(wǎng)火熱招募中......

    USB 轉(zhuǎn)串口、EEPROM、JTAG 接口 完整電源系統(tǒng)+ 預(yù)留電平可調(diào)接口 滿足高性能、全接口,滿足圖像處理、通信驗(yàn)證、AI 加速、數(shù)據(jù)采集等多種應(yīng)用需求。 開源板試用活動(dòng)說明 活動(dòng)對(duì)象:
    發(fā)表于 10-29 11:37

    硬件黑客集結(jié):開源FPGA開發(fā)板測(cè)評(píng)活動(dòng)全網(wǎng)火熱招募中......

    開源活動(dòng)簡介近期,小眼睛科技聯(lián)合紫光同創(chuàng)及電子發(fā)燒友發(fā)起了#擁抱開源!一起來做FPGA開發(fā)板活動(dòng),活動(dòng)一經(jīng)發(fā)布,得到了很多開源愛好者的熱烈響應(yīng),再次感謝大家的支持!
    的頭像 發(fā)表于 10-29 08:05 ?666次閱讀
    硬件黑客集結(jié):<b class='flag-5'>開源</b><b class='flag-5'>FPGA</b>開發(fā)板測(cè)評(píng)活動(dòng)全網(wǎng)火熱招募中......

    如何利用Verilog HDL在FPGA上實(shí)現(xiàn)SRAM的讀寫測(cè)試

    本篇將詳細(xì)介紹如何利用Verilog HDL在FPGA上實(shí)現(xiàn)SRAM的讀寫測(cè)試。SRAM是一種非易失性存儲(chǔ)器,具有高速讀取和寫入的特點(diǎn)。在FPGA中實(shí)現(xiàn)SRAM讀寫測(cè)試,包括設(shè)計(jì)SRAM接口模塊
    的頭像 發(fā)表于 10-22 17:21 ?4345次閱讀
    如何利用<b class='flag-5'>Verilog</b> HDL在<b class='flag-5'>FPGA</b>上實(shí)現(xiàn)SRAM的讀寫測(cè)試

    基于FPGA開發(fā)板TSP的串口通信設(shè)計(jì)

    本文詳細(xì)介紹基于Terasic FPGA開發(fā)板TSP(又名C5P和OSK)和其板載CP2102N USB-UART橋接芯片的串口通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)。系統(tǒng)采用Verilog HDL編寫U
    的頭像 發(fā)表于 10-15 11:05 ?4459次閱讀
    基于<b class='flag-5'>FPGA</b>開發(fā)板TSP的串口<b class='flag-5'>通信</b>設(shè)計(jì)

    開源FPGA硬件|FPGA LAYOUT評(píng)審,紫光同創(chuàng)定制公仔派送中

    為核心的設(shè)計(jì)公司,致力于為客戶提供專業(yè)的定制化FPGA及嵌入式解決方案和服務(wù)。此次開源FPGA開發(fā)板項(xiàng)目由小眼睛科技和紫光同創(chuàng)、電子發(fā)燒友聯(lián)合推出,將基于國產(chǎn)FP
    的頭像 發(fā)表于 08-12 12:33 ?1194次閱讀
    <b class='flag-5'>開源</b><b class='flag-5'>FPGA</b>硬件|<b class='flag-5'>FPGA</b> LAYOUT評(píng)審,紫光同創(chuàng)定制公仔派送中

    普華基礎(chǔ)軟件榮膺優(yōu)秀開源項(xiàng)目獎(jiǎng)

    近日,2025上海開源創(chuàng)新菁英獎(jiǎng)評(píng)選結(jié)果正式揭曉。普華基礎(chǔ)軟件開源安全車控操作系統(tǒng)小滿EasyXMen憑借在開源技術(shù)創(chuàng)新與產(chǎn)業(yè)應(yīng)用實(shí)踐方面的突出表現(xiàn),榮獲“優(yōu)秀
    的頭像 發(fā)表于 07-28 16:48 ?930次閱讀

    火爆開發(fā)中 | 開源FPGA硬件板卡,硬件第一期發(fā)布

    開源FPGA項(xiàng)目自發(fā)布以來,得到了眾多開發(fā)者的關(guān)注,涉及工業(yè)、通信、車載等多個(gè)行業(yè)的100+位工程師報(bào)名參與設(shè)計(jì),并分為:硬件組、FPGA
    發(fā)表于 07-09 13:54

    RT-Thread榮獲2025優(yōu)秀開源項(xiàng)目 | 新聞速遞

    貢獻(xiàn),榮獲年度“優(yōu)秀開源項(xiàng)目獎(jiǎng)”。RT-Thread睿賽德榮獲2025優(yōu)秀開源項(xiàng)目獎(jiǎng)目前,
    的頭像 發(fā)表于 07-04 09:04 ?2642次閱讀
    RT-Thread榮獲2025<b class='flag-5'>優(yōu)秀</b><b class='flag-5'>開源</b><b class='flag-5'>項(xiàng)目</b> | 新聞速遞

    開源分享】:開源小巧的FPGA開發(fā)板——Icepi Zero

    活動(dòng)推薦:擁抱開源!一起來做FPGA開發(fā)板啦!https://bbs.elecfans.com/jishu_2491185_1_1.html 項(xiàng)目計(jì)劃以紫光同創(chuàng)PG2L25H-6IMBG325為
    發(fā)表于 06-09 14:01

    擁抱開源!一起來做FPGA開發(fā)板啦!

    與開發(fā),包括編寫Verilog或VHDL代碼、進(jìn)行邏輯功能仿真、調(diào)試以及與硬件接口的適配等工作,適合熟悉FPGA開發(fā)流程、具備邏輯設(shè)計(jì)能力的伙伴。 主要任務(wù): 基于開源項(xiàng)目功能需求反饋
    發(fā)表于 06-06 14:05

    如何使用USB2.0將數(shù)據(jù)從fpga傳輸?shù)絇C?

    我正在嘗試使用 USB 2.0 從 ztex 板 USB-FPGA 模塊 2.13 向計(jì)算機(jī)發(fā)送信號(hào)。 從 fpga 方面,我使用的是 fifo 代碼,從計(jì)算機(jī)方面,我有一個(gè) ZTex 給出的專門
    發(fā)表于 05-29 06:28

    FPGA Verilog HDL語法編譯預(yù)處理

    Verilog HDL語言和C語言一樣也提供了編譯預(yù)處理的功能。“編譯預(yù)處理”是Verilog HDL編譯系統(tǒng)的一個(gè)組成部分。Verilog HDL語言允許在程序中使用幾種特殊的命令(它們不是一般
    的頭像 發(fā)表于 03-27 13:30 ?1435次閱讀
    <b class='flag-5'>FPGA</b> <b class='flag-5'>Verilog</b> HDL語法<b class='flag-5'>之</b>編譯預(yù)處理