科学网

 找回密码
  注册

tag 标签: FPGA

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

再谈自己设计制造CPU与计算机
热度 1 accsys 2017-11-22 19:33
姜咏江 由于中国的计算机界长期以来一直吃“软饭”,故而一说制造计算机,人们就认为是“组装一台计算机”。十多年前我在中国计算机学会的“反造假大会”上,提出要精通计算机,就必须要自己制造计算机的时候,就有权威者坚决地否定说:“不可能!”其实那时我用 FPGA 设计制造的计算机 PMC110 和 PMC362 已经成功了。我为那个个年迈的权威感到可悲。时至今日,如果我们还是如此认识计算机核心部件的设计制造,也许会比那位权威老者更加可悲。 计算机设计制造设计的科学知识确实不少,其中有数学、电学、材料学,还有计算机的系统理论和软硬件方法,自然也需要有电子元器件的知识和技术。看起来内容广泛,理论和技术十分庞大。但是,计算机成为一个独立的设备,并不见得上面提到的学科知识全部都要面面俱到,而是系统地运用了其中相关知识而已。这些知识对计算机设计制造的人,如是今完全可以掌握和运用的。如果说二十多年前,未出现 FPGA ,说一个人自己设计制造一台像样的计算机,那确实是“天方夜谭”。不成的原因在于计算机器件制造技术个人无法掌握。自从出了现场可编程阵列器件 FPGA 之后,这样个人无法实现的器件生产模式,已经一去不再复返了。有了 FPGA ,只要你个人有智慧,什么样的计算机核心设备你都可以造出来。 当然,自己设计制造计算机,哪怕是最核心的计算机,也绝非是轻而易举的事情。它需要你有扎实的计算机系统知识,要有数学和电子学的必要知识,要会电子电路的设计与制作技术,总之,一切与计算机从无到有的,用 FPGA 设计制作技术和方法,你都要具备。 设计计算机,你要会用电子电路设计软件,会进行逻辑器件设计,譬如设计计算机的加减法运算器、寄存器、计数器、译码器、节拍器、存储器、输入输出缓冲设备等,还要能够用你的逻辑,将这些器件组织成,能够进行数据按照需求进行传输处理的结构。在此基础上,你才能够根据需要,设计计算机要完成的任务,并且能够将完成的任务,分成最基本的独立的基本功能,使任务能够通过这些基本功能的编排实现。这些基本的功能,由数据在你设计的那些器件上得到处理实现。这些基本功能就是你设计的计算机的指令系统,是人们能够运用计算机处理事务的保证。用户将来运用你设计的指令系统可以编程,将程序输入到你的计算机中去执行。每条指令如何转化成计算机设备的动作,这要求作出计算机指令执行的控制逻辑,这就是计算机的控制器最核心的部分——控制矩阵。 要让用户能够使用你设计制作的计算机工作,就必须解决程序如何输入到计算机中,如何恰当地执行,人机如何交互等等,这一系列的问题解决你都要设计出来。非但如此,你还要写出供用户使用的程序编辑和编译程序,解决输入输出方式等等。总而言之,计算机从设计制作到能够执行用户程序之间的一切事情,都需要你为用户准备好。 上面的一系列问题确实很复杂,确实需要有大学本科的培训,才可以个人实现计算机的设计制作。但目前由一个人设计制造计算机已经不是不可能的事情了。笔者这十余年的计算机设计制作经历,已经清楚地表明个人能够完成计算机设计制造的任务,就看我们是否有这样的雄心和气魄。 不多说了。一句话,现阶段一个人就可以从无到有设计制造属于自己的计算机,不要在认为不可能吧。不是组装计算机,那不叫计算机设计制造。
个人分类: 计算机制造|3829 次阅读|3 个评论
我自己造的计算机我做主
热度 3 accsys 2017-11-22 07:55
姜咏江 我在 2006 年自己造的计算机,是从器件设计开始,设计制造的有 52 条指令的计算机(见图)。别小瞧它!这可是一台通用计算机,只不过是运行在二进制层面上的。所以只有相当水平的计算机专业人士才可以认可它。 这是一个 8 位的计算机,内有求 255 以内自然数阶乘的程序。 255 的阶乘结果有多大?告诉你,有 210 个字节!这个计算机能够丝毫不差的将结果算出来,而且能够用走马灯和液晶屏显示给你看。这个计算机的指令系统在后面,为了用户能够方便地使用这台计算机,我还专门设计了编辑编译软件。不过这台计算机的存储器太小,编辑编译的工作还得在你手头的电脑上完成。不过这丝毫不会降低你深入理解计算机的核心。当你手动开关和按钮,将编译好的二进制程序送入这台计算机,并且很快就会得到结果的时候,一定会很兴奋。我当时的兴奋劲儿,你也许能够理解,因为这是我自己制造的计算机。 一晃,十年的时间过去了。利用这台计算机的硬件,我当时还制造了动态计算机 PMC362 。针对动态计算机的设计,当时我还申请了国家专利,然而。。。 除了每年我给 20 多个研究生讲自己如何制造计算机,或者有一些读了我的《自己设计制作 CPU 与单片机》一书的人,中国的计算机业界却是无动于衷,大家的眼睛总是盯着西方的高人嘛,因而我想推广动态计算机的设计在国内十分艰难。不过国外倒是有人找过我,告诉我,我的专利已经失效等,让我明白了权利。不论如何,研究给我带来的兴趣,远远超过了其它。自娱自乐是每个科研人独享的乐趣不是? 我设计制造的这台计算机用于研究生或者本科生教学最好不过,因为通过它,你可以从无到有,从硬件到软件,系统地学习和掌握计算机的全部理论知识。现在大学计算机专业的教学课程设置实在是不敢恭维,最重要是缺乏系统性,将一些完全可以在使用中自学的东西拿到大学课堂上讲,实在是浪费学生的生命!一句话,中国的大学缺少真正的计算机科学教育家。我在十年前这样说过,现在还这样说。没有自己设计制造过计算机的人,成不了真正的计算机专家。 计算机科学是一个非常系统的体系,它和计算机应用是截然不同目标的东西。将计算机应用做为计算机专业的主要内容,真不知道那些专家们是如何考虑的。中国要成为世界强国,实现中华民族伟大复兴,在计算机科学最核心的领域不能走在前面,不去造就一大批未来的人才,在如此信息化的人类时代,恐怕成为空谈是有可能的。 说远了。还是劝有心人,自己去制造一台计算机试试,你的收获会无比的大。 检验程序运行的例子 call 乘积子程序地址;call 自然数和子程序地址;call转十进制子程序地址;call 阶乘子程序地址。 它们对应的具体输入是: 88 300E 80 (调用 8 位无符号整数乘积); 88 70 0F 80 (调用小于 22 的自然数和程序); 88 92 3F 80 (调用将 8 位正十六进制数化成十进制数程序(液晶版)); 88 60 0E 80 (调用 255 以内阶乘,阶乘结果的最后 2 位是十六进制数是字节数)。‘ 88 ’是 call 的编码,后面十六进制的 16 位地址输入时低字节在前,高字节在后,‘ 80 ’是程序输入结束代码。 表 1 PMC 教学计算机指令集 序号 功能设想 英文助记符 操作码 次数 操作码 (2 进制) 1 把R数据存储单元内容送到累加器da LDA R 81 3 10000001 2 数据存储单元R的内容与累加器da的内容相加结果送da ADD R 82 3 10000010 3 用累加器da的内容减去数据存储单元R的内容结果送da SUB R 83 3 10000011 4 将R存储单元内容输出 OUT R 84 3 10000100 5 跳到程序存储器的R单元取指令执行 JMP R 85 3 10000101 6 如果累加器da的值是0则跳到程序存储器的R单元取指令 JZ R 86 3 10000110 7 如果累加器da的值为负则跳到程序存储器的R单元取指令 JN R 87 3 10000111 8 调子程序 CALL R 88 3 10001000 9 输入数据到数据存储器的R存储单元 IN R 89 3 10001001 10 将累加器da的内容送到数据存储器存储单元R STR R 8A 3 10001010 11 将数N送到累加器da SDA N 8B 2 10001011 12 将累加器da的内容入栈 PUSH 4C 1 01001100 13 将堆栈的内容送到累加器da POP 4D 1 01001101 14 从子程序返回指令 RET 4E 1 01001110 15 将PTR的内容加1 INC 4F 1 01001111 16 将PTR的内容减1 DEC 50 1 01010000 17 将累加器da的内容送x寄存器 DATX 51 1 01010001 18 将累加器da的内容送y寄存器 DATY 52 1 01010010 19 将寄存器x、y的内容互换 XCHY 53 1 01010011 20 x 的内容送da XTDA 54 1 01010100 21 y 的内容送da YTDA 55 1 01010101 22 将累加器da的内容送到ptr低8位 DALP 56 1 01010110 23 将ptr的低8位内容送到累加器da PLDA 57 1 01010111 24 将累加器da复位为0 ZERO 58 1 01011000 25 将数据输入到ptr指示的程序存储单元 INP 59 1 01011001 26 如果除数为0则跳转到程序的R单元指令执行 JERR R 9A 3 10011010 27 如果输入的数据是h80则跳转到程序的R单元指令执行 JEND R 9B 3 10011011 28 左移一位是1跳转到R单元指令执行 JL R 9C 3 10011100 29 右移一位是1跳转到R单元指令执行 JR R 9D 3 10011101 30 输入缓冲区空暂停 STPK 5E 1 01011110 31 求da值的按位逻辑非,结果在da LNOT 5F 1 01011111 32 Da 与R存储单元的逻辑与放入da LAND R A0 3 10100000 33 Da 与R存储单元的逻辑或放入da LOR R A1 3 10100001 34 Da 与存储单元R的逻辑异或放入da LXOR R A2 3 10100010 35 将da左移一位送x,da不变 SHL 63 1 01100011 36 将da右移一位送x,da不变 SHR 64 1 01100100 37 执行下一条指令 NOP 65 1 01100101 38 将累加器da的内容送到指针ptr高8位 DAHP 66 1 01100110 39 将指针ptr的高8位内容送到累加器da PHDA 67 1 01100111 40 输入数据送到ptr指示的数据存储单元 INPD 68 1 01101000 41 将da的值送到ptr指示单元 DAPD 69 1 01101001 42 将ptr指示单元内容送da DPDA 6A 1 01101010 43 有符号da与R单元相乘,结果低字节送da,高字节送x MULS R AB 3 10101011 44 累加器da与R单元相除,商送da,余数送x DIVI R AC 3 10101100 45 累加器da与R单元带进位加,结果送da,进位保留 ADDC R AD 3 10101101 46 累加器da与R单元带进位减,结果送da,进位保留 SUBC R AE 3 10101110 47 无符号da与R单元相乘,结果低字节送da,高字节送x MULT R AF 3 10101111 48 无符号da×R+x,本位结果送da,进位字节送x MADD R B0 3 10110000 49 进位为1跳转 JCRY R B1 3 10110001 50 清除进位 NCTY B2 1 10110010 51 停止程序执行 STP 7F 1 01111111 52 程序输入结束 END 80 1 10000000
个人分类: 计算机制造|4933 次阅读|8 个评论
个人设计制造的计算机时代早已到来
accsys 2017-11-16 06:47
个人能够设计制造计算机的时代,恐怕要追索到 FPGA 产生的年代。但真正一个人完成用 FPGA 设计出可以运行用户程序的计算机,我还不知道有没有其他人做过。下图是我十年前完成的具有 52 条指令的计算机,看来是不是很简陋?然而在二进制层面上,其它计算机能做的事情,这台计算机都能做。 想象一下,如果计算机从无到有都是有你自己设计制造的,包括 CPU 、指令系统、编译编译、操作系统、输入输出驱动等软硬件在内,你不就成为了一个真正的计算机专家吗?
个人分类: 计算机科普|2452 次阅读|0 个评论
现在一个人能造计算机吗?
accsys 2017-11-5 08:07
现在一个人能造计算机吗? 姜咏江 自己一个人造计算机?说梦话吧!其实这已经成为了现实。当一二十年前出现了现场可编程器件 FPGA 之后,就有了一个人单独设计制造计算机的条件。 FPGA 器件借助现在已经存在的计算机,就可以进行任何的电子电路设计,让你成为计算机专家不是梦。 能够在二进制层面上执行程序的计算机叫原型机。原型机连接上各种易识别易用的外部设备,就成了人们容易使用的计算机。原型机反映的是计算机核心理论与设计技术,是每一个想从事计算机设计制造的人,必须要经历的实践过程。计算机核心并不是一种固定的架构,与之适应的指令系统也是千变万化。如果你能够在需要高度保密的时候,用自己设计的计算机来完成工作,无疑安全度会大大提高。这种情况对民用似乎很麻烦,但对高度机密的部门和军事国防,应该是求之不得的事情。 设计计算机具有个人智慧的挑战性。因为这项工作高难,因而才是那些勇于探索,攻坚破难的科学爱好者施展才干的事情。特别对那些充满科学理想的青年学生,自己能够设计制造出计算机有着更大的吸引力。 自己设计计算机的组成结构、指令系统等,也就是计算机的 CPU 都需要什么材料?只需要一块有 FPGA 的实验板!这种最简单的实验板如下图所示。 这种实验板的输入输出装置,简单到只用开关、按钮、发光二极管和数码管。此外除了供电部分,就是中间的那块 FPGA 集成电路片。包括运算器、控制器、寄存器和存储器等一系列计算机核心部件,都将在 FPGA 中诞生。这种核心计算机,用 8 个开关进行二进制数输入,用发光二极管显示输入和输出的二进制数,同时用数码管显示十六进制数。 这个核心计算机设计制作开发板,有相应的《自己设计制作 CPU 与单片机》一书,可供设计制作时参考。这本书中还有这个开发板的设计制造技术和方法。 核心计算机的设计制造技术,高中生就可以掌握。开展青少年计算机设计制造活动,是培养未来科学家的一个重要途径。 在这个高速发展的信息时代,信息技术最核心的东西就是计算机。而掌握了计算机核心的设计与制造技术,无疑会奔跑在世界的前列。让我们努力吧。
个人分类: 计算机制造|3920 次阅读|0 个评论
FPL16 经验之谈 和FPGA的一些趋势探讨
nusxtra 2016-10-12 13:36
原文作者: Zeke Wang 博士 上个月去参加了FPL 2016. 全名:International Conference on Field-Programmable Logic and Applications (FPL’16) 是 FPGA 领域的四大国际顶级会议之一,常年在欧洲举行,今年选择 在美如画的瑞士洛桑举行,其湖光山色为会议增色不少。 这次会议有 197 篇投稿,结果有 42 篇全文被接收,大约 21.2%的录用率,较低 的录用率保证了论文的质量。 这次 FPL 之旅让我受益匪浅,既了解到 FPGA 业内最新的发展方向,又发现我做 的 OpenCL 加速方向还是蛮火的。 1, 在服务器领域用 FPGA 加速网络(Configurable Clouds),不只是加速 计算(Reconfigurable Computing)。 FPL 的一个 Keynote 来自 Microsoft 的 Doug Burger,Microsoft 是一个真正 成功地把 FPGA 用于加速 Microsoft 的服务和 Azure 云,而且得到业内的认可。 单块 FPGA 的计算能力只比同代的 Intel CPU 好一点,并没有特别大的性能优 势。而且 FPGA 一般被当做加速器 (accelerator) 放在 PCIe 插槽上,由于 PCIe 带宽有限,FPGA 的加速效果就变得不明显了。跟同作为加速器的 GPU 相 比,FPGA 的性能在很多情况下都远不如同代的 GPU。当然很多人会 说 FPGA 有能 耗比优势,但在很多情况下大家还是更关心绝对的性能。 当然 FPGA 有 GPU 没有的优势,可以用于加速网络。具体来说,可以用 FPGA 实现特定的网络,用于加速特定的应用。传统的以太网传输带宽有限,而且需 要 CPU 一定程度的参与解析 TCP/IP 协议栈,这个开销还是很大的。假如传输都 是通过 FPGA 来完成,这可以让 CPU 更专注于计算任务,而不是协议栈。另外一 个优势是可以把一部分计算任务(如 selection)移到 FPGA,这样可以减少网 络传输量,会很大程度地提高总体的性能。笔者也觉得这个方向非常有前途, 准备为这方面出一份力。 总结一句:FPGA 从业人员都得感谢微软在其搜索引擎 Bing 上使用 FPGA,这才使得服务器市场开始考虑使用 FPGA,之前都不考虑使用 FPGA 这个方案的。 2,新一代的 CPU-FPGA 异构框架 (Intel,IBM) FPL 的两个 Keynote 都是关于 CPU-FPGA 异构框架的而且支持缓存一致性的, 一个来自 Intel 的 P. K. Gupta,一个来自 IBM 的 Christoph Hagleitner。 FPGA 访问 CPU 内存的传统方式是通过 PCIe 上的 DMA,所以 FPGA 内存和 CPU 内 存没有缓存一致性保证,就需要用户通过手动编程来保证数据的正确性。这样 的延迟会很大,而且颗粒度会很大。所以 FPGA 的地位如同二等公民:一切任务 都有 CPU 来安排。新一代的 CPU-FPGA 异构支持 FPGA 直接细颗粒度访问 CPU 内 存,而且缓存一致性也由硬件保证。在这种架构下,FPGA 跟 CPU 一样都是一等 公民:访存的延迟变小和带宽变大。这样增大了 FPGA 的加速效果,使得更多的 应用都可以用 FPGA 来加速。 总结一句:由于这个平台还比较新,非常有研究价值:对于特定的应用,如 何在 CPU 和 FPGA 上分配计算任务,使得整体性能最好。 3, 让 FPGA 编程越来越软件化 FPL 的一个 Keynote 来自 Xilinx 的 Tomas Evensen,主题是关于软件开发人员 的 FPGA 进阶之旅。Xilinx 不愧为 FPGA 界的龙头老大,做出的开发工具越来越 智能化,让 FPGA 开发越来越软件化,极大地缩短在 FPGA 的开发时间。另外很 多论文和 demo 都是关于如何让 FPGA 更具有软件属性,如虚拟化,可中断等 等。总结一句:FPGA 还是要先解决工具问题,才能让软件开发者真正喜欢使用 FPGA 加速特定的应用。 其中一个软件化的方向是通过高级语言如 OpenCL 来编程 FPGA。不选用传统的 Verilog 编程 FPGA 的原因是通过 Verilog 来编程 FPGA 会需要很长的调试时 间,而且需要大量的硬件知识才能较好的使用 FPGA。相比于软件开发,FPGA 开 发的门槛较高。FPGA 在本质上是并行的,因此,FPGA 的行计算能力与 OpenCL 的编程模型完全吻合。 这次 FPL 有四篇全文都是用 Altera OpenCL SDK 加速不同领域的应用,如图 分析,数据库查询,粒子鉴定。其中两篇得到了最佳论文的提名。而数据库查 询的这个工作(Relational Query Processing on OpenCL-based FPGAs)来自 我们 Xtra 组。这是一个比较初始的工作,后续还有很多增进的空间。我们提供了一个 cost model 来帮忙产生数据库查询的具体执行 方案,每个查询有多个数据库运算子组成。由于每个数据库运算子在 FPGA 上有 很多的实现方式:每个方式需要不同的 FPGA 资源和不同的性能,所以用户不能在 FPGA 上去试所有的可能性再找其中最好的性能。我们的方式就是用模型来预测每个可能性的性能,这样就可以很快的找出最佳方案。 关于OpenCL-based FPGA, 另外我们组还有另一个工作也是帮忙用户优化 OpenCL 代码性能的,A Performance Analysis Framework for Optimizing OpenCL Applications on FPGAs (HPCA’16)。这个工作主要提出了为 OpenCL 代码提出一个性能预测模 型,而且提出四个指标用于定位输入 OpenCL 代码的性能瓶颈,这样用户就很容 易知道下一步的优化方式,这样很快就可以找到最优的实现方式。 这个工作现在只有限支持OpenCL, 我们在用洪荒之力在拓展它的用途。 * 本文仅供学术交流所用,图片文字版权归各自拥有者。 * 本公众号为记录 Xtra 小组的研究经历和进展,若有错误和不妥之处,欢 迎联系多多指教。 关注我们:
个人分类: 高性能计算|6408 次阅读|0 个评论
小剧场的那些事(4)
lkrocksthone 2016-8-28 11:56
2 Hltc 的诞生 - Halim 内核的实现 用数据空间来思考问题,迈开的第一步我们便会遇到这样的一个问题,那就是数据空间实际是一种怎样的存在,和我们常规使用数据有何不同?这里面有新的东西,还是没有新的东西?通过空间的角度看数据,那我们必须要存在进入空间的方法,必然要找到和其他空间转换的手段,如果没有这点,数据空间描述便无意义。空间必然存在空间变换。数据空间就是一堆内存空间,这是物理的存在,内存只有一套地址数据总线,从硬件上,我们进入数据空间的路子只有一条,这就是常规的数据角度看问题。只有一条路子进入数据空间,也就是说两个空间的变换并不自由。如果我们要真正把 Halim 的设想用于实际,首先我们就要实现数据空间与其他空间的自由转换。那问题就变成了,一块内存空间,能否实现超过 3 条路径的同时访问,即内存空间有多于三个的出入口同时实现读写。 查找现有的各个厂家的内存芯片,双口 RAM 为大众熟悉,三口 RAM似 乎闻所未闻。双口 RAM 同时存在两套总线,可以访问一块共通的内存空间,看似符合 Halim 的要求,差异在路径只有两条而已,但实际上,使用或查看双口 RAM 的 Datasheet 不难发现,双口 RAM 的两条路径并非我们期望的那样,是自由的访问路径。它们之间存在约束关系,可以同时读,但不可以同时写同一个数据位置,芯片甚至还有个中断机制来防止用户同时写同一个位置,并将其定义为写冲突。正是因为这个对于写冲突反应过激的措施,完全断绝了双口 RAM 在 Halim 设想中的应用可能。如此经过几天的搜索努力,在通用芯片中,我并没有找到能够实现 Halim 内核的产品。 回头一想,发现或许并不是实现无冲突的多口 RAM 从技术上有多难,只是很多时候标准产品缺乏一个实现的动力,也就是这样做的理由,因为在传统的产品框架里,这种 RAM 并没有多大意义。看来得要自己动手,丰衣足食了。重新理清 Halim 的数据空间的要求,数据空间是整个 Halim 框架的根基和脊梁,对于产品的可靠性和稳定性都是最根基、最底层的,如果建立的 Halim 数据空间本身都是不稳定的话,就无从建立更高的性能了,框架就会坍塌。所以需要实现多个路径的自由访问之余,还要实现并行的可靠稳定的访问。为了实现 Halim ,我采用一片 Altera Cyclone 的 FPGA 芯片定义了一个符合 Halim 设想要求的内存空间,它同时存在四个自由的访问路径,可以并行访问内存空间的任意位置,不存在读写冲突。四个空间出入口自由、独立和平等,互不认识,互不约束。这个功能的芯片,我命名为 Hltc ,即 Halim little tiny core , Halim 的内核。实现 Hltc 是所有 Halim 工作的第一步。 小剧场并非要颠覆大剧场,只是提供另外一个角度的表演形式,做出一些不同的尝试,解决特定的问题,同时为大剧场作为补充元素的可能性提供参考。 Hltc 的实现历时了大约 2 个月,从功能框架的设计、电路板的设计、代码的编写及调试和优化。一路从无到有的创造,可谓跌宕起伏。 Hltc 的四个空间访问口,需要非常方便地接入其他空间,实现被其他空间的解析,不管其他空间是机械空间、电路空间还是软件空间。综合考虑之后,访问解析口硬件上采用 SPI 通讯,一种串行高速的通讯总线,然后,定义了固定的访问口读写规则。由于 FPGA 硬件上的并行可靠稳定的固有特性, Hltc 一旦实现出来,也拥有了这些特性。下图是 256 深度的版本,不带串口调试的 Hltc 的设计框图。 下图是 Hltc 电路板的 PCB Layout 截图。 Hltc 采用 Verilog HDL 语言进行硬件逻辑描述,最新版本使用了大约 2000 行的代码。 Hltc 经过了 20 天连续无间断四个访问口随机读写数据无异常测试,预示着基本实现了 Halim 的实现内核,为 Halim 架构的实现迈开了第一步。 (未完待续)
个人分类: 产品历程|2592 次阅读|0 个评论
互联网是一巨大的FPGA
热度 1 zhaoyongke 2015-10-28 09:48
互联网和FPGA的几个相似点: 1. 网络互联,相当于FPGA内的走线; 2. 基于网络的协议(HTTPS, SSH),相当于硬件总线(QPI, PCIe, AMBA); 3. 存储服务,相当于Flash或其他非易失存储器; 4. 数据库,相当于LUT; 5. 高性能物理机( https://hpc.aliyun.com/ ),相当于DSP单元; 6. 缓存服务器,相当于FPGA内部寄存器(FF)或Block RAM; 7. 网站逻辑状态机,与FPGA内部RTL实现的状态机(FSM)并无二致。 8. 互联网服务可以抽象为IP核(黑盒);请求,即输入; 响应,即输出; 9. 对网站测试,很像写testbench; 10. 对网站故障进行诊断,需要借助服务器log,而对RTL调试,需要借助仿真时序图,或用chipscope、signal tap抓取IP的输入/输出波形log; 11. 互联网公司,相当于FPGA布局布线器(router)或综合器(Synthesizer); 二者从本质上仅是宏观与微观,规模与个例,星系和原子的区别。 也许有天可以用js进行FPGA布局布线,也许有天可以用SystemVerilog设计网站架构。
个人分类: 随感|2543 次阅读|2 个评论
学生硕士论文长度得了冠亚军
热度 7 chrujun 2015-5-16 21:21
学生硕士论文长度得了冠亚军/陈儒军 全系的论文重复性检测结果出来了,我发现了一个有趣的现象。就是我指导的两名学生的硕士论文 长度遥遥领先,分别占第一名和第二名。 第一名是淳少恒,硕士论文总字数为42549字,重复率1.30% 第二名是宋杰,硕士论文总字数为38096字,重复率1.50% 全系总计19名研究生,论文长度最少为1万8千多字,重复率为15.2%。 大部研究生的论文长度为2万多字。论文长度超过3万字的只有5人,超过4万字的只有淳少恒同学一 人。 只要是一字一句认真写,没有抄袭和剽窃,论文长度和学生付出的努力应该有很强的相关性。就我 的两名学生来说,自读研究生开始就没有给自己放过寒暑假。暑假一直在学校努力做,寒假半个月 左右就回学校了。平时也很努力,每天8点左右就到实验室。 他们也是全系最早落实工作的,去年9月份签到了华为。 他们本科学的是地球信息技术与科学(应用地球物理),研究生期间的工作等于完全转行了,一个 主要研究FPGA在地球物理仪器中的应用,另外一个主要研究基于LINUX和ARM的嵌入式系统。很多东 西都要靠自学,作为导师我也懂得不多,FPGA根本没有做过,只能提供必要的研究条件,另外安排了在湖南强军科技工 作的几名员工协助我指导。 我们的研究条件应该还算不错,不仅有各种开发板,以及他们的师兄师姐打下的基础;而且我们这 几年用的器件也基本上是进口的,甚至电阻电容也全部进口。 这里也感谢湖南强军科技对我指导研究生的支持,强军科技提供了绝大部分研究费用(包括元器件 、PCB制作、焊接等),并有经验丰富的员工对他们进行指导。 关键还是靠他们自身努力,学习态度才是最重要的。这两名学生研究生入学的时候在保研的10来名 学生中成绩只是中等水平。但他们在研究生期间付出了大量努力,光是书面汇报就有100多个,基本 没有给自己放寒暑假更是他们努力学习和科研的证明。遥遥领先的硕士论文长度和被用人单位的青 睐证明了他们丰盛的收获。
个人分类: 我的教学|9212 次阅读|13 个评论
[转载]用Impulse C创建FPGA人流检测系统
w52191114 2010-8-12 11:21
用Impulse C创建FPGA人流检测系统 2010年1月20日 admin 发表评论 阅读评论 Hella Aglaia用Impulse Accelerated Technologies的Impluse C开了一套基于FPGA的 人流量检测系统 。Impulse的VP声称使用它们的Impulse C,开发速度要比通常使用VHDL或者verilog快上50%,比HDL快80%。 这会不会是一个趋势呢?从理论到算法, 从算法到C语言,从C语言到FPGA ,从FPGA再到ASIC?? 厂商链接: Impluse , Hella Aglaia
个人分类: cvchina|2319 次阅读|0 个评论
[转载]赛灵思全新7系列FPGA解析
zhangjunjie 2010-7-3 10:43
赛灵思全新7系列FPGA解析 发布时间:2010-6-22 19:01 发布者: 老郭 阅读次数:95 赛灵思今天隆重宣布 推出全新下一代7系列FPGA 。赛灵思公司质量管理和新产品导入全球高级副总裁汤立人和亚太区市场及应用总监张宇清专程来北京向媒体介绍了新产品的情况并回答了媒体的问题。笔者现将所见所闻汇报如下。 总体来说,赛灵思全新7系列FPGA基于业界首个统一且可扩展架构,功耗降低一半,容量可达200万逻辑单元。全新一代产品包括Virtex-7、Kintex-7和Artix-7三个产品系列。 更多取代ASIC/ASSP 汤立人先生介绍说,FPGA要取代ASIC或ASSP应用的主要障碍有四:需要达到更高的系统性能、更大的容量、更低的成本和更低的功耗,其中功耗上关键的制约因素。赛灵思全新的28纳米工艺7系列产品的首要目标就是降低功耗。由于功耗方面的改进,汤先生说,赛灵思FPGA的应用市场可以从6系列的70亿美元扩展到111亿美元,进一步蚕食ASIC/ASSP的市场份额。 Virtex-7、Kintex-7和Artix-7 这三个系列的产品定位明确。Virtex取vertex(顶点)的谐音,代表了FPGA的最高水平、最强功能,其容量最大。Virtex-7容量扩大了2.5倍,可达200万个逻辑单元,串行带宽高达1.9Tbps,线速高达28Gbps,与上一代相比性能翻番,旨在满足有线通信基础设施、高性能计算系统和航空/航天/军工等应用对高性能的要求。另外,该系列包括EasyPath-7成本降低解决方案,有助于实现大批量生产。 Kintex意指kinetic(动力的),主要针对无线应用,性价比最佳。Kintex-7以Virtex-6一半的成本和功耗实现同等性能,不仅能满足严格的功耗和成本需求,而且能够满足新一代广播系统和无线网络等应用对带宽的巨大需求。 Artix取意Arctic(北极),代表冷和低功耗。Artix是业界功耗和成本最低的FPGA系列产品。与Spartan-6相比,Artix-7的功耗降低了一半,成本降低了35%,占位面积缩减50%,是取代ASIC/ASSP的主力FPGA。(注:Spartan系列由于架构方面的限制将不再延续。) 三个系列的典型目标应用是这样的:Artix-7针对便携式超声设备和数码单反相机,Kintex-7针对LTE无线基础设备和3D电视平板显示器,Virtex-7针对下一代有线接入设备和高性能计算。 功耗如何降低 Xilinx的第七代FPGA从降低芯片静态功耗、降低动态功耗、降低I/O功耗和软件多个个方面来提高功耗效率。通过高性能低功耗工艺、晶体管优化选择、存储器电压从2.5V降至1.8V、BRAM空闲时断电这些措施,芯片的静态功耗得以降低。通过工艺微缩、硬模块优化实现动态功耗的降低。通过部分重新配置和时钟/逻辑门优化这些软件设计技术,系统的功耗得以进一步降低。最后的结果是,I/O功耗降低了30%,动态功耗降低25%以上,静态功耗降低了65%,总体功耗降低一半。或者说,在系统功耗预算相同的情况下,性能容量提高了一倍。 高端ASIC替代实例 张宇清先生用一个例子来说明如何用FPGA来替代高端ASIC。由于对容量和连接性要求极高,有线通信的桥接器通常采用ASIC方案,典型的是65nm 300G Interlaken桥接器。Xilinx的Virtex-7超高端FPGA可替代ASIC成为全球首款单芯片300G可编程桥接器,性能超过65nm ASIC,如下图所示。 下载 (39.98 KB) 2010-6-23 20:59 取代ASSP 目前,高级数码相机日益流行,预计到2010年数码相机的销售量达到1.5亿台,而单反相机将占相机总数的10%。单反相机为FPGA带来7,500万~15,000万美元的巨大商机。因为单反相机属于耐用品,换代较慢,厂商会尽量避免IC过时造成的断货。自动对焦要求高精度的电机控制,对芯片速度要求很高。另外,作为便携产品它要求功耗芯片,成本不能超过10美元。 下图显示,用Artix-7来替代多个ASSP芯片,可实现成本降低66%,功耗降低37%,尺寸缩小85%。 下载 (36.52 KB) 2010-6-23 21:09 现在就可以开始设计 虽然Xilinx的7系列第一批产品在明年第一季才可上市,但设计人员现在就可以开始基于7系列FPGA的设计。支持7系列的设计ISE套件测试版现已供货,而这一设计套件允许软硬件分开设计,设计团队无需等到硬件到货便可先行开始软件设计。利用Xilinx提供的7系列仿真FPGA板卡,软件设计完成(大约一年)后7系列芯片便已上市,那时再进行硬件设计,这样可大大缩短开发周期。 器件型号及性能 下面的图片分别显示了三个系列FPGA的型号和性能/功能情况。欲知Xilinx 7系列FPGA的最新资料,请访问 www.xilinx.com/7 。 下载 (167.24 KB) 2010-6-23 21:38 下载 (172.67 KB) 2010-6-23 21:39 7系列简要介绍
个人分类: C8051|2445 次阅读|0 个评论
[转载]ARM7与ARM9的区别以及ARM,FPGA,DSP的特点和区别
hlyxue 2010-5-28 08:55
ARM7和ARM9的区别: 1. 时钟频率的提高 虽然ARM7和ARM9内核架构相同,但ARM7处理器采用3级流水线的冯诺伊曼结构;,而ARM9采用5级流水线的哈佛结构。增加的流水线设计提高了时钟频率和并行处理能力。5级流水线能够将每一个指令处理分配到5个时钟周期内,在每一个时钟周期内同时有5个指令在执行。在常用的芯片生产工艺下,ARM7一般运行在100MHz左右,而ARM9则至少在200MHz以上。 2 指令周期的改进 指令周期的改进对于处理器性能的提高有很大的帮助。性能提高的幅度依赖于代码执行时指令的重叠,这实际上是程序本身的问题。对于采用最高级的语言,一般来说,性能的提高在30%左右。 3.MMU(内存管理单元) ARM7一般没有MMU(内存管理单元),(ARM720T有MMU)。 ARM9一般是有MMU的,ARM9940T只有MPU ,不是一个完整的MMU。 这一条很重要,MMU单元是大型操作系统必需的硬件支持,如LINUX;WINCE等。这就是说,ARM7一般只能运行小型的实时系统如UCOS-II,eCOS等,而ARM9无此限制,一般的操作系统都可以移植。其实即使ARM720T能支持LINUX;WINCE等系统,也鲜有人用,因为以ARM7的运行速度跑这种大型操作系统,实在有点吃力。再者两者的应用领域明显不同,也无此必要。 4. ARM7比ARM9提供了更好的性能-功耗比。它包含了THUMB指令集快速乘法指令和ICE调试技术的内核。 5. 在从ARM7到ARM9的平台转变过程中,有一件事情是非常值得庆幸的,即ARM9E能够完全地向后兼容ARM7上的软件;并且开发人员面对的编程模型和架构基础也保持一致。 初学者是选ARM7还是ARM9? 1)明确目的 学习为应用。你学ARM准备用在什么地方,如果是一般性控制系统或仅仅用来替换8获16位机,ARM7显然是首选;但如果用在网络通信或大型的音视频处理等,则ARM9较合适。 2)自身基础 学习ARM的一般有三类人: 一是计算机专业的:这类人对操作系统等软件知识了解较多,而对硬件知识知之甚少,显然这类人学ARM的话还是做软件好,可以基于LINUX;WINCE等操作系统的ARM9更能符合这类人的要求,当然也有很多计算机专业的人从事ARM7系统的应用软件编写的。但是搞底层的就很少了。 二是电子类专业的:这类人的硬件基础了相对较好,相反操作系统,数据库等软件知识则差强人意。因此人多电子专业的人员都熟悉单片机,用单片编写点小程序还不在话下,但要用ARM做较大型的软件则有点力不从心,尤其是LINUX;WINCE这种操作系统不是三两个月能轻松搞定的。建议这类人员如无特别需要还是从ARM7和小型操作系统学起。够用就好,不要盲目追求高端。有一点要注意并不是从事ARM9的就比ARM7工资高,反而ARM7的就业机会比ARM9多,这很好理解,好比金字塔,越往顶肯越小。 三是软硬件基础都不太好的:这类人员有确实需要的,也有赶时髦的,如无大的学习决心还是参加培训的好。当然也可曲线救国,搞懂单片机后,ARM7就不难了。 最后说一点关于开发板的,初学者买个开发板确实很有必要,但也要选择合适的,初学者合适的就是,资料齐全,有配套教程和学习指导,再加上较及时的技术支持。目前能做到的很少,开发板这东西不是说哪家公司有名气,售后就好,很多大公司一般不理个人买家的问题的,我感觉多半是运气,运气好了也许能碰到一家售后好的。 ARM,FPGA,DSP的特点和区别是什么? 1.关于DSP DSP(digital singnal processor)是一种独特的微处理器,有自己的完整指令系统,是以数字信号来处理大量信息的器件。一个数 字信号处理器在一块不大的芯片内包括有控制单元、运算单元、各种寄存器以及一定数量的存储单元等等,在其外围还可以连接若干存储器,并可以与一定数量的外 部设备互相通信,有软、硬件的全面功能,本身就是一个微型计算机。 DSP采用的是哈佛设计,即数据总线和地址总线分开,使程序和数据分别存储在两个分开的 空间,允许取指令和执行指令完全重叠。也就是说在执行上一条指令的同时就可取出下一条指令,并进行译码,这大大的提高了微处理器的速度 。另外还允许在程 序空间和数据空间之间进行传输,因为增加了器件的灵活性。 其工作原理是接收模拟信号,转换为0或1的数字信号,再对数字信号进行修改、删除、强化,并在其 他系统芯片中把数字数据解译回模拟数据或实际环境格式。它不仅具有可编程性,而且其实时运行速度可达每秒数以千万条复杂指令程序,远远超过通用微处理器, 是数字化电子世界中日益重要的电脑芯片。它的强大数据处理能力和高运行速度,是最值得称道的两大特色。由于它运算能力很强,速度很快,体积很小,而且采用 软件编程具有高度的灵活性,因此为从事各种复杂的应用提供了一条有效途径。根据数字信号处理的要求,DSP芯片一般具有如下主要特点: (1)在一个指令周期内可完成一次乘法和一次加法; (2)程序和数据空间分开,可以同时访问指令和数据; (3)片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问; (4)具有低开销或无开销循环及跳转的硬件支持; (5)快速的中断处理和硬件I/O支持; (6)具有在单周期内操作的多个硬件地址产生器; (7)可以并行执行多个操作; (8)支持流水线操作,使取指、译码和执行等操作可以重叠执行。 当然,与通用微处理器相比,DSP芯片的其他通用功能相对较弱些。 2.关于ARM ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。 ARM架构是面向低预算市场设计的第一款RISC微处理器,基本是32位单片机的行业标准,它提供一系列内核、体系扩展、微处理器和系统芯片方案,四 个功能模块可供生产厂商根据不同用户的要求来配置生产。 由于所有产品均采用一个通用的软件体系,所以相同的软件可在所有产品中运行。目前ARM在手持设备 市场占有90以上的份额,可以有效地缩短应用程序开发与测试的时间,也降低了研发费用。 3.关于FPGA FPGA是英文Field Programmable Gate Array(现场可编程门阵列)的缩写,它是在PAL、GAL、PLD等可编程器件的基 础上进一步发展的产物,是专用集成电路(ASIC)中集成度最高的一种。 FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个 新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB (Input Output Block)和内部连线(Interconnect)三个部分。 用户可对FPGA内部的逻辑模块和I/O模块重新配置,以实现用户的逻辑。它还具有静态可重复编程和动态在系统重构的特性,使得硬件的功能可以像软件一样通过编程来修改。作为专用集成电路(ASIC)领域中的一种 半定制电路,FPGA既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 可以毫不夸张的讲,FPGA能完成任何数字器件的功能,上至高 性能CPU,下至简单的74电路,都可以用FPGA来实现。FPGA如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入法,或是硬件描述语言自由 的设计一个数字系统。 通过软件仿真,我们可以事先验证设计的正确性。在PCB完成以后,还可以利用FPGA的在线修改能力,随时修改设计而不必改动硬件电路。使用FPGA来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。 FPGA是由存放在片内RAM中的程序来设置其工作状态的, 因此工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。加电时,FPGA芯片将EPROM中数据读入片内编程RAM 中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA 编程器,只须用通用的EPROM、PROM编程器即可。 当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可 以产生不同的电路功能。因此,FPGA的使用非常灵活。可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。 目前FPGA的品种很 多,有XILINX的XC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。 4. DSP、ARM、FPGA这三者他们的区别是什么呢? DSP主要是用来计算的,比如进行加密解 密、调制解调等,优势是强大的数据处理能力和较高的运行速度。ARM具有比较强的事务管理功能,可以用来跑界面以及应用程序等,其优势主要体现在控制方面,而FPGA可以用VHDL或verilogHDL来编程,灵活性强,由于能够进行编程、除错、 再编程和重复操作,因此可以充分地进行设计开发和验证。 当电路有少量改动时,更能显示出FPGA的优势,其现场编程能力可以延长产品在市场上的寿命,而这种能力可以用来进行系统升级或除错。
个人分类: 科研笔记|3009 次阅读|0 个评论
用上了ISE12哈哈
paradoxfx 2010-5-7 21:52
这个版本安装时出了点小差错,后来才明白要先装一个补丁以支持英语和日语以外的系统路径 ;不过这就是Xilinx公司的不对了,明明出了问题不公布,还得自己去找 具体的解释在AR #35331 - ISE Design Suite 12 - Shortcuts and desktop icons are not created when language is set to anything other than English or Japanese Description My language localization is set to a language other than English or Japanese. After installation, my desktop icons and shortcuts were not created, and the following error occurs: Failed to create link xxx.lnk to xxx.xxx How can I create the shortcuts and desktop icons? Solution Localization settings of English and Japanese are the only supported languages. Any other language setting is not supported and can cause issues with other Xilinx ISE Design Suite tools. To install the shortcuts and desktop icons, download the following patch and place it into your installed Xilinx directory. Xilinx recommends that you backup your libwiclient.dll file prior to dropping the new patch file so that you can revert back if needed. After applying the patch, run shortcutSetup.bat from the Xilinx ISE Design Suite in the common/bin/nt(64) location. For the patch, download and unzip the file (see the readme file for more information). Patch: ftp://ftp.xilinx.com/pub/swhelp/ise12_updates/ar35331.zip
个人分类: 未分类|2931 次阅读|1 个评论
利用现代技术成果勇攀科技高峰
accsys 2010-4-12 06:11
姜咏江 计算机科学技术的发展为自身的打造也创造了前所未有的便利。自从电子电路设计的现场可编程阵列器件FPGA出现之后,使得计算机自身的改造与设计问题,也能够通过电子设计自动化软件EDA很方便地完成。这不仅改变了高端电子电路设计的环境条件,而且使一向立足于软件的计算机科技人员,能够迅速地理解和掌握计算机的软硬件接口技术,甚至可以方便地进入到计算机核心的硬件领域,从根基上成功地改造计算机,进而可以设计出全新的计算机结构,大跨度地推动计算机科学技术的前进。 长期以来,由于我们没有计算机设计制造的环境条件,这使中国人在国内设计制造计算机成为了一种根本不可能的事情。如今情况发生了根本性的变化,电子电路设计的技术成果,已经为我们打破了那曾经是不可逾越的坚网,使每一个计算机科学家都可以自由地翱翔在这片蓝天之上。 遗憾的是许多计算机科学家还意识不到,被打开的坚网对我们是多么的重要,还不能够积极快速地投入到计算机更深层次的研究与创造之中。我们曾经过于重视软件,甚至基本上放弃了计算机核心硬件的研究与发展。那种错误的认识,使我们偌大的国家在相当长的一段时间里,成为了计算机消费大国。我们既没有计算机硬件的原创,也没有影响力很强的软件原创。那个时期的计算机人员,除了使用计算机的用户,就是为国外公司宣传服务的打工者。面对当时的现状,许多人发出为什么我们没有基础软件?为什么我们不能有真正的原创?的疑问,这其中一个重要的原因,就是当时我们不具备研发的技术环境。 依我个人体会,从软件转向软硬件全面研究并不是一件多么困难的事情。实际上,现代条件下的计算机硬件设计,基本上就属于软件的工作范围。从某些情况来看,软件人员搞计算机核心设计,要比那些长期从事电子电路设计的人员会更容易。这种变化就是前面提到的材料工艺和技术成果给我们带来的好处。 彻底掌握计算机技术,必须掌握计算机核心硬件技术。透彻理解计算机,必须彻底搞清楚计算机硬件对软件的决定作用。真正要让我们使用的计算机安全,就必须从硬件的层面做起。我们要真正要成为世界强国,那就需要从研究制造自己的计算机,建立自己完整的计算机工业。 目前,我们国家搞FPGA设计技术的人还是太少,而能够利用FPGA进行计算机核心技术设计的人更少。中国要发展壮大,一定要在计算机科学领域有较大的作为,一定要发展自己的计算机工业,一定就要培养一大批能够深入到计算机核心层面的工程技术人员。现在这样少数的科研人员搞核心硬件设计远远满足不了未来计算机发展的需求。因而宣传FPGA技术,宣传FPGA技术与计算机技术相结合,应该是有识的计算机界教师与科技工作者不可推卸的责任。 2010-4-12
个人分类: 随笔|3524 次阅读|1 个评论
CPU设计我要让更多的人掌握它
accsys 2010-1-2 08:00
姜咏江 这个小小的芯片从国外购买的价格最高可以到几万元,占到整个服务器成本的70%以上。我们国家信息产业就是因为这项核心技术的缺失,基本没钱可赚,利润率只有2%到3%,还不如传统产业。国外大公司每年从中国赚走100多亿美元,比我国购买飞机、石油、汽车花的钱还要多。这是中国龙芯芯片设计专家胡武伟某年月日说道一段话,是从网上搜到的。 发展我国自己的计算机芯片产业,要同时作两件事,一是发展超大规模集成电路制造技术,二是发展计算机核心芯片设计技术。前者个人无法办到,需要国家从战略的角度出钱购买技术设备,尽快创建我国自己的高端集成电路产业基地。后者如今可以通过个人的努力完全办到。 我国将计算机产业叫高科技产业,该产业这样叫,足显出我们过去对计算机制造业的无知和无能。过去,因为技术和设备的原因,我们一直没有能力去设计和制造计算机的核心部件。现在,芯片设计的基础技术发生了变化,有了可编程阵列器件FPGA/CPLD,个人设计计算机CPU芯片的时代已经到来了! 为了能够让更多的人进入计算机芯片设计行列,让更多的人掌握CPU的设计方法,我要借助于科学网,通过我的博客,将我的设计经验告诉那些有志于此项技术的初学者,将他们领进计算机核心设计的大门。 现在就开始! 1. CPU设计使用的软件和硬件 通过计算机进行CPU设计工作需要EDA软件,目前这种软件有几家公司的产品,这里就介绍自己常用的Altera公司的Quartus II吧。 Quartus II软件很人性化,电子电路产品的设计可以使用原理图方式,也可以使用硬件编程语言编程方式,还可以这两种设计方式混合使用。Quartus II构造的是一个电子电路设计的集成环境,可以很方便地进行电路设计的编辑、编译、仿真验证检查、下载到FPGA芯片上实际运行测试等。Altera公司还提供配套的电子电路设计开发板。其实,用买来的FPGA芯片,自己就可以制作开发板,或者干脆自己制作计算机。Altera公司的推荐的开发板DE2-70约售价5000元,DE1开发板要1000元左右。我主张自己做开发板,成本也就要几百元,还可以根据自己需要取材,当然这需要有一些电子电路制作方面的技术。 2. 软件人员搞CPU设计 我的经验是计算机软件人员可以从事CPU设计,甚至他们做起来要比学习电子电路的人员搞CPU设计更容易。因此我呼吁那些有抱负的软件科技人员,如果有能力,一定要进入CPU设计领域,因为软硬件一体化的计算机技术已经成为了计算机设计的主流。我先给你一个用Verilog HDL语言设计的例子。Verilog HDL语言借鉴了c语言,因而很适合软件工程师使用。找一本Verilog HDL语言的书看看,下面描述的能够运行程序的计算机核就可以弄懂了,或者看一下我写的《计算机原理综合课程设计》一书,也许会理解的更快。 2.1 最简单的计算机核设计 这里给出用Verilog HDL语言设计的一个能够运行简单程序的计算机核,是我在研究生班教学中作为设计实例完成的。这个设计已经在Quartus II软件的环境下测试通过,并且下载到自制的开发实验板上运行过。其中存储器是哈佛结构,直接使用了Quartus II给的存储器元件组织的。 【程序】 //基本输入时钟clock //复位控制:reset_n,低电位有效 //基本输出:o //程序存储器iram,16位,高5位是类指令代码,用imem16.mif初始化 //数据存储器dram,16位,不用数据文件初始化 //用lpm存储器的地址信号要稳定1拍,才可以读写数据 //指令格式:高5位指令代码,11位地址码,16位立即数(分高低8位) module test ( clock, reset_n, o, //调试输出(可以不要): opc, omar, ojp, oqw, olda, oadd, oout ); input clock; input reset_n; output o; output oqw; output opc,omar; output ojp; output olda,oadd,oout; wire dwren; wire q_w; wire q_data; reg b,a,ir,da,oo,ddata; reg pc,mar; reg jp; //节拍 reg dwrit; //写控制 //指令: reg lda, //取数:从数据单元取数到da add, //加:da与数据单元相加,结果放入da out, //输出:将数据单元内容输出到输出寄存器 sdal, //低8位立即数:将8位立即数扩充为16位送da sdah,//高8位立即数:将8位立即数作为高8位,与原da低8位连接成16位放在da中 str; //da送数据存储单元: //仿真信号输出: assign o = oo; assign opc = pc; assign omar = mar; assign ojp = jp; assign oqw = q_w; assign olda=lda; assign oadd=add; assign oout=out; assign dwren = dwrit; //指令存储器: lpm_rom iram(.address(pc),.inclock(clock),.q(q_w)); //程序存储器 defparam iram.lpm_width = 16; defparam iram.lpm_widthad = 11; defparam iram.lpm_outdata = UNREGISTERED; defparam iram.lpm_indata = REGISTERED; defparam iram.lpm_address_control = REGISTERED; defparam iram.lpm_file = imem16.mif; //初始化文件,放置程序 //数据存储器: lpm_ram_dq dram(.data(ddata),.address(mar),.we(dwren),.inclock(clock),.q(q_data)); defparam dram.lpm_width = 16; defparam dram.lpm_widthad = 11; defparam dram.lpm_outdata = UNREGISTERED; defparam dram.lpm_indata = REGISTERED; defparam dram.lpm_address_control = REGISTERED; always @(posedge clock or negedge reset_n) begin if (!reset_n) begin pc = 0; lda = 0; add = 0; out = 0; sdal = 0; sdah = 0; str = 0; jp=0; end else begin jp=jp+1; case (jp) 0: begin end 1: begin case (q_w ) 5'b00001: lda = 1; //lda:00001 5'b00010: add = 1; //add:00010 5'b00011: out = 1; //out:00011 5'b00100: sdal = 1; //低8位,扩充有符号16位 5'b00101: sdah = 1; //高8位,与前面低8位输入合成16位 5'b00110: str = 1; //da送数据单元 endcase end 2: begin if (lda || add || out || str) mar=q_w ; end 3: pc=pc+1; 4: begin if (lda) begin da=q_data; jp = 0; lda= 0; end else if (add) begin b=q_data; a=da; end else if (out) begin oo = q_data; jp = 0; out= 0; end else if (sdal) begin da = {{8{q_w }},q_w }; //扩充成16位有符号数 sdal= 0; end else if (sdah) begin da = {q_w ,da }; sdah = 0; end else if (str) begin ddata = da; dwrit = 1; end end 5: begin if (add) begin da=a+b; jp = 0; add= 0; end else if (str) begin str = 0; dwrit = 0; end end endcase end end endmodule ///////////// 仿真或执行程序实例 /////////// // 汇编 编译 // // sdal 5 2005 // // sdah 62806 // // str 10 300a // // sdal 3 2003 // // add 10 100a // // str 15 300f // // out 15 180f // //将编译的16进制数写入imem16.mif // /////// 16进制结果输出:0608 ///////////// 【练习】用本机语言自己编一个程序,自己编译,然后用Quartus II检验一下。 --- 待续 ---
个人分类: 计算机核|14007 次阅读|6 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-23 12:25

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部