90
99
(local (xdoc::set-default-parents vl-expr-wildelim))
92
(define vl-wildeq-msb-bits-to-care-mask
93
:short "Construct a bit-mask that captures the non-wild bits from the
94
right-hand side of a @('==?') or @('!=?') expression."
95
((msb-bits vl-bitlist-p "MSB-ordered bits from the RHS.")
96
(value natp "Value we're constructing, zero to begin with."))
97
:returns (care-mask natp :rule-classes :type-prescription)
98
(b* ((value (lnfix value))
99
((when (atom msb-bits))
101
(bit1 (vl-bit-fix (car msb-bits)))
102
(value (if (or (eq bit1 :vl-0val)
104
(logior 1 (ash value 1))
106
(vl-wildeq-msb-bits-to-care-mask (cdr msb-bits) value))
108
(assert! (equal (vl-wildeq-msb-bits-to-care-mask '(:vl-zval) 0) #b0))
109
(assert! (equal (vl-wildeq-msb-bits-to-care-mask '(:vl-1val) 0) #b1))
110
(assert! (equal (vl-wildeq-msb-bits-to-care-mask '(:vl-zval :vl-zval) 0) #b00))
111
(assert! (equal (vl-wildeq-msb-bits-to-care-mask '(:vl-zval :vl-1val) 0) #b01))
112
(assert! (equal (vl-wildeq-msb-bits-to-care-mask '(:vl-1val :vl-zval) 0) #b10))
113
(assert! (equal (vl-wildeq-msb-bits-to-care-mask '(:vl-1val :vl-1val) 0) #b11))
114
(assert! (equal (vl-wildeq-msb-bits-to-care-mask '(:vl-1val :vl-zval :vl-0val :vl-1val :vl-xval) 0) #b10110))
115
(assert! (equal (vl-wildeq-msb-bits-to-care-mask '(:vl-zval :vl-zval :vl-1val :vl-zval) 0) #b0010))
117
(local (defun my-induct (n msb-bits value)
119
(list n msb-bits value)
122
(let ((bit1 (vl-bit-fix (car msb-bits))))
123
(if (or (eq bit1 :vl-0val)
125
(logior 1 (ash value 1))
128
(defthm unsigned-byte-p-of-vl-wildeq-msb-bits-to-care-mask-general
129
(implies (unsigned-byte-p n value)
130
(unsigned-byte-p (+ n (len msb-bits))
131
(vl-wildeq-msb-bits-to-care-mask msb-bits value)))
133
:do-not '(generalize fertilize)
135
:induct (my-induct n msb-bits value)
136
:in-theory (e/d (acl2::ihsext-recursive-redefs
137
acl2::unsigned-byte-p**)
138
(unsigned-byte-p)))))
140
(defthm unsigned-byte-p-of-vl-wildeq-msb-bits-to-care-mask-zero
141
(unsigned-byte-p (len msb-bits) (vl-wildeq-msb-bits-to-care-mask msb-bits 0))
143
:in-theory (disable unsigned-byte-p-of-vl-wildeq-msb-bits-to-care-mask-general
144
vl-wildeq-msb-bits-to-care-mask
146
:use ((:instance unsigned-byte-p-of-vl-wildeq-msb-bits-to-care-mask-general
149
(defthm upper-bound-of-vl-wildeq-msb-bits-to-care-mask-zero
150
(< (vl-wildeq-msb-bits-to-care-mask msb-bits 0)
151
(expt 2 (len msb-bits)))
152
:rule-classes ((:rewrite) (:linear))
153
:hints(("Goal" :in-theory (disable unsigned-byte-p-of-vl-wildeq-msb-bits-to-care-mask-zero
154
unsigned-byte-p-of-vl-wildeq-msb-bits-to-care-mask-general
155
vl-wildeq-msb-bits-to-care-mask
157
:use ((:instance unsigned-byte-p-of-vl-wildeq-msb-bits-to-care-mask-zero))))))
159
(define vl-wildeq-msb-bits-zap
160
:short "Zero out the wild bits from the right-hand side of a @('==?') or
161
@('!=?') expression."
162
((msb-bits vl-bitlist-p "MSB-ordered bits from the RHS.")
163
(value natp "Value we're constructing, zero to begin with."))
164
:returns (new-value natp :rule-classes :type-prescription)
165
(b* ((value (lnfix value))
166
((when (atom msb-bits))
168
(bit1 (vl-bit-fix (car msb-bits)))
169
(value (if (eq bit1 :vl-1val)
170
(logior 1 (ash value 1))
171
;; Just replace any other bit with 0.
173
(vl-wildeq-msb-bits-zap (cdr msb-bits) value))
175
(assert! (equal (vl-wildeq-msb-bits-zap '(:vl-zval) 0) #b0))
176
(assert! (equal (vl-wildeq-msb-bits-zap '(:vl-xval) 0) #b0))
177
(assert! (equal (vl-wildeq-msb-bits-zap '(:vl-0val) 0) #b0))
178
(assert! (equal (vl-wildeq-msb-bits-zap '(:vl-1val) 0) #b1))
179
(assert! (equal (vl-wildeq-msb-bits-zap '(:vl-zval :vl-zval) 0) #b00))
180
(assert! (equal (vl-wildeq-msb-bits-zap '(:vl-zval :vl-1val) 0) #b01))
181
(assert! (equal (vl-wildeq-msb-bits-zap '(:vl-1val :vl-zval) 0) #b10))
182
(assert! (equal (vl-wildeq-msb-bits-zap '(:vl-1val :vl-1val) 0) #b11))
183
(assert! (equal (vl-wildeq-msb-bits-zap '(:vl-zval :vl-zval) 0) #b00))
184
(assert! (equal (vl-wildeq-msb-bits-zap '(:vl-zval :vl-0val) 0) #b00))
185
(assert! (equal (vl-wildeq-msb-bits-zap '(:vl-0val :vl-zval) 0) #b00))
186
(assert! (equal (vl-wildeq-msb-bits-zap '(:vl-0val :vl-0val) 0) #b00))
187
(assert! (equal (vl-wildeq-msb-bits-zap '(:vl-1val :vl-zval :vl-0val :vl-1val :vl-xval) 0) #b10010))
188
(assert! (equal (vl-wildeq-msb-bits-zap '(:vl-zval :vl-zval :vl-1val :vl-zval) 0) #b0010))
190
(local (defun my-induct (n msb-bits value)
192
(list n msb-bits value)
195
(let ((bit1 (vl-bit-fix (car msb-bits))))
196
(if (eq bit1 :vl-1val)
197
(logior 1 (ash value 1))
200
(defthm unsigned-byte-p-of-vl-wildeq-msb-bits-zap-general
201
(implies (unsigned-byte-p n value)
202
(unsigned-byte-p (+ n (len msb-bits))
203
(vl-wildeq-msb-bits-zap msb-bits value)))
205
:do-not '(generalize fertilize)
207
:induct (my-induct n msb-bits value)
208
:in-theory (e/d (acl2::ihsext-recursive-redefs
209
acl2::unsigned-byte-p**)
210
(unsigned-byte-p)))))
212
(defthm unsigned-byte-p-of-vl-wildeq-msb-bits-zap-zero
213
(unsigned-byte-p (len msb-bits) (vl-wildeq-msb-bits-zap msb-bits 0))
215
:in-theory (disable unsigned-byte-p-of-vl-wildeq-msb-bits-zap-general
216
vl-wildeq-msb-bits-zap
218
:use ((:instance unsigned-byte-p-of-vl-wildeq-msb-bits-zap-general
221
(defthm upper-bound-of-vl-wildeq-msb-bits-zap-zero
222
(< (vl-wildeq-msb-bits-zap msb-bits 0)
223
(expt 2 (len msb-bits)))
224
:rule-classes ((:rewrite) (:linear))
225
:hints(("Goal" :in-theory (disable unsigned-byte-p-of-vl-wildeq-msb-bits-zap-zero
226
unsigned-byte-p-of-vl-wildeq-msb-bits-zap-general
227
vl-wildeq-msb-bits-zap
229
:use ((:instance unsigned-byte-p-of-vl-wildeq-msb-bits-zap-zero))))))
232
106
(define vl-wildeq-decompose-rhs
269
143
:finaltype finaltype))
271
145
;; Zapped value computation.
272
(zap-value (vl-wildeq-msb-bits-zap msb-bits 0))
273
(zap-guts (make-vl-constint :value zap-value
274
:origwidth finalwidth
275
:origtype finaltype))
276
(zap-expr (make-vl-atom :guts zap-guts
277
:finalwidth finalwidth
278
:finaltype finaltype)))
146
(zap-bits (vl-msb-bits-zap-dontcares-zx msb-bits))
147
(zap-expr (vl-msb-bits-to-intliteral zap-bits finaltype)))
279
148
(mv t cm-expr zap-expr))
150
(local (defthmd consp-by-len
151
(implies (posp (len x))
281
153
(verify-guards vl-wildeq-decompose-rhs
283
:in-theory (disable upper-bound-of-vl-wildeq-msb-bits-to-care-mask-zero)
284
:use ((:instance upper-bound-of-vl-wildeq-msb-bits-to-care-mask-zero
285
(msb-bits (mv-nth 1 (vl-casezx-match-bits rhs))))))))
155
:in-theory (e/d (consp-by-len)
156
(upper-bound-of-vl-msb-bits-to-care-mask-zero))
157
:use ((:instance upper-bound-of-vl-msb-bits-to-care-mask-zero
158
(msb-bits (mv-nth 1 (vl-intliteral-msb-bits rhs)))
159
(cares '(:vl-0val :vl-1val)))))))
287
161
(local (in-theory (enable vl-expr-welltyped-p
288
162
vl-atom-welltyped-p)))
649
523
(warnings (vl-warninglist-fix warnings)))
652
(defmacro def-vl-wildelim-list (name &key element takes-elem)
526
(defmacro def-vl-wildelim-list (name &key element takes-ctx)
653
527
(b* ((mksym-package-symbol (pkg-witness "VL"))
654
528
(fn (mksym name '-wildelim))
655
(elem-fn (mksym element '-wildelim))
529
(ctx-fn (mksym element '-wildelim))
656
530
(type (mksym name '-p))
657
531
(formals (append '(x)
658
(if takes-elem '(elem) nil)
532
(if takes-ctx '(ctx) nil)
660
534
`(define ,fn ((x ,type)
661
,@(and takes-elem '((elem vl-modelement-p)))
535
,@(and takes-ctx '((ctx vl-context-p)))
662
536
(warnings vl-warninglist-p))
663
537
:returns (mv (warnings vl-warninglist-p)
665
539
:short ,(cat "Eliminate @('==?') and @('!=?') operators throughout a @(see " (symbol-name type) ").")
666
540
(b* (((when (atom x))
668
((mv warnings car-prime) (,elem-fn . ,(subst '(car x) 'x formals)))
542
((mv warnings car-prime) (,ctx-fn . ,(subst '(car x) 'x formals)))
669
543
((mv warnings cdr-prime) (,fn . ,(subst '(cdr x) 'x formals))))
670
544
(mv warnings (cons car-prime cdr-prime)))
687
561
(def-vl-wildelim vl-exprlist
692
(vl-wildeq-rewrite-exprlist x elem warnings)
566
(vl-wildeq-rewrite-exprlist x ctx warnings)
694
568
;; Optimization to avoid reconsing. If there aren't any ==? or !=?
695
569
;; operators, don't do anything.
696
570
(if (not (vl-exprlist-has-ops '(:vl-binary-wildeq :vl-binary-wildneq) x))
698
(vl-wildeq-rewrite-exprlist x elem warnings))))
572
(vl-wildeq-rewrite-exprlist x ctx warnings))))
700
574
(def-vl-wildelim vl-maybe-expr
704
(vl-expr-wildelim x elem warnings)
578
(vl-expr-wildelim x ctx warnings)
705
579
(mv warnings nil)))
707
581
(def-vl-wildelim vl-range
709
583
:body (b* (((vl-range x) x)
710
((mv warnings msb-prime) (vl-expr-wildelim x.msb elem warnings))
711
((mv warnings lsb-prime) (vl-expr-wildelim x.lsb elem warnings))
584
((mv warnings msb-prime) (vl-expr-wildelim x.msb ctx warnings))
585
((mv warnings lsb-prime) (vl-expr-wildelim x.lsb ctx warnings))
712
586
(x-prime (change-vl-range x
714
588
:lsb lsb-prime)))
715
589
(mv warnings x-prime)))
717
591
(def-vl-wildelim vl-maybe-range
721
(vl-range-wildelim x elem warnings)
595
(vl-range-wildelim x ctx warnings)
722
596
(mv warnings nil)))
724
598
(def-vl-wildelim-list vl-rangelist
726
600
:element vl-range)
728
602
(def-vl-wildelim vl-packeddimension
732
606
(b* ((x (vl-packeddimension-fix x)))
733
607
(if (eq x :vl-unsized-dimension)
735
(vl-range-wildelim x elem warnings))))
609
(vl-range-wildelim x ctx warnings))))
737
611
(def-vl-wildelim vl-maybe-packeddimension
742
(vl-packeddimension-wildelim x elem warnings)
616
(vl-packeddimension-wildelim x ctx warnings)
743
617
(mv warnings x)))
745
619
(def-vl-wildelim-list vl-packeddimensionlist
747
621
:element vl-packeddimension)
749
623
(def-vl-wildelim vl-enumbasetype
751
625
:body (b* (((vl-enumbasetype x) x)
752
626
((mv warnings dim)
753
(vl-maybe-packeddimension-wildelim x.dim elem warnings)))
627
(vl-maybe-packeddimension-wildelim x.dim ctx warnings)))
754
628
(mv warnings (change-vl-enumbasetype x :dim dim))))
756
630
(def-vl-wildelim vl-enumitem
759
633
(b* (((vl-enumitem x) x)
760
((mv warnings new-range) (vl-maybe-range-wildelim x.range elem warnings))
761
((mv warnings new-value) (vl-maybe-expr-wildelim x.value elem warnings))
634
((mv warnings new-range) (vl-maybe-range-wildelim x.range ctx warnings))
635
((mv warnings new-value) (vl-maybe-expr-wildelim x.value ctx warnings))
762
636
(new-x (change-vl-enumitem x
764
638
:value new-value)))
765
639
(mv warnings new-x)))
767
641
(def-vl-wildelim-list vl-enumitemlist
769
643
:element vl-enumitem)
773
647
:verify-guards nil
775
649
(define vl-datatype-wildelim ((x vl-datatype-p)
776
(elem vl-modelement-p)
777
651
(warnings vl-warninglist-p))
778
652
:returns (mv (warnings vl-warninglist-p)
779
653
(new-x vl-datatype-p))
780
654
:measure (vl-datatype-count x)
781
655
(vl-datatype-case x
783
(b* (((mv warnings new-dims) (vl-packeddimensionlist-wildelim x.dims elem warnings))
784
(new-x (change-vl-coretype x :dims new-dims)))
657
(b* (((mv warnings new-pdims) (vl-packeddimensionlist-wildelim x.pdims ctx warnings))
658
((mv warnings new-udims) (vl-packeddimensionlist-wildelim x.udims ctx warnings))
659
(new-x (change-vl-coretype x :pdims new-pdims :udims new-udims)))
785
660
(mv warnings new-x)))
787
(b* (((mv warnings new-members) (vl-structmemberlist-wildelim x.members elem warnings))
788
((mv warnings new-dims) (vl-packeddimensionlist-wildelim x.dims elem warnings))
789
(new-x (change-vl-struct x :members new-members :dims new-dims)))
662
(b* (((mv warnings new-members) (vl-structmemberlist-wildelim x.members ctx warnings))
663
((mv warnings new-pdims) (vl-packeddimensionlist-wildelim x.pdims ctx warnings))
664
((mv warnings new-udims) (vl-packeddimensionlist-wildelim x.udims ctx warnings))
665
(new-x (change-vl-struct x :members new-members :pdims new-pdims :udims new-udims)))
790
666
(mv warnings new-x)))
792
(b* (((mv warnings new-members) (vl-structmemberlist-wildelim x.members elem warnings))
793
((mv warnings new-dims) (vl-packeddimensionlist-wildelim x.dims elem warnings))
794
(new-x (change-vl-union x :members new-members :dims new-dims)))
668
(b* (((mv warnings new-members) (vl-structmemberlist-wildelim x.members ctx warnings))
669
((mv warnings new-pdims) (vl-packeddimensionlist-wildelim x.pdims ctx warnings))
670
((mv warnings new-udims) (vl-packeddimensionlist-wildelim x.udims ctx warnings))
671
(new-x (change-vl-union x :members new-members :pdims new-pdims :udims new-udims)))
795
672
(mv warnings new-x)))
797
(b* (((mv warnings new-basetype) (vl-enumbasetype-wildelim x.basetype elem warnings))
798
((mv warnings new-items) (vl-enumitemlist-wildelim x.items elem warnings))
799
((mv warnings new-dims) (vl-packeddimensionlist-wildelim x.dims elem warnings))
674
(b* (((mv warnings new-basetype) (vl-enumbasetype-wildelim x.basetype ctx warnings))
675
((mv warnings new-items) (vl-enumitemlist-wildelim x.items ctx warnings))
676
((mv warnings new-pdims) (vl-packeddimensionlist-wildelim x.pdims ctx warnings))
677
((mv warnings new-udims) (vl-packeddimensionlist-wildelim x.udims ctx warnings))
800
678
(new-x (change-vl-enum x
801
679
:basetype new-basetype
681
:pdims new-pdims :udims new-udims)))
804
682
(mv warnings new-x)))
806
(b* (((mv warnings new-kind) (vl-expr-wildelim x.kind elem warnings))
807
((mv warnings new-dims) (vl-packeddimensionlist-wildelim x.dims elem warnings))
808
(new-x (change-vl-usertype x :kind new-kind :dims new-dims)))
684
(b* (((mv warnings new-kind) (vl-expr-wildelim x.kind ctx warnings))
685
((mv warnings new-pdims) (vl-packeddimensionlist-wildelim x.pdims ctx warnings))
686
((mv warnings new-udims) (vl-packeddimensionlist-wildelim x.udims ctx warnings))
687
(new-x (change-vl-usertype x :kind new-kind :pdims new-pdims :udims new-udims)))
809
688
(mv warnings new-x)))))
811
690
(define vl-structmemberlist-wildelim ((x vl-structmemberlist-p)
812
(elem vl-modelement-p)
813
692
(warnings vl-warninglist-p))
814
693
:returns (mv (warnings vl-warninglist-p)
815
694
(new-x vl-structmemberlist-p))
816
695
:measure (vl-structmemberlist-count x)
817
696
(b* (((when (atom x))
819
((mv warnings new-car) (vl-structmember-wildelim (car x) elem warnings))
820
((mv warnings new-cdr) (vl-structmemberlist-wildelim (cdr x) elem warnings))
698
((mv warnings new-car) (vl-structmember-wildelim (car x) ctx warnings))
699
((mv warnings new-cdr) (vl-structmemberlist-wildelim (cdr x) ctx warnings))
821
700
(new-x (cons new-car new-cdr)))
822
701
(mv warnings new-x)))
824
703
(define vl-structmember-wildelim ((x vl-structmember-p)
825
(elem vl-modelement-p)
826
705
(warnings vl-warninglist-p))
827
706
:returns (mv (warnings vl-warninglist-p)
828
707
(new-x vl-structmember-p))
829
708
:measure (vl-structmember-count x)
830
709
(b* (((vl-structmember x) x)
831
((mv warnings new-type) (vl-datatype-wildelim x.type elem warnings))
832
((mv warnings new-dims) (vl-packeddimensionlist-wildelim x.dims elem warnings))
833
((mv warnings new-rhs) (vl-maybe-expr-wildelim x.rhs elem warnings))
710
((mv warnings new-type) (vl-datatype-wildelim x.type ctx warnings))
711
((mv warnings new-rhs) (vl-maybe-expr-wildelim x.rhs ctx warnings))
834
712
(new-x (change-vl-structmember x
838
715
(mv warnings new-x)))
840
717
(verify-guards vl-datatype-wildelim)
841
718
(deffixequiv-mutual vl-datatype-wildelim))
720
(def-vl-wildelim vl-maybe-datatype
725
(vl-datatype-wildelim x ctx warnings)
843
728
(def-vl-wildelim vl-gatedelay
845
730
:body (b* (((vl-gatedelay x) x)
846
((mv warnings rise-prime) (vl-expr-wildelim x.rise elem warnings))
847
((mv warnings fall-prime) (vl-expr-wildelim x.fall elem warnings))
848
((mv warnings high-prime) (vl-maybe-expr-wildelim x.high elem warnings))
731
((mv warnings rise-prime) (vl-expr-wildelim x.rise ctx warnings))
732
((mv warnings fall-prime) (vl-expr-wildelim x.fall ctx warnings))
733
((mv warnings high-prime) (vl-maybe-expr-wildelim x.high ctx warnings))
849
734
(x-prime (change-vl-gatedelay x
879
764
(def-vl-wildelim vl-plainarg
881
766
:body (b* (((vl-plainarg x) x)
884
((mv warnings expr-prime) (vl-expr-wildelim x.expr elem warnings))
769
((mv warnings expr-prime) (vl-expr-wildelim x.expr ctx warnings))
885
770
(x-prime (change-vl-plainarg x :expr expr-prime)))
886
771
(mv warnings x-prime)))
888
773
(def-vl-wildelim-list vl-plainarglist
890
775
:element vl-plainarg)
892
777
(def-vl-wildelim vl-namedarg
894
779
:body (b* (((vl-namedarg x) x)
897
((mv warnings expr-prime) (vl-expr-wildelim x.expr elem warnings))
782
((mv warnings expr-prime) (vl-expr-wildelim x.expr ctx warnings))
898
783
(x-prime (change-vl-namedarg x :expr expr-prime)))
899
784
(mv warnings x-prime)))
901
786
(def-vl-wildelim-list vl-namedarglist
903
788
:element vl-namedarg)
905
790
(def-vl-wildelim vl-arguments
908
793
(vl-arguments-case x
910
(b* (((mv warnings args-prime) (vl-namedarglist-wildelim x.args elem warnings))
795
(b* (((mv warnings args-prime) (vl-namedarglist-wildelim x.args ctx warnings))
911
796
(x-prime (change-vl-arguments-named x :args args-prime)))
912
797
(mv warnings x-prime))
914
(b* (((mv warnings args-prime) (vl-plainarglist-wildelim x.args elem warnings))
799
(b* (((mv warnings args-prime) (vl-plainarglist-wildelim x.args ctx warnings))
915
800
(x-prime (change-vl-arguments-plain x :args args-prime)))
916
801
(mv warnings x-prime))))
803
(def-vl-wildelim vl-paramvalue
806
(vl-paramvalue-case x
807
:expr (vl-expr-wildelim x ctx warnings)
808
:datatype (vl-datatype-wildelim x ctx warnings)))
810
(def-vl-wildelim-list vl-paramvaluelist
812
:element vl-paramvalue)
814
(def-vl-wildelim vl-maybe-paramvalue
818
(vl-paramvalue-wildelim x ctx warnings)
821
(def-vl-wildelim vl-namedparamvalue
824
(b* (((vl-namedparamvalue x) x)
825
((mv warnings value) (vl-maybe-paramvalue-wildelim x.value ctx warnings)))
826
(mv warnings (change-vl-namedparamvalue x :value value))))
828
(def-vl-wildelim-list vl-namedparamvaluelist
830
:element vl-namedparamvalue)
832
(def-vl-wildelim vl-paramargs
837
(b* (((mv warnings args) (vl-namedparamvaluelist-wildelim x.args ctx warnings)))
838
(mv warnings (change-vl-paramargs-named x :args args)))
840
(b* (((mv warnings args) (vl-paramvaluelist-wildelim x.args ctx warnings)))
841
(mv warnings (change-vl-paramargs-plain x :args args)))))
918
843
(def-vl-wildelim vl-modinst
920
845
(b* (((vl-modinst x) x)
922
((mv warnings portargs-prime) (vl-arguments-wildelim x.portargs elem warnings))
923
((mv warnings paramargs-prime) (vl-arguments-wildelim x.paramargs elem warnings))
924
((mv warnings range-prime) (vl-maybe-range-wildelim x.range elem warnings))
925
((mv warnings delay-prime) (vl-maybe-gatedelay-wildelim x.delay elem warnings))
847
((mv warnings portargs-prime) (vl-arguments-wildelim x.portargs ctx warnings))
848
((mv warnings paramargs-prime) (vl-paramargs-wildelim x.paramargs ctx warnings))
849
((mv warnings range-prime) (vl-maybe-range-wildelim x.range ctx warnings))
850
((mv warnings delay-prime) (vl-maybe-gatedelay-wildelim x.delay ctx warnings))
926
851
(x-prime (change-vl-modinst x
927
852
:portargs portargs-prime
928
853
:paramargs paramargs-prime
965
897
(def-vl-wildelim vl-portdecl
966
898
:body (b* (((vl-portdecl x) x)
968
((mv warnings range-prime) (vl-maybe-range-wildelim x.range elem warnings))
969
(x-prime (change-vl-portdecl x :range range-prime)))
900
((mv warnings type-prime) (vl-datatype-wildelim x.type ctx warnings))
901
(x-prime (change-vl-portdecl x :type type-prime)))
970
902
(mv warnings x-prime)))
972
904
(def-vl-wildelim-list vl-portdecllist :element vl-portdecl)
974
(def-vl-wildelim vl-netdecl
976
(b* (((vl-netdecl x) x)
978
((mv warnings range-prime) (vl-maybe-range-wildelim x.range elem warnings))
979
((mv warnings arrdims-prime) (vl-rangelist-wildelim x.arrdims elem warnings))
980
((mv warnings delay-prime) (vl-maybe-gatedelay-wildelim x.delay elem warnings))
981
(x-prime (change-vl-netdecl x
983
:arrdims arrdims-prime
984
:delay delay-prime)))
985
(mv warnings x-prime)))
987
(def-vl-wildelim-list vl-netdecllist :element vl-netdecl)
989
906
(def-vl-wildelim vl-vardecl
991
908
(b* (((vl-vardecl x) x)
993
((mv warnings vartype-prime) (vl-datatype-wildelim x.vartype elem warnings))
994
((mv warnings dims-prime) (vl-packeddimensionlist-wildelim x.dims elem warnings))
995
((mv warnings initval-prime) (vl-maybe-expr-wildelim x.initval elem warnings))
910
((mv warnings type-prime) (vl-datatype-wildelim x.type ctx warnings))
911
((mv warnings initval-prime) (vl-maybe-expr-wildelim x.initval ctx warnings))
912
((mv warnings delay-prime) (vl-maybe-gatedelay-wildelim x.delay ctx warnings))
996
913
(x-prime (change-vl-vardecl x
997
:vartype vartype-prime
999
:initval initval-prime)))
915
:initval initval-prime
916
:delay delay-prime)))
1000
917
(mv warnings x-prime)))
1002
919
(def-vl-wildelim-list vl-vardecllist :element vl-vardecl)
921
(def-vl-wildelim vl-paramtype
925
(:vl-implicitvalueparam
926
(b* (((mv warnings range-prime) (vl-maybe-range-wildelim x.range ctx warnings))
927
((mv warnings default-prime) (vl-maybe-expr-wildelim x.default ctx warnings))
928
(x-prime (change-vl-implicitvalueparam x
930
:default default-prime)))
931
(mv warnings x-prime)))
933
(:vl-explicitvalueparam
934
(b* (((mv warnings type-prime) (vl-datatype-wildelim x.type ctx warnings))
935
((mv warnings default-prime) (vl-maybe-expr-wildelim x.default ctx warnings))
936
(x-prime (change-vl-explicitvalueparam x
938
:default default-prime)))
939
(mv warnings x-prime)))
942
(b* (((mv warnings default-prime) (vl-maybe-datatype-wildelim x.default ctx warnings))
943
(x-prime (change-vl-typeparam x :default default-prime)))
944
(mv warnings x-prime)))))
1004
946
(def-vl-wildelim vl-paramdecl
1006
948
(b* (((vl-paramdecl x) x)
1008
((mv warnings expr-prime) (vl-expr-wildelim x.expr elem warnings))
1009
((mv warnings range-prime) (vl-maybe-range-wildelim x.range elem warnings))
1010
(x-prime (change-vl-paramdecl x
1012
:range range-prime)))
950
((mv warnings type-prime) (vl-paramtype-wildelim x.type ctx warnings))
951
(x-prime (change-vl-paramdecl x :type type-prime)))
1013
952
(mv warnings x-prime)))
1015
954
(def-vl-wildelim-list vl-paramdecllist :element vl-paramdecl)
1024
963
(def-vl-wildelim-list vl-blockitemlist :element vl-blockitem)
1026
965
(def-vl-wildelim vl-delaycontrol
1028
967
:body (b* (((vl-delaycontrol x) x)
1029
((mv warnings value-prime) (vl-expr-wildelim x.value elem warnings))
968
((mv warnings value-prime) (vl-expr-wildelim x.value ctx warnings))
1030
969
(x-prime (change-vl-delaycontrol x :value value-prime)))
1031
970
(mv warnings x-prime)))
1033
972
(def-vl-wildelim vl-evatom
1035
974
:body (b* (((vl-evatom x) x)
1036
((mv warnings expr-prime) (vl-expr-wildelim x.expr elem warnings))
975
((mv warnings expr-prime) (vl-expr-wildelim x.expr ctx warnings))
1037
976
(x-prime (change-vl-evatom x :expr expr-prime)))
1038
977
(mv warnings x-prime)))
1040
979
(def-vl-wildelim-list vl-evatomlist
1042
981
:element vl-evatom)
1044
983
(def-vl-wildelim vl-eventcontrol
1046
985
:body (b* (((vl-eventcontrol x) x)
1047
((mv warnings atoms-prime) (vl-evatomlist-wildelim x.atoms elem warnings))
986
((mv warnings atoms-prime) (vl-evatomlist-wildelim x.atoms ctx warnings))
1048
987
(x-prime (change-vl-eventcontrol x :atoms atoms-prime)))
1049
988
(mv warnings x-prime)))
1051
990
(def-vl-wildelim vl-repeateventcontrol
1053
992
:body (b* (((vl-repeateventcontrol x) x)
1054
((mv warnings expr-prime) (vl-expr-wildelim x.expr elem warnings))
1055
((mv warnings ctrl-prime) (vl-eventcontrol-wildelim x.ctrl elem warnings))
993
((mv warnings expr-prime) (vl-expr-wildelim x.expr ctx warnings))
994
((mv warnings ctrl-prime) (vl-eventcontrol-wildelim x.ctrl ctx warnings))
1056
995
(x-prime (change-vl-repeateventcontrol x
1057
996
:expr expr-prime
1058
997
:ctrl ctrl-prime)))
1059
998
(mv warnings x-prime)))
1061
1000
(def-vl-wildelim vl-delayoreventcontrol
1063
1002
:body (case (tag x)
1064
(:vl-delaycontrol (vl-delaycontrol-wildelim x elem warnings))
1065
(:vl-eventcontrol (vl-eventcontrol-wildelim x elem warnings))
1066
(otherwise (vl-repeateventcontrol-wildelim x elem warnings))))
1003
(:vl-delaycontrol (vl-delaycontrol-wildelim x ctx warnings))
1004
(:vl-eventcontrol (vl-eventcontrol-wildelim x ctx warnings))
1005
(otherwise (vl-repeateventcontrol-wildelim x ctx warnings))))
1068
1007
(def-vl-wildelim vl-maybe-delayoreventcontrol
1072
(vl-delayoreventcontrol-wildelim x elem warnings)
1011
(vl-delayoreventcontrol-wildelim x ctx warnings)
1073
1012
(mv warnings nil)))
1075
1014
(defthm vl-maybe-delayoreventcontrol-wildelim-under-iff
1076
(iff (mv-nth 1 (vl-maybe-delayoreventcontrol-wildelim x elem warnings))
1015
(iff (mv-nth 1 (vl-maybe-delayoreventcontrol-wildelim x ctx warnings))
1078
:hints(("Goal" :in-theory (enable vl-maybe-delayoreventcontrol-wildelim))))
1017
:hints(("Goal" :in-theory (enable (tau-system)
1018
vl-maybe-delayoreventcontrol-wildelim))))
1080
1020
(defines vl-stmt-wildelim
1082
1022
(define vl-stmt-wildelim
1084
(elem vl-modelement-p)
1085
1025
(warnings vl-warninglist-p))
1086
1026
:verify-guards nil
1087
1027
:measure (vl-stmt-count x)
1088
1028
:returns (mv (warnings vl-warninglist-p)
1089
1029
(new-x vl-stmt-p))
1090
1030
(b* ((x (vl-stmt-fix x))
1091
(elem (vl-modelement-fix elem))
1031
(ctx (vl-context-fix ctx))
1092
1032
(warnings (vl-warninglist-fix warnings))
1094
1034
((when (vl-atomicstmt-p x))
1107
1047
(mv warnings x-prime)))
1108
1048
(:vl-deassignstmt
1109
1049
(b* (((vl-deassignstmt x) x)
1110
((mv warnings lvalue-prime) (vl-expr-wildelim x.lvalue elem warnings))
1050
((mv warnings lvalue-prime) (vl-expr-wildelim x.lvalue ctx warnings))
1111
1051
(x-prime (change-vl-deassignstmt x :lvalue lvalue-prime)))
1112
1052
(mv warnings x-prime)))
1113
1053
(:vl-enablestmt
1114
1054
(b* (((vl-enablestmt x) x)
1115
((mv warnings id-prime) (vl-expr-wildelim x.id elem warnings))
1116
((mv warnings args-prime) (vl-exprlist-wildelim x.args elem warnings))
1055
((mv warnings id-prime) (vl-expr-wildelim x.id ctx warnings))
1056
((mv warnings args-prime) (vl-exprlist-wildelim x.args ctx warnings))
1117
1057
(x-prime (change-vl-enablestmt x
1119
1059
:args args-prime)))
1120
1060
(mv warnings x-prime)))
1121
1061
(:vl-disablestmt
1122
1062
(b* (((vl-disablestmt x) x)
1123
((mv warnings id-prime) (vl-expr-wildelim x.id elem warnings))
1063
((mv warnings id-prime) (vl-expr-wildelim x.id ctx warnings))
1124
1064
(x-prime (change-vl-disablestmt x :id id-prime)))
1125
1065
(mv warnings x-prime)))
1127
1067
(b* (((vl-eventtriggerstmt x) x)
1128
((mv warnings id-prime) (vl-expr-wildelim x.id elem warnings))
1068
((mv warnings id-prime) (vl-expr-wildelim x.id ctx warnings))
1129
1069
(x-prime (change-vl-eventtriggerstmt x :id id-prime)))
1130
1070
(mv warnings x-prime)))))
1174
1114
(def-vl-wildelim vl-initial
1175
1115
:body (b* (((vl-initial x) x)
1177
1117
((mv warnings stmt-prime)
1178
(vl-stmt-wildelim x.stmt elem warnings))
1118
(vl-stmt-wildelim x.stmt ctx warnings))
1179
1119
(x-prime (change-vl-initial x :stmt stmt-prime)))
1180
1120
(mv warnings x-prime)))
1182
1122
(def-vl-wildelim-list vl-initiallist :element vl-initial)
1124
(def-genblob-transform vl-genblob-wildelim ((warnings vl-warninglist-p))
1125
:returns ((warnings vl-warninglist-p))
1126
;; :verify-guards nil
1127
(b* (((vl-genblob x) x)
1129
((mv warnings assigns) (vl-assignlist-wildelim x.assigns warnings))
1130
((mv warnings modinsts) (vl-modinstlist-wildelim x.modinsts warnings))
1131
((mv warnings gateinsts) (vl-gateinstlist-wildelim x.gateinsts warnings))
1132
((mv warnings alwayses) (vl-alwayslist-wildelim x.alwayses warnings))
1133
((mv warnings initials) (vl-initiallist-wildelim x.initials warnings))
1134
((mv warnings portdecls) (vl-portdecllist-wildelim x.portdecls warnings))
1135
((mv warnings paramdecls) (vl-paramdecllist-wildelim x.paramdecls warnings))
1136
((mv warnings vardecls) (vl-vardecllist-wildelim x.vardecls warnings))
1138
((mv warnings generates) (vl-generates-wildelim x.generates warnings))
1139
((mv warnings ports) (vl-portlist-wildelim x.ports warnings)))
1147
:gateinsts gateinsts
1150
:portdecls portdecls
1151
:paramdecls paramdecls
1153
:generates generates)))
1154
:apply-to-generates vl-generates-wildelim)
1186
1158
(define vl-module-wildelim ((x vl-module-p))
1191
1163
((vl-module x) x)
1192
1164
(warnings x.warnings)
1193
((mv warnings assigns) (vl-assignlist-wildelim x.assigns warnings))
1194
((mv warnings modinsts) (vl-modinstlist-wildelim x.modinsts warnings))
1195
((mv warnings gateinsts) (vl-gateinstlist-wildelim x.gateinsts warnings))
1196
((mv warnings alwayses) (vl-alwayslist-wildelim x.alwayses warnings))
1197
((mv warnings initials) (vl-initiallist-wildelim x.initials warnings))
1198
((mv warnings ports) (vl-portlist-wildelim x.ports warnings))
1199
((mv warnings portdecls) (vl-portdecllist-wildelim x.portdecls warnings))
1200
((mv warnings paramdecls) (vl-paramdecllist-wildelim x.paramdecls warnings))
1201
((mv warnings netdecls) (vl-netdecllist-wildelim x.netdecls warnings))
1202
((mv warnings vardecls) (vl-vardecllist-wildelim x.vardecls warnings)))
1206
:gateinsts gateinsts
1210
:portdecls portdecls
1211
:paramdecls paramdecls
1214
:warnings warnings)))
1165
(genblob (vl-module->genblob x))
1166
((mv warnings new-genblob)
1167
(vl-genblob-wildelim genblob warnings))
1168
(mod (change-vl-module x :warnings warnings)))
1169
(vl-genblob->module new-genblob mod)))
1216
1171
(defprojection vl-modulelist-wildelim ((x vl-modulelist-p))
1217
1172
:returns (new-x vl-modulelist-p)