CN112183002A - 一种基于fpga逻辑的软件分割方法 - Google Patents

一种基于fpga逻辑的软件分割方法 Download PDF

Info

Publication number
CN112183002A
CN112183002A CN202011384413.6A CN202011384413A CN112183002A CN 112183002 A CN112183002 A CN 112183002A CN 202011384413 A CN202011384413 A CN 202011384413A CN 112183002 A CN112183002 A CN 112183002A
Authority
CN
China
Prior art keywords
software
fpga
algorithm
submodule
logic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202011384413.6A
Other languages
English (en)
Other versions
CN112183002B (zh
Inventor
张吉锋
李伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Sierxin Technology Co ltd
Original Assignee
Shanghai Guowei Silcore Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Guowei Silcore Technology Co Ltd filed Critical Shanghai Guowei Silcore Technology Co Ltd
Priority to CN202011384413.6A priority Critical patent/CN112183002B/zh
Publication of CN112183002A publication Critical patent/CN112183002A/zh
Application granted granted Critical
Publication of CN112183002B publication Critical patent/CN112183002B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3308Design verification, e.g. functional simulation or model checking using simulation
    • G06F30/331Design verification, e.g. functional simulation or model checking using simulation with hardware acceleration, e.g. by using field programmable gate array [FPGA] or emulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2115/00Details relating to the type of the circuit
    • G06F2115/02System on chip [SoC] design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2115/00Details relating to the type of the circuit
    • G06F2115/10Processors

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)

Abstract

本发明属于电子计算机软件应用技术领域,具体涉及一种基于FPGA逻辑的软件分割方法,包括FlipFlop及FPGA分析步骤、预设压缩比步骤和分割步骤,本发明的软件分割方法,在传统的基于资源权重最小割算法里面加入对影响IC电路运行的时钟域分组、FlipFlop、压缩比等相关约束的处理,可以实现对多FPGA原型系统分割过程中满足IC电路系统的运行时钟频率约束的情况下,得到的分割结果使整个IC电路运行性能更佳、功能正确且工作稳定。

Description

一种基于FPGA逻辑的软件分割方法
技术领域
本发明属于电子计算机软件应用技术领域,具体涉及一种基于FPGA逻辑的软件分割方法。
背景技术
随着计算技术的发展,大数据时代的到来,超大规模集成电路的分割问题越来越引起人们的关注,典型应用有超大规模数字集成电路仿真验证中的多FPGA逻辑系统分割,通过不同的分组权重将逻辑电路分割成若干分组,进而实现可扩展,高性能的系统验证。
传统的基于FPGA逻辑的软件分割方法采用基于图论最小割算法分割,其多FPGA原型系统大都只考虑单个FPGA的资源权重和互联约束,导致分割出来整个IC电路运行性能较差,功能不正确或者工作不稳定。
发明内容
有鉴于此,本发明提出一种软件分割方法,在传统的基于资源权重最小割算法里面加入对影响IC电路运行的时钟域分组、FlipFlop、压缩比等相关约束的处理,可以实现对多FPGA原型系统分割过程中满足IC电路系统的运行时钟频率约束的情况下,得到的分割结果使整个IC电路运行性能更佳、功能正确且工作稳定。
为了达到上述技术目的,本发明所采用的具体技术方案为:
一种基于FPGA逻辑的软件分割方法,所述软件包括多个子模块;包括以下步骤:
S101:分析所述软件的时钟域,得到所述软件各子模块的运行时钟域;
分析所述软件各子模块的FlipFlop,得到各子模块的时间传输机制;
获取各FPGA的可用的通道资源数;
S102:为各子模块预设压缩比,使各子模块之间的信号传输性能达到最高;
S103:根据各子模块的压缩比、各子模块的时钟域、各子模块的FlipFlop以及各FPGA的通道资源数,将各子模块分割至多个FPGA中,并使分割结果满足:
各FPGA间的互联线的总数目最小、分割的互连线都满足各子模块的传输时间机制且互连线满足时钟频率约束;
各子模块之间的互联条件支持各子模块的时间传输机制;
在满足预设压缩比的情况下,占用各FPGA的总通道资源数最少。
进一步的,预设的所述压缩比用于使各模块之间具有最小的整体时分复用。
进一步的,所述S103中分割的具体过程为:
S101.1:提取所述软件的内容得到各模块之间的互联关系图;
S101.2:将各模块均抽象成节点,把模块间的互联抽象为连线, 将所述软件转换为超图数据结构;
S101.3:对所述超图数据结构进行分析运算,对所述软件的各模块进行多个不同分组的分割处理。
进一步的,所述S101.3中,对所述超图数据结构进行分析运算的方法为图论相关算法。
进一步的,所述图论相关算法和与其配合的开发工具包括:最小割mincut、网络最大流maxflow 算法理论和/或simulink。
进一步的,所述S101.3中,对所述超图数据结构进行分析运算的算法还包括基于TimingDriven Partition 的分割算法。
进一步的,所述基于TimingDriven Partition 的分割算法包括拉格朗日算法和/或多TDM比例算法。
进一步的,所述S101之前还包括分割前网表加载步骤,所述分割前网表用于描述所述软件的逻辑内容、各子模块间的连接关系以及各FPGA对外接口信号的类型。
进一步的,所述分割方法还包括:
S104:生成分割后网表,所述分割后网表适配于某个独立的FPGA的逻辑内容,用于反馈可配置运行于FPGA 环境的数据流文件。
采用上述技术方案,本发明能够带来以下有益效果:
本专利描述了一种方法,在传统的基于资源权重最小割算法里面加入对影响集成电路运行的时钟域分组,寄存器驱动,TDM压缩比例等相关约束的处理,可以实现对多FPGA原型系统分割过程中尽可能地接近满足原始逻辑电路系统的运行时钟频率要求的情况下,整个电路逻辑工作在一个同步的逻辑控制模式,得到一个最优的分割结果。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明具体实施方式中基于FPGA逻辑的软件分割方法的实施步骤图。
具体实施方式
下面结合附图对本公开实施例进行详细描述。
以下通过特定的具体实例说明本公开的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本公开的其他优点与功效。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。本公开还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本公开的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
还需要说明的是,以下实施例中所提供的图示仅以示意方式说明本公开的基本构想,图式中仅显示与本公开中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
另外,在以下描述中,提供具体细节是为了便于透彻理解实例。然而,所属领域的技术人员将理解,可在没有这些特定细节的情况下实践所述方面。
业界通常使用的四核ARM CPU系统,由于业务需求SOC逻辑变的很大,超出单个Xilinx VU440 FPGA 的逻辑容量,需要4个甚至更多的FPGA 数量。基于本软件提供的分割方法,对SOC逻辑分割到4个独立的FPGA中,FPGA之间有常规的200 ~ 300根Cable连接线。以下实施例以在SOC Linux系统运行此软件为例。由于每个FPGA都局限于特定的物理连接数量,不同的数量影响软件的运行性能。分割时综合考虑不同FPGA 分组间的数量,生成不同传输复用比例,达到一个最接近原始时钟约束的频率值。
在本发明的一个实施例中,提出一种基于FPGA逻辑的软件分割方法,软件包括多个子模块;包括以下步骤:
S101:分析软件的时钟域,得到软件各子模块的运行时钟域;
分析软件各子模块的FlipFlop,得到各子模块的时间传输机制;
获取各FPGA的可用的通道资源数;
S102:为各子模块预设压缩比,使各子模块之间的信号传输性能达到最高;
S103:根据各子模块的压缩比、各子模块的时钟域、各子模块的FlipFlop以及各FPGA的通道资源数,将各子模块分割至多个FPGA中,并使分割结果满足:
各FPGA间的互联线的总数目最小、分割的互连线都满足各子模块的传输时间机制且互连线满足时钟频率约束;
各子模块之间的互联条件支持各子模块的时间传输机制;
在满足预设压缩比的情况下,占用各FPGA的总通道资源数最少。
在本实施例中,预设的压缩比用于使各模块之间具有最小的整体时分复用。
在本实施例中,S103中分割的具体过程为:
S101.1:提取软件的内容得到各模块之间的互联关系图;
S101.2:将各模块均抽象成节点,把模块间的互联抽象为连线, 将软件转换为超图数据结构;
S101.3:对超图数据结构进行分析运算,对软件的各模块进行多个不同分组的分割处理。
在本实施例中,S101.3中,对超图数据结构进行分析运算的方法为图论相关算法。
在本实施例中,图论相关算法和与其配合的开发工具包括:最小割mincut、网络最大流maxflow 算法理论和/或simulink。
在本实施例中,S101.3中,对超图数据结构进行分析运算的算法还包括基于TimingDriven Partition 的分割算法。
在本实施例中,基于TimingDriven Partition 的分割算法包括拉格朗日算法和/或多TDM比例算法。
如模块中的一部分时序模块包含有相应的clock时钟域和运行频率等timing属性,一些基于TimingDriven Partition 的高级分割算法(如拉格朗日算法, 多TDM比例算法等)也可以使用, 分割的时候考虑时钟域和timing属性的因素影响,达到很好的分割效果和期望性能。
在本实施例中,S101之前还包括分割前网表加载步骤,分割前网表用于描述软件的逻辑内容、各子模块间的连接关系以及各FPGA对外接口信号的类型。
在本实施例中,分割方法还包括:
S104:生成分割后网表,分割后网表适配于某个独立的FPGA的逻辑内容,用于反馈可配置运行于FPGA 环境的数据流文件。
在本实施例中,在分割后网表生成后,可通过后续的布局布线等手段对网表进行常规的逻辑设计流程处理,生成输出一个可配置运行于FPGA 环境的数据流文件。整个软件系统的运行依赖于多个分割后网表的运行结果。
采用本实施例的分割方法,SOC Linux系统在分割后可以在高达15MHz 的情况下运行, 用户可以很方便快捷地在此平台上面进行软件开发。
以上,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。

Claims (9)

1.一种基于FPGA逻辑的软件分割方法,所述软件包括多个子模块;其特征在于,包括以下步骤:
S101:分析所述软件的时钟域,得到所述软件各子模块的运行时钟域;
分析所述软件各子模块的FlipFlop,得到各子模块的时间传输机制;
获取各FPGA的可用的通道资源数;
S102:为各子模块预设压缩比,使各子模块之间的信号传输性能达到最高;
S103:根据各子模块的压缩比、各子模块的时钟域、各子模块的FlipFlop以及各FPGA的通道资源数,将各子模块分割至多个FPGA中,并使分割结果满足:
各FPGA间的互联线的总数目最小、分割的互连线都满足各子模块的传输时间机制且互连线满足时钟频率约束;
各子模块之间的互联条件支持各子模块的时间传输机制;
在满足预设压缩比的情况下,占用各FPGA的总通道资源数最少。
2.根据权利要求1所述的基于FPGA逻辑的软件分割方法,其特征在于:预设的所述压缩比用于使各模块之间具有最小的整体时分复用。
3.根据权利要求1所述的分割方法,其特征在于,
所述S103中分割的具体过程为:
S101.1:提取所述软件的内容得到各模块之间的互联关系图;
S101.2:将各模块均抽象成节点,把模块间的互联抽象为连线, 将所述软件转换为超图数据结构;
S101.3:对所述超图数据结构进行分析运算,对所述软件的各模块进行多个不同分组的分割处理。
4.根据权利要求3所述的基于FPGA逻辑的软件分割方法,其特征在于:所述S101.3中,对所述超图数据结构进行分析运算的方法为图论相关算法。
5.根据权利要求4所述的基于FPGA逻辑的软件分割方法,其特征在于:所述图论相关算法和与其配合的开发工具包括:最小割mincut、网络最大流maxflow 算法理论和/或simulink。
6.根据权利要求4所述的基于FPGA逻辑的软件分割方法,其特征在于:所述S101.3中,对所述超图数据结构进行分析运算的算法还包括基于TimingDriven Partition 的分割算法。
7.根据权利要求6所述的基于FPGA逻辑的软件分割方法,其特征在于:所述基于TimingDriven Partition 的分割算法包括拉格朗日算法和/或多TDM比例算法。
8.根据权利要求1所述的基于FPGA逻辑的软件分割方法,其特征在于:所述S101之前还包括分割前网表加载步骤,所述分割前网表用于描述所述软件的逻辑内容、各子模块间的连接关系以及各FPGA对外接口信号的类型。
9.根据权利要求1所述的基于FPGA逻辑的软件分割方法,其特征在于:所述分割方法还包括:
S104:生成分割后网表,所述分割后网表用于适配于某个独立的FPGA的逻辑内容,用于反馈可配置运行于FPGA环境的数据流文件。
CN202011384413.6A 2020-12-02 2020-12-02 一种基于fpga逻辑的软件分割方法 Active CN112183002B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011384413.6A CN112183002B (zh) 2020-12-02 2020-12-02 一种基于fpga逻辑的软件分割方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011384413.6A CN112183002B (zh) 2020-12-02 2020-12-02 一种基于fpga逻辑的软件分割方法

Publications (2)

Publication Number Publication Date
CN112183002A true CN112183002A (zh) 2021-01-05
CN112183002B CN112183002B (zh) 2021-03-16

Family

ID=73918356

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011384413.6A Active CN112183002B (zh) 2020-12-02 2020-12-02 一种基于fpga逻辑的软件分割方法

Country Status (1)

Country Link
CN (1) CN112183002B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112329367A (zh) * 2020-12-02 2021-02-05 国微集团(深圳)有限公司 一种基于图卷积神经网络的逻辑设计切割方法及系统
CN112732636A (zh) * 2021-01-11 2021-04-30 上海金卓科技有限公司 基于多fpga的芯片原型验证系统的配置方法、装置和设备
CN113255265A (zh) * 2021-06-07 2021-08-13 上海国微思尔芯技术股份有限公司 分割及验证方法、装置、电子设备、存储介质
CN113255264A (zh) * 2021-06-07 2021-08-13 上海国微思尔芯技术股份有限公司 增量分割处理方法、装置、计算机设备和存储介质
CN114997088A (zh) * 2022-06-29 2022-09-02 西安电子科技大学 一种布线和tdm比率快速优化方法
CN116401983A (zh) * 2023-06-07 2023-07-07 湖南泛联新安信息科技有限公司 一种仿真主频驱动的信号自动映射方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1521665A (zh) * 2003-02-10 2004-08-18 松下电器产业株式会社 逻辑电路最佳化方法及其装置和逻辑电路合成装置
CN101231674A (zh) * 2008-01-17 2008-07-30 复旦大学 现代可编程逻辑器件软件系统的层次化布局建模方法
CN101290639A (zh) * 2007-04-16 2008-10-22 松下电器产业株式会社 半导体集成电路以及半导体集成电路的布局方法
CN101931395A (zh) * 2009-06-18 2010-12-29 英赛特半导体有限公司 集成电路分析系统和方法
CN111027266A (zh) * 2019-12-06 2020-04-17 思尔芯(上海)信息科技有限公司 一种多个fpga的设计分割的方法、系统、存储介质及终端

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1521665A (zh) * 2003-02-10 2004-08-18 松下电器产业株式会社 逻辑电路最佳化方法及其装置和逻辑电路合成装置
CN101290639A (zh) * 2007-04-16 2008-10-22 松下电器产业株式会社 半导体集成电路以及半导体集成电路的布局方法
CN101231674A (zh) * 2008-01-17 2008-07-30 复旦大学 现代可编程逻辑器件软件系统的层次化布局建模方法
CN101931395A (zh) * 2009-06-18 2010-12-29 英赛特半导体有限公司 集成电路分析系统和方法
CN111027266A (zh) * 2019-12-06 2020-04-17 思尔芯(上海)信息科技有限公司 一种多个fpga的设计分割的方法、系统、存储介质及终端

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
游浤毅等: "研制多重FPGA可动态重组计算系统的线上软件模块配置法", 《2005年海峡两岸三地无线科技学术会》 *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112329367A (zh) * 2020-12-02 2021-02-05 国微集团(深圳)有限公司 一种基于图卷积神经网络的逻辑设计切割方法及系统
CN112732636A (zh) * 2021-01-11 2021-04-30 上海金卓科技有限公司 基于多fpga的芯片原型验证系统的配置方法、装置和设备
CN112732636B (zh) * 2021-01-11 2023-05-30 北京东土军悦科技有限公司 基于多fpga的芯片原型验证系统的配置方法、装置和设备
CN113255265A (zh) * 2021-06-07 2021-08-13 上海国微思尔芯技术股份有限公司 分割及验证方法、装置、电子设备、存储介质
CN113255264A (zh) * 2021-06-07 2021-08-13 上海国微思尔芯技术股份有限公司 增量分割处理方法、装置、计算机设备和存储介质
CN113255265B (zh) * 2021-06-07 2021-09-28 上海国微思尔芯技术股份有限公司 分割及验证方法、装置、电子设备、存储介质
CN113255264B (zh) * 2021-06-07 2021-10-01 上海国微思尔芯技术股份有限公司 增量分割处理方法、装置、计算机设备和存储介质
CN114997088A (zh) * 2022-06-29 2022-09-02 西安电子科技大学 一种布线和tdm比率快速优化方法
CN114997088B (zh) * 2022-06-29 2022-11-04 西安电子科技大学 一种布线和tdm比率快速优化方法
CN116401983A (zh) * 2023-06-07 2023-07-07 湖南泛联新安信息科技有限公司 一种仿真主频驱动的信号自动映射方法
CN116401983B (zh) * 2023-06-07 2023-09-22 湖南泛联新安信息科技有限公司 一种仿真主频驱动的信号自动映射方法

Also Published As

Publication number Publication date
CN112183002B (zh) 2021-03-16

Similar Documents

Publication Publication Date Title
CN112183002B (zh) 一种基于fpga逻辑的软件分割方法
Rabaey et al. Fast prototyping of datapath-intensive architectures
US8839171B1 (en) Method of global design closure at top level and driving of downstream implementation flow
US9195784B2 (en) Common shared memory in a verification system
JP2002123563A (ja) コンパイル方法および合成装置ならびに記録媒体
US10169505B2 (en) Partitioning and routing multi-SLR FPGA for emulation and prototyping
US20080168412A1 (en) Method and apparatus for generating a variation-tolerant clock-tree for an integrated circuit chip
Pasricha et al. Constraint-driven bus matrix synthesis for MPSoC
WO2003012640A1 (en) Behavior processor system and method
EP3440571B1 (en) Incrementally distributing logical wires onto physical sockets by reducing critical path delay
US6550042B1 (en) Hardware/software co-synthesis of heterogeneous low-power and fault-tolerant systems-on-a chip
CN114595651B (zh) 一种用于多fpga仿真验证平台的电路划分方法
US8566768B1 (en) Best clock frequency search for FPGA-based design
Pasricha et al. BMSYN: Bus matrix communication architecture synthesis for MPSoC
Vahid et al. Functional partitioning improvements over structural partitioning for packaging constraints and synthesis: tool performance
Ong et al. Automatic mapping of multiple applications to multiple adaptive computing systems
Cong et al. Multilevel global placement with retiming
Mazraeli et al. Partitioning Large-Scale, Multi-FPGA Applications for the Data Center
US10474778B2 (en) Systems and methods for top level integrated circuit design
JP2013161178A (ja) マクロ遅延解析装置、マクロ境界パスの遅延解析方法、マクロ境界パスの遅延解析プログラム
US20030036894A1 (en) Method and apparatus for amortizing critical path computations
Turki et al. Towards synthetic benchmarks generator for CAD tool evaluation
WO2011155622A1 (ja) 回路合成装置、方法、及び、プログラム
CN113312865B (zh) 分割时钟筛选方法、装置、计算机设备和存储介质
Huang et al. A Two-Stage Method for Routing in Field-Programmable Gate Arrays with Time-Division Multiplexing

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: Room 27, 6th floor, No. 29 and 30, Lane 1775, Qiushan Road, Lingang New District, China (Shanghai) pilot Free Trade Zone, Pudong New Area, Shanghai, 201306

Patentee after: Shanghai Sierxin Technology Co.,Ltd.

Address before: Room 27, 6th floor, No. 29 and 30, Lane 1775, Qiushan Road, Lingang New District, China (Shanghai) pilot Free Trade Zone, Pudong New Area, Shanghai, 201306

Patentee before: Shanghai Guowei silcore Technology Co.,Ltd.