Broaden streaming concat context checks
This commit is contained in:
parent
6303bc454a
commit
087d5c7280
|
|
@ -969,6 +969,35 @@ class WidthVisitor final : public VNVisitor {
|
||||||
nodep->dtypeSetInteger();
|
nodep->dtypeSetInteger();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
bool streamImplicitUseAllowed(const AstNodeStream* nodep) const {
|
||||||
|
const AstNode* backp = nodep->backp();
|
||||||
|
while (true) {
|
||||||
|
if (const AstArg* const argp = VN_CAST(backp, Arg)) {
|
||||||
|
backp = argp->backp();
|
||||||
|
} else if (const AstSFormatArg* const argp = VN_CAST(backp, SFormatArg)) {
|
||||||
|
backp = argp->backp();
|
||||||
|
} else if (VN_IS(backp, CvtArrayToArray) || VN_IS(backp, CvtArrayToPacked)
|
||||||
|
|| VN_IS(backp, CvtPackedToArray) || VN_IS(backp, CvtPackString)
|
||||||
|
|| VN_IS(backp, CvtUnpackedToQueue)) {
|
||||||
|
backp = backp->backp();
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!backp) return true; // Error elsewhere
|
||||||
|
|
||||||
|
// IEEE allows streaming concatenations as assignment sources/targets, nested inside
|
||||||
|
// another stream, or after an explicit cast. Other expression operands require a cast.
|
||||||
|
return VN_IS(backp, NodeAssign) //
|
||||||
|
|| VN_IS(backp, Var) //
|
||||||
|
|| VN_IS(backp, MemberDType) //
|
||||||
|
|| VN_IS(backp, Pin) //
|
||||||
|
|| VN_IS(backp, NodeFTaskRef) //
|
||||||
|
|| VN_IS(backp, NodeStream) //
|
||||||
|
|| VN_IS(backp, Cast) //
|
||||||
|
|| VN_IS(backp, CastSize) //
|
||||||
|
|| VN_IS(backp, CastWrap);
|
||||||
|
}
|
||||||
void visit(AstNodeStream* nodep) override {
|
void visit(AstNodeStream* nodep) override {
|
||||||
VL_RESTORER(m_streamConcat);
|
VL_RESTORER(m_streamConcat);
|
||||||
// UINFOTREE(1, nodep, "stream-in vup" << m_vup, "stream-in ");
|
// UINFOTREE(1, nodep, "stream-in vup" << m_vup, "stream-in ");
|
||||||
|
|
@ -1002,9 +1031,7 @@ class WidthVisitor final : public VNVisitor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (m_vup->final()) {
|
if (m_vup->final()) {
|
||||||
const AstNode* backp = nodep->backp();
|
if (!streamImplicitUseAllowed(nodep)) {
|
||||||
if (VN_IS(backp, SFormatArg)) backp = backp->backp();
|
|
||||||
if (VN_IS(backp, SFormatF)) {
|
|
||||||
nodep->v3error(
|
nodep->v3error(
|
||||||
"Streaming concatenation cannot be used in an implicitly cast context "
|
"Streaming concatenation cannot be used in an implicitly cast context "
|
||||||
"(IEEE 1800-2023 11.4.17)\n"
|
"(IEEE 1800-2023 11.4.17)\n"
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,42 @@
|
||||||
%Error: t/t_display_stream_bad.v:11:15: Streaming concatenation cannot be used in an implicitly cast context (IEEE 1800-2023 11.4.17)
|
%Error: t/t_display_stream_bad.v:14:15: Streaming concatenation cannot be used in an implicitly cast context (IEEE 1800-2023 11.4.17)
|
||||||
: ... note: In instance 't'
|
: ... note: In instance 't'
|
||||||
: ... Suggest use a cast
|
: ... Suggest use a cast
|
||||||
11 | $display({<<{value}});
|
14 | result = {<<{value}} + 1;
|
||||||
| ^~
|
| ^~
|
||||||
... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance.
|
... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance.
|
||||||
%Error: t/t_display_stream_bad.v:12:22: Streaming concatenation cannot be used in an implicitly cast context (IEEE 1800-2023 11.4.17)
|
%Error: t/t_display_stream_bad.v:15:23: Streaming concatenation cannot be used in an implicitly cast context (IEEE 1800-2023 11.4.17)
|
||||||
: ... note: In instance 't'
|
: ... note: In instance 't'
|
||||||
: ... Suggest use a cast
|
: ... Suggest use a cast
|
||||||
12 | $display("%0d", {<<{value}});
|
15 | result = value + {<<{value}};
|
||||||
|
| ^~
|
||||||
|
%Error: t/t_display_stream_bad.v:16:26: Streaming concatenation cannot be used in an implicitly cast context (IEEE 1800-2023 11.4.17)
|
||||||
|
: ... note: In instance 't'
|
||||||
|
: ... Suggest use a cast
|
||||||
|
16 | result = value[0] ? {<<{value}} : other;
|
||||||
|
| ^~
|
||||||
|
%Error: t/t_display_stream_bad.v:17:16: Streaming concatenation cannot be used in an implicitly cast context (IEEE 1800-2023 11.4.17)
|
||||||
|
: ... note: In instance 't'
|
||||||
|
: ... Suggest use a cast
|
||||||
|
17 | result = {{<<{value}}};
|
||||||
|
| ^~
|
||||||
|
%Error: t/t_display_stream_bad.v:18:14: Streaming concatenation cannot be used in an implicitly cast context (IEEE 1800-2023 11.4.17)
|
||||||
|
: ... note: In instance 't'
|
||||||
|
: ... Suggest use a cast
|
||||||
|
18 | flag = ({<<{value}} == other);
|
||||||
|
| ^~
|
||||||
|
%Error: t/t_display_stream_bad.v:19:15: Streaming concatenation cannot be used in an implicitly cast context (IEEE 1800-2023 11.4.17)
|
||||||
|
: ... note: In instance 't'
|
||||||
|
: ... Suggest use a cast
|
||||||
|
19 | $display({<<{value}});
|
||||||
|
| ^~
|
||||||
|
%Error: t/t_display_stream_bad.v:20:22: Streaming concatenation cannot be used in an implicitly cast context (IEEE 1800-2023 11.4.17)
|
||||||
|
: ... note: In instance 't'
|
||||||
|
: ... Suggest use a cast
|
||||||
|
20 | $display("%0d", {<<{value}});
|
||||||
| ^~
|
| ^~
|
||||||
%Error: t/t_display_stream_bad.v:13:29: Streaming concatenation cannot be used in an implicitly cast context (IEEE 1800-2023 11.4.17)
|
%Error: t/t_display_stream_bad.v:21:29: Streaming concatenation cannot be used in an implicitly cast context (IEEE 1800-2023 11.4.17)
|
||||||
: ... note: In instance 't'
|
: ... note: In instance 't'
|
||||||
: ... Suggest use a cast
|
: ... Suggest use a cast
|
||||||
13 | void'($sformatf("%0d", {<<{value}}));
|
21 | void'($sformatf("%0d", {<<{value}}));
|
||||||
| ^~
|
| ^~
|
||||||
%Error: Exiting due to
|
%Error: Exiting due to
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,19 @@
|
||||||
|
|
||||||
module t;
|
module t;
|
||||||
int value = 1;
|
int value = 1;
|
||||||
|
int other = 2;
|
||||||
|
int result;
|
||||||
|
bit flag;
|
||||||
|
|
||||||
initial begin
|
initial begin
|
||||||
|
result = {<<{value}} + 1;
|
||||||
|
result = value + {<<{value}};
|
||||||
|
result = value[0] ? {<<{value}} : other;
|
||||||
|
result = {{<<{value}}};
|
||||||
|
flag = ({<<{value}} == other);
|
||||||
$display({<<{value}});
|
$display({<<{value}});
|
||||||
$display("%0d", {<<{value}});
|
$display("%0d", {<<{value}});
|
||||||
void'($sformatf("%0d", {<<{value}}));
|
void'($sformatf("%0d", {<<{value}}));
|
||||||
|
result = int'({<<{value}});
|
||||||
end
|
end
|
||||||
endmodule
|
endmodule
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,17 @@
|
||||||
// SPDX-License-Identifier: CC0-1.0
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
`define stop $stop
|
`define stop $stop
|
||||||
`define checks(gotv,expv) do if ((gotv) != (expv)) begin $write("%%Error: %s:%0d: got='%h' exp='%h'\n", `__FILE__,`__LINE__, (gotv), (expv)); `stop; end while(0);
|
`define checks_w(width,gotv,expv) do begin \
|
||||||
|
logic [(width)-1:0] got_check; \
|
||||||
|
logic [(width)-1:0] exp_check; \
|
||||||
|
got_check = (gotv); \
|
||||||
|
exp_check = (expv); \
|
||||||
|
if (got_check != exp_check) begin \
|
||||||
|
$write("%%Error: %s:%0d: got='%h' exp='%h'\n", `__FILE__,`__LINE__, got_check, exp_check); \
|
||||||
|
`stop; \
|
||||||
|
end \
|
||||||
|
end while(0);
|
||||||
|
`define checks(gotv,expv) `checks_w($bits(expv), gotv, expv)
|
||||||
module t;
|
module t;
|
||||||
|
|
||||||
logic [7:0] i_char;
|
logic [7:0] i_char;
|
||||||
|
|
@ -69,8 +79,8 @@ module t;
|
||||||
byte_pkt = {<<8{i_header,i_len,i_crc,i_data}};
|
byte_pkt = {<<8{i_header,i_len,i_crc,i_data}};
|
||||||
{<<8{o_header,o_len,o_crc,o_data}} = byte_pkt;
|
{<<8{o_header,o_len,o_crc,o_data}} = byte_pkt;
|
||||||
|
|
||||||
`checks({>>{byte_pkt}},{<<8{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{byte_pkt}},{<<8{i_header,i_len,i_crc,i_data}});
|
||||||
`checks({i_header,i_len,i_crc,i_data},{<<8{byte_pkt}});
|
`checks_w(128, {i_header,i_len,i_crc,i_data},{<<8{byte_pkt}});
|
||||||
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
||||||
|
|
||||||
// //----------- SData QUEUE --------
|
// //----------- SData QUEUE --------
|
||||||
|
|
@ -95,7 +105,7 @@ module t;
|
||||||
sdata_pkt = {<<8{i_header,i_len,i_crc,i_data}};
|
sdata_pkt = {<<8{i_header,i_len,i_crc,i_data}};
|
||||||
{<<8{o_header,o_len,o_crc,o_data}} = sdata_pkt;
|
{<<8{o_header,o_len,o_crc,o_data}} = sdata_pkt;
|
||||||
|
|
||||||
`checks({>>{sdata_pkt}},{<<8{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{sdata_pkt}},{<<8{i_header,i_len,i_crc,i_data}});
|
||||||
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
||||||
|
|
||||||
//----------- IData QUEUE --------
|
//----------- IData QUEUE --------
|
||||||
|
|
@ -111,7 +121,7 @@ module t;
|
||||||
int_pkt = {<<8{i_header,i_len,i_crc,i_data}};
|
int_pkt = {<<8{i_header,i_len,i_crc,i_data}};
|
||||||
{<<8{o_header,o_len,o_crc,o_data}} = int_pkt;
|
{<<8{o_header,o_len,o_crc,o_data}} = int_pkt;
|
||||||
|
|
||||||
`checks({>>{int_pkt}},{<<8{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{int_pkt}},{<<8{i_header,i_len,i_crc,i_data}});
|
||||||
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
||||||
|
|
||||||
//----------- QData QUEUE --------
|
//----------- QData QUEUE --------
|
||||||
|
|
@ -130,7 +140,7 @@ module t;
|
||||||
qdata_pkt = {<<8{i_header,i_len,i_crc,i_data}};
|
qdata_pkt = {<<8{i_header,i_len,i_crc,i_data}};
|
||||||
{<<8{o_header,o_len,o_crc,o_data}} = qdata_pkt;
|
{<<8{o_header,o_len,o_crc,o_data}} = qdata_pkt;
|
||||||
|
|
||||||
`checks({>>{qdata_pkt}},{<<8{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{qdata_pkt}},{<<8{i_header,i_len,i_crc,i_data}});
|
||||||
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
||||||
|
|
||||||
// ----------- VLWide QUEUE --------
|
// ----------- VLWide QUEUE --------
|
||||||
|
|
@ -143,7 +153,7 @@ module t;
|
||||||
|
|
||||||
/* verilator lint_off WIDTHEXPAND */
|
/* verilator lint_off WIDTHEXPAND */
|
||||||
wide129 = {<<8{i_header,i_len,i_crc,i_data}};
|
wide129 = {<<8{i_header,i_len,i_crc,i_data}};
|
||||||
`checks({>>{vlwide_pkt_129}},wide129);
|
`checks_w(129, {>>{vlwide_pkt_129}},wide129);
|
||||||
/* verilator lint_on WIDTHEXPAND */
|
/* verilator lint_on WIDTHEXPAND */
|
||||||
|
|
||||||
//------------------------------- REVERSE ENDIAN ------------------------------
|
//------------------------------- REVERSE ENDIAN ------------------------------
|
||||||
|
|
@ -167,8 +177,8 @@ module t;
|
||||||
byte_pkt_rev = {<<8{i_header,i_len,i_crc,i_data}};
|
byte_pkt_rev = {<<8{i_header,i_len,i_crc,i_data}};
|
||||||
{<<8{o_header,o_len,o_crc,o_data}} = byte_pkt_rev;
|
{<<8{o_header,o_len,o_crc,o_data}} = byte_pkt_rev;
|
||||||
|
|
||||||
`checks({>>{byte_pkt_rev}},{<<8{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{byte_pkt_rev}},{<<8{i_header,i_len,i_crc,i_data}});
|
||||||
`checks({i_header,i_len,i_crc,i_data},{<<8{byte_pkt_rev}});
|
`checks_w(128, {i_header,i_len,i_crc,i_data},{<<8{byte_pkt_rev}});
|
||||||
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
||||||
|
|
||||||
//----------- SData QUEUE --------
|
//----------- SData QUEUE --------
|
||||||
|
|
@ -188,7 +198,7 @@ module t;
|
||||||
sdata_pkt_rev = {<<8{i_header,i_len,i_crc,i_data}};
|
sdata_pkt_rev = {<<8{i_header,i_len,i_crc,i_data}};
|
||||||
{<<8{o_header,o_len,o_crc,o_data}} = sdata_pkt_rev;
|
{<<8{o_header,o_len,o_crc,o_data}} = sdata_pkt_rev;
|
||||||
|
|
||||||
`checks({>>{sdata_pkt_rev}},{<<8{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{sdata_pkt_rev}},{<<8{i_header,i_len,i_crc,i_data}});
|
||||||
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
||||||
|
|
||||||
//----------- IData QUEUE --------
|
//----------- IData QUEUE --------
|
||||||
|
|
@ -204,7 +214,7 @@ module t;
|
||||||
int_pkt_rev = {<<8{i_header,i_len,i_crc,i_data}};
|
int_pkt_rev = {<<8{i_header,i_len,i_crc,i_data}};
|
||||||
{<<8{o_header,o_len,o_crc,o_data}} = int_pkt_rev;
|
{<<8{o_header,o_len,o_crc,o_data}} = int_pkt_rev;
|
||||||
|
|
||||||
`checks({>>{int_pkt_rev}},{<<8{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{int_pkt_rev}},{<<8{i_header,i_len,i_crc,i_data}});
|
||||||
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
||||||
|
|
||||||
//----------- QData QUEUE --------
|
//----------- QData QUEUE --------
|
||||||
|
|
@ -218,7 +228,7 @@ module t;
|
||||||
qdata_pkt_rev = {<<8{i_header,i_len,i_crc,i_data}};
|
qdata_pkt_rev = {<<8{i_header,i_len,i_crc,i_data}};
|
||||||
{<<8{o_header,o_len,o_crc,o_data}} = qdata_pkt_rev;
|
{<<8{o_header,o_len,o_crc,o_data}} = qdata_pkt_rev;
|
||||||
|
|
||||||
`checks({>>{qdata_pkt_rev}},{<<8{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{qdata_pkt_rev}},{<<8{i_header,i_len,i_crc,i_data}});
|
||||||
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
||||||
|
|
||||||
// ----------- VLWide QUEUE --------
|
// ----------- VLWide QUEUE --------
|
||||||
|
|
@ -227,7 +237,7 @@ module t;
|
||||||
/* verilator lint_off WIDTHEXPAND */
|
/* verilator lint_off WIDTHEXPAND */
|
||||||
wide129 = {<<8{i_header,i_len,i_crc,i_data}};
|
wide129 = {<<8{i_header,i_len,i_crc,i_data}};
|
||||||
/* verilator lint_on WIDTHEXPAND */
|
/* verilator lint_on WIDTHEXPAND */
|
||||||
`checks({>>{vlwide_pkt_129_rev}},wide129);
|
`checks_w(129, {>>{vlwide_pkt_129_rev}},wide129);
|
||||||
|
|
||||||
// // -------------------- STREAMR ------------------------------------
|
// // -------------------- STREAMR ------------------------------------
|
||||||
// //----------- CData QUEUE --------
|
// //----------- CData QUEUE --------
|
||||||
|
|
@ -237,21 +247,21 @@ module t;
|
||||||
|
|
||||||
byte_pkt = {>>{i_header,i_len}};
|
byte_pkt = {>>{i_header,i_len}};
|
||||||
{>>{o_header,o_len}} = byte_pkt;
|
{>>{o_header,o_len}} = byte_pkt;
|
||||||
`checks({>>{i_header,i_len}},{>>{o_header,o_len}});
|
`checks_w(64, {>>{i_header,i_len}},{>>{o_header,o_len}});
|
||||||
`checks({i_header,i_len},{o_header,o_len});
|
`checks({i_header,i_len},{o_header,o_len});
|
||||||
|
|
||||||
byte_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
byte_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
{>>{o_header,o_len,o_crc,o_data}} = byte_pkt;
|
{>>{o_header,o_len,o_crc,o_data}} = byte_pkt;
|
||||||
|
|
||||||
`checks({>>{byte_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{byte_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
||||||
|
|
||||||
//----------- IData QUEUE --------
|
//----------- IData QUEUE --------
|
||||||
int_pkt = {>>{i_header}};
|
int_pkt = {>>{i_header}};
|
||||||
o_header = {>>{int_pkt}};
|
o_header = {>>{int_pkt}};
|
||||||
`checks(o_header,i_header);
|
`checks(o_header,i_header);
|
||||||
`checks(o_header,{>>{int_pkt}});
|
`checks_w(32, o_header,{>>{int_pkt}});
|
||||||
`checks({>>{o_header}},{>>{int_pkt}});
|
`checks_w(32, {>>{o_header}},{>>{int_pkt}});
|
||||||
|
|
||||||
//test with QData
|
//test with QData
|
||||||
int_pkt = {>>{i_header,i_len}};
|
int_pkt = {>>{i_header,i_len}};
|
||||||
|
|
@ -261,7 +271,7 @@ module t;
|
||||||
int_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
int_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
{>>{o_header,o_len,o_crc,o_data}} = int_pkt;
|
{>>{o_header,o_len,o_crc,o_data}} = int_pkt;
|
||||||
|
|
||||||
`checks({>>{int_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{int_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
||||||
|
|
||||||
//----------- QData QUEUE --------
|
//----------- QData QUEUE --------
|
||||||
|
|
@ -274,7 +284,7 @@ module t;
|
||||||
qdata_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
qdata_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
{>>{o_header,o_len,o_crc,o_data}} = qdata_pkt;
|
{>>{o_header,o_len,o_crc,o_data}} = qdata_pkt;
|
||||||
|
|
||||||
`checks({>>{qdata_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{qdata_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
||||||
|
|
||||||
// ----------- VLWide QUEUE --------
|
// ----------- VLWide QUEUE --------
|
||||||
|
|
@ -288,84 +298,84 @@ module t;
|
||||||
vlwide_pkt_129 = {>>{i_header,i_len,i_crc,i_data}};
|
vlwide_pkt_129 = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
{>>{o_header,o_len,o_crc,o_data}} = vlwide_pkt_129;
|
{>>{o_header,o_len,o_crc,o_data}} = vlwide_pkt_129;
|
||||||
|
|
||||||
`checks({>>{vlwide_pkt_129}},{>>{1'b0,i_header,i_len,i_crc,i_data}});
|
`checks_w(129, {>>{vlwide_pkt_129}},{>>{1'b0,i_header,i_len,i_crc,i_data}});
|
||||||
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
`checks({o_header,o_len,o_crc,o_data} ,{i_header,i_len,i_crc,i_data});
|
||||||
|
|
||||||
//---------- into other queues ------
|
//---------- into other queues ------
|
||||||
int_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
int_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
byte_pkt = {>>{int_pkt}};
|
byte_pkt = {>>{int_pkt}};
|
||||||
`checks({>>{byte_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{byte_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
byte_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
byte_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
int_pkt = {>>{byte_pkt}};
|
int_pkt = {>>{byte_pkt}};
|
||||||
`checks({>>{int_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{int_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
byte_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
byte_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
int_pkt = {>>{byte_pkt}};
|
int_pkt = {>>{byte_pkt}};
|
||||||
`checks({>>{int_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{int_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
sdata_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
sdata_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
byte_pkt = {>>{sdata_pkt}};
|
byte_pkt = {>>{sdata_pkt}};
|
||||||
`checks({>>{byte_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{byte_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
byte_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
byte_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
sdata_pkt = {>>{byte_pkt}};
|
sdata_pkt = {>>{byte_pkt}};
|
||||||
`checks({>>{sdata_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{sdata_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
byte_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
byte_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
qdata_pkt = {>>{byte_pkt}};
|
qdata_pkt = {>>{byte_pkt}};
|
||||||
`checks({>>{qdata_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{qdata_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
qdata_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
qdata_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
byte_pkt = {>>{qdata_pkt}};
|
byte_pkt = {>>{qdata_pkt}};
|
||||||
`checks({>>{byte_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{byte_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
qdata_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
qdata_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
int_pkt = {>>{qdata_pkt}};
|
int_pkt = {>>{qdata_pkt}};
|
||||||
`checks({>>{int_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{int_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
int_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
int_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
qdata_pkt = {>>{int_pkt}};
|
qdata_pkt = {>>{int_pkt}};
|
||||||
`checks({>>{qdata_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{qdata_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
byte_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
byte_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
vlwide_pkt_128 = {>>{byte_pkt}};
|
vlwide_pkt_128 = {>>{byte_pkt}};
|
||||||
`checks({>>{vlwide_pkt_128}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{vlwide_pkt_128}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
vlwide_pkt_128 = {>>{i_header,i_len,i_crc,i_data}};
|
vlwide_pkt_128 = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
byte_pkt = {>>{vlwide_pkt_128}};
|
byte_pkt = {>>{vlwide_pkt_128}};
|
||||||
`checks({i_header,i_len,i_crc,i_data},{>>{byte_pkt}});
|
`checks_w(128, {i_header,i_len,i_crc,i_data},{>>{byte_pkt}});
|
||||||
`checks({>>{byte_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{byte_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
int_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
int_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
vlwide_pkt_128 = {>>{int_pkt}};
|
vlwide_pkt_128 = {>>{int_pkt}};
|
||||||
`checks({i_header,i_len,i_crc,i_data},{>>{vlwide_pkt_128}});
|
`checks_w(128, {i_header,i_len,i_crc,i_data},{>>{vlwide_pkt_128}});
|
||||||
`checks({>>{vlwide_pkt_128}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{vlwide_pkt_128}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
vlwide_pkt_128 = {>>{i_header,i_len,i_crc,i_data}};
|
vlwide_pkt_128 = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
int_pkt = {>>{vlwide_pkt_128}};
|
int_pkt = {>>{vlwide_pkt_128}};
|
||||||
`checks({i_header,i_len,i_crc,i_data},{>>{int_pkt}});
|
`checks_w(128, {i_header,i_len,i_crc,i_data},{>>{int_pkt}});
|
||||||
`checks({>>{int_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{int_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
qdata_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
qdata_pkt = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
vlwide_pkt_128 = {>>{qdata_pkt}};
|
vlwide_pkt_128 = {>>{qdata_pkt}};
|
||||||
`checks({i_header,i_len,i_crc,i_data},{>>{vlwide_pkt_128}});
|
`checks_w(128, {i_header,i_len,i_crc,i_data},{>>{vlwide_pkt_128}});
|
||||||
`checks({>>{vlwide_pkt_128}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{vlwide_pkt_128}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
qdata_pkt = {>>{i_header,i_len,i_crc,i_data,i_header,i_len,i_crc,i_data}};
|
qdata_pkt = {>>{i_header,i_len,i_crc,i_data,i_header,i_len,i_crc,i_data}};
|
||||||
vlwide_pkt_128 = {>>{qdata_pkt}};
|
vlwide_pkt_128 = {>>{qdata_pkt}};
|
||||||
`checks({i_header,i_len,i_crc,i_data,i_header,i_len,i_crc,i_data},{>>{vlwide_pkt_128}});
|
`checks_w(256, {i_header,i_len,i_crc,i_data,i_header,i_len,i_crc,i_data},{>>{vlwide_pkt_128}});
|
||||||
`checks({>>{vlwide_pkt_128}},{>>{i_header,i_len,i_crc,i_data,i_header,i_len,i_crc,i_data}});
|
`checks_w(256, {>>{vlwide_pkt_128}},{>>{i_header,i_len,i_crc,i_data,i_header,i_len,i_crc,i_data}});
|
||||||
|
|
||||||
qdata_pkt = {>>{i_header,i_len,i_crc,i_data,i_header,i_len,i_crc}};
|
qdata_pkt = {>>{i_header,i_len,i_crc,i_data,i_header,i_len,i_crc}};
|
||||||
vlwide_pkt_128 = {>>{qdata_pkt}};
|
vlwide_pkt_128 = {>>{qdata_pkt}};
|
||||||
`checks({32'h0,i_header,i_len,i_crc,i_data,i_header,i_len,i_crc},{>>{vlwide_pkt_128}});
|
`checks_w(256, {32'h0,i_header,i_len,i_crc,i_data,i_header,i_len,i_crc},{>>{vlwide_pkt_128}});
|
||||||
`checks({>>{vlwide_pkt_128}},{>>{32'h0,i_header,i_len,i_crc,i_data,i_header,i_len,i_crc}});
|
`checks_w(256, {>>{vlwide_pkt_128}},{>>{32'h0,i_header,i_len,i_crc,i_data,i_header,i_len,i_crc}});
|
||||||
|
|
||||||
vlwide_pkt_128 = {>>{i_header,i_len,i_crc,i_data}};
|
vlwide_pkt_128 = {>>{i_header,i_len,i_crc,i_data}};
|
||||||
qdata_pkt = {>>{vlwide_pkt_128}};
|
qdata_pkt = {>>{vlwide_pkt_128}};
|
||||||
`checks({i_header,i_len,i_crc,i_data},{>>{vlwide_pkt_128}});
|
`checks_w(128, {i_header,i_len,i_crc,i_data},{>>{vlwide_pkt_128}});
|
||||||
`checks({>>{qdata_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
`checks_w(128, {>>{qdata_pkt}},{>>{i_header,i_len,i_crc,i_data}});
|
||||||
$write("*-* All Finished *-*\n");
|
$write("*-* All Finished *-*\n");
|
||||||
$finish;
|
$finish;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,15 +21,17 @@ module t;
|
||||||
pkt_if pkt_if_init (clk);
|
pkt_if pkt_if_init (clk);
|
||||||
//this will not compile without -fno-life
|
//this will not compile without -fno-life
|
||||||
initial begin
|
initial begin
|
||||||
byte byte_pkt[$];
|
byte byte_pkt[$];
|
||||||
|
byte got_pkt;
|
||||||
//---------------------- STREAM WITH INTERFACE -------------------
|
//---------------------- STREAM WITH INTERFACE -------------------
|
||||||
//using this forces verilator to a AstSel Node into a Stream Node
|
//using this forces verilator to a AstSel Node into a Stream Node
|
||||||
#0 //make sure we dont optimize it all away in v3life
|
#0 //make sure we dont optimize it all away in v3life
|
||||||
pkt_if_init.s.extra = 8'hd;
|
pkt_if_init.s.extra = 8'hd;
|
||||||
byte_pkt = {>>{pkt_if_init.s.extra}};
|
byte_pkt = {>>{pkt_if_init.s.extra}};
|
||||||
if(8'hd == {>>{byte_pkt}}) begin
|
got_pkt = {>>{byte_pkt}};
|
||||||
$write("*-* All Finished *-*\n");
|
if (8'hd == got_pkt) begin
|
||||||
$finish();
|
$write("*-* All Finished *-*\n");
|
||||||
|
$finish();
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue