什么是软件CPU
软件CPU区别于硬件CPU,指用软件实现的CPU.
常见的如各种编程语言的仿真器,CPU的模拟器,或虚拟机。
像硬件CPU一样,它有自己的指令集,或专用指令或与对应硬件指令集相同。
软件CPU和硬件CPU一样,属于机器翻译的一种,当然,编译器也是机器翻译的一种。只不过翻译的结果不一样。
前者翻译为“动作”,后者翻译为另一种形式。
软件CPU应用很广,除前面介绍的,如各种EDA软件如verilog,电路仿真,PCB板级仿真 等等都会用到。
几乎目前能想到的各种仿真验证类软件都会用到?
软件CPU之所以应用很广,同硬件CPU一样,在于其可编程性,灵活性,适应性强。
软件CPU是一种通用执行机器。
正如前面介绍的,软件CPU属于机器翻译的一种,因此其实现离不开编译技术。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
>> 正如前面介绍的,软件CPU属于机器翻译的一种,因此其实现离不开编译技术。
两码事
应该是虚拟技术吧 比较早是在ibm的vms700(不是很确定)上就实现了 操作系统概念上提到过
软件cpu,不就是虚拟机吗。
都只指令级仿真。
具体说的是不是编译器的问题
哦,gnu as有个模拟器,gdb也有个模拟器。还有专门的模拟器。
相对硬件
其指令集可以设计的很复杂。可以不具备可读性,因为它不是给人看的。
指令读取就是编译器前端部分,但会简单些。先用词法语法分析器把
指令代码映射为语法树,随后进行语义分析,最后执行。
对软件人员,估计写个这样的CPU并不是难事。
hehe,看来大家想到的都是虚拟机,编程语言的simulator.
实际上其应用不止如此。如电路设计中的各种仿真软件。
是你自己想错了吧。
cpu 的指令解码与语言的编译器编译根本两码事,不要混为一谈
对字节码的解释和对高级语言的编译(或者对高级语言的解释)两者还是有很大区别的。
当然,比如编译verilog、vhdl等HDL,这些属于高级语言,那是编译原理里面研究较多的编译,并且和C很容易类比,C语言看了代码比较容易想到编译出来的汇编长什么样(不优化),verilog、vhdl也相对比较容易想到编译出来的电路长啥样
高级语言抽象度太高。
如果换成汇编语言就好理解了。比如软件CPU吃汇编语言相对于硬件CPU吃二进制序列。之间的区别很小。
要说不同,可能就是软件CPU的汇编指令为字符序列,读取靠状态机(即词语法分析器)识别。
硬件CPU输入为二进制序列,其指令识别是靠简单的状态机。同样是指令序列读取,我宁可把这部分归入具有成熟理论且强大的词语法分析范畴。认为硬件CPU的指令读取是一种简单的词语法分析。
把通常的程序执行理解成
----------------------------------------------------------|
|执行高级语言的CPU |
| -------------------------- 中间代码 ------------ |
| | 高级语言源程序识别 | --------> | CPU执行 | |
| --------------------- ---- ------------ |
| |
---------------------------------------------------------
按这个模型来理解CPU,就不会把编译器与CPU隔离来看,而是应该作为系统的整体。认为编译器是CPU的一部分。这样可以解释很多现象,思路会开阔很多。
[ 本帖最后由 fineamy 于 2008-12-24 14:29 编辑 ]