The advanced verification features (concurrent assertions, classes) cannot be run in ModelSim so we will use EDA Playground instead, which is a web application that will let you use these features via more powerful commercial simulators.
Projects are called "Playgrounds." The following are general setup and usage tips.
 Playgrounds → "Your Playgrounds" in the upper-right.
            Playgrounds → "Your Playgrounds" in the upper-right.
             
           Share tab (you may need to scroll upwards) at the bottom of the
            screen and add a title (and optional description).
            You can also change your sharing settings in the drop-down menu
            here – you will want "Public" if you want to share your code
            with others and "Private" otherwise.
            A sharing button
            (
            Share tab (you may need to scroll upwards) at the bottom of the
            screen and add a title (and optional description).
            You can also change your sharing settings in the drop-down menu
            here – you will want "Public" if you want to share your code
            with others and "Private" otherwise.
            A sharing button
            ( )
            will appear once you've saved your project and you can click it to
            generate/view your project's URL.
)
            will appear once you've saved your project and you can click it to
            generate/view your project's URL.
             
               Save button (one at the top, one in the
            Save button (one at the top, one in the
             Share tab) or press Ctrl+S on your keyboard.
            Share tab) or press Ctrl+S on your keyboard.
          $readmem), click the
             icon next to either the test bench.sv or design.sv
            tabs.
            icon next to either the test bench.sv or design.sv
            tabs.
          $dumpfile; $dumpvars; at the beginning of your test
            bench's test input initial block.
            This also means that the displayed waveforms won't persist across
            different sessions and enum values will be
            displayed instead of names (e.g., 00
            instead of S_idle).
           Run button or press Ctrl+Enter.
            However, you first need to select a few settings in the left side
            menu:
            Run button or press Ctrl+Enter.
            However, you first need to select a few settings in the left side
            menu:
             Profile → Profile.
                Profile → Profile.
               
                   
               
              req is "request" and gnt is "grant") and
            update the assertion failure message to be more descriptive.
          disable iff clause disables the
            property trigger when its expression is true.
            Add to the end of the existing test bench to
            verify this disabling feature.
            In your text file, indicate what period of simulation time
            corresponds to your added verification and briefly how you designed
            it.
          reset, that checks that
            req is never high for more than 3 consecutive clock
            cycles (hint: implicitly this means req is eventually
            de-asserted).
            Give it an appropriate name and error message and add to the end of
            the test bench to verify its behavior.
            
          program is basically a module for
                verification.
              this to
                differentiate between its argument and the class property, both
                of which have the name size.
              task is a more general function
                that uses ports instead of arguments and a return value.
                Tasks may also include timing statements.
              return
                keyword.
              class is defined inside
            of the program, it is within scope.
            Run the code and you should see the expected output:
            # Payload : b8 26 66 b6 c6 # Size of packet 5
$urandom_range().
              This is because the default random seed is always 1.
            new().
            The program can no longer see the class definition!
          `include "design.sv" (no
            semi-colon) to the top of testbench.sv.
            This will copy the text of the included file directly where you
            place it.
            Run the code and you should see the expected output.
          include
            line.
            Wrap a package definition (e.g., package pack;)
            around the class definition.
            Run the code now and the scoping error should be back.
          import pack::packet; to
            import the class definition from your package.
            Try placing this line in different parts of the code (e.g.,
            inside or outside the program, above or below the
            handle definition) to see what works and what doesn't.
          packet_buf to represent a
            circular buffer of 4-byte packet objects, whose
            specifications follow.
            It is recommended that you take liberal inspiration from the
            packet class.
            byte], and a read
                pointer [byte].
              next, which advances the
                read pointer by one, read, which returns the
                packet currently pointed to in the buffer, and
                print_buf, which prints the indices and contents
                of the entire buffer.
              packet_buf of size 3, call print_buf, and
            then use next and read to print out every
            packet individually, including the first one twice (to verify
            circular behavior).
          program
            that instantiates a PrimeDie4 object and sets its
            random seed to 371.
            Then, in a repeat (30) block, it should randomize the
            object and call its display task (i.e., your
            output should show 30 different sets of randomized die
            faces).
            randomize.
                Upon failure, call $fatal with a first argument of
                1 and appropriate message.
              c_uniq that specifies that
            none of the 4 sides can have the same value.
          c_bad
            conflicts with c_uniq.
            One benefit to defining multiple constraint blocks is that you can
            manually enable and disable them individually using the syntax
            <handle>.<constraint_name>.constraint_mode(<0/1>);.
            Leave the code for c_bad where it is, but disable it
            in your test bench before your call to randomize.
          prime_low[] and
            prime_high[] to create additional constraints that
            achieve the following behaviors:
            s4 should be any of the values in
                prime_high[] with equal probability.
              s2 and s3 should be any of the
                prime numbers in range with equal probability.
              s1 being any of the numbers
                in prime_low[] should be three times
                higher than the probability of s1 being any of the
                numbers in prime_high[].
              roll that will randomly pick a number
            between 1 and 4 and then return the value of the corresponding side
            (s1-s4).
          PrimeDie4, you roll that die 5 times
            and output the result (e.g., "Rolled a 3").
          Due by the end of the deadline day, submit your solutions (e.g., EDA Playground URLs, text) in the provided text file hw6.txt (files) to .
packet_buf implementation (part g)c_uniq,
                  c_bad, s1-s4
                roll method implemented