在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4467|回复: 8

[求助] 如何在ram中直接输入汇编程序

[复制链接]
发表于 2011-7-18 21:35:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
大家好
我现在做了一个简单的8bit的处理器
处理器一共由8个模块构成他们分别是:
U1:tri-stage(数据控制器) U2:accumulator(累加器) U3:register(指令寄存器) U4:ALU(算数器) U5:control logci(状态控制) U6 PG counter(程序计数) U7 multiplexer(地址多路器)

处理器的名字叫hibikino,下面是hibikino的模块记述
//..............................................hibi kino code........................................//
module hibikino (data,addr,clock,reset,halt,mem_wr,mem_rd);
input [7:0] data;
input clock,reset;
output halt,mem_wr,mem_rd;
output [4:0] addr;
wire [7:0] data,accum,alu_out;
wire [4:0] addr,ir_addr,pc_addr;
wire [2:0] opcode;

ts U1 (.accum(accum),.data(data),.data_en(data_en));
register U2 (.clock(clock),.reset(reset),.control(load_ac),.ou t(accum),.in(alu_out));
register U3 (.clock(clock),.reset(reset),.in(data),.control(lo ad_ir),.out({opcode,ir_addr}));
alu U4 (.alu_out(alu_out),.zero(zero),.data(data),.accum( accum),.opcode(opcode));

ctltop U5 (.zero(zero),.opcode(opcode),.clock(clock),.reset( reset),.halt(halt),.mem_wr(mem_wr),.mem_rd(mem_rd) ,
.load_ir(load_ir),.load_pc(load_pc),.inc_pc(inc_pc ),.load_ac(load_ac),.data_en(data_en),.fetch(fetch ));

counter U6 (.clock(clock),.reset(reset),.load_pc(load_pc),.in c_pc(inc_pc),.pc_addr(pc_addr),.ir_addr(ir_addr));
mux U7 (.ir_addr(ir_addr),.pc_addr(pc_addr),.fetch(fetch) ,.addr(addr));


endmodule
//..............................................hibi kino code........................................//

hibikino处理器的外围模块只有一个RAM,时钟信号准备由testbench给予。
RAM的功能代码暂时是这么写的,其中数据总线只有一条。读写信号分开。
//..............................................RAM code..........................................//
module ram(addr,mem_rd,mem_wr,data);
inout [7:0] data;
input [4:0] addr;
input mem_rd,mem_wr;
reg [7:0] mem[0:300];


assign data = (mem_rd)? mem[addr] : 8'bzzzzzzzz;

always @(posedge mem_wr)begin
mem[addr]<=data;
end
endmodule
//..............................................RAM code..........................................//

现在的问题是,我有一个简单的汇编程序,老师让我直接在RAM的功能代码里输入。我想请教大家具体应该怎么记述?
汇编程序的代码贴给大家
//........................RAM's instruction area.................................//
00 JMP  03                    //00:表示地址 JMP:命令 03:指向地址
01
02
03 LDA  1B
04 STO  1C
05 ADD  1A
06 STO  1B
07 LDA  1C
08 STO  1A
09 XOR  1D
0A SKZ
0B JMP   03
0C HALT
//........................RAM's instruction area.................................//
上述这个简单的汇编程序,经过13个周期 HALT就会被触发,导致整个程序停止运行

下面是保存在RAM数据区域的初期值
//........................RAM's data area.................................//
1A    1
1B    0
1C    1
1D    144
//........................RAM's data area.................................//


ps  不是建立一个hex文件 然后用¥ readmemb(。。。。)这个指令,我是想把汇编程序直接输入进RAM中,然后把RAM和hibikino处理器整个进行testbench。还有hibikino中的每个模块都已经testbench了,基本都没问题。
 楼主| 发表于 2011-7-18 22:58:02 | 显示全部楼层
自己先顶起来
 楼主| 发表于 2011-7-19 09:00:32 | 显示全部楼层
没人知道吗
发表于 2011-7-19 09:19:50 | 显示全部楼层
既然是testbench,用readhex就可以啊。
如果要上FPGA,那么在生成RAM的core的地方可指定ram的初期值文件。
发表于 2011-7-19 11:02:39 | 显示全部楼层
用initial在0ns时给mem[addr]初始化赋值。可以直接写在ram模块中,反正你不用综合ram,只是写tb。不过我觉得用 readmemb更靠谱!
发表于 2011-7-19 11:03:30 | 显示全部楼层
用initial在0ns时给mem[addr]初始化赋值。可以直接写在ram模块中,反正你不用综合ram,只是写tb。不过我觉得用 readmemb更靠谱!
发表于 2011-7-22 09:42:03 | 显示全部楼层
四楼正解.
发表于 2011-7-23 17:20:09 | 显示全部楼层
在RAM 里边做一个task,用来readmem(hex).
发表于 2011-7-23 23:24:20 | 显示全部楼层
CPU仿真时怎么可能认识你的汇编代码呢?CPU仿真用的是编译器编译生成的HEX或BIN文件,然后用readmem来初值化。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-19 11:48 , Processed in 0.028694 second(s), 12 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表