858 lines
31 KiB
Verilog
858 lines
31 KiB
Verilog
// This checks various constant selects using the indexed select operators
|
|
// +: and -: for both big and little endian vectors.
|
|
|
|
`ifdef __ICARUS__
|
|
`define SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
`endif
|
|
|
|
module top;
|
|
parameter base = -1;
|
|
|
|
parameter [base+15:base] p_big = 16'h0123;
|
|
parameter [base:base+15] p_ltl = 16'h3210;
|
|
parameter p_base = 16'h0123;
|
|
|
|
reg [base+15:base] big = 16'h0123;
|
|
reg [base:base+15] ltl = 16'h3210;
|
|
reg [base+15:base] big_l;
|
|
reg [base:base+15] ltl_l;
|
|
|
|
wire [base+15:base] w_big = 16'h0123;
|
|
wire [base:base+15] w_ltl = 16'h3210;
|
|
|
|
reg [3:0] big0, big1, big2, big3, ltl0, ltl1, ltl2, ltl3;
|
|
reg [3:0] big0a, big3a, bigx, bigo, ltl0a, ltl3a, ltlx, ltlo;
|
|
|
|
reg pass;
|
|
|
|
/*
|
|
* Check a constant +: as a CA R-value.
|
|
*/
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
wire [3:0] wcu_big3a = w_big[(base-1)+:4];
|
|
`else
|
|
wire [3:0] wcu_big3a = {w_big[(base)+:3],1'bx};
|
|
`endif
|
|
wire [3:0] wcu_big3 = w_big[(base)+:4];
|
|
wire [3:0] wcu_big2 = w_big[(base+4)+:4];
|
|
wire [3:0] wcu_big1 = w_big[(base+8)+:4];
|
|
wire [3:0] wcu_big0 = w_big[(base+12)+:4];
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
wire [3:0] wcu_big0a = w_big[(base+13)+:4];
|
|
wire [3:0] wcu_bigx = w_big[(1'bx)+:4];
|
|
wire [3:0] wcu_ltl3a = w_ltl[(base-1)+:4];
|
|
`else
|
|
wire [3:0] wcu_big0a = {1'bx,w_big[(base+13)+:3]};
|
|
wire [3:0] wcu_bigx = 4'bxxxx;
|
|
wire [3:0] wcu_ltl3a = {1'bx,w_ltl[(base)+:3]};
|
|
`endif
|
|
wire [3:0] wcu_ltl3 = w_ltl[(base)+:4];
|
|
wire [3:0] wcu_ltl2 = w_ltl[(base+4)+:4];
|
|
wire [3:0] wcu_ltl1 = w_ltl[(base+8)+:4];
|
|
wire [3:0] wcu_ltl0 = w_ltl[(base+12)+:4];
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
wire [3:0] wcu_ltl0a = w_ltl[(base+13)+:4];
|
|
wire [3:0] wcu_ltlx = w_ltl[(1'bx)+:4];
|
|
`else
|
|
wire [3:0] wcu_ltl0a = {w_ltl[(base+13)+:3],1'bx};
|
|
wire [3:0] wcu_ltlx = 4'bxxxx;
|
|
`endif
|
|
|
|
/*
|
|
* Check a constant -: as a CA R-value.
|
|
*/
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
wire [3:0] wcd_big3a = w_big[(base+2)-:4];
|
|
`else
|
|
wire [3:0] wcd_big3a = {w_big[(base+2)-:3],1'bx};
|
|
`endif
|
|
wire [3:0] wcd_big3 = w_big[(base+3)-:4];
|
|
wire [3:0] wcd_big2 = w_big[(base+7)-:4];
|
|
wire [3:0] wcd_big1 = w_big[(base+11)-:4];
|
|
wire [3:0] wcd_big0 = w_big[(base+15)-:4];
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
wire [3:0] wcd_big0a = w_big[(base+16)-:4];
|
|
wire [3:0] wcd_bigx = w_big[(1'bx)-:4];
|
|
wire [3:0] wcd_ltl3a = w_ltl[(base+2)-:4];
|
|
`else
|
|
wire [3:0] wcd_big0a = {1'bx,w_big[(base+15)-:3]};
|
|
wire [3:0] wcd_bigx = 4'bxxxx;
|
|
wire [3:0] wcd_ltl3a = {1'bx,w_ltl[(base+2)-:3]};
|
|
`endif
|
|
wire [3:0] wcd_ltl3 = w_ltl[(base+3)-:4];
|
|
wire [3:0] wcd_ltl2 = w_ltl[(base+7)-:4];
|
|
wire [3:0] wcd_ltl1 = w_ltl[(base+11)-:4];
|
|
wire [3:0] wcd_ltl0 = w_ltl[(base+15)-:4];
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
wire [3:0] wcd_ltl0a = w_ltl[(base+16)-:4];
|
|
wire [3:0] wcd_ltlx = w_ltl[(1'bx)-:4];
|
|
`else
|
|
wire [3:0] wcd_ltl0a = {w_ltl[(base+15)-:3],1'bx};
|
|
wire [3:0] wcd_ltlx = 4'bxxxx;
|
|
`endif
|
|
|
|
/*
|
|
* Check a constant +: as a CA L-value.
|
|
*/
|
|
wire [base+15:base] wcu_big_l;
|
|
wire [base:base+15] wcu_ltl_l;
|
|
|
|
assign wcu_big_l[(base)+:4] = 4'd3;
|
|
assign wcu_big_l[(base+4)+:4] = 4'd2;
|
|
assign wcu_big_l[(base+8)+:4] = 4'd1;
|
|
assign wcu_big_l[(base+12)+:4] = 4'd0;
|
|
assign wcu_ltl_l[(base)+:4] = 4'd3;
|
|
assign wcu_ltl_l[(base+4)+:4] = 4'd2;
|
|
assign wcu_ltl_l[(base+8)+:4] = 4'd1;
|
|
assign wcu_ltl_l[(base+12)+:4] = 4'd0;
|
|
|
|
/*
|
|
* Check a constant -: as a CA L-value.
|
|
*/
|
|
wire [base+15:base] wcd_big_l;
|
|
wire [base:base+15] wcd_ltl_l;
|
|
|
|
assign wcd_big_l[(base+3)-:4] = 4'd3;
|
|
assign wcd_big_l[(base+7)-:4] = 4'd2;
|
|
assign wcd_big_l[(base+11)-:4] = 4'd1;
|
|
assign wcd_big_l[(base+15)-:4] = 4'd0;
|
|
assign wcd_ltl_l[(base+3)-:4] = 4'd3;
|
|
assign wcd_ltl_l[(base+7)-:4] = 4'd2;
|
|
assign wcd_ltl_l[(base+11)-:4] = 4'd1;
|
|
assign wcd_ltl_l[(base+15)-:4] = 4'd0;
|
|
|
|
/*
|
|
* Check a constant +: and -: with a 'bx index as a CA L-value.
|
|
*/
|
|
wire [base+15:base] wcu_big_lx;
|
|
wire [base:base+15] wcu_ltl_lx;
|
|
wire [base+15:base] wcd_big_lx;
|
|
wire [base:base+15] wcd_ltl_lx;
|
|
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
assign wcu_big_lx[(1'bx)+:4] = 4'hf;
|
|
assign wcu_ltl_lx[(1'bx)+:4] = 4'hf;
|
|
assign wcd_big_lx[(1'bx)-:4] = 4'hf;
|
|
assign wcd_ltl_lx[(1'bx)-:4] = 4'hf;
|
|
`endif
|
|
|
|
/*
|
|
* Check a constant +: and -: with out of bounds values as a CA L-value.
|
|
*/
|
|
wire [base+15:base] wcu_big_lo;
|
|
wire [base:base+15] wcu_ltl_lo;
|
|
wire [base+15:base] wcd_big_lo;
|
|
wire [base:base+15] wcd_ltl_lo;
|
|
|
|
// For now Icarus does not support before base selects in a CA L-value.
|
|
// This test needs to be updated when this is added.
|
|
// assign wcu_big_lo[(base-1)+:4] = 4'b011x;
|
|
assign wcu_big_lo[(base)+:3] = 3'b011;
|
|
assign wcu_big_lo[(base+3)+:10] = 10'b0;
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
assign wcu_big_lo[(base+13)+:4] = 4'bx001;
|
|
assign wcu_ltl_lo[(base-1)+:4] = 4'bx001;
|
|
`else
|
|
assign wcu_big_lo[(base+13)+:3] = 3'b001;
|
|
assign wcu_ltl_lo[(base)+:3] = 3'b001;
|
|
`endif
|
|
assign wcu_ltl_lo[(base+3)+:10] = 10'b0;
|
|
assign wcu_ltl_lo[(base+13)+:3] = 3'b011;
|
|
// assign wcu_ltl_lo[(base+13)+:4] = 4'b011x;
|
|
|
|
// assign wcd_big_lo[(base+2)-:4] = 4'b011x;
|
|
assign wcd_big_lo[(base+2)-:3] = 3'b011;
|
|
assign wcd_big_lo[(base+12)-:10] = 10'b0;
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
assign wcd_big_lo[(base+16)-:4] = 4'bx001;
|
|
assign wcd_ltl_lo[(base+2)-:4] = 4'bx001;
|
|
`else
|
|
assign wcd_big_lo[(base+15)-:3] = 3'b001;
|
|
assign wcd_ltl_lo[(base+2)-:3] = 3'b001;
|
|
`endif
|
|
assign wcd_ltl_lo[(base+12)-:10] = 10'b0;
|
|
assign wcd_ltl_lo[(base+15)-:3] = 3'b011;
|
|
// assign wcd_ltl_lo[(base+16)-:4] = 4'b011x;
|
|
|
|
initial begin
|
|
pass = 1'b1;
|
|
#1;
|
|
|
|
$displayh("p_big/big: %h, p_ltl/ltl: %h, base: %0d", p_big, p_ltl, base);
|
|
|
|
/*
|
|
* Check a constant +: on a parameter.
|
|
*/
|
|
$display();
|
|
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("p_big[%0d+:4]: ", base-1, p_big[(base-1)+:4],
|
|
", p_ltl[%0d+:4]: ", base-1, p_ltl[(base-1)+:4]);
|
|
`else
|
|
$displayb("p_big[%0d+:4]: ", base-1, {p_big[(base)+:3],1'bx},
|
|
", p_ltl[%0d+:4]: ", base-1, {1'bx,p_ltl[(base)+:3]});
|
|
`endif
|
|
$displayh("p_big[%0d+:4]: ", base, p_big[(base)+:4],
|
|
", p_ltl[%0d+:4]: ", base, p_ltl[(base)+:4]);
|
|
$displayh("p_big[%0d+:4]: ", base+4, p_big[(base+4)+:4],
|
|
", p_ltl[%0d+:4]: ", base+4, p_ltl[(base+4)+:4]);
|
|
$displayh("p_big[%0d+:4]: ", base+8, p_big[(base+8)+:4],
|
|
", p_ltl[%0d+:4]: ", base+8, p_ltl[(base+8)+:4]);
|
|
$displayh("p_big[%0d+:4]: ", base+12, p_big[(base+12)+:4],
|
|
", p_ltl[%0d+:4]: ", base+12, p_ltl[(base+12)+:4]);
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("p_big[%0d+:4]: ", base+13, p_big[(base+13)+:4],
|
|
", p_ltl[%0d+:4]: ", base+13, p_ltl[(base+13)+:4]);
|
|
$displayb("p_big[%0d+:4]: ", 1'bx, p_big[(1'bx)+:4],
|
|
", p_ltl[%0d+:4]: ", 1'bx, p_ltl[(1'bx)+:4]);
|
|
`else
|
|
$displayb("p_big[%0d+:4]: ", base+13, {1'bx,p_big[(base+13)+:3]},
|
|
", p_ltl[%0d+:4]: ", base+13, {p_ltl[(base+13)+:3],1'bx});
|
|
$displayb("p_big[%0d+:4]: ", 1'bx, 4'bxxxx,
|
|
", p_ltl[%0d+:4]: ", 1'bx, 4'bxxxx);
|
|
`endif
|
|
if (p_big[ (base) +: 4] !== 4'd3 || p_big[ (base+4) +: 4] !== 4'd2 ||
|
|
p_big[(base+8) +: 4] !== 4'd1 || p_big[(base+12) +: 4] !== 4'd0 ||
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
p_big[ (base-1) +: 4] !== 4'b011x ||
|
|
p_big[(base+13) +: 4] !== 4'bx000 ||
|
|
p_big[(1'bx) +: 4] !== 4'bxxxx) begin
|
|
`else
|
|
{p_big[ (base) +: 3],1'bx} !== 4'b011x ||
|
|
{1'bx,p_big[(base+13) +: 3]} !== 4'bx000 ||
|
|
4'bxxxx !== 4'bxxxx) begin
|
|
`endif
|
|
$display("FAILED: big endian parameter constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (p_ltl[ (base) +: 4] !== 4'd3 || p_ltl[ (base+4) +: 4] !== 4'd2 ||
|
|
p_ltl[(base+8) +: 4] !== 4'd1 || p_ltl[(base+12) +: 4] !== 4'd0 ||
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
p_ltl[ (base-1) +: 4] !== 4'bx001 ||
|
|
p_ltl[(base+13) +: 4] !== 4'b000x ||
|
|
p_ltl[(1'bx) +: 4] !== 4'bxxxx) begin
|
|
`else
|
|
{1'bx,p_ltl[ (base) +: 3]} !== 4'bx001 ||
|
|
{p_ltl[(base+13) +: 3],1'bx} !== 4'b000x ||
|
|
4'bxxxx !== 4'bxxxx) begin
|
|
`endif
|
|
$display("FAILED: little endian parameter constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
/*
|
|
* Check a constant -: on a parameter.
|
|
*/
|
|
$display();
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("p_big[%0d-:4]: ", base+2, p_big[(base+2)-:4],
|
|
", p_ltl[%0d-:4]: ", base+2, p_ltl[(base+2)-:4]);
|
|
`else
|
|
$displayb("p_big[%0d-:4]: ", base+2, {p_big[(base+2)-:3],1'bx},
|
|
", p_ltl[%0d-:4]: ", base+2, {1'bx,p_ltl[(base+2)-:3]});
|
|
`endif
|
|
$displayh("p_big[%0d-:4]: ", base+3, p_big[(base+3)-:4],
|
|
", p_ltl[%0d-:4]: ", base+3, p_ltl[(base+3)-:4]);
|
|
$displayh("p_big[%0d-:4]: ", base+7, p_big[(base+7)-:4],
|
|
", p_ltl[%0d-:4]: ", base+7, p_ltl[(base+7)-:4]);
|
|
$displayh("p_big[%0d-:4]: ", base+11, p_big[(base+11)-:4],
|
|
", p_ltl[%0d-:4]: ", base+11, p_ltl[(base+11)-:4]);
|
|
$displayh("p_big[%0d-:4]: ", base+15, p_big[(base+15)-:4],
|
|
", p_ltl[%0d-:4]: ", base+15, p_ltl[(base+15)-:4]);
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("p_big[%0d-:4]: ", base+16, p_big[(base+16)-:4],
|
|
", p_ltl[%0d-:4]: ", base+16, p_ltl[(base+16)-:4]);
|
|
$displayb("p_big[%0d-:4]: ", 1'bx, p_big[(1'bx)-:4],
|
|
", p_ltl[%0d-:4]: ", 1'bx, p_ltl[(1'bx)-:4]);
|
|
`else
|
|
$displayb("p_big[%0d-:4]: ", base+16, {1'bx,p_big[(base+15)-:3]},
|
|
", p_ltl[%0d-:4]: ", base+16, {p_ltl[(base+15)-:3],1'bx});
|
|
$displayb("p_big[%0d-:4]: ", 1'bx, 4'bxxxx,
|
|
", p_ltl[%0d-:4]: ", 1'bx, 4'bxxxx);
|
|
`endif
|
|
if (p_big[ (base+3) -: 4] !== 4'd3 || p_big[ (base+7) -: 4] !== 4'd2 ||
|
|
p_big[(base+11) -: 4] !== 4'd1 || p_big[(base+15) -: 4] !== 4'd0 ||
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
p_big[ (base+2) -: 4] !== 4'b011x ||
|
|
p_big[(base+16) -: 4] !== 4'bx000 ||
|
|
p_big[(1'bx) -: 4] !== 4'bxxxx) begin
|
|
`else
|
|
{p_big[ (base+2) -: 3],1'bx} !== 4'b011x ||
|
|
{1'bx,p_big[(base+15) -: 3]} !== 4'bx000 ||
|
|
4'bxxxx !== 4'bxxxx) begin
|
|
`endif
|
|
$display("FAILED: big endian parameter constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (p_ltl[ (base+3) -: 4] !== 4'd3 || p_ltl[ (base+7) -: 4] !== 4'd2 ||
|
|
p_ltl[(base+11) -: 4] !== 4'd1 || p_ltl[(base+15) -: 4] !== 4'd0 ||
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
p_ltl[ (base+2) -: 4] !== 4'bx001 ||
|
|
p_ltl[(base+16) -: 4] !== 4'b000x ||
|
|
p_ltl[(1'bx) -: 4] !== 4'bxxxx) begin
|
|
`else
|
|
{1'bx,p_ltl[ (base+2) -: 3]} !== 4'bx001 ||
|
|
{p_ltl[(base+15) -: 3],1'bx} !== 4'b000x ||
|
|
4'bxxxx !== 4'bxxxx) begin
|
|
`endif
|
|
$display("FAILED: little endian parameter constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
/*
|
|
* Check a constant +: on a parameter with out a width specification.
|
|
*/
|
|
$display();
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("p_base[-1+:4]: ", p_base[-1+:4]);
|
|
`else
|
|
$displayb("p_base[-1+:4]: ", {p_base[0+:3],1'bx});
|
|
`endif
|
|
$displayh("p_base[0+:4]: ", p_base[0+:4]);
|
|
$displayh("p_base[4+:4]: ", p_base[4+:4]);
|
|
$displayh("p_base[8+:4]: ", p_base[8+:4]);
|
|
$displayh("p_base[12+:4]: ", p_base[12+:4]);
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("p_base[13+:4]: ", p_base[13+:4]);
|
|
$displayb("p_base[x+:4]: ", p_base[(1'bx)+:4]);
|
|
`else
|
|
$displayb("p_base[13+:4]: ", {1'bx,p_base[13+:3]});
|
|
$displayb("p_base[x+:4]: ", 4'bxxxx);
|
|
`endif
|
|
if (p_base[ 0 +: 4] !== 4'd3 || p_base[ 4 +: 4] !== 4'd2 ||
|
|
p_base[ 8 +: 4] !== 4'd1 || p_base[12 +: 4] !== 4'd0 ||
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
p_base[-1 +: 4] !== 4'b011x || p_base[13 +: 4] !== 4'bx000 ||
|
|
p_base[1'bx +: 4] !== 4'bxxxx) begin
|
|
`else
|
|
{p_base[0 +: 3],1'bx} !== 4'b011x ||
|
|
{1'bx,p_base[13 +: 3]} !== 4'bx000 ||
|
|
4'bxxxx !== 4'bxxxx) begin
|
|
`endif
|
|
$display("FAILED: base parameter constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
/*
|
|
* Check a constant -: on a parameter with out a width specification.
|
|
*/
|
|
$display();
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("p_base[2-:4]: ", p_base[2-:4]);
|
|
`else
|
|
$displayb("p_base[2-:4]: ", {p_base[2-:3],1'bx});
|
|
`endif
|
|
$displayh("p_base[3-:4]: ", p_base[3-:4]);
|
|
$displayh("p_base[7-:4]: ", p_base[7-:4]);
|
|
$displayh("p_base[11-:4]: ", p_base[11-:4]);
|
|
$displayh("p_base[15-:4]: ", p_base[15-:4]);
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("p_base[16-:4]: ", p_base[16-:4]);
|
|
$displayb("p_base[x-:4]: ", p_base[(1'bx)-:4]);
|
|
`else
|
|
$displayb("p_base[16-:4]: ", {1'bx,p_base[15-:3]});
|
|
$displayb("p_base[x-:4]: ", 4'bxxxx);
|
|
`endif
|
|
if (p_base[ 3 -: 4] !== 4'd3 || p_base[ 7 -: 4] !== 4'd2 ||
|
|
p_base[11 -: 4] !== 4'd1 || p_base[15 -: 4] !== 4'd0 ||
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
p_base[ 2 -: 4] !== 4'b011x || p_base[16 -: 4] !== 4'bx000 ||
|
|
p_base[(1'bx) -: 4] !== 4'bxxxx) begin
|
|
`else
|
|
{p_base[ 2 -: 3],1'bx} !== 4'b011x ||
|
|
{1'bx,p_base[15 -: 3]} !== 4'bx000 ||
|
|
4'bxxxx !== 4'bxxxx) begin
|
|
`endif
|
|
$display("FAILED: base parameter constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
/*
|
|
* Check a constant +: on a register.
|
|
*/
|
|
$display();
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("big[%0d+:4]: ", base-1, big[(base-1)+:4],
|
|
", ltl[%0d+:4]: ", base-1, ltl[(base-1)+:4]);
|
|
`else
|
|
$displayb("big[%0d+:4]: ", base-1, {big[(base)+:3],1'bx},
|
|
", ltl[%0d+:4]: ", base-1, {1'bx,ltl[(base)+:3]});
|
|
`endif
|
|
$displayh("big[%0d+:4]: ", base, big[(base)+:4],
|
|
", ltl[%0d+:4]: ", base, ltl[(base)+:4]);
|
|
$displayh("big[%0d+:4]: ", base+4, big[(base+4)+:4],
|
|
", ltl[%0d+:4]: ", base+4, ltl[(base+4)+:4]);
|
|
$displayh("big[%0d+:4]: ", base+8, big[(base+8)+:4],
|
|
", ltl[%0d+:4]: ", base+8, ltl[(base+8)+:4]);
|
|
$displayh("big[%0d+:4]: ",base+12, big[(base+12)+:4],
|
|
", ltl[%0d+:4]: ",base+12, ltl[(base+12)+:4]);
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("big[%0d+:4]: ",base+13, big[(base+13)+:4],
|
|
", ltl[%0d+:4]: ",base+13, ltl[(base+13)+:4]);
|
|
$displayb("big[%0d+:4]: ",1'bx, big[(1'bx)+:4],
|
|
", ltl[%0d+:4]: ",1'bx, ltl[(1'bx)+:4]);
|
|
`else
|
|
$displayb("big[%0d+:4]: ",base+13, {1'bx,big[(base+13)+:3]},
|
|
", ltl[%0d+:4]: ",base+13, {ltl[(base+13)+:3],1'bx});
|
|
$displayb("big[%0d+:4]: ",1'bx, 4'bxxxx,
|
|
", ltl[%0d+:4]: ",1'bx, 4'bxxxx);
|
|
`endif
|
|
if (big[ (base) +: 4] !== 4'd3 || big[ (base+4) +: 4] !== 4'd2 ||
|
|
big[(base+8) +: 4] !== 4'd1 || big[(base+12) +: 4] !== 4'd0 ||
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
big[ (base-1) +: 4] !== 4'b011x ||
|
|
big[(base+13) +: 4] !== 4'bx000 ||
|
|
big[(1'bx) +: 4] !== 4'bxxxx) begin
|
|
`else
|
|
{big[ (base) +: 3],1'bx} !== 4'b011x ||
|
|
{1'bx,big[(base+13) +: 3]} !== 4'bx000 ||
|
|
4'bxxxx !== 4'bxxxx) begin
|
|
`endif
|
|
$display("FAILED: big endian register constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (ltl[ (base) +: 4] !== 4'd3 || ltl[ (base+4) +: 4] !== 4'd2 ||
|
|
ltl[(base+8) +: 4] !== 4'd1 || ltl[(base+12) +: 4] !== 4'd0 ||
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
ltl[ (base-1) +: 4] !== 4'bx001 ||
|
|
ltl[(base+13) +: 4] !== 4'b000x ||
|
|
ltl[(1'bx) +: 4] !== 4'bxxxx) begin
|
|
`else
|
|
{1'bx,ltl[ (base) +: 3]} !== 4'bx001 ||
|
|
{ltl[(base+13) +: 3],1'bx} !== 4'b000x ||
|
|
4'bxxxx !== 4'bxxxx) begin
|
|
`endif
|
|
$display("FAILED: little endian register constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
/*
|
|
* Check a constant -: on a register.
|
|
*/
|
|
$display();
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("big[%0d-:4]: ", base+2, big[(base+2)-:4],
|
|
", ltl[%0d-:4]: ", base+2, ltl[(base+2)-:4]);
|
|
`else
|
|
$displayb("big[%0d-:4]: ", base+2, {big[(base+2)-:3],1'bx},
|
|
", ltl[%0d-:4]: ", base+2, {1'bx,ltl[(base+2)-:3]});
|
|
`endif
|
|
$displayh("big[%0d-:4]: ", base+3, big[(base+3)-:4],
|
|
", ltl[%0d-:4]: ", base+3, ltl[(base+3)-:4]);
|
|
$displayh("big[%0d-:4]: ", base+7, big[(base+7)-:4],
|
|
", ltl[%0d-:4]: ", base+7, ltl[(base+7)-:4]);
|
|
$displayh("big[%0d-:4]: ", base+11, big[(base+11)-:4],
|
|
", ltl[%0d-:4]: ", base+11, ltl[(base+11)-:4]);
|
|
$displayh("big[%0d-:4]: ", base+15, big[(base+15)-:4],
|
|
", ltl[%0d-:4]: ", base+15, ltl[(base+15)-:4]);
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("big[%0d-:4]: ", base+16, big[(base+16)-:4],
|
|
", ltl[%0d-:4]: ", base+16, ltl[(base+16)-:4]);
|
|
$displayb("big[%0d-:4]: ", 1'bx, big[(1'bx)-:4],
|
|
", ltl[%0d-:4]: ", 1'bx, ltl[(1'bx)-:4]);
|
|
`else
|
|
$displayb("big[%0d-:4]: ", base+16, {1'bx,big[(base+15)-:3]},
|
|
", ltl[%0d-:4]: ", base+16, {ltl[(base+15)-:3],1'bx});
|
|
$displayb("big[%0d-:4]: ", 1'bx, 4'bxxxx,
|
|
", ltl[%0d-:4]: ", 1'bx, 4'bxxxx);
|
|
`endif
|
|
if (big[ (base+3) -: 4] !== 4'd3 || big[ (base+7) -: 4] !== 4'd2 ||
|
|
big[(base+11) -: 4] !== 4'd1 || big[(base+15) -: 4] !== 4'd0 ||
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
big[ (base+2) -: 4] !== 4'b011x ||
|
|
big[(base+16) -: 4] !== 4'bx000 ||
|
|
big[(1'bx) -: 4] !== 4'bxxxx) begin
|
|
`else
|
|
{big[ (base+2) -: 3],1'bx} !== 4'b011x ||
|
|
{1'bx,big[(base+15) -: 3]} !== 4'bx000 ||
|
|
4'bxxxx !== 4'bxxxx) begin
|
|
`endif
|
|
$display("FAILED: big endian register constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (ltl[ (base+3) -: 4] !== 4'd3 || ltl[ (base+7) -: 4] !== 4'd2 ||
|
|
ltl[(base+11) -: 4] !== 4'd1 || ltl[(base+15) -: 4] !== 4'd0 ||
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
ltl[ (base+2) -: 4] !== 4'bx001 ||
|
|
ltl[(base+16) -: 4] !== 4'b000x ||
|
|
ltl[(1'bx) -: 4] !== 4'bxxxx) begin
|
|
`else
|
|
{1'bx,ltl[ (base+2) -: 3]} !== 4'bx001 ||
|
|
{ltl[(base+15) -: 3],1'bx} !== 4'b000x ||
|
|
4'bxxxx !== 4'bxxxx) begin
|
|
`endif
|
|
$display("FAILED: little endian register constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
/*
|
|
* Check a constant +: on a wire.
|
|
*/
|
|
$display();
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("w_big[%0d+:4]: ", base-1, w_big[(base-1)+:4],
|
|
", w_ltl[%0d+:4]: ", base-1, w_ltl[(base-1)+:4]);
|
|
`else
|
|
$displayb("w_big[%0d+:4]: ", base-1, {w_big[(base)+:3],1'bx},
|
|
", w_ltl[%0d+:4]: ", base-1, {1'bx,w_ltl[(base)+:3]});
|
|
`endif
|
|
$displayh("w_big[%0d+:4]: ", base, w_big[(base)+:4],
|
|
", w_ltl[%0d+:4]: ", base, w_ltl[(base)+:4]);
|
|
$displayh("w_big[%0d+:4]: ", base+4, w_big[(base+4)+:4],
|
|
", w_ltl[%0d+:4]: ", base+4, w_ltl[(base+4)+:4]);
|
|
$displayh("w_big[%0d+:4]: ", base+8, w_big[(base+8)+:4],
|
|
", w_ltl[%0d+:4]: ", base+8, w_ltl[(base+8)+:4]);
|
|
$displayh("w_big[%0d+:4]: ", base+12, w_big[(base+12)+:4],
|
|
", w_ltl[%0d+:4]: ", base+12, w_ltl[(base+12)+:4]);
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("w_big[%0d+:4]: ", base+13, w_big[(base+13)+:4],
|
|
", w_ltl[%0d+:4]: ", base+13, w_ltl[(base+13)+:4]);
|
|
$displayb("w_big[%0d+:4]: ", 1'bx, w_big[(1'bx)+:4],
|
|
", w_ltl[%0d+:4]: ", 1'bx, w_ltl[(1'bx)+:4]);
|
|
`else
|
|
$displayb("w_big[%0d+:4]: ", base+13, {1'bx,w_big[(base+13)+:3]},
|
|
", w_ltl[%0d+:4]: ", base+13, {w_ltl[(base+13)+:3],1'bx});
|
|
$displayb("w_big[%0d+:4]: ", 1'bx, 4'bxxxx,
|
|
", w_ltl[%0d+:4]: ", 1'bx, 4'bxxxx);
|
|
`endif
|
|
if (w_big[ (base) +: 4] !== 4'd3 || w_big[ (base+4) +: 4] !== 4'd2 ||
|
|
w_big[(base+8) +: 4] !== 4'd1 || w_big[(base+12) +: 4] !== 4'd0 ||
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
w_big[ (base-1) +: 4] !== 4'b011x ||
|
|
w_big[(base+13) +: 4] !== 4'bx000 ||
|
|
w_big[(1'bx) +: 4] !== 4'bxxxx) begin
|
|
`else
|
|
{w_big[ (base) +: 3],1'bx} !== 4'b011x ||
|
|
{1'bx,w_big[(base+13) +: 3]} !== 4'bx000 ||
|
|
4'bxxxx !== 4'bxxxx) begin
|
|
`endif
|
|
$display("FAILED: big endian wire constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (w_ltl[ (base) +: 4] !== 4'd3 || w_ltl[ (base+4) +: 4] !== 4'd2 ||
|
|
w_ltl[(base+8) +: 4] !== 4'd1 || w_ltl[(base+12) +: 4] !== 4'd0 ||
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
w_ltl[ (base-1) +: 4] !== 4'bx001 ||
|
|
w_ltl[(base+13) +: 4] !== 4'b000x ||
|
|
w_ltl[(1'bx) +: 4] !== 4'bxxxx) begin
|
|
`else
|
|
{1'bx,w_ltl[ (base) +: 3]} !== 4'bx001 ||
|
|
{w_ltl[(base+13) +: 3],1'bx} !== 4'b000x ||
|
|
4'bxxxx !== 4'bxxxx) begin
|
|
`endif
|
|
$display("FAILED: little endian wire constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
/*
|
|
* Check a constant -: on a wire.
|
|
*/
|
|
$display();
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("w_big[%0d-:4]: ", base+2, w_big[(base+2)-:4],
|
|
", w_ltl[%0d-:4]: ", base+2, w_ltl[(base+2)-:4]);
|
|
`else
|
|
$displayb("w_big[%0d-:4]: ", base+2, {w_big[(base+2)-:3],1'bx},
|
|
", w_ltl[%0d-:4]: ", base+2, {1'bx,w_ltl[(base+2)-:3]});
|
|
`endif
|
|
$displayh("w_big[%0d-:4]: ", base+3, w_big[(base+3)-:4],
|
|
", w_ltl[%0d-:4]: ", base+3, w_ltl[(base+3)-:4]);
|
|
$displayh("w_big[%0d-:4]: ", base+7, w_big[(base+7)-:4],
|
|
", w_ltl[%0d-:4]: ", base+7, w_ltl[(base+7)-:4]);
|
|
$displayh("w_big[%0d-:4]: ", base+11, w_big[(base+11)-:4],
|
|
", w_ltl[%0d-:4]: ", base+11, w_ltl[(base+11)-:4]);
|
|
$displayh("w_big[%0d-:4]: ", base+15, w_big[(base+15)-:4],
|
|
", w_ltl[%0d-:4]: ", base+15, w_ltl[(base+15)-:4]);
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
$displayb("w_big[%0d-:4]: ", base+16, w_big[(base+16)-:4],
|
|
", w_ltl[%0d-:4]: ", base+16, w_ltl[(base+16)-:4]);
|
|
$displayb("w_big[%0d-:4]: ", 1'bx, w_big[(1'bx)-:4],
|
|
", w_ltl[%0d-:4]: ", 1'bx, w_ltl[(1'bx)-:4]);
|
|
`else
|
|
$displayb("w_big[%0d-:4]: ", base+16, {1'bx,w_big[(base+15)-:3]},
|
|
", w_ltl[%0d-:4]: ", base+16, {w_ltl[(base+15)-:3],1'bx});
|
|
$displayb("w_big[%0d-:4]: ", 1'bx, 4'bxxxx,
|
|
", w_ltl[%0d-:4]: ", 1'bx, 4'bxxxx);
|
|
`endif
|
|
if (w_big[ (base+3) -: 4] !== 4'd3 || w_big[ (base+7) -: 4] !== 4'd2 ||
|
|
w_big[(base+11) -: 4] !== 4'd1 || w_big[(base+15) -: 4] !== 4'd0 ||
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
w_big[ (base+2) -: 4] !== 4'b011x ||
|
|
w_big[(base+16) -: 4] !== 4'bx000 ||
|
|
w_big[(1'bx) -: 4] !== 4'bxxxx) begin
|
|
`else
|
|
{w_big[ (base+2) -: 3],1'bx} !== 4'b011x ||
|
|
{1'bx,w_big[(base+15) -: 3]} !== 4'bx000 ||
|
|
4'bxxxx !== 4'bxxxx) begin
|
|
`endif
|
|
$display("FAILED: big endian wire constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (w_ltl[ (base+3) -: 4] !== 4'd3 || w_ltl[ (base+7) -: 4] !== 4'd2 ||
|
|
w_ltl[(base+11) -: 4] !== 4'd1 || w_ltl[(base+15) -: 4] !== 4'd0 ||
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
w_ltl[ (base+2) -: 4] !== 4'bx001 ||
|
|
w_ltl[(base+16) -: 4] !== 4'b000x ||
|
|
w_ltl[(1'bx) -: 4] !== 4'bxxxx) begin
|
|
`else
|
|
{1'bx,w_ltl[ (base+2) -: 3]} !== 4'bx001 ||
|
|
{w_ltl[(base+15) -: 3],1'bx} !== 4'b000x ||
|
|
4'bxxxx !== 4'bxxxx) begin
|
|
`endif
|
|
$display("FAILED: little endian wire constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
/*
|
|
* Check a constant +: on a CA R-value.
|
|
*/
|
|
$display();
|
|
$displayb("wcu_big3a: ", wcu_big3a, ", wcu_ltl3a: ", wcu_ltl3a);
|
|
$displayh("wcu_big3: ", wcu_big3, ", wcu_ltl3: ", wcu_ltl3);
|
|
$displayh("wcu_big2: ", wcu_big2, ", wcu_ltl2: ", wcu_ltl2);
|
|
$displayh("wcu_big1: ", wcu_big1, ", wcu_ltl1: ", wcu_ltl1);
|
|
$displayh("wcu_big0: ", wcu_big0, ", wcu_ltl0: ", wcu_ltl0);
|
|
$displayb("wcu_big0a: ", wcu_big0a, ", wcu_ltl0a: ", wcu_ltl0a);
|
|
$displayb("wcu_bigx: ", wcu_bigx, ", wcu_ltlx: ", wcu_ltlx);
|
|
if (wcu_big3 !== 4'd3 || wcu_big2 !== 4'd2 ||
|
|
wcu_big1 !== 4'd1 || wcu_big0 !== 4'd0 ||
|
|
wcu_big3a !== 4'b011x || wcu_big0a !== 4'bx000 ||
|
|
wcu_bigx !== 4'bxxxx) begin
|
|
$display("FAILED: big endian CA R-value constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (wcu_ltl3 !== 4'd3 || wcu_ltl2 !== 4'd2 ||
|
|
wcu_ltl1 !== 4'd1 || wcu_ltl0 !== 4'd0 ||
|
|
wcu_ltl3a !== 4'bx001 || wcu_ltl0a !== 4'b000x ||
|
|
wcu_ltlx !== 4'bxxxx) begin
|
|
$display("FAILED: little endian CA R-value constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
/*
|
|
* Check a constant -: on a CA R-value.
|
|
*/
|
|
$display();
|
|
$displayb("wcd_big3a: ", wcd_big3a, ", wcd_ltl3a: ", wcd_ltl3a);
|
|
$displayh("wcd_big3: ", wcd_big3, ", wcd_ltl3: ", wcd_ltl3);
|
|
$displayh("wcd_big2: ", wcd_big2, ", wcd_ltl2: ", wcd_ltl2);
|
|
$displayh("wcd_big1: ", wcd_big1, ", wcd_ltl1: ", wcd_ltl1);
|
|
$displayh("wcd_big0: ", wcd_big0, ", wcd_ltl0: ", wcd_ltl0);
|
|
$displayb("wcd_big0a: ", wcd_big0a, ", wcd_ltl0a: ", wcd_ltl0a);
|
|
$displayb("wcd_bigx: ", wcd_bigx, ", wcd_ltlx: ", wcd_ltlx);
|
|
if (wcd_big3 !== 4'd3 || wcd_big2 !== 4'd2 ||
|
|
wcd_big1 !== 4'd1 || wcd_big0 !== 4'd0 ||
|
|
wcd_big3a !== 4'b011x || wcd_big0a !== 4'bx000 ||
|
|
wcd_bigx !== 4'bxxxx) begin
|
|
$display("FAILED: big endian CA R-value constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (wcd_ltl3 !== 4'd3 || wcd_ltl2 !== 4'd2 ||
|
|
wcd_ltl1 !== 4'd1 || wcd_ltl0 !== 4'd0 ||
|
|
wcd_ltl3a !== 4'bx001 || wcd_ltl0a !== 4'b000x ||
|
|
wcd_ltlx !== 4'bxxxx) begin
|
|
$display("FAILED: little endian CA R-value constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
/*
|
|
* Check a constant +: on a simple L-value.
|
|
*/
|
|
$display();
|
|
big_l = 16'hxxxx;
|
|
ltl_l = 16'hxxxx;
|
|
big_l[(base)+:4] = 4'd3;
|
|
ltl_l[(base)+:4] = 4'd3;
|
|
big_l[(base+4)+:4] = 4'd2;
|
|
ltl_l[(base+4)+:4] = 4'd2;
|
|
big_l[(base+8)+:4] = 4'd1;
|
|
ltl_l[(base+8)+:4] = 4'd1;
|
|
big_l[(base+12)+:4] = 4'd0;
|
|
ltl_l[(base+12)+:4] = 4'd0;
|
|
$displayh("big_l[simple]: ", big_l, ", ltl_l[simple]: ", ltl_l);
|
|
if (big_l !== big) begin
|
|
$display("FAILED: big endian simple L-value constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (ltl_l !== ltl) begin
|
|
$display("FAILED: little endian simple L-value constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
big_l = 16'hxxxx;
|
|
ltl_l = 16'hxxxx;
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
big_l[(1'bx)+:4] = 4'd0;
|
|
ltl_l[(1'bx)+:4] = 4'd0;
|
|
`endif
|
|
$displayh("big_l[1'bx]: ", big_l, ", ltl_l[1'bx]: ", ltl_l);
|
|
if (big_l !== 16'hxxxx) begin
|
|
$display("FAILED: big endian L-value constant 'bx index +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (ltl_l !== 16'hxxxx) begin
|
|
$display("FAILED: little endian L-value constant 'bx index +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
big_l = 16'h0000;
|
|
ltl_l = 16'h0000;
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
big_l[(base-1)+:4] = 4'b011x;
|
|
ltl_l[(base-1)+:4] = 4'bx001;
|
|
big_l[(base+13)+:4] = 4'bx001;
|
|
ltl_l[(base+13)+:4] = 4'b011x;
|
|
`else
|
|
big_l[(base)+:3] = 3'b011;
|
|
ltl_l[(base)+:3] = 3'b001;
|
|
big_l[(base+13)+:3] = 3'b001;
|
|
ltl_l[(base+13)+:3] = 3'b011;
|
|
`endif
|
|
$displayh("big_l[edge]: ", big_l, ", ltl_l[edge]: ", ltl_l);
|
|
if (big_l !== 16'h2003) begin
|
|
$display("FAILED: big endian edge L-value constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (ltl_l !== 16'h2003) begin
|
|
$display("FAILED: little endian edge L-value constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
/*
|
|
* Check a constant -: on a simple L-value.
|
|
*/
|
|
$display();
|
|
big_l = 16'hxxxx;
|
|
ltl_l = 16'hxxxx;
|
|
big_l[(base+3)-:4] = 4'd3;
|
|
ltl_l[(base+3)-:4] = 4'd3;
|
|
big_l[(base+7)-:4] = 4'd2;
|
|
ltl_l[(base+7)-:4] = 4'd2;
|
|
big_l[(base+11)-:4] = 4'd1;
|
|
ltl_l[(base+11)-:4] = 4'd1;
|
|
big_l[(base+15)-:4] = 4'd0;
|
|
ltl_l[(base+15)-:4] = 4'd0;
|
|
$displayh("big_l: ", big_l, ", ltl_l: ", ltl_l);
|
|
if (big_l !== big) begin
|
|
$display("FAILED: big endian simple L-value constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (ltl_l !== ltl) begin
|
|
$display("FAILED: little endian simple L-value constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
big_l = 16'hxxxx;
|
|
ltl_l = 16'hxxxx;
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
big_l[(1'bx)-:4] = 4'd0;
|
|
ltl_l[(1'bx)-:4] = 4'd0;
|
|
`endif
|
|
$displayh("big_l[1'bx]: ", big_l, ", ltl_l[1'bx]: ", ltl_l);
|
|
if (big_l !== 16'hxxxx) begin
|
|
$display("FAILED: big endian L-value constant 'bx index -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (ltl_l !== 16'hxxxx) begin
|
|
$display("FAILED: little endian L-value constant 'bx index -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
big_l = 16'h0000;
|
|
ltl_l = 16'h0000;
|
|
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
|
|
big_l[(base+2)-:4] = 4'b011x;
|
|
ltl_l[(base+2)-:4] = 4'bx001;
|
|
big_l[(base+16)-:4] = 4'bx001;
|
|
ltl_l[(base+16)-:4] = 4'b011x;
|
|
`else
|
|
big_l[(base+2)-:3] = 3'b011;
|
|
ltl_l[(base+2)-:3] = 3'b001;
|
|
big_l[(base+15)-:3] = 3'b001;
|
|
ltl_l[(base+15)-:3] = 3'b011;
|
|
`endif
|
|
$displayh("big_l[edge]: ", big_l, ", ltl_l[edge]: ", ltl_l);
|
|
if (big_l !== 16'h2003) begin
|
|
$display("FAILED: big endian edge L-value constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (ltl_l !== 16'h2003) begin
|
|
$display("FAILED: little endian edge L-value constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
/*
|
|
* Check a constant +: on a CA L-value.
|
|
*/
|
|
$display();
|
|
$displayh("wcu_big_l: ", wcu_big_l, ", wcu_ltl_l: ", wcu_ltl_l);
|
|
if (wcu_big_l !== big) begin
|
|
$display("FAILED: big endian CA L-value constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (wcu_ltl_l !== ltl) begin
|
|
$display("FAILED: little endian CA L-value constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
$displayh("wcu_big_lx: ", wcu_big_lx, ", wcu_ltl_lx: ", wcu_ltl_lx);
|
|
if (wcu_big_lx !== 16'hzzzz) begin
|
|
$display("FAILED: big endian CA L-value constant 'bx +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (wcu_ltl_lx !== 16'hzzzz) begin
|
|
$display("FAILED: little endian CA L-value constant 'bx +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
$displayh("wcu_big_lo: ", wcu_big_lo, ", wcu_ltl_lo: ", wcu_ltl_lo);
|
|
if (wcu_big_lo !== 16'h2003) begin
|
|
$display("FAILED: big endian edge CA L-value constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (wcu_ltl_lo !== 16'h2003) begin
|
|
$display("FAILED: little endian edge CA L-value constant +: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
/*
|
|
* Check a constant -: on a CA L-value.
|
|
*/
|
|
$display();
|
|
$displayh("wcd_big_l: ", wcd_big_l, ", wcd_ltl_l: ", wcd_ltl_l);
|
|
if (wcd_big_l !== big) begin
|
|
$display("FAILED: big endian CA L-value constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (wcd_ltl_l !== ltl) begin
|
|
$display("FAILED: little endian CA L-value constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
$displayh("wcd_big_lx: ", wcd_big_lx, ", wcd_ltl_lx: ", wcd_ltl_lx);
|
|
if (wcd_big_lx !== 16'hzzzz) begin
|
|
$display("FAILED: big endian CA L-value constant 'bx -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (wcd_ltl_lx !== 16'hzzzz) begin
|
|
$display("FAILED: little endian CA L-value constant 'bx -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
$displayh("wcd_big_lo: ", wcd_big_lo, ", wcd_ltl_lo: ", wcd_ltl_lo);
|
|
if (wcd_big_lo !== 16'h2003) begin
|
|
$display("FAILED: big endian edge CA L-value constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
if (wcd_ltl_lo !== 16'h2003) begin
|
|
$display("FAILED: little endian edge CA L-value constant -: indexed select.");
|
|
pass = 1'b0;
|
|
end
|
|
|
|
/*
|
|
* All done.
|
|
*/
|
|
if (pass) $display("PASSED");
|
|
end
|
|
endmodule
|