Misc code cleanups. Merge from assignment pattern branch. No functional change.
This commit is contained in:
parent
047d66a657
commit
6464e8fee6
|
|
@ -1006,6 +1006,23 @@ private:
|
||||||
m_assDTypep = m_assDTypep->skipRefp();
|
m_assDTypep = m_assDTypep->skipRefp();
|
||||||
UINFO(9," adtypep "<<m_assDTypep<<endl);
|
UINFO(9," adtypep "<<m_assDTypep<<endl);
|
||||||
nodep->dtypep(m_assDTypep);
|
nodep->dtypep(m_assDTypep);
|
||||||
|
for (AstPatMember* patp = nodep->itemsp()->castPatMember(); patp; patp = patp->nextp()->castPatMember()) {
|
||||||
|
// Determine replication count, and replicate initial value as widths need to be individually determined
|
||||||
|
int times = visitPatMemberRep(patp);
|
||||||
|
for (int i=1; i<times; i++) {
|
||||||
|
AstNode* newp = patp->cloneTree(false);
|
||||||
|
patp->addNextHere(newp);
|
||||||
|
// This loop will see the new elements as part of nextp()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
AstPatMember* defaultp = NULL;
|
||||||
|
for (AstPatMember* patp = nodep->itemsp()->castPatMember(); patp; patp = patp->nextp()->castPatMember()) {
|
||||||
|
if (patp->isDefault()) {
|
||||||
|
if (defaultp) nodep->v3error("Multiple '{ default: } clauses");
|
||||||
|
defaultp = patp;
|
||||||
|
patp->unlinkFrBack();
|
||||||
|
}
|
||||||
|
}
|
||||||
if (AstNodeClassDType* classp = m_assDTypep->castNodeClassDType()) {
|
if (AstNodeClassDType* classp = m_assDTypep->castNodeClassDType()) {
|
||||||
// Due to "default" and tagged patterns, we need to determine
|
// Due to "default" and tagged patterns, we need to determine
|
||||||
// which member each AstPatMember corresponds to before we can
|
// which member each AstPatMember corresponds to before we can
|
||||||
|
|
@ -1013,19 +1030,11 @@ private:
|
||||||
// width the initial value appropriately.
|
// width the initial value appropriately.
|
||||||
typedef map<AstMemberDType*,AstPatMember*> PatMap;
|
typedef map<AstMemberDType*,AstPatMember*> PatMap;
|
||||||
PatMap patmap;
|
PatMap patmap;
|
||||||
AstPatMember* defaultp = NULL;
|
|
||||||
{
|
{
|
||||||
AstMemberDType* memp = classp->membersp();
|
AstMemberDType* memp = classp->membersp();
|
||||||
AstPatMember* patp = nodep->itemsp()->castPatMember();
|
AstPatMember* patp = nodep->itemsp()->castPatMember();
|
||||||
for (; memp || patp; ) {
|
for (; memp || patp; ) {
|
||||||
// Determine replication count, and replicate initial value as widths need to be individually determined
|
|
||||||
if (patp) {
|
if (patp) {
|
||||||
int times = visitPatMemberRep(patp);
|
|
||||||
for (int i=1; i<times; i++) {
|
|
||||||
AstNode* newp = patp->cloneTree(false);
|
|
||||||
patp->addNextHere(newp);
|
|
||||||
// This loop will see the new elements as part of nextp()
|
|
||||||
}
|
|
||||||
if (patp->keyp()) {
|
if (patp->keyp()) {
|
||||||
if (AstText* textp = patp->keyp()->castText()) {
|
if (AstText* textp = patp->keyp()->castText()) {
|
||||||
memp = classp->findMember(textp->text());
|
memp = classp->findMember(textp->text());
|
||||||
|
|
@ -1038,10 +1047,7 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (patp && patp->isDefault()) {
|
if (memp && !patp) {
|
||||||
if (defaultp) nodep->v3error("Multiple '{ default: } clauses");
|
|
||||||
defaultp = patp;
|
|
||||||
} else if (memp && !patp) {
|
|
||||||
// Missing init elements, warn below
|
// Missing init elements, warn below
|
||||||
memp=NULL; patp=NULL; break;
|
memp=NULL; patp=NULL; break;
|
||||||
} else if (!memp && patp) { patp->v3error("Assignment pattern contains too many elements");
|
} else if (!memp && patp) { patp->v3error("Assignment pattern contains too many elements");
|
||||||
|
|
|
||||||
|
|
@ -58,12 +58,8 @@ module t (/*AUTOARG*/
|
||||||
else if (cnt[30:2]== 2) array_bg <= '{default:13};
|
else if (cnt[30:2]== 2) array_bg <= '{default:13};
|
||||||
else if (cnt[30:2]== 3) array_bg <= '{0:4, 1:5, 2:6, 3:7};
|
else if (cnt[30:2]== 3) array_bg <= '{0:4, 1:5, 2:6, 3:7};
|
||||||
else if (cnt[30:2]== 4) array_bg <= '{2:15, default:13};
|
else if (cnt[30:2]== 4) array_bg <= '{2:15, default:13};
|
||||||
else if (cnt[30:2]== 5) array_bg <= '{WA { {WB/2 {2'b10}} }};
|
else if (cnt[30:2]== 5) array_bg <= '{WA { {WB {2'b10}} }};
|
||||||
else if (cnt[30:2]== 6) array_bg <= '{WA { {3'b101, {WB/2-1{2'b10}}} }};
|
else if (cnt[30:2]== 6) array_bg <= '{cnt+0, cnt+1, cnt+2, cnt+3};
|
||||||
else if (cnt[30:2]== 7) array_bg <= '{WA { {WB/2-1{2'b10}} }};
|
|
||||||
else if (cnt[30:2]== 8) array_bg [WA/2-1:0 ] <= '{WA/2{ {WB/2 {2'b10}} }};
|
|
||||||
else if (cnt[30:2]== 9) array_bg [WA -1:WA/2] <= '{WA/2{ {WB/2 {2'b01}} }};
|
|
||||||
else if (cnt[30:2]==10) array_bg <= '{cnt+0, cnt+1, cnt+2, cnt+3};
|
|
||||||
end else if (cnt[1:0]==2'd2) begin
|
end else if (cnt[1:0]==2'd2) begin
|
||||||
// chack array agains expected value
|
// chack array agains expected value
|
||||||
if (cnt[30:2]== 0) begin if (array_bg !== 16'b0000000000000000) begin $display("%b", array_bg); $stop(); end end
|
if (cnt[30:2]== 0) begin if (array_bg !== 16'b0000000000000000) begin $display("%b", array_bg); $stop(); end end
|
||||||
|
|
@ -72,11 +68,7 @@ module t (/*AUTOARG*/
|
||||||
else if (cnt[30:2]== 3) begin if (array_bg !== 16'b0111011001010100) begin $display("%b", array_bg); $stop(); end end
|
else if (cnt[30:2]== 3) begin if (array_bg !== 16'b0111011001010100) begin $display("%b", array_bg); $stop(); end end
|
||||||
else if (cnt[30:2]== 4) begin if (array_bg !== 16'b1101111111011101) begin $display("%b", array_bg); $stop(); end end
|
else if (cnt[30:2]== 4) begin if (array_bg !== 16'b1101111111011101) begin $display("%b", array_bg); $stop(); end end
|
||||||
else if (cnt[30:2]== 5) begin if (array_bg !== 16'b1010101010101010) begin $display("%b", array_bg); $stop(); end end
|
else if (cnt[30:2]== 5) begin if (array_bg !== 16'b1010101010101010) begin $display("%b", array_bg); $stop(); end end
|
||||||
else if (cnt[30:2]== 6) begin if (array_bg !== 16'b0110011001100110) begin $display("%b", array_bg); $stop(); end end
|
else if (cnt[30:2]== 6) begin if (array_bg !== 16'b1001101010111100) begin $display("%b", array_bg); $stop(); end end
|
||||||
else if (cnt[30:2]== 7) begin if (array_bg !== 16'b0010001000100010) begin $display("%b", array_bg); $stop(); end end
|
|
||||||
else if (cnt[30:2]== 8) begin if (array_bg !== 16'b1010101000000000) begin $display("%b", array_bg); $stop(); end end
|
|
||||||
else if (cnt[30:2]== 9) begin if (array_bg !== 16'b0000000010101010) begin $display("%b", array_bg); $stop(); end end
|
|
||||||
else if (cnt[30:2]==10) begin if (array_bg !== 16'b1001101010111100) begin $display("%b", array_bg); $stop(); end end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
// little endian
|
// little endian
|
||||||
|
|
@ -102,10 +94,6 @@ module t (/*AUTOARG*/
|
||||||
else if (cnt[30:2]== 3) array_lt <= '{3:4, 2:5, 1:6, 0:7};
|
else if (cnt[30:2]== 3) array_lt <= '{3:4, 2:5, 1:6, 0:7};
|
||||||
else if (cnt[30:2]== 4) array_lt <= '{1:15, default:13};
|
else if (cnt[30:2]== 4) array_lt <= '{1:15, default:13};
|
||||||
else if (cnt[30:2]== 5) array_lt <= '{WA { {WB/2 {2'b10}} }};
|
else if (cnt[30:2]== 5) array_lt <= '{WA { {WB/2 {2'b10}} }};
|
||||||
else if (cnt[30:2]== 6) array_lt <= '{WA { {3'b101, {WB/2-1{2'b10}}} }};
|
|
||||||
else if (cnt[30:2]== 7) array_lt <= '{WA { {WB/2-1{2'b10}} }};
|
|
||||||
else if (cnt[30:2]== 8) array_lt [0 :WA/2-1] <= '{WA/2{ {WB/2 {2'b10}} }};
|
|
||||||
else if (cnt[30:2]== 9) array_lt [WA/2:WA -1] <= '{WA/2{ {WB/2 {2'b01}} }};
|
|
||||||
else if (cnt[30:2]==10) array_lt <= '{cnt+0, cnt+1, cnt+2, cnt+3};
|
else if (cnt[30:2]==10) array_lt <= '{cnt+0, cnt+1, cnt+2, cnt+3};
|
||||||
end else if (cnt[1:0]==2'd2) begin
|
end else if (cnt[1:0]==2'd2) begin
|
||||||
// chack array agains expected value
|
// chack array agains expected value
|
||||||
|
|
@ -115,10 +103,6 @@ module t (/*AUTOARG*/
|
||||||
else if (cnt[30:2]== 3) begin if (array_lt !== 16'b0111011001010100) begin $display("%b", array_lt); $stop(); end end
|
else if (cnt[30:2]== 3) begin if (array_lt !== 16'b0111011001010100) begin $display("%b", array_lt); $stop(); end end
|
||||||
else if (cnt[30:2]== 4) begin if (array_lt !== 16'b1101111111011101) begin $display("%b", array_lt); $stop(); end end
|
else if (cnt[30:2]== 4) begin if (array_lt !== 16'b1101111111011101) begin $display("%b", array_lt); $stop(); end end
|
||||||
else if (cnt[30:2]== 5) begin if (array_lt !== 16'b1010101010101010) begin $display("%b", array_lt); $stop(); end end
|
else if (cnt[30:2]== 5) begin if (array_lt !== 16'b1010101010101010) begin $display("%b", array_lt); $stop(); end end
|
||||||
else if (cnt[30:2]== 6) begin if (array_lt !== 16'b0110011001100110) begin $display("%b", array_lt); $stop(); end end
|
|
||||||
else if (cnt[30:2]== 7) begin if (array_lt !== 16'b0010001000100010) begin $display("%b", array_lt); $stop(); end end
|
|
||||||
else if (cnt[30:2]== 8) begin if (array_lt !== 16'b1010101000000000) begin $display("%b", array_lt); $stop(); end end
|
|
||||||
else if (cnt[30:2]== 9) begin if (array_lt !== 16'b0000000010101010) begin $display("%b", array_lt); $stop(); end end
|
|
||||||
else if (cnt[30:2]==10) begin if (array_lt !== 16'b1001101010111100) begin $display("%b", array_lt); $stop(); end end
|
else if (cnt[30:2]==10) begin if (array_lt !== 16'b1001101010111100) begin $display("%b", array_lt); $stop(); end end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue