上一篇我们介绍了,CPU会读取机器码实现流程的控制和数据的读取。本篇将带大家认识如何将高级语言C编译成机器码。
C编译成机器码要通过预处理,编译,汇编,链接四个步骤。这四个步骤由谁做的呢?答案是编译器。
编译器做的工作类似我们IC行业里面的综合。在IC设计中,门级电路特别复杂,特别是当逻辑门数比较多时,通过直接设计逻辑电路变得非常困难。由此产生了verilog。我们通过Verilog描述电路的功能,然后通过DC进行综合,让我们很方便的进行大规模数字逻辑电路的设计。
在软件层面,编译器做得事情和综合类似,编译器的编译的过程也分前端和后端。编译器的前端主要完成分析阶段读取源程序,这其中包括词法、语法和语法检查,生成中间源代码和符合表等。编译器的后端,综合阶段通过中间源代码表示和符号表生成目标程序。具体的编译器各个阶段做得事情,这里不做详细介绍,感兴趣的粉丝可以自己找资料学习。
C语言的编译器有很多种,在我们芯片行业,主要有GCC和LLVM。下面框图简单的描述了一个CPU编译器组成。
我们都知道CPU的执行效率和CPU的频率及指令流水处理的效率有关系。很少人知道CPU的执行效率还和编译器有很大关系。编译器对C代码进行优化可以大大的缩减代码量,提高执行效率。国内有不少公司专门做这方面的研究。
上面我们讲完编译器的相关知识,在集成SOC环境的时候,我们需要集成工具链用于编译C语言生成机器码。
机器码生成了,该怎么输入给CPU使用呢?后面一期文章将和大家介绍CPU boot的几种方式。
作者:IC bug 猎人
原文链接:处芯积律
推荐阅读
更多IC设计技术干货请关注IC设计技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。