下冰雹 · 2022年05月30日

怎么样才算一个优秀的SOC验证环境(一)

小编前段时间帮客户找到一些人解决了SOC验证环境的问题。在招人的时候我们和不少人进行了沟通交流,从中发现SOC验证环境一千家公司有一千家公司的做法。那么一个优秀的SOC验证环境应该具备哪些功能呢?

首先是SOC验证环境支持C和SV两种下激励的方式。

通过C code启动SOC环境是怎么启动的呢?这里涉及到CPU如何boot,对此很多转行的同学可能很难理解,在这里和大家做个简单的介绍。

我们知道CPU执行的是指令和数据,冯诺依曼结构是将指令和数据合并在一起存储,如8086。

494f4c9d0d6f0e2949c11276e43ad00e.jpg

哈弗结构是将指令和数据分开存储,如ARM系列。

2774b8b17bdbc2ad76a16687dbb557ba.jpg

无论是哪种结构CPU都是通过指令实现程序跳转或者数据读写。什么是指令?以RISCV为例,其指令格式如下

5d50e3b894a334a2ccdd54c3ebe6a552.png

我们以简单的加法运算为例,比如我想做一个 rd= rs1+rs2 这样一个寄存器加法运算,伪代码就是 add rd,rs1,rs2 。通过上述RISCV的指令格式应该就是 

a9231d0c189b7f53a03062a7c6c83711.png

funct7,funct3,opcode又是什么呢?通过查询 riscv 手册可以查到以下结果。

0f04702dac7bf4ee4ac4ddf6da494208.png

由此我们组成一个简单的加法的操作指令,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的呢?这就要讲到编译的过程。

191d65eabb40e41f4808a5ad9979d517.png

从C语言到机器语言总共要经过3步,分别是编译,汇编和链接。对于这些是如何做到的,我们下一期继续介绍。

作者:IC bug 猎人
原文链接:处芯积律

推荐阅读

更多IC设计技术干货请关注IC设计技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
20173
内容数
1307
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息