《自己动手写CPU》学习记录(4)——第4章/Part 2



《自己动手写CPU》学习记录(4)——第4章/Part 2_第1张图片


目录

引言

致谢

拥有Linux开发环境

1、Linux虚拟机安装

2、共享文件夹

GNU工具链安装

Makefile

RAM.ld

Bin2Mem.exe

注意

路径

测试


引言

上篇文章实现了 ori 指令,并且搭建验证平台,验证了功能的正确性。但是有一个问题就是,当时验证的思路并不是将C语言通过编译器编译之后产生一系列指令码,而是手写 ori 指令,写入指令存储器内,完成的是简单的设计功能验证。本片将着手配置MIPS的编译环境。

致谢

感谢书籍《自己动手写CPU》及其作者雷思磊。一并感谢开源精神。



拥有Linux开发环境

1、Linux虚拟机安装

由于本人之前学习EDA软件时,电脑就安装了 Ununtu16.04 的虚拟机,所以此处直接跳过。当时安装的记录:

我的LINUX入门记录(1)https://blog.csdn.net/qq_43045275/article/details/127418509?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167049134716800182786680%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167049134716800182786680&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-127418509-null-null.nonecase&utm_term=linux&spm=1018.2226.3001.4450

2、共享文件夹

参考下面链接:VMware下共享文件夹的实现

GNU工具链安装

终端输入:

mips-linux-gnu-gcc -v

可以按照提示的安装命令安装。

建议将下面的所有文件置于共享文件夹目录下!

Makefile

分享一下:

ifndef CROSS_COMPILE
	CROSS_COMPILE = mips-linux-gnu-
endif
CC = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld

OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump

OBJECTS = ISTC_ROM.o
export CROSS_COMPILE
all:ISTC_ROM.data ISTC_ROM.om ISTC_ROM.o ISTC_ROM.bin ISTC_ROM.asm

%.o:%.s
	$(CC) -mips32 -EB $< -o $@

ISTC_ROM.om:RAM.ld $(OBJECTS) 
	$(LD) -EB -T RAM.ld $(OBJECTS) -o $@

ISTC_ROM.bin:ISTC_ROM.om
	$(OBJCOPY) -O binary $< $@

ISTC_ROM.asm:ISTC_ROM.om
	$(OBJDUMP) -D $< >$@

ISTC_ROM.data:ISTC_ROM.bin
	./Bin2Mem/Bin2Mem.exe -f $< -o $@

clean:
	rm -rf *.o *.om *.bin *.data

RAM.ld

MEMORY
        {      
        ram(RW)    : ORIGIN = 0x00000000, LENGTH = 0x00001000
        }
SECTIONS
{
	  /*
	  For some reason the linker script can't see the _reset_vector symbol 
	  (even if we declare it global), so we explicitly set it. */
	.text :
        {
        *(.text)
        } > ram

        .data :
        {
        *(.data)
        } > ram
        .bss :
        {
        *(.bss)
        } > ram
        .stack  ALIGN(0x10) (NOLOAD):
        {
        *(.stack)
        _ram_end = .;
        } > ram
}
ENTRY (_start)

Bin2Mem.exe

这个文件网上有很多,找不到可以私信我。

注意

路径

《自己动手写CPU》学习记录(4)——第4章/Part 2_第2张图片

《自己动手写CPU》学习记录(4)——第4章/Part 2_第3张图片

测试

编写源程序文件 ISTC_ROM.s:

.org 0x0 		
.global _start 	
.set noat		

_start:
ori $1,$5,0x1100
ori $2,$6,0x0020
ori $3,$7,0xFF00
ori $4,$8,0xFFFF
nop 
nop 
ori $2,$8,0x0020
ori $3,$9,0xFF00
ori $4,$10,0xFFFF

在源文件所在的路径下,右键——>打开终端:

首先清除:

make clean

生成初始化文件:

make all

打开 .data 文件查看:

《自己动手写CPU》学习记录(4)——第4章/Part 2_第4张图片



有问题可以评论区留言~~~

你可能感兴趣的:(CPU,MIPS32,Verilog,编译环境GNU)