工欲善其事,必先利其器。
在电子威廉希尔官方网站
飞速发展的今天,熟练使用相关工具软件是学习SoC的必经之路。但是,由于SoC是一个完整的系统,既包含处理器核、总线、外设等硬件,也包含处理器需要执行的指令,所以对于“软件编程”和“硬件编程”的概念必须要区分清楚。关于“软件编程”和“硬件编程”的概念在很多基础课程(如C语言、数字设计等课程)中已有介绍,但在学习SoC时,由于“软件编程”和“硬件编程”的概念“混”在一起,并且一开始不熟悉工具软件,可能会感觉难以上手。
本文介绍在使用Arm DesignStart计划开放的处理器核搭建SoC并通过FPGA实现的过程中所用工具软件(不介绍如何操作),理清“软件编程”和“硬件编程”的概念,熟悉SoC设计的流程。
软硬件关系
在搭建SoC的过程中需要使用的工具软件有Modelsim,Vivado,Keil,实现流程如下图。
实现流程
我们通过Arm DesignStart获取的是一个Verilog语言描述的软核,我们通过添加一些IP实现一个完整的描述SoC的工程。这些IP可以是用IP工具生成的,也可以是我们通过硬件描述语言(Verilog/VHDL)描述的。
Vivado负责将硬件描述语言(Verilog/VHDL)所描述的SoC编译、综合、实现,将FPGA内部本身无序的各种逻辑资源(如查找表、触发器、RAM等)配置成为有序的电路,实现SoC功能。而Keil负责将编写的软件编程语言(C/Assembler)编译成为机器码十六进制文件。将机器码作为RAM的初始化内容,即可进行仿真,在Modelsim软件中观察SoC工作时各个信号的波形。若将机器码通过工具下载到由FPGA实现的SoC中,那么就可以让SoC执行编写的程序,通过FPGA开发板观察执行结果。
从流程中也可以理解“软件编程”和“硬件编程”的区别,“软件编程”编的其实是一条条的指令,描述的是硬件的“动作”,而“硬件编程”编的是一个个的门电路和它们的连接关系,描述的是是硬件的结构。
以下对这三个工具做详细的介绍。
Modelsim
Modelsim主要用于硬件描述语言(Verilog,VHDL等)的仿真,并且支持VHDL和Verilog混合仿真。仿真分为前仿(RTL级仿真)和后仿(综合后门级仿真),这里使用Modelsim仿真属于前仿,也就是功能仿真,主要目的是通过看输出波形图,验证硬件逻辑是否正确。
Modelsim既可以独立使用,也可以和Intel Quartus Prime,Xilinx Vivado软件协同使用。
在官网上可以下载免费版本。
Vivado
Vivado是一个用于FPGA实现的综合工具,由FPGA厂商Xilinx提供,如果使用Intel(Altera)的FPGA,需要使用Quartus Prime软件。
从前述内容中知道,Vivado负责将硬件描述语言(Verilog/VHDL)所描述的SoC编译、综合、实现,将FPGA内部本身无序的各种逻辑资源(如查找表、触发器、RAM等)配置成为有序的电路,实现SoC功能。
Vivado的软件界面如下图。最上方为工具栏,左侧为设计流程各个的步骤,中间是文件管理和代码编辑的区域,下方为调试信息和输出的一些报告,使用时需注意阅读,以免被一些只报warning但很“神奇”的错误坑了。
Vivado主界面
Keil
Keil MDK是用于一系列基于Arm Cortex-M的微控制器设备的一个完整的软件开发环境。界面如下图所示,与Xilinx Vivado软件类似,主界面也是由工具栏、工程目录、代码编辑、调试信息组成。Keil软件的主要作用是将C语言/汇编语言写的程序编译成机器码,在进入调试模式时,通过调试器下载机器码到RAM中,CPU启动后,开始一条条地从存储器中取指执行。
Keil主界面
调试界面可以看到的信息更多,包括执行过程中的寄存器状态信息、反汇编代码,还可以通过右下角的窗口看到运行过程中系统内部一些信号的值,如下图。调试过程中可以设断点,也可以单步运行。
Keil调试界面
原作者:人生状态机
|