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