/////////////////////////////////////////////////////////////////////////////////////// // // PROM MODULE - 1k Words program memory. // /////////////////////////////////////////////////////////////////////////////////////// // Timescale Directive `timescale 100ps / 10ps // 1024 words of ROM `define rom_top 1023 module prom( Data_bus, Address_bus ); // // I/O Declarations // input [31:0] Address_bus; output [31:0] Data_bus; // // Extra declarations for "Backdoor" programming // reg PROMwrite; reg PROMclear; reg [31:0] PROMaddress; reg [31:0] PROMdata_in; // // Register Declaration // reg [31:0] Data_stored [ `rom_top:0 ]; reg [31:0] a; reg [31:0] Countfrom; // // Continuous Assignment // assign Data_bus = (Address_bus[1:0] == 0) ? Data_stored [Address_bus[31:2]] : 32'bx; // // For "backdoor" programming // initial begin PROMwrite = 0; PROMclear = 0; PROMdata_in = 0; PROMaddress = 0; end always @(posedge PROMwrite) begin $display("Update PROM[%d] = %d",PROMaddress[31:2],PROMdata_in); Data_stored [PROMaddress[31:2]] = PROMdata_in; PROMwrite = 0; end always @(posedge PROMclear) begin $display("Clear PROM"); for (a = 0; a <= `rom_top; a = a + 1) Data_stored[a]='h80000000; PROMclear = 0; end //////////////////////////////////////////////////////////////////////////// // PROGRAM INSTRUCTIONS //////////////////////////////////////////////////////////////////////////// initial begin // Set repeat variable Countfrom = 20; // Initialise all to NOP for (a = 0; a <= `rom_top; a = a + 1) Data_stored[a]={32'b10000000000000000000000000000000 }; // ADD R0,1, R1 Data_stored[0]={2'b10, 5'b00001, 6'b000000, 5'b00000, 1'b1, 13'b0000000000001 }; // ADD R0,2, R2 Data_stored[1]={2'b10, 5'b00010, 6'b000000, 5'b00000, 1'b1, 13'b0000000000010 }; // ADD R0,3, R3 Data_stored[2]={2'b10, 5'b00011, 6'b000000, 5'b00000, 1'b1, 13'b0000000000011 }; // ADD R0,4, R4 Data_stored[3]={2'b10, 5'b00100, 6'b000000, 5'b00000, 1'b1, 13'b0000000000100 }; // XOR R2,7, R5 Data_stored[4]={2'b10, 5'b00101, 6'b000011, 5'b00010, 1'b1, 13'b0000000000111 }; // SLL R3,R1, R6 Data_stored[5]={2'b10, 5'b00110, 6'b100101, 5'b00011, 1'b0, 8'b00000000, 5'b00001 }; end endmodule