我的大学IV----Intel实习纪实
[color=#000000][font=宋体][size=10.5pt][size=10.5pt][font=Times New Roman][/font][/size][b][font=宋体][size=14pt]我的大学[/size][/font][/b][b][size=14pt][/size][/b]
[b][font=宋体][size=10.5pt]
--[/size][/font][/b][b][size=10.5pt][font=Times New Roman]Intel[/font][/size][/b][b][font=宋体][size=10.5pt]实习记实[/size][/font][/b][size=10.5pt][font=Times New Roman] [/font][/size][/size][/font][/color]
[color=#000000][font=宋体][size=10.5pt]初到北京几天,按照预先计划,去北京[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]公司进行面试。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]北京[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]公司位于中科院计算所附近。一下午先乘轻轨,又换坐汽车,到达[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]公司已是傍晚时分。我进入融科中心,直接来到了八楼[/size][/font][size=10.5pt][font=Times New Roman]----Intel[/font][/size][font=宋体][size=10.5pt]办公地点及实验室的所在。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]在前台登记完毕,随后贴上了专门的标识,在工作人员的带领下我走进了[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]。首先参观了硬件测试实验室。刚进入其中,心中不禁一颤,这才是真正的硬件实验室。实验台上放满了用以进行测试的仪器及电路板,这一幕是我在学校实验室所没见到过的。最吸引我的是那几块[/size][/font][size=10.5pt][font=Times New Roman]Xilinx[/font][/size][font=宋体][size=10.5pt]的个头很大的[/size][/font][size=10.5pt][font=Times New Roman]FPGA[/font][/size][font=宋体][size=10.5pt]芯片,当时我心中在说[/size][/font][font=宋体][size=10.5pt][font=Times New Roman]“[/font][/size][/font][font=宋体][size=10.5pt]太帅了[/size][/font][font=宋体][size=10.5pt][font=Times New Roman]”[/font][/size][/font][font=宋体][size=10.5pt]。后来经过询问才知道,他们在用[/size][/font][size=10.5pt][font=Times New Roman]FPGA[/font][/size][font=宋体][size=10.5pt]来测试[/size][/font][size=10.5pt][font=Times New Roman]Cache[/font][/size][font=宋体][size=10.5pt]。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]我被安置在一个较小的屋子里,不一会儿两名[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]的工程师走了进来,落座之后,正式的面试便开始了。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt][font=Times New Roman]“[/font][/size][/font][font=宋体][size=10.5pt]请你讲述一下你[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]杯作品的具体情况[/size][/font][font=Times New Roman][font=宋体][size=10.5pt]”[/size][/font][size=10.5pt][/size][/font][/color]
[color=#000000][font=宋体][size=10.5pt]于是,我开始对作品中的各个部件进行详尽的剖析。不停在书写板上圈圈点点,为得是让他们能够听得更明白。从控制器、电路、数据链路、传感器到操作系统等等,我力图讲到精练易懂。其实我心中一直在担心一件事情,就是他们会在我讲述的过程中,在电路方面问出一些过于专业或是要求进行量化的问题,还有就是问一些[/size][/font][size=10.5pt][font=Times New Roman]FPGA[/font][/size][font=宋体][size=10.5pt]方面的问题。因为我知道在[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]公司里大多数时候都是在作电路,[/size][/font][size=10.5pt][font=Times New Roman]FPGA[/font][/size][font=宋体][size=10.5pt]使用得很频繁。而这些工程师在这里工作起码也有五六年,所以他们是这方面的权威了。这样的话,就如同鸡蛋碰石头。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]果然,他们开始发问了。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt][font=Times New Roman]“[/font][/size][/font][font=宋体][size=10.5pt]你这个系统中控制器外部时钟多少?控制器有多少引脚?[/size][/font][font=Times New Roman][font=宋体][size=10.5pt]”[/size][/font][size=10.5pt][/size][/font][/color]
[color=#000000][font=Times New Roman][font=宋体][size=10.5pt]“[/size][/font][size=10.5pt]24MHz[/size][/font][font=宋体][size=10.5pt],[/size][/font][font=Times New Roman][size=10.5pt]44P[/size][font=宋体][size=10.5pt]”[/size][/font][size=10.5pt][/size][/font][/color]
[color=#000000][font=宋体][size=10.5pt][font=Times New Roman]“[/font][/size][/font][font=宋体][size=10.5pt]你知道我们这里频率上到[/size][/font][size=10.5pt][font=Times New Roman]1GHz[/font][/size][font=宋体][size=10.5pt]是什么样子的吗?我们这里有的芯片是[/size][/font][size=10.5pt][font=Times New Roman]1000[/font][/size][font=宋体][size=10.5pt]多个引脚,你觉和[/size][/font][size=10.5pt][font=Times New Roman]44[/font][/size][font=宋体][size=10.5pt]脚有什么本质上的区别吗?[/size][/font][font=Times New Roman][font=宋体][size=10.5pt]”[/size][/font][size=10.5pt][/size][/font][/color]
[color=#000000][font=宋体][size=10.5pt]我知道他有可能会问这样的问题,前面的第一个问题就是个引子。频率上到那种频率后在信号完整性会出现问题,这里用到的芯片显然比我用的芯片规模要大的多。我想我不能正面去回答这个问题,否则他们一定还会顺藤摸瓜问出更细的问题。我要把话题再拉回到[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]杯作品上来。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt][font=Times New Roman]“[/font][/size][/font][font=宋体][size=10.5pt]关于时钟频率,在我们的作品中,核心[/size][/font][size=10.5pt][font=Times New Roman]CPU[/font][/size][font=宋体][size=10.5pt]的频率是[/size][/font][size=10.5pt][font=Times New Roman]800MHz[/font][/size][font=宋体][size=10.5pt],我们在作核心部分的时候就是从板级开始作的。关于芯片引脚的问题,这里的芯片和作品中的控制器根本不是一个概念的东西,如果在作品中用[/size][/font][size=10.5pt][font=Times New Roman]1000[/font][/size][font=宋体][size=10.5pt]多个脚的芯片来作控制,显然不合适。[/size][/font][font=Times New Roman][font=宋体][size=10.5pt]”[/size][/font][size=10.5pt][/size][/font][/color]
[size=10.5pt][color=#000000][font=Times New Roman]……[/font][/color][/size]
[color=#000000][font=宋体][size=10.5pt]一翻翻地提问,我又一次次地作出回答,到后来,问题开始回到他们的本行了,很多是关于[/size][/font][size=10.5pt][font=Times New Roman]FPGA[/font][/size][font=宋体][size=10.5pt]的,这些并非我的强项,我只能尽力作答。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]几个小时过去了,他们最后问道:[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt][font=Times New Roman]“[/font][/size][/font][font=宋体][size=10.5pt]你想来这里研究哪一方面?[/size][/font][font=Times New Roman][font=宋体][size=10.5pt]”[/size][/font][size=10.5pt][/size][/font][/color]
[font=Times New Roman][color=#000000][font=宋体][size=10.5pt]“[/size][/font][size=10.5pt]ARM[/size][font=宋体][size=10.5pt]”[/size][/font][size=10.5pt][/size][/color][/font]
[color=#000000][font=宋体][size=10.5pt][font=Times New Roman]“[/font][/size][/font][font=宋体][size=10.5pt]呵[/size][/font][font=宋体][size=10.5pt],[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]没有[/size][/font][size=10.5pt][font=Times New Roman]ARM[/font][/size][font=宋体][size=10.5pt]了[/size][/font][font=宋体][size=10.5pt],[/size][/font][size=10.5pt][font=Times New Roman]Xscale[/font][/size][font=宋体][size=10.5pt]已经卖掉了。[/size][/font][font=Times New Roman][font=宋体][size=10.5pt]”[/size][/font][size=10.5pt][/size][/font][/color]
[color=#000000][font=Times New Roman][font=宋体][size=10.5pt]“[/size][/font][size=10.5pt]FPGA[/size][font=宋体][size=10.5pt]”[/size][/font][/font][font=宋体][size=10.5pt]其实我对[/size][/font][size=10.5pt][font=Times New Roman]FPGA[/font][/size][font=宋体][size=10.5pt]也不是很熟悉[/size][/font][font=宋体][size=10.5pt],[/size][/font][font=宋体][size=10.5pt]这里仿佛一种投其所好的意味了。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt][font=Times New Roman]“[/font][/size][/font][font=宋体][size=10.5pt]好的,就这样吧。[/size][/font][font=Times New Roman][font=宋体][size=10.5pt]”[/size][/font][size=10.5pt][/size][/font][/color]
[color=#000000][font=宋体][size=10.5pt]在[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]公司的面试就这样结束了,工作人员把我送上了电梯,送我出了融科大厦。我独自走了一段路程,此时天色已经较晚。回头看看高高悬于空中的[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]的标志,霓虹闪烁。这就是中关村的夜景了,中国最具[/size][/font][size=10.5pt][font=Times New Roman]IT[/font][/size][font=宋体][size=10.5pt]味道的地方。再往前走一段,是[/size][/font][size=10.5pt][font=Times New Roman]AMD[/font][/size][font=宋体][size=10.5pt]的办公大厦,标志同样高悬在上。心中想,他们谁将是处理器的霸主呢?呵,我似乎有点多管闲事了,我不禁自嘲。[/size][/font][size=10.5pt][/size][/color]
[size=10.5pt][font=Times New Roman][color=#000000] [/color][/font][/size]
[color=#000000][size=10.5pt][/size][/color] [color=#000000][size=10.5pt][font=Times New Roman]
[/font][/size][b][font=宋体][size=10.5pt]奋斗[/size][/font][/b][b][size=10.5pt][/size][/b][/color]
[color=#000000][font=宋体][size=10.5pt]次日,接到[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]的电话:[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt][font=Times New Roman]“[/font][/size][/font][font=宋体][size=10.5pt]我们这里有一题目,就是将原来用[/size][/font][size=10.5pt][font=Times New Roman]C[/font][/size][font=宋体][size=10.5pt]写的算法,转成硬件描述语言,不知你有没有兴趣?[/size][/font][font=Times New Roman][font=宋体][size=10.5pt]”[/size][/font][size=10.5pt][/size][/font][/color]
[color=#000000][font=宋体][size=10.5pt][font=Times New Roman]“[/font][/size][/font][font=宋体][size=10.5pt]也就是算法的硬实现吧,我很感兴趣。[/size][/font][font=宋体][size=10.5pt][font=Times New Roman]”[/font][/size][/font][font=宋体][size=10.5pt]以前想过硬实现方面的问题,没想到竟与[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]的题目不谋而合。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt][font=Times New Roman]“[/font][/size][/font][font=宋体][size=10.5pt]那好,现在我们会发一道题目到你邮箱里,如果你能在一个星期内完成,我们将进一步规划你实习的事宜。[/size][/font][font=Times New Roman][font=宋体][size=10.5pt]”[/size][/font][size=10.5pt][/size][/font][/color]
[color=#000000][font=宋体][size=10.5pt][font=Times New Roman]“[/font][/size][/font][font=宋体][size=10.5pt]好的,谢谢您。[/size][/font][font=Times New Roman][font=宋体][size=10.5pt]”[/size][/font][size=10.5pt][/size][/font][/color]
[color=#000000][font=宋体][size=10.5pt]很快,我的信箱里就收到了一封新的邮件。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]在题目中,包含了上千行的[/size][/font][size=10.5pt][font=Times New Roman]C++[/font][/size][font=宋体][size=10.5pt]代码,描述了一个用于统计计算的算法。其实刚拿到代码,我头就有点晕,不知道它具体实现的是什么功能。不过不管它的功能如何,按照题目的要求,都要保证在转为硬件描述语言后要使输出相同的结果。所以我第一步要作的是先把代码编译一遍,看一下输出。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]在它的源代码文件夹下有一个[/size][/font][size=10.5pt][font=Times New Roman]makefile[/font][/size][font=宋体][size=10.5pt],这就需要在[/size][/font][size=10.5pt][font=Times New Roman]linux[/font][/size][font=宋体][size=10.5pt]下进行编译。我找了一台装有[/size][/font][size=10.5pt][font=Times New Roman]linux[/font][/size][font=宋体][size=10.5pt]的计算机,对代码进行了成功编译。但当我把它运行起来的时候,我不尽吃了一惊,也感觉莫名奇妙[/size][/font][size=10.5pt][font=Times New Roman]----[/font][/size][font=宋体][size=10.5pt]它竟然没有任何输出。我离开了座位,开始踱来踱去思考这个问题。可以是当我再次看屏幕的时候,发现了一行[/size][/font][font=Times New Roman][font=宋体][size=10.5pt]“[/size][/font][size=10.5pt]run ok![/size][font=宋体][size=10.5pt]”[/size][/font][/font][font=宋体][size=10.5pt],随后是几个数据。我的天!这个程序运行了足足有三分钟啊。区区一千多行代码竟然运行了这么长时间。我的第一感觉是,这个算法一定很复杂,运算量一定很大,看来[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]是在故意为难我。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]这样足足一个星期的奋斗开始了[/size][/font][size=10.5pt][font=Times New Roman]……[/font][/size][/color]
[color=#000000][font=宋体][size=10.5pt]第一步是把现在的用[/size][/font][size=10.5pt][font=Times New Roman]C++[/font][/size][font=宋体][size=10.5pt]写成的算法钻研透,能够作到真正掌握它,知道它每一个细节。所以我花了整整一天的时候来研读算法。程序中除了与算法相关的内容,还有一些是调用[/size][/font][size=10.5pt][font=Times New Roman]linux[/font][/size][font=宋体][size=10.5pt]系统的一些[/size][/font][size=10.5pt][font=Times New Roman]API[/font][/size][font=宋体][size=10.5pt],来实现对程序运行时的监控,用来模拟硬件仿真。这些代码是与算法无关的,因此可以把它们剔除。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]剩下代码有很大一部分在描述一个数学模型,刚开始看那可是一头雾水。其实我最发怵看别人的代码,有一种自己的思想受制于人的感觉,多半时候都看不下去。但现在代码就摆在面前,还是要硬着头皮看。我想,我要想把这个算法看懂,我首先要把这个模型搞清楚。于是决定上网[/size][/font][size=10.5pt][font=Times New Roman]google[/font][/size][font=宋体][size=10.5pt]一下。[/size][/font][/color]
[color=#000000][font=宋体][size=10.5pt][size=10.5pt][color=#000000][font=Times New Roman]Google…. Google…. Google….[/font][/color][/size]
[color=#000000][font=宋体][size=10.5pt]呵,还不错,搜到了两个资料,虽然是[/size][/font][size=10.5pt][font=Times New Roman]E[/font][/size][font=宋体][size=10.5pt]文的,但还算是自然语言。仔细研读了一个上午,终于算是有了个眉目。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]这回再回到那一堆代码里,感觉才不那么抽象了。一看又是大半天,总算对它八九不离十了。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]我才明白它为什么要[/size][/font][size=10.5pt][font=Times New Roman]run[/font][/size][font=宋体][size=10.5pt]那么长时间了,也才领悟到为什么要进行算法的硬实现了。程序的功能是进行一种统计性的运算,设定一个动作重复[/size][/font][size=10.5pt][font=Times New Roman]400000000[/font][/size][font=宋体][size=10.5pt]次,最终统计它各种情况出现的概率,这漫长的三分钟就花在这个[/size][/font][size=10.5pt][font=Times New Roman]400000000[/font][/size][font=宋体][size=10.5pt]次上了。而如果把这些耗时很多的算法作成[/size][/font][size=10.5pt][font=Times New Roman]ASIC[/font][/size][font=宋体][size=10.5pt]的芯片,那就将会从数量级上缩短运行的时间,最终实现所谓的[/size][/font][size=10.5pt][font=Times New Roman]HPC[/font][/size][font=宋体][size=10.5pt](高性能计算)。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]要对现有代码有很深刻的了解,我想我有必要把它亲手改写成纯[/size][/font][size=10.5pt][font=Times New Roman]C[/font][/size][font=宋体][size=10.5pt]的,并且保证输出结果相同。这样不仅能够证明我已经掌握了该算法,也从一定程度上说明最终转为[/size][/font][size=10.5pt][font=Times New Roman]HDL[/font][/size][font=宋体][size=10.5pt]的可行性,同时其实也降低了转换的难度,从面向对象的[/size][/font][size=10.5pt][font=Times New Roman]C++[/font][/size][font=宋体][size=10.5pt]到面向过程的[/size][/font][size=10.5pt][font=Times New Roman]C[/font][/size][font=宋体][size=10.5pt],再从面向过程的[/size][/font][size=10.5pt][font=Times New Roman]C[/font][/size][font=宋体][size=10.5pt]到用于描述的[/size][/font][size=10.5pt][font=Times New Roman]HDL[/font][/size][font=宋体][size=10.5pt],此时我已经站在[/size][/font][size=10.5pt][font=Times New Roman]C[/font][/size][font=宋体][size=10.5pt]的层次上了,我有信心完成从[/size][/font][size=10.5pt][font=Times New Roman]C[/font][/size][font=宋体][size=10.5pt]到[/size][/font][size=10.5pt][font=Times New Roman]HDL[/font][/size][font=宋体][size=10.5pt]的转换。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][size=10.5pt][font=Times New Roman][color=#000000][font=宋体][size=10.5pt]我装上了久违的[/size][/font][size=10.5pt][font=Times New Roman]ISE[/font][/size][font=宋体][size=10.5pt],还是[/size][/font][size=10.5pt][font=Times New Roman]ModelSim[/font][/size][font=宋体][size=10.5pt],这些软件在[/size][/font][size=10.5pt][font=Times New Roman]Sunwise[/font][/size][font=宋体][size=10.5pt]的时候都接触到过,现在又拿来安装,还算比较亲切,不过还需要温习一下。于是,又从网上[/size][/font][size=10.5pt][font=Times New Roman]baidu[/font][/size][font=宋体][size=10.5pt]了一些相关资料,熟悉了半天的开发软件,感觉[/size][/font][size=10.5pt][font=Times New Roman]ISE[/font][/size][font=宋体][size=10.5pt]的环境确实比[/size][/font][size=10.5pt][font=Times New Roman]Altera[/font][/size][font=宋体][size=10.5pt]的[/size][/font][size=10.5pt][font=Times New Roman]MAXPLUS[/font][/size][font=宋体][size=10.5pt]和[/size][/font][size=10.5pt][font=Times New Roman]QUARTUS[/font][/size][font=宋体][size=10.5pt]要好,还有就是重新见识到了[/size][/font][size=10.5pt][font=Times New Roman]Modelsim[/font][/size][font=宋体][size=10.5pt]的强大。[/size][/font][size=10.5pt][font=Times New Roman]OK[/font][/size][font=宋体][size=10.5pt],欲善其事,先利其器![/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]其实从[/size][/font][size=10.5pt][font=Times New Roman]C++[/font][/size][font=宋体][size=10.5pt]到[/size][/font][size=10.5pt][font=Times New Roman]C[/font][/size][font=宋体][size=10.5pt],再到熟悉[/size][/font][size=10.5pt][font=Times New Roman]IDE[/font][/size][font=宋体][size=10.5pt]都算简单,最难的部分在于[/size][/font][size=10.5pt][font=Times New Roman]HDL[/font][/size][font=宋体][size=10.5pt]。对于[/size][/font][size=10.5pt][font=Times New Roman]VHDL[/font][/size][font=宋体][size=10.5pt],其实我也是个二把刀,原来学过的那点皮毛到现在已经剩不下什么了。但对于基本语法和描述结构还在脑子里。所以我打算来一个星火燎原,凭着这点仅剩的零星知识,编干编学,估计这样的学习效果更好呢。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]毕竟这里不比在哈尔滨,纸质的资料有限,所以我又从网上下了些[/size][/font][size=10.5pt][font=Times New Roman]HDL[/font][/size][font=宋体][size=10.5pt]的教程,就这样看一段[/size][/font][size=10.5pt][font=Times New Roman]C[/font][/size][font=宋体][size=10.5pt]的函数,查一查资料,编一些代码。如此重复,几百行代码不到一天的时间已经转换了[/size][/font][size=10.5pt][font=Times New Roman]80%[/font][/size][font=宋体][size=10.5pt]了。其实,大部分和底层电路的关系不是很紧密,转换的过程考虑得只是逻辑实现方式的转变。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][size=10.5pt][color=#000000][size=10.5pt][/size][/color][/size][/color][/font][/size][/color][/size][/font][/color] [color=#000000][font=宋体][size=10.5pt]算法的逻辑是[/size][/font][size=10.5pt][font=Times New Roman]80%[/font][/size][font=宋体][size=10.5pt],而剩下的[/size][/font][size=10.5pt][font=Times New Roman]20%[/font][/size][font=宋体][size=10.5pt]是什么呢?那不和硬件紧密相关了。也就是说,这[/size][/font][size=10.5pt][font=Times New Roman]20%[/font][/size][font=宋体][size=10.5pt]的逻辑转换过来,硬件上是不能直接实现的,这就需要一个折中的办法了。用现有硬实通过一定的手段间接对这部分逻辑进行实现。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][size=10.5pt][color=#000000][font=宋体][size=10.5pt]在[/size][/font][size=10.5pt][font=Times New Roman]C[/font][/size][font=宋体][size=10.5pt]中,我们在进行数学计算时,会经常遇到浮点小点,也会经常遇到一些数学上的定义,如[/size][/font][size=10.5pt][font=Times New Roman]Sin[/font][/size][font=宋体][size=10.5pt]、[/size][/font][size=10.5pt][font=Times New Roman]Cos[/font][/size][font=宋体][size=10.5pt]等等,这个时候我们通常不会去自己实现这些函数,而是直接调用数学库。对于库内的具体实现我们是不关心的。但在[/size][/font][size=10.5pt][font=Times New Roman]HDL[/font][/size][font=宋体][size=10.5pt]中是不能对浮点直接进行计算的,同时也不支持相应的库函数,这就是一个最大的难题。这如同一座火焰山,让我无法逾越,到最后实现我足足花费了三天的时间。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]首先要攻克的第一个难题就是对算法中的一些涉及三角计算的函数的实现。刚开始我的想法是采用麦克劳伦展开,然后取前四项之各,对三角函数进行逼近。但我转眼又想,这样作的计算量是很大的,因为展开式中会有一些阶乘项和指数运算,也许我可以找到[/size][/font][size=10.5pt][font=Times New Roman]C[/font][/size][font=宋体][size=10.5pt]的数学为的源代码,那里面或许会有更好的算法。[/size][/font][size=10.5pt][font=Times New Roman]Windows[/font][/size][font=宋体][size=10.5pt]里是不太可能了,还是到开源的[/size][/font][size=10.5pt][font=Times New Roman]linux[/font][/size][font=宋体][size=10.5pt]里去找吧,经过千辛万苦我终于找到了一些三角函数的源代码,但打开一看,我就快吐血了[/size][/font][size=10.5pt][font=Times New Roman]----[/font][/size][font=宋体][size=10.5pt]原来数学库里的函数都是用汇编写的,晕死!我还是回到原来的方法,我先用[/size][/font][size=10.5pt][font=Times New Roman]C[/font][/size][font=宋体][size=10.5pt]对麦克劳伦展开进行实现,调试成功后再转为[/size][/font][size=10.5pt][font=Times New Roman]HDL[/font][/size][font=宋体][size=10.5pt],然后在仿真中看函数的输出波形,以保证函数的正确。[/size][/font][/color]
[color=#000000][font=宋体][size=10.5pt][color=#000000][font=宋体][size=10.5pt]在[/size][/font][size=10.5pt][font=Times New Roman]C[/font][/size][font=宋体][size=10.5pt]里调试,转为[/size][/font][size=10.5pt][font=Times New Roman]HDL[/font][/size][font=宋体][size=10.5pt],仿真,看波形,再修改,仿真[/size][/font][size=10.5pt][font=Times New Roman]……[/font][/size][font=宋体][size=10.5pt]这个过程重复了几十遍,一个个的函数在仿真中通过,离最终整体的算法实现又进了一步。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]此时,最大的困难就是浮点运算了。如果要我设计出一整套浮点运算库,这显然不现实,因为我只有一天半的时间。于是,我需要去询问[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]是否可以提供现成的浮点运算库。上午我的[/size][/font][size=10.5pt][font=Times New Roman]E-Mail[/font][/size][font=宋体][size=10.5pt]发了出去,同时在[/size][/font][size=10.5pt][font=Times New Roman]E-Mail[/font][/size][font=宋体][size=10.5pt]里面也附带了我现阶段的研究结果。下午的时候,收到了来自[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]的邮件,里面首先对我的研究结果进行了肯定,另外对于浮点运算库提供了支持。[/size][/font][size=10.5pt][/size][/color]
[size=10.5pt][color=#000000][font=宋体][size=10.5pt]他们提供了一个现成的德国人写的浮点库,专门为[/size][/font][size=10.5pt][font=Times New Roman]FPGA[/font][/size][font=宋体][size=10.5pt]设计。我喜出望外,最大的难题迎刃而解了。呵[/size][/font][size=10.5pt][font=Times New Roman]……[/font][/size][/color]
[color=#000000][font=宋体][size=10.5pt]这个库很大,我要把它加到我的程序里来,我先要把它编译成[/size][/font][size=10.5pt][font=Times New Roman]Library[/font][/size][font=宋体][size=10.5pt]。也许是我的计算机太慢,足足花了一下午的时候,才把整个库编译出来。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]接下来一晚上的时间,先对这个库进行一个简单的功能上的测试,看看它是否计算正确。一项项地进行测试:浮点的加、减、乘、除、方根等很多部件均通过测试,在完成了对库的测试后,我又写一个测试报告,上交给了[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt],并告知他们,那个算法现在已经可以在[/size][/font][size=10.5pt][font=Times New Roman]FPGA[/font][/size][font=宋体][size=10.5pt]上运行了。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]到此,我才得到[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]的承诺,同意我进入其中实习了。[/size][/font][size=10.5pt][/size][/color]
[color=#000000][font=宋体][size=10.5pt]其实那些[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]的工程师真的是已经工作了五六年的老手了,我承认在经验上确实不可同日而语。其实后来听到了些消息,这道题在[/size][/font][size=10.5pt][font=Times New Roman]Intel[/font][/size][font=宋体][size=10.5pt]内部作起来也是一个较大的工程,那些工程师也在吃惊我能如此快的完成。呵,这也为我增加了不少的信心,争取进去之后能有更好的表现。[/size][/font][/color]
[color=#000000]
[/color][size=10.5pt][font=Times New Roman][color=#000000] [/color][/font][/size]
[color=#000000][size=10.5pt][font=Times New Roman]
[/font][/size][font=宋体][size=10.5pt](待续)[/size][/font][size=10.5pt][font=Times New Roman]
[/font][/size][/color]
[color=#000000][size=10.5pt][font=Times New Roman]
[/font][/size][font=宋体][size=10.5pt]于振南[/size][/font][size=10.5pt][/size][/color]
[color=#000000][size=10.5pt][font=Times New Roman]
[/font][/size][font=宋体][size=10.5pt]哈尔滨工程大学计算机科学与技术学院[/size][/font][size=10.5pt][font=Times New Roman]
[/font][/size][/color]
[/size][/size][/font][size=10.5pt][/size][/color][/size][/color] 厉害啊 :rolleyes: ....基本上都看不懂的说.... LZ好好努力~早日成功。 楼主是做技术的人,加油。
希望看到咱工程的强人成功。 虽然看不懂,但支持,校友加油啊! 不是吧 佩服,佩服。当初应该学计算机。 [quote]原帖由 [i]cookie[/i] 于 2007-4-24 17:17 发表 [url=http://www.heubbs.com/redirect.php?goto=findpost&pid=189307&ptid=16084][img]http://www.heubbs.com/images/common/back.gif[/img][/url]
:rolleyes: ....基本上都看不懂的说.... [/quote]
写程序写顺手了
除了术语多
逻辑性很强的说~
:o 赞~ 我的大学1、2、3呢?
在帖子做个链接吧
麻烦版主了
:o [font=Arial]于振南[/font]
[font=Arial][/font]
[font=Arial]我打算把你的‘我的大学1-4’ 转载于[/font][url=http://hrbeu.club.chinaren.com][b][font=Arial][color=darkorange]Chinaren哈工程校友[/color][/font][/b][/url]
[font=Arial][/font]
[font=Arial]你意下如何?[/font] 呵呵
应该没有问题的
楼主的文章在内网也发过
还有在工学周报也发表啦
我看过 [quote]原帖由 [i]小羊咩咩[/i] 于 2007-7-11 23:46 发表 [url=http://www.heubbs.com/redirect.php?goto=findpost&pid=212117&ptid=16084][img]http://www.heubbs.com/images/common/back.gif[/img][/url]
呵呵
应该没有问题的
楼主的文章在内网也发过
还有在工学周报也发表啦
我看过 [/quote]
工学周报也发表啦
:o 确定? 那我就转了。酒香也怕巷子深~好事应该传千里的~ 呵呵 支持啊
页:
[1]