Fix coredump on undriven vector[-1].
This commit is contained in:
parent
c5aabb3c6e
commit
8f4f4eb5ae
|
|
@ -75,7 +75,7 @@ public:
|
|||
|
||||
private:
|
||||
// METHODS
|
||||
inline bool bitNumOk(int bit) const { return (bit*FLAGS_PER_BIT < (int)m_flags.size()); }
|
||||
inline bool bitNumOk(int bit) const { return bit>=0 && (bit*FLAGS_PER_BIT < (int)m_flags.size()); }
|
||||
inline bool usedFlag(int bit) const { return m_usedWhole || m_flags[bit*FLAGS_PER_BIT + FLAG_USED]; }
|
||||
inline bool drivenFlag(int bit) const { return m_drivenWhole || m_flags[bit*FLAGS_PER_BIT + FLAG_DRIVEN]; }
|
||||
enum BitNamesWhich { BN_UNUSED, BN_UNDRIVEN, BN_BOTH };
|
||||
|
|
|
|||
|
|
@ -8,8 +8,27 @@ module t (clk);
|
|||
|
||||
reg [43:0] mi;
|
||||
reg [5:0] index;
|
||||
integer indexi;
|
||||
reg read;
|
||||
|
||||
initial begin
|
||||
// Static
|
||||
mi = 44'b01010101010101010101010101010101010101010101;
|
||||
if (mi[0] !== 1'b1) $stop;
|
||||
if (mi[1 -: 2] !== 2'b01) $stop;
|
||||
`ifdef VERILATOR
|
||||
// verilator lint_off SELRANGE
|
||||
if (mi[-1] !== 1'bx && mi[-1] !== 1'b0) $stop;
|
||||
if (mi[0 -: 2] !== 2'b1x && 1'b0) $stop;
|
||||
if (mi[-1 -: 2] !== 2'bxx && 1'b0) $stop;
|
||||
// verilator lint_on SELRANGE
|
||||
`else
|
||||
if (mi[-1] !== 1'bx) $stop;
|
||||
if (mi[0 -: 2] !== 2'b1x) $stop;
|
||||
if (mi[-1 -: 2] !== 2'bxx) $stop;
|
||||
`endif
|
||||
end
|
||||
|
||||
integer cyc; initial cyc=1;
|
||||
always @ (posedge clk) begin
|
||||
if (cyc!=0) begin
|
||||
|
|
@ -19,18 +38,33 @@ module t (clk);
|
|||
end
|
||||
if (cyc==2) begin
|
||||
index = 6'd43;
|
||||
indexi = 43;
|
||||
end
|
||||
if (cyc==3) begin
|
||||
read = mi[index];
|
||||
if (read!==1'b0) $stop;
|
||||
read = mi[indexi];
|
||||
if (read!==1'b0) $stop;
|
||||
end
|
||||
if (cyc==4) begin
|
||||
index = 6'd44;
|
||||
indexi = 44;
|
||||
end
|
||||
if (cyc==5) begin
|
||||
read = mi[index];
|
||||
$display("-Illegal read value: %x",read);
|
||||
//if (read!==1'b1 && read!==1'bx) $stop;
|
||||
read = mi[indexi];
|
||||
$display("-Illegal read value: %x",read);
|
||||
//if (read!==1'b1 && read!==1'bx) $stop;
|
||||
end
|
||||
if (cyc==6) begin
|
||||
indexi = -1;
|
||||
end
|
||||
if (cyc==7) begin
|
||||
read = mi[indexi];
|
||||
$display("-Illegal read value: %x",read);
|
||||
//if (read!==1'b1 && read!==1'bx) $stop;
|
||||
end
|
||||
if (cyc==10) begin
|
||||
$write("*-* All Finished *-*\n");
|
||||
|
|
|
|||
Loading…
Reference in New Issue