iverilog/ivtest/ivltests/sdw_array.v

110 lines
2.8 KiB
Verilog

//
// Copyright (c) 1999 Steven Wilson (stevew@home.com)
//
// This source code is free software; you can redistribute it
// and/or modify it in source code form under the terms of the GNU
// General Public License as published by the Free Software
// Foundation; either version 2 of the License, or (at your option)
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
//
//
// SDW - Memory array instantiation, validation
//
// D: First do the declaration, and assignment of bit wide arrays
// D: and 16 bit wide 4 deep arrays. Then assign values and validate
// D: the assignment worked.
module main();
reg mem_1 [1:0]; // Define 2 locations, each 1 bit in depth
reg [15:0] mem_2 [3:0]; // Define a 16 bit wide array - 4 in depth
reg [15:0] work16;
reg work1;
initial // Excitation block
begin
mem_1 [0] = 0; // Do the initial assignment of values
mem_1 [1] = 1;
mem_2 [0] = 16'h0;
mem_2 [1] = 16'h1;
mem_2 [2] = 16'h2;
mem_2 [3] = 16'h3;
#5 ;
mem_1 [1] = mem_1 [0] ; // use the mem array on the rhs
mem_2 [3] = mem_2 [0] ;
#5;
end
initial // Validation block
begin
#1 ;
// Validate initialization
work1 = mem_1[0];
if(work1 != 0)
begin
$display("FAILED - mem_1 [0] init failed\n");
$finish ;
end
work1 = mem_1[1];
if(work1 != 1)
begin
$display("FAILED - mem_1 [1] init failed\n");
$finish ;
end
work16 = mem_2 [0];
if(work16 != 16'h0)
begin
$display("FAILED - mem_2 [0] init failed\n");
$finish ;
end
work16 = mem_2 [1];
if(work16 != 16'h1)
begin
$display("FAILED - mem_2 [1] init failed\n");
$finish ;
end
work16 = mem_2 [2];
if(work16 != 16'h2)
begin
$display("FAILED - mem_2 [2] init failed\n");
$finish ;
end
work16 = mem_2 [3];
if(work16 != 16'h3)
begin
$display("FAILED - mem_2 [3] init failed\n");
$finish ;
end
#5 ;
work1 = mem_1[1];
if(work1 != 0)
begin
$display("FAILED - mem_1 [1] rhs assignment \n");
$finish ;
end
work16 = mem_2 [3];
if(work16 != 16'h0)
begin
$display("FAILED - mem_2 [3] rhs assignment\n");
$finish ;
end
$display("PASSED\n");
$finish ;
end
endmodule