小编前段时间帮客户找到一些人解决了SOC验证环境的问题。在招人的时候我们和不少人进行了沟通交流,从中发现SOC验证环境一千家公司有一千家公司的做法。那么一个优秀的SOC验证环境应该具备哪些功能呢?
首先是SOC验证环境支持C和SV两种下激励的方式。
通过C code启动SOC环境是怎么启动的呢?这里涉及到CPU如何boot,对此很多转行的同学可能很难理解,在这里和大家做个简单的介绍。
我们知道CPU执行的是指令和数据,冯诺依曼结构是将指令和数据合并在一起存储,如8086。
哈弗结构是将指令和数据分开存储,如ARM系列。
无论是哪种结构CPU都是通过指令实现程序跳转或者数据读写。什么是指令?以RISCV为例,其指令格式如下
我们以简单的加法运算为例,比如我想做一个 rd= rs1+rs2 这样一个寄存器加法运算,伪代码就是 add rd,rs1,rs2 。通过上述RISCV的指令格式应该就是
funct7,funct3,opcode又是什么呢?通过查询 riscv 手册可以查到以下结果。
由此我们组成一个简单的加法的操作指令,CPU拿到这个操作指令之后就可以进行寄存器的加法运算。
事实上除了上述的寄存器操作指令,CPU还支持其他控制指令和数据处理指令。以riscv的标准指令集为例,其分别有以下6种类型。
- R-format for register-register arithmetic/logical operations
- I-format for register-immediate arith/logical operations and loads
- S-format for stores
- B-format for branches
- U-format for 20-bit upper immediate instructions
- J-format for jumps
大部分我们SOC对寄存器,memory的访问,数据的处理可以分解成上述6种类型的指令。由于底层的机器指令晦涩难懂,在存储访问和数据处理的时候,人们更倾向于用高级语言C来进行描述。C又是如何最终转换成机器指令送给CPU的呢?这就要讲到编译的过程。
从C语言到机器语言总共要经过3步,分别是编译,汇编和链接。对于这些是如何做到的,我们下一期继续介绍。
作者:IC bug 猎人
原文链接:处芯积律
推荐阅读
更多IC设计技术干货请关注IC设计技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。