本站首页    管理页面    写新日志    退出                                          --==~欢迎光临FoxWolf的Blog~==--   



 日志搜索


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告


我的分类

日志更新

最新评论

留言板

链接

 


Blog信息
blog名称:FoxWolf
日志总数:127
评论数量:246
留言数量:0
访问次数:851107
建立时间:2006年5月31日




[其它]北京神州龙芯公司笔试题
文章收藏,  软件技术,  电脑与网络

FoxWolf 发表于 2007/11/10 1:15:03

1.目前集成电路产业发展到IP/Soc阶段,你是怎么理解IP复用技术的?   首先声明什么是IP产业 :    IP(Intellectual Property)就是常说的知识产权。美国Dataquest咨询公司将半导体产业的IP定义为用于ASIC、ASSP、PLD等当中,并且是预先设计好的电路功能模块。IP、固IP和硬IP。  软IP用计算机高级语言的形式描述功能块的行为,但是并不涉及用什么电路和电路元件实现这些行为。软IP的最终产品基本上与通常的应用软件大同小异,开发过程与应用软件也十分相象,只是所需的开发软、硬件环境,尤其工具软件要昂贵很多。软IP的设计周期短,设计投入少,由于不涉及物理实现,为后续设计留有很大的发挥空间,增大了IP的灵活性和适应性。当然软IP的一个不可避免的弱点是:会有一定比例的后续工序无法适应软IP设计,从而造成一定程度的软IP修正。  固IP是完成了综合的功能块,有较大的设计深度,以网表的形式提交客户使用。如果客户与固IP使用同一个生产线的单元库,IP的成功率会比较高。  硬IP提供设计的最终阶段产品:掩膜。随着设计深度的提高,后续工序所需要做的事情就越少,当然,灵活性也就越少。不同的客户可以根据自己的需要订购不同的IP产品。 SOC设计中IP复用的策略   在SoC中进行IP复用可获得更高的生产力,但通常要经过多次的实验和纠错才能成功地将IP集成到SoC中。成功的IP复用并非简单的错误修复过程。为了顺利地集成IP,业界领袖和IP提供商应该解决相关的分析和验证问题,从而保证将IP无缝地集成到SoC中。 专用集成电路(ASIC)行业是为了满足低成本和快速上市时间的要求应运而生的,在过去的二十年内,这一行业经历了各种新技术的升级并成功地将数千万个逻辑门集成在一块单芯片上。由于ASIC设计技能的增强,设计工程师可在单一芯片上集成更多的功能。然而,尽管业界目前已达到较高的系统级芯片制造水平,在设计能力、方法和工具上却相对落后,这一点阻碍了芯片向更高的复杂度发展(图)。 上世纪八十年代后期,ASIC公司推出各种专用标准产品(许可Sparc和MIPS等计算引擎就是其中的成功范例),由此构建相关的标准产品。IP业务随之产生,并出现了设计复用这一概念。通过复用可增强设计生产力,而创建ASIC单元库便是基础工作的第一步。ASIC库也是首批具有一定知识产权(IP)保护的技术之一。500)this.width=500'> 新生的ASIC公司和系统公司均可设计带有功能构建模块和IP内核的芯片。为了满足它们不断增长的需求,不久,SoC行业也出现了。在SoC发展的早期阶段,SoC设计包括一个计算引擎,它依据设计者原有经验,采用不同的片上总线结构设计而成。因此,每次在新设计中使用自行设计的构建模块或IP内核时,都必须与专用总线进行接口。SoC是ASIC方法的一个演进。 IP内核是作为ASIC总体技术的一部分而出现的,然而,要在ASIC中使用IP内核看来颇为困难。设计者为此必须重复许多相同步骤,就像多年来他们在客户订制产品中所做的那样。 通过一些原始的方法可将IP内核集成到标准产品中,或者可采用某种方法简化这一工序。另一方面,由于需要将各种IP内核快速地置入不同的SoC ASIC中,因此在SoC或IP-ASIC设计中使用和复用IP时的方法也就更为精密细致。 为了支持IP复用,IP组织必须建立一个系统,为每种特殊的IP模块提供应用级专门技术。包括满足寄存器传输级(RTL)、兼容、综合和各种后端要求,并解决其它客户在设计应用中面临的问题。客户由于没有足够的时间或资源来深入了解产品设计过程中所需的各种IP,从而为厂商必须提供相关的专门技术提供了机会。 为了满足客户的上市时间要求,厂商需要获得有关复杂IP内核的各项功能和应用的所有资料。例如,当客户想在设计中采用USB 2.0 输入/输出管线时,他们希望不花时间学习有关USB 2.0的标准协议,而是由IP供应商解决在系统测试中出现的内核测试和验证等问题,并提供总线接口和内核专用DMA引擎所需的设计和验证服务。500)this.width=500'> 这一例子表明,成功的IP复用并不仅仅是简单的错误修补过程。它需要成套的经验和技能,才能创造一个IP无缝复用环境。使用IP进行SoC设计的领先厂商必须建立起富有经验的设计和应用队伍,并配备成熟的设计自动化工具。 正是以上这些资源将ASIC公司和原始IP提供商(如果IP是由第三方提供的,则是授权者)联系在一起。它涉及到IP规范、应用、性能和兼容性的方方面面。对首次使用新型或特殊IP的领先公司而言,只有经历了一系列的试验和纠错,才能将IP集成到SoC中。 在验证和集成新的IP内核时,拥有相关资源来实施一个可行性方案也十分重要。例如,即使过去用过处理器专用缓存子系统或10G以太网媒体接入控制器等IP,如果不了解这些器件,便会妨碍芯片的设计和验证,并极大地拖延进度。 业界必须为IP产品提供各种实施方法。富士通的方法包括问题分析和验证过程,由熟悉某种专用IP内核的工程师迅速追踪问题并提供解决方案。由于某些IP还是新产品,不够成熟而且缺乏现场数据,因此它的质量会有所差异。IP测试工具的质量也会影响IP质量。除此之外,如果验证方法不够精深或强大也会造成设计错误。 IP的授权者也应尽其所能。他们必须明白自己的责任所在,并精心选拔那些熟悉IP并能管理相关业务的工程师组建成技术队伍。 为了成功地复用IP,开发商必须处理好SoC或IP-ASIC设计中的技术和流程问题。如果没有处理好这些问题,可能会浪费资源,且影响到客户与厂商的合作关系。 受其开发任务和商业模式的限制,EDA公司只能专注于设计自动化工具。技术问题应该交由SoC或IP-ASIC服务提供商来处理。随着设计的复杂度越来越大,对IP复用的需求也会越来越大。只有相关的支持机构相互团结起来(表),才能促成SoC或IP-ASIC设计中的无缝集成。 作者:Ray Abrishami 请写出bootloader的简单流程 bootloader 是嵌入式系统上的启动首先执行的一段程序,一般分为stage1和stage2两个阶段: stage1 : (1) 配置本阶段需要用的硬件设备。 (2) 为bootloader的stage2阶段分配需要的内存空间。 (3) 拷贝bootloader的stage2到RAM空间中。 (4) 初始化堆栈。 (5) 跳转到C语言的入口。 stage2 : (1) 初始化本阶段需要的硬件设备。 (2) 检测系统内存映射(memory map)。 (3) 将kernel映像和根文件系统映像从flash中读到RAM空间中。 (4) 为内核设置启动参数。 (5) 调用内核。   请给出你所知道的嵌入式开发中的所有调试方法? (1) 用LED闪灯的亮灭代表特定的信息。 (2) 完成串口驱动, 调用printf()来打印特定的输出信息。 (3) 用AXD 实时的跟踪。 (4) 调试内核时用printk()。 (5) 查看/proc文件系统的特定的信息, 例如:cat /proc/devices    cat /proc/interrupts. (6) 用示波器来查看硬件上输出的波形是否正确。 (7) 查看芯片的特定的读写信号线,和控制信号线。   通用的操作系统和实时操作系统(RTOS)的区别 通用操作系统的设计注重每次执行的平均响应时间而不关心某次特定执行的响应时间。通用操作系统中采用的很多策略和技巧都体现出了这种设计原则。 对于实时操作系统,它除了要满足应用的功能需求以外,更重要的是还要满足应用提出的实时性要求,而组成一个应用的众多实时任务对于实时性的要求是各不相同的,此外实时任务之间可能还会有一些复杂的关联和同步关系,如执行顺序限制、共享资源的互斥访问要求等,这就为系统实时性的保证带来了很大的困难。因此,实时操作系统所遵循的最重要的设计原则是:采用各种算法和策略,始终保证系统行为的可预测性predictability) 可预测性是指在系统运行的任何时刻,在任何情况下,实时操作系统的资源调配策略都能为争夺资源(包括CPU、内存、网络带宽等)的多个实时任务合理地分配资源,使每个实时任务的实时性要求都能得到满足。与通用操作系统不同,实时操作系统注重的不是系统的平均表现,而是要求每个实时任务在最坏情况下都要满足其实时性要求,也就是说,实时操作系统注重的是个体表现,更准确地讲是个体最坏情况表现。 几个主要差别的地方: (1)任务调度策略不同。 (2)内存管理方式不同。 (3)中断处理方式。 (3)系统管理方式不同。   堆和栈的区别是什么?(经典转载) 主要的区别由以下几点:             1、管理方式不同;             2、空间大小不同;             3、能否产生碎片不同;             4、生长方向不同;             5、分配方式不同;             6、分配效率不同;   管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。    空间大小:一般来讲在32位系统下,堆内存可以达到4G的空间,从这个角度来看堆内存几乎是没有什么限制的。但是对于栈来讲,一般都是有一定的空间大小的,例如,在VC6下面,默认的栈空间大小是1M(好像是,记不清楚了)。当然,我们可以修改:             打开工程,依次操作菜单如下:Project->Setting->Link,在Category   中选中Output,然后在Reserve中设定堆栈的最大值和commit。     注意:reserve最小值为4Byte;commit是保留在虚拟内存的页文件里面,它设置的较大会使栈开辟较大的值,可能增加内存的开销和启动时间。      碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可能有一个内存块从栈中间弹出,在他弹出之前,在他上面的后进的栈内容已经被弹出,详细的可以参考数据结构,这里我们就不再一一讨论了。      生长方向:对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方向是向下的,是向着内存地址减小的方向增长。      分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。      分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会分到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多。      从这里我们可以看到,堆和栈相比,由于大量new/delete的使用,容易造成大量的内存碎片;由于没有专门的系统支持,效率很低;由于可能引发用户态和核心态的切换,内存的申请,代价变得更加昂贵。所以栈在程序中是应用最广泛的,就算是函数的调用也利用栈去完成,函数调用过程中的参数,返回地址,EBP和局部变量都采用栈的方式存放。所以,我们推荐大家尽量用栈,而不是用堆。      栈有如此众多的好处,但是由于和堆相比不是那么灵活,有时候分配大量的内存空间,还是用堆好一些。             无论是堆还是栈,都要防止越界现象的发生(除非你是故意使其越界),因为越界的结果要么是程序崩溃,要么是摧毁程序的堆、栈结构,产生以想不到的结果,就算是在你的程序运行过程中,没有发生上面的问题,你还是要小心,说不定什么时候就崩掉,那时候debug可是相当困难的:)             对了,还有一件事,如果有人把堆栈合起来说,那它的意思是栈,可不是堆,呵呵,清楚了?    进程和线程的区别 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.   CSIC与RISC的本质区别是什么?你了解的CPU中,哪些是RISC指令集的?   当接触一新CPU时商家会首先描述它是RISC指令集,这意味着什么,从这个描述你能了解多少CPU特性信息? 复杂指令集计算机(CISC)  长期来,计算机性能的提高往往是通过增加硬件的复杂性来获得.随着集成电路技术.特别是VLSI(超大规模集成电路)技术的迅速发展,为了软件编程方便和提高程序的运行速度,硬件工程师采用的办法是不断增加可实现复杂功能的指令和多种灵活的编址方式.甚至某些指令可支持高级语言语句归类后的复杂操作.至使硬件越来越复杂,造价也相应提高.为实现复杂操作,微处理器除向程序员提供类似各种寄存器和机器指令功能外.还通过存于只读存贮器(ROM)中的微程序来实现其极强的功能 ,傲处理在分析每一条指令之后执行一系列初级指令运算来完成所需的功能,这种设计的型式被称为复杂指令集计算机(Complex Instruction Set Computer-CISC)结构.一般CISC计算机所含的指令数目至少300条以上,有的甚至超过500条.精简指令集计算机(RISC)  采用复杂指令系统的计算机有着较强的处理高级语言的能力.这对提高计算机的性能是有益的.当计算机的设计沿着这条道路发展时.有些人没有随波逐流.他们回过头去看一看过去走过的道路,开始怀疑这种传统的做法:IBM公司没在纽约Yorktown的JhomasI.Wason研究中心于1975年组织力量研究指令系统的合理性问题.因为当时已感到,日趋庞杂的指令系统不但不易实现.而且还可能降低系统性能.1979年以帕特逊教授为首的一批科学家也开始在美国加册大学伯克莱分校开展这一研究.结果表明,CISC存在许多缺点.首先.在这种计算机中.各种指令的使用率相差悬殊:一个典型程序的运算过程所使用的80%指令.只占一个处理器指令系统的20%.事实上最频繁使用的指令是取、存和加这些最简单的指令.这样-来,长期致力于复杂指令系统的设计,实际上是在设计一种难得在实践中用得上的指令系统的处理器.同时.复杂的指令系统必然带来结构的复杂性.这不但增加了设计的时间与成本还容易造成设计失误.此外.尽管VLSI技术现在已达到很高的水平,但也很难把CISC的全部硬件做在一个芯片上,这也妨碍单片计算机的发展.在CISC中,许多复杂指令需要极复杂的操作,这类指令多数是某种高级语言的直接翻版,因而通用性差.由于采用二级的微码执行方式,它也降低那些被频繁调用的简单指令系统的运行速度.因而.针对CISC的这些弊病.帕特逊等人提出了精简指令的设想即指令系统应当只包含那些使用频率很高的少量指令.并提供一些必要的指令以支持操作系统和高级语言.按照这个原则发展而成的计算机被称为精简指令集计算机(Reduced Instruction Set Computer-RISC)结构.简称RISC. CISC与RISC的区别       我们经常谈论有关"PC"与"Macintosh"的话题,但是又有多少人知道以Intel公司X86为核心的PC系列正是基于CISC体系结构,而 Apple公司的Macintosh则是基于RISC体系结构,CISC与RISC到底有何区别?  从硬件角度来看CISC处理的是不等长指令集,它必须对不等长指令进行分割,因此在执行单一指令的时候需要进行较多的处理工作。而RISC执行的是等长精简指令集,CPU在执行指令的时候速度较快且性能稳定。因此在并行处理方面RISC明显优于CISC,RISC可同时执行多条指令,它可将一条指令分割成若干个进程或线程,交由多个处理器同时执行。由于RISC执行的是精简指令集,所以它的制造工艺简单且成本低廉。  从软件角度来看,CISC运行的则是我们所熟识的DOS、Windows操作系统。而且它拥有大量的应用程序。因为全世界有65%以上的软件厂商都理为基于CISC体系结构的PC及其兼容机服务的,象赫赫有名的Microsoft就是其中的一家。而RISC在此方面却显得有些势单力薄。虽然在RISC上也可运行DOS、Windows,但是需要一个翻译过程,所以运行速度要慢许多。  目前CISC与RISC正在逐步走向融合,Pentium Pro、Nx586、K5就是一个最明显的例子,它们的内核都是基于RISC体系结构的。他们接受CISC指令后将其分解分类成RISC指令以便在遇一时间内能够执行多条指令。由此可见,下一代的CPU将融合CISC与RISC两种技术,从软件与硬件方面看二者会取长补短。 读以上内容后我的理解是: CISC通常使用多个系统时钟来执行单个指令,如51单片机用12个时钟周期才能完成一条指令的取,分析,执行过程,而RISC则不用RISC处理器只使用一个时钟周期执行一条指令,而RISC通常使用流水线结构,即执行一条指令时取下一条指令,这些在同一时钟周期内完成。   IA-32处理器是基于CISC体系结构的,而ARM则是RISC的代表。RISC指令集与CISC指令集相比有以下特点: 1简单的指令集——RISC指令集只提供很有限的操作,基本上单周期执行每条指令,其指令长度也是固定的。 2Load-Store   结构——在RISC   中,CPU并不会对内存中的数据进行操作,所有的计算都要求在寄存器中完成。而寄存器和内存的通信则由单独的指令来完成。而在CSIC中,CPU是可以直接对内存进行操作的。 3更多的寄存器——和CISC   相比,基于RISC的处理器有更多的通用寄存器可以使用,且每个寄存器都可以进行数据存储或者寻址。 在应用方面,Intel的IA-32和IA-64架构处理器用于个人计算机和服务器,ARM处理器更多地用于嵌入式领域。   你是否了解Pipeline技术?给出简单的五级流水线模型。 pipeline是指流水线作业, 一般是将一个复杂费时的任务划分成大致相等的几个小的步骤, 以提高处理连续任务的速度和最优使用资源的目的.典型的例子是处理器设计中把一个指令的处理分成若干占用时间大致相等的独立的步骤,例如取指令,解码,执行,内存操作等, 这样可以提高处理器的处理速度.   ARM9中的5级整数流水线什么叫整数流水线,   是指 整数运算核 的流水线,这是相对于有浮点协处理器的CPU来说的比如经典奔腾,就有整数运算核核浮点协处理器,它的每条整数流水线都分为四级流水,而浮点流水又分为八级流水。流水线的工作方式就象工业生产上的装配流水线。在CPU中由5—6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5—6步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高CPU的时钟频率,并通过不同单元的同时运行来提高整体运算速度。流水线越长分的步骤越细,主频就可以做的越高,例如Pentium 4的流水线就长达20级。因此它的主频可以做的很高。但整体速度并不一定会随主频相应提高的再说说怎样计算CPU、特别是流水线速度,以最简单的经典奔腾整数核来说吧:它的整数核流水线 分为四级流水,即指令预取、译码、执行、写回结果,我们来分析下流水线下的指令执行时间核步骤:顺序执行时 CLK1 CLK2 CLK3 CLK4 CLK5 CLK6 CLK7 指令1 预取 译码 执行 写回 指令2 预取 译码 执行 写回 指令3 预取 译码 执行 写回 指令4 预取 译码 执行 写回 第一条开始 第一条执行完 可以看出,顺序执行时除了前面几条指令后面的都能做到1CLk1条指令,确实很快;有跳转时: CLK1 CLK2 CLK3 CLK4 CLK5 CLK6 CLK7 CLK8 指令1 预取 译码 执行 写回 指令2跳转 预取 译码 执行 写回 指令3正确 预取 译码 执行 写回 指令3跳 预取 译码 执行 写回 第一条开始 第一条执行完 有跳转时,如果预测正确会在CLK5执行第三条指令(不影响速度)如果预测错误,就得在CLK5重新启动指令3的预取、译码、执行、写回过程,这条指令就慢了2个CLK,对于Pentium 4的20级流水线,那就不是慢一点点了,事实上也确实如此但是流水线过长也带来了一定副作用,很可能会出现主频较高的CPU实际运算速度较低的现象,Intel的奔腾4就出现了这种情况,它的1.4G主频CPU ,其运算性能却远远比不上AMD 1.2G的速龙甚至奔腾III 1G。呵呵,当初被INTEL忽悠了的人可真不少啊:-)


阅读全文(4867) | 回复(3) | 编辑 | 精华
 


回复:北京神州龙芯公司笔试题
文章收藏,  软件技术,  电脑与网络

123(游客)发表评论于2007/11/22 15:52:48

就用这么烂的一个译文作标准答案? 我不信有人看了这标准答案能知道他说的是什么以下为blog主人的回复: 不是标准答案,参考用。认为对你没有参考,你可以自己去找答案(反正题目还在)。


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:北京神州龙芯公司笔试题
文章收藏,  软件技术,  电脑与网络

数据挖掘青年发表评论于2007/11/13 16:11:15

大都是体系结构的知识哦。虽然本科学过,但也就是混个脸熟。

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:北京神州龙芯公司笔试题
文章收藏,  软件技术,  电脑与网络

真不准发表评论于2007/11/12 23:42:02

看了此贴,俺这个学软件的又明确了许多概念!

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.281 second(s), page refreshed 144777058 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号