所谓 发明自己的CPU 我想应该是这样:1.自己老老实实自己用VHDL或VERILOG写
ip core (其实ip core几十个VHD或V文件)
2.用综合器一步步综合成自己的标准单元电路
3.布线制版
一。龙芯的ip core由来
首先看一段代码(设置好福珑上的编程环境)
.data
mess: .asciiz “\n hello world ”
.globl main
.text
main:
li $v0, 4 # 打印的系统中断号
la $a0, mess# 要打印的字符串的地址
syscall # 调中断
.end main
这是在福珑机子(基于龙芯2E)上简单的一段HELLO WORLD汇编代码,可以看出所有指令(li la 还有这个程序没有包含的龙芯指令都和MIPS指令完全一样)都是MIPS指令,代码段和数据段和系统调用的约定都是MIPS指令集约定,为进一步确定龙芯指令集就是MIPS指令集,我查看连接后的二进制代码,再和MIPS手册指令的opcode对比,结果完全一样。连指令的名称到OPCODE都一样,我真是无语了。
cpu的各模块
ROM <-------| |-----> decode单元
-----央控制单元-----
RAM <-------| |-----> ALU单元
1。中央处理单元从ROM(指令寄存器与内存统一编址)取指令
2。然后通过decode单元译码(指令---> opcode)
3。ALU单元执行decode单元译出来的码(opcode)
4. 访RAM取数据等操作数
5。回写
我们都知道CPU的IP CORE基本都是由VHDL或VERILOG写成,而其中必然有一decode模块将指令转化为OPCODE,例如8051的ip core的i8051_dec.vhd文件中的decode模块:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
--decode单元
--i8051_dec.vhd文件
entity I8051_DEC is
port(rst : in STD_LOGIC;
op_in : in UNSIGNED (7 downto 0);
op_out : out UNSIGNED (8 downto 0));
end I8051_DEC;
architecture DFL of I8051_DEC is
begin
op_out <= ( "00 " & OPC_ERROR ) when rst = '1 'else