カミは死んだ

Paper Is Dead ... osz

はてなMarkdown記法でverilogがSyntax Hilightingされるようですね。

タイトルのとおりですが、

```

で囲いつつ、最初の```の後にverilogをつければOKのようです。

```verilog

verilogコードをここに書きます)

```

systemverilogには対応していないので、SVコードもひとまずverilogと指定すればよいですね。 てきとうなSVコードを張ってみます。 ⇒ classなどはHilightingされませんが十分見やすいと思いますた。

module bench #(
    parameter CONSTRAINT_ENABLE  = 0,
    parameter CONSTRAINT_DISABLE = 1
);

    // Randomization Example
    class packet_base;
        rand bit [7:0] header;
        rand bit [2:0] length;
        rand bit [7:0] payload_dynamic_array[];  // 8bit-wide dynamic array
        rand bit [7:0] payload; 

        // dist   : Control Generation Rate. Specify in Decimal (NOT hex)
        //                                  16:1 = 10:1
        // Generate header in 0, 1, 15 in the rate of 1:2:5.
        constraint const_header {header dist {[0:0]:=1
                                              , [1:1]:=2
                                              , [15:15]:=3 };
                                };
        // if, -> : Use condition based on the other value.
        //          Place ";" at each if/else if/else
        constraint const_length { if      (header==16) length==2;
                                  else if (header==2)  length==3;
                                  else    length==4;
                                };

        // Override new function
        function new;
            if (this.randomize()==1) begin
                // Generate dynamic array according to the length
                this.payload_dynamic_array = new[this.length];
                foreach (this.payload_dynamic_array[i])
                    this.payload_dynamic_array[i] = this.payload;

            end
            else
                $display("Randomization Failed.\n");
        endfunction

        function void set_all_constraint_mode(int mode);
            string temp_str;
            // mode=0 : DISABLE 
            // mode=1 : ENABLE 
            const_header.constraint_mode(mode);
            const_length.constraint_mode(mode);
            case (mode)
                // %m shows hierarchial class name
                0 : temp_str="disable";
                default : temp_str="enable";
            endcase
            $display("[%m] set_all_constraint %s", temp_str);

        endfunction

        function void display;
            $display("header:0x%02x, lendth:0x%02x, payload_dynamic_array.size:%1d"
                      , i_pkt.header, i_pkt.length
                      , i_pkt.payload_dynamic_array.size
                    );
            foreach (i_pkt.payload_dynamic_array[i])
                $display("  payload[%1d]=%02x", i, i_pkt.payload_dynamic_array[i]);
        endfunction
    endclass

    // Generate packet statiscally
    int num_of_list_of_pkt = 5;
    packet_base i_pkt;
    packet_base i_list_of_pkt[] = new[num_of_list_of_pkt];

    initial begin
        // Generate Packet w/ constraints
        $display("--- Generate w/ Constraints ---");
        foreach (i_list_of_pkt[i]) begin
            $display("----- i_pkt[%1d]", i);
            i_pkt = new;
            i_pkt.display();
            i_list_of_pkt[i] = i_pkt;
        end

        // Generate Packet w/o constraints
        $display("\n--- Generate w/o Constraints ---");
        i_pkt.set_all_constraint_mode(CONSTRAINT_DISABLE);

        foreach (i_list_of_pkt[i]) begin
            void'(i_pkt.randomize());  // Implicit void casting
            $display("--- i_pkt[%1d]", i);
            i_pkt.display();
            i_list_of_pkt[i] = i_pkt;
        end
    end 

    /*
   if (i_pkt.randomize() == 1) begin
       $display("Randomization Succeeded.\n");
   else
       $display("Randomization Failed.\n");
   */

endmodule