用底层代码说话:龙芯不是“中国心”
所谓 发明自己的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
--call译码 ( "01 " & OPC_ACALL ) when op_in(4 downto 0) = ACALL else
--加法译码 等 ( "00 " & OPC_ADD_1 ) when op_in(7 downto 3) = ADD_1 else
( "01 " & OPC_ADD_2 ) when op_in(7 downto 0) = ADD_2 else
( "00 " & OPC_ADD_3 ) when op_in(7 downto 1) = ADD_3 else
( "01 " & OPC_ADD_4 ) when op_in(7 downto 0) = ADD_4 else
( "00 " & OPC_ADDC_1) when op_in(7 downto 3) = ADDC_1 else
( "01 " & OPC_ADDC_2) when op_in(7 downto 0) = ADDC_2 else
( "00 " & OPC_ADDC_3) when op_in(7 downto 1) = ADDC_3 else
( "01 " & OPC_ADDC_4) when op_in(7 downto 0) = ADDC_4 else
( "01 " & OPC_AJMP ) when op_in(4 downto 0) = AJMP else
.
.
.
.
( "00 " & OPC_ERROR );
end DFL;
不难推断龙芯CPU的ip core中肯定存在类似文件(也许叫loognxin_dec.vhd,或者其实就是MIPS_dec.vhd)包含decode模块,形式和这个近似。
////////////////////////////////////////////////////////////////////////////////////////////////////////
--央控制单元
--i8051_ctr.vhd
architecture BHV of I8051_CTR is
type CPU_STATE_TYPE is (CS_0, CS_1, CS_2, CS_3);
type EXE_STATE_TYPE is (ES_0, ES_1, ES_2, ES_3, ES_4, ES_5, ES_6, ES_7);
signal reg_pc_15_11 : UNSIGNED (4 downto 0);
signal reg_pc_10_8 : UNSIGNED (2 downto 0);
signal reg_pc_7_0 : UNSIGNED (7 downto 0);
signal reg_op1 : UNSIGNED (7 downto 0);
signal reg_op2 : UNSIGNED (7 downto 0);
signal reg_op3 : UNSIGNED (7 downto 0);
signal reg_acc : UNSIGNED (7 downto 0);
signal reg_cy : STD_LOGIC;
signal reg_ac : STD_LOGIC;
signal reg_f0 : STD_LOGIC;
signal reg_rs1 : STD_LOGIC;
signal reg_rs0 : STD_LOGIC;
signal reg_ov : STD_LOGIC;
signal reg_nu : STD_LOGIC;
signal reg_p : STD_LOGIC;
signal cpu_state : CPU_STATE_TYPE;
signal exe_state : EXE_STATE_TYPE;
begin
process(rst, clk)
-- execute state
--
when CS_3 =>
case dec_op_in(6 downto 0) is
-------------------------------------------
--
-- acc <- acc + (r)
--
when OPC_ADD_1 => --注意这一行 表示加法
case exe_state is
when ES_0 =>
GET_RAM_ADDR_1(v8);
START_RD_RAM(v8);
exe_state <= ES_1;
when ES_1 =>
exe_state <= ES_2;
when ES_2 =>
alu_op_code <= ALU_OPC_ADD;
alu_src_1 <= reg_acc;
alu_src_2 <= ram_in_data;
alu_src_cy <= '0 ';
exe_state <= ES_3;
when ES_3 =>
ram_out_data <= alu_des_1;
START_WR_RAM(R_ACC);
reg_cy <= alu_des_cy;
reg_ac <= alu_des_ac;
reg_ov <= alu_des_ov;
exe_state <= ES_4;
when OPC_CJNE_3 => --注意这一行表示不等跳转 下面还有许多不一一列
case exe_state is
when ES_0 =>
GET_RAM_ADDR_1(v8);
START_RD_RAM(v8);
exe_state <= ES_1;
when ES_1 =>
exe_state <= ES_2;
when ES_2 =>
GET_PC_H(pch);
GET_PC_L(pcl);
alu_op_code <= ALU_OPC_PCSADD;
alu_src_1 <= pcl;
alu_src_2 <= pch;
if( ram_in_data /= reg_op2 ) then
[解决办法]
真实辛苦了 顶下牛人
[解决办法]
强帖留名,mark~
[解决办法]
人家本来就说了是兼容MIPS的,而且也没有讳言是使用了网上能找到的MIPS核心实现。
用得着你在N年之后卖弄聪明吗?
但是“龙芯_指令集=MIPS_指令集”是错误的,人家还有自己扩展的数十条指令。
还有“据说是向法意半导体买来的”那真的是“据说”,但是说反了,是授权给法意半导体龙芯2E的生产和全球销售权。
不要不懂装懂。
你以为贴个8051的VHD就可以吓得住人吗?:)
[解决办法]
我对VHDL并不精通,不过想说一点:龙芯刚研制出来时就声明用的是MIPS,一块CPU,除了是自身科技水平的展示外,还应该考虑一些市场推广方面的因素,也许我们可以自己设计实现一套指令集,但国际上不会有哪个厂商说因为是你中国自己设计的就一定要用你的产品,况且用了MIPS龙芯现在也还没能广泛的应用,如果是自己来一套,恐怕可能会更加举步维艰,我们研究自己的CPU的最终目的是要应用的,最终不能广泛应用的产品我们为什么还要做呢?
毕竟我们没能处在大规模集成电路刚刚普及的年代,那时的8086还没能形成气候,而现在国际上已有巨头垄断,他们几十年的技术积淀是我们短时间难以超越的,但我们还是要去做,只是策略上得好好把握。
个人觉得LZ所说的:“劳苦大众的的血汗钱,被这帮人渣中饱私囊。我就坚信一句话:不是不报,时候未到。”实在是有些偏激,当然LZ的知识知识远比我丰富,我也根本没资格指责LZ什么,只是希望,大家都能冷静下来,关注这些,耐住性子,让时间来证明一切。