mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 17:20:10 +00:00
92 lines
2.9 KiB
Systemverilog
92 lines
2.9 KiB
Systemverilog
`timescale 1ns / 1ps
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
// Company: MIET
|
|
// Engineer: Nikita Bulavin
|
|
//
|
|
// Create Date:
|
|
// Design Name:
|
|
// Module Name: tb_instr_mem
|
|
// Project Name: RISCV_practicum
|
|
// Target Devices: Nexys A7-100T
|
|
// Tool Versions:
|
|
// Description: tb for instruction memory
|
|
//
|
|
// Dependencies:
|
|
//
|
|
// Revision:
|
|
// Revision 0.01 - File Created
|
|
// Additional Comments:
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
|
|
module tb_instr_mem();
|
|
|
|
parameter ADDR_SIZE = 4096;
|
|
parameter TIME_OPERATION = 10;
|
|
parameter STEP = 8;
|
|
|
|
logic [31:0] addr;
|
|
logic [31:0] RD;
|
|
logic [31:0] RDref;
|
|
|
|
instr_mem_ref DUTref(
|
|
.addr_i(addr),
|
|
.read_data_o(RDref)
|
|
);
|
|
|
|
instr_mem DUT (
|
|
.addr_i(addr),
|
|
.read_data_o(RD)
|
|
);
|
|
|
|
integer i, err_count = 0;
|
|
|
|
assign addr = i;
|
|
|
|
initial begin
|
|
$timeformat (-9, 2, "ns");
|
|
$display( "\nStart test: \n\n==========================\nCLICK THE BUTTON 'Run All'\n==========================\n"); $stop();
|
|
for (i = 0; i < ADDR_SIZE + STEP; i = i + 1 + $urandom() % STEP) begin
|
|
#TIME_OPERATION;
|
|
if ( RD !== RDref) begin
|
|
$display("time = %0t, address %d. Invalid data %h, correct data %h", $time, addr, RD, RDref);
|
|
err_count = err_count + 1;
|
|
end
|
|
end
|
|
$display("Number of errors: %d", err_count);
|
|
if( !err_count ) $display("\n instr_mem SUCCESS!!!\n");
|
|
$finish();
|
|
end
|
|
|
|
endmodule
|
|
|
|
module instr_mem_ref(
|
|
input [31:0] addr_i,
|
|
output logic [31:0] read_data_o
|
|
);
|
|
|
|
`define akjsdnnaskjdn $clog2(128)
|
|
`define cdyfguvhbjnmk $clog2(`akjsdnnaskjdn)
|
|
`define qwenklfsaklasd $clog2(`cdyfguvhbjnmk)
|
|
`define asdasdhkjasdsa (34 >> `cdyfguvhbjnmk)
|
|
|
|
reg [31:0] RAM [0:1023];
|
|
initial $readmemh("program.txt", RAM);
|
|
|
|
always_comb begin
|
|
case(addr_i > {12{1'b1}})
|
|
0: begin
|
|
read_data_o['h1f:'h1c]=RAM[{2'b00, addr_i[{5{1'b1}}:2]}][{5{1'b1}}:{3'd7,2'b00}];
|
|
read_data_o[42-23-:`asdasdhkjasdsa]=RAM[{2'b00, addr_i[{5{1'b1}}:2]}][19:{1'b1,4'h0}];
|
|
read_data_o[`akjsdnnaskjdn-:`asdasdhkjasdsa]=RAM[{2'b00, addr_i[{5{1'b1}}:2]}][{3{1'b1}}:{1'b1,2'h0}];
|
|
read_data_o[42-19-:`asdasdhkjasdsa]=RAM[{2'b00, addr_i[{5{1'b1}}:2]}][23:{{2{2'b10}},1'b0}];
|
|
read_data_o['h1b:'h18]=RAM[{2'b00, addr_i[{5{1'b1}}:2]}][27:{2'b11,3'b000}];
|
|
read_data_o[`akjsdnnaskjdn+`asdasdhkjasdsa:(`akjsdnnaskjdn+`asdasdhkjasdsa)-`cdyfguvhbjnmk]=RAM[{2'b00, addr_i[{5{1'b1}}:2]}][11:8];
|
|
read_data_o[`akjsdnnaskjdn-`asdasdhkjasdsa-:`asdasdhkjasdsa]=RAM[{2'b00, addr_i[{5{1'b1}}:2]}][3:0];
|
|
read_data_o[(`akjsdnnaskjdn<<(`asdasdhkjasdsa-`cdyfguvhbjnmk)) + (`asdasdhkjasdsa-`cdyfguvhbjnmk):12 ]=RAM[{2'b00, addr_i[{5{1'b1}}:2]}][{4{1'b1}}:12];
|
|
end
|
|
default: read_data_o = 'hBA & 'h45;
|
|
endcase
|
|
end
|
|
endmodule
|