二、RISC_CPU仿真、调试(上)

本文详细介绍了RISC_CPU的仿真过程,包括外围模块的设计,如地址译码器、ROM和RAM的实现。在连接CPU模块并进行仿真时,遇到halt信号提前拉高的问题,原因是load_acc信号超前于数据导致。通过在load_acc信号后添加触发器延迟数据,成功解决了这个问题,最终通过了2EH指令的仿真测试。
摘要由CSDN通过智能技术生成

1、外围模块

为了对RISC_CPU进行测试,需要有存储测试程序的ROM或RAM、地址译码器。
(1)地址译码器
地址译码器用于产生选通信号,选通ROM或RAM。

module addr_decoder
(
	input			[12:0]	addr,
	
	output 	reg				rom_sel,
	output	reg				ram_sel				
);

// 1FFFH  -----   18000H     RAM
// 17FFH  -----   00000H     ROM

always@(addr)
	casex(addr)
		13'b1_1xxx_xxxx_xxxx: {rom_sel,ram_sel} <= 2'b01;
		13'b0_xxxx_xxxx_xxxx: {rom_sel,ram_sel} <= 2'b10;
		13'b1_0xxx_xxxx_xxxx: {rom_sel,ram_sel} <= 2'b10;
		default: {rom_sel,ram_sel} <= 2'b00;
	endcase

endmodule


(2)RAM和ROM
这里为了和之前的地址相匹配,把地址做了修改(和书上不一样)。
ROM:

module my_ram
(
	inout			[7:0]	data,
	input			[12:0]	addr,
	input					ena,
	input					read,
	input					write
);

reg [7:0]	ram[13'h1FFF:13'h1800];

assign data = (read && ena) ? ram[addr]:8'hzz;

always@(posedge write)
	ram[addr] <= data;
	
initial 
	begin
		ram[13'h1800] = 8'b0000_0000;
		ram[13'h1801] = 8'b1111_1111;
		ram[13'h1802] = 8'b1010_1010;
	end

endmodule

RAM:

module my_rom
(
	input			[12:0]	addr,
	input					read,
	input					ena,
	
	output			[7:0]	data
);

reg [7:0] memrory[13'h17FF:0];

assign data = (read && ena) ? memrory[addr]:8'bzzzz_zzzz;

initial 
	begin
		memrory[0] = 8'b1110_0000
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值