HDLRuby 2.6.18 → 2.6.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/lib/HDLRuby/hdr_samples/with_reduce.rb +38 -0
 - data/lib/HDLRuby/hdr_samples/with_str2value.rb +14 -0
 - data/lib/HDLRuby/hdr_samples/with_to_a.rb +90 -0
 - data/lib/HDLRuby/hruby_high.rb +5 -1
 - data/lib/HDLRuby/hruby_low2c.rb +7 -5
 - data/lib/HDLRuby/hruby_low_casts_without_expression.rb +78 -55
 - data/lib/HDLRuby/hruby_low_mutable.rb +21 -0
 - data/lib/HDLRuby/hruby_verilog_name.rb +24 -52
 - data/lib/HDLRuby/sim/hruby_sim.h +4 -2
 - data/lib/HDLRuby/sim/hruby_sim_calc.c +8 -4
 - data/lib/HDLRuby/sim/hruby_sim_core.c +5 -3
 - data/lib/HDLRuby/version.rb +1 -1
 - metadata +5 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 935f56ddd3e2db8f8cd72ae2d8156af2dbf9c1961be139a1b2c4f27b2e0d483c
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 5a6d8a611f8cf6e0e9ae859721a26b2940c569436479f74f01cced46b741d810
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: c2df833c800000df44afdd2178414f6a282b4f597ec6d6b000a26e15ddff990f3ad0784e8d93d1dc75c4948f638824ea12a731340e896c8eb976ad83a61ff6eb
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 84b29e842be879ed848aeb475f80cc34654a31d0ca0fbfa45093082374dca6a90ad8dce3b1774ae339d1c962fcf63a81e5821bddd924ea6be84f2a6f8b566e84
         
     | 
| 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # A benchmark for testing the enumarable properties of expression (reduce).
         
     | 
| 
      
 4 
     | 
    
         
            +
            system :with_reduce_bench do
         
     | 
| 
      
 5 
     | 
    
         
            +
                [8].inner :val,:res
         
     | 
| 
      
 6 
     | 
    
         
            +
                [64].inner :val64
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                timed do
         
     | 
| 
      
 9 
     | 
    
         
            +
                    val <= _01101010
         
     | 
| 
      
 10 
     | 
    
         
            +
                    res <= val.reduce(_00000000,:+)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 12 
     | 
    
         
            +
                    val <= _01010010
         
     | 
| 
      
 13 
     | 
    
         
            +
                    res <= val.reduce(_00000000,:+)
         
     | 
| 
      
 14 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 15 
     | 
    
         
            +
                    val <= _01101111
         
     | 
| 
      
 16 
     | 
    
         
            +
                    res <= val.reduce(_00000000,:+)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 18 
     | 
    
         
            +
                    val64 <= _0110101001101010011010100110101001101010011010100110101001101010
         
     | 
| 
      
 19 
     | 
    
         
            +
                    res <= val64.reduce(_00000000,:+)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 21 
     | 
    
         
            +
                    res <= val64[7..0]
         
     | 
| 
      
 22 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 23 
     | 
    
         
            +
                    res <= res.reduce(_00000000,:+)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 25 
     | 
    
         
            +
                    res <= val64[63..60]
         
     | 
| 
      
 26 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 27 
     | 
    
         
            +
                    res <= res.reduce(_00000000,:+)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 29 
     | 
    
         
            +
                    val64 <= ~(val64 ^ val64)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    res <= val64.reduce(_00000000,:+)
         
     | 
| 
      
 31 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 32 
     | 
    
         
            +
                    val64[0] <= _0
         
     | 
| 
      
 33 
     | 
    
         
            +
                    val64[3] <= _0
         
     | 
| 
      
 34 
     | 
    
         
            +
                    val64[63] <= _0
         
     | 
| 
      
 35 
     | 
    
         
            +
                    res <= val64.reduce(_00000000,:+)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,90 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            system :four2eight do
         
     | 
| 
      
 3 
     | 
    
         
            +
                [4].input :four
         
     | 
| 
      
 4 
     | 
    
         
            +
                output :o0, :o1, :o2, :o3, :o4, :o5, :o6, :o7
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                o0 <= four[0]; o1 <= four[1]; o2 <= four[2]; o3 <= four[3]
         
     | 
| 
      
 7 
     | 
    
         
            +
                o4 <= four[0]; o5 <= four[1]; o6 <= four[2]; o7 <= four[3]
         
     | 
| 
      
 8 
     | 
    
         
            +
            end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            system :four2sixfour do
         
     | 
| 
      
 11 
     | 
    
         
            +
                [4].input :four
         
     | 
| 
      
 12 
     | 
    
         
            +
                output :o00, :o01, :o02, :o03, :o04, :o05, :o06, :o07,
         
     | 
| 
      
 13 
     | 
    
         
            +
                       :o08, :o09, :o0A, :o0B, :o0C, :o0D, :o0E, :o0F,
         
     | 
| 
      
 14 
     | 
    
         
            +
                       :o10, :o11, :o12, :o13, :o14, :o15, :o16, :o17,
         
     | 
| 
      
 15 
     | 
    
         
            +
                       :o18, :o19, :o1A, :o1B, :o1C, :o1D, :o1E, :o1F,
         
     | 
| 
      
 16 
     | 
    
         
            +
                       :o20, :o21, :o22, :o23, :o24, :o25, :o26, :o27,
         
     | 
| 
      
 17 
     | 
    
         
            +
                       :o28, :o29, :o2A, :o2B, :o2C, :o2D, :o2E, :o2F,
         
     | 
| 
      
 18 
     | 
    
         
            +
                       :o30, :o31, :o32, :o33, :o34, :o35, :o36, :o37,
         
     | 
| 
      
 19 
     | 
    
         
            +
                       :o38, :o39, :o3A, :o3B, :o3C, :o3D, :o3E, :o3F
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                o00 <= four[0]; o01 <= four[1]; o02 <= four[2]; o03 <= four[3]
         
     | 
| 
      
 23 
     | 
    
         
            +
                o04 <= four[0]; o05 <= four[1]; o06 <= four[2]; o07 <= four[3]
         
     | 
| 
      
 24 
     | 
    
         
            +
                o08 <= four[0]; o09 <= four[1]; o0A <= four[2]; o0B <= four[3]
         
     | 
| 
      
 25 
     | 
    
         
            +
                o0C <= four[0]; o0D <= four[1]; o0E <= four[2]; o0F <= four[3]
         
     | 
| 
      
 26 
     | 
    
         
            +
                o10 <= four[0]; o11 <= four[1]; o12 <= four[2]; o13 <= four[3]
         
     | 
| 
      
 27 
     | 
    
         
            +
                o14 <= four[0]; o15 <= four[1]; o16 <= four[2]; o17 <= four[3]
         
     | 
| 
      
 28 
     | 
    
         
            +
                o18 <= four[0]; o19 <= four[1]; o1A <= four[2]; o1B <= four[3]
         
     | 
| 
      
 29 
     | 
    
         
            +
                o1C <= four[0]; o1D <= four[1]; o1E <= four[2]; o1F <= four[3]
         
     | 
| 
      
 30 
     | 
    
         
            +
                o20 <= four[0]; o21 <= four[1]; o22 <= four[2]; o23 <= four[3]
         
     | 
| 
      
 31 
     | 
    
         
            +
                o24 <= four[0]; o25 <= four[1]; o26 <= four[2]; o27 <= four[3]
         
     | 
| 
      
 32 
     | 
    
         
            +
                o28 <= four[0]; o29 <= four[1]; o2A <= four[2]; o2B <= four[3]
         
     | 
| 
      
 33 
     | 
    
         
            +
                o2C <= four[0]; o2D <= four[1]; o2E <= four[2]; o2F <= four[3]
         
     | 
| 
      
 34 
     | 
    
         
            +
                o30 <= four[0]; o31 <= four[1]; o32 <= four[2]; o33 <= four[3]
         
     | 
| 
      
 35 
     | 
    
         
            +
                o34 <= four[0]; o35 <= four[1]; o36 <= four[2]; o37 <= four[3]
         
     | 
| 
      
 36 
     | 
    
         
            +
                o38 <= four[0]; o39 <= four[1]; o3A <= four[2]; o3B <= four[3]
         
     | 
| 
      
 37 
     | 
    
         
            +
                o3C <= four[0]; o3D <= four[1]; o3E <= four[2]; o3F <= four[3]
         
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            # A benchmark for testing some enumarable properties of expression (to_a).
         
     | 
| 
      
 43 
     | 
    
         
            +
            system :with_to_a_bench do
         
     | 
| 
      
 44 
     | 
    
         
            +
                [4].inner :four
         
     | 
| 
      
 45 
     | 
    
         
            +
                [8].inner :val, :res, :eight
         
     | 
| 
      
 46 
     | 
    
         
            +
                [64].inner :val64, :res64, :sixfour
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                vals = val.to_a
         
     | 
| 
      
 49 
     | 
    
         
            +
                val64s = val64.to_a
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                four2eight(:my_four2eight).(four,*(eight.to_a.reverse))
         
     | 
| 
      
 52 
     | 
    
         
            +
                four2sixfour(:my_four2sixfour).(four,*(sixfour.to_a.reverse))
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                timed do
         
     | 
| 
      
 55 
     | 
    
         
            +
                    val <= _01101010
         
     | 
| 
      
 56 
     | 
    
         
            +
                    res <= vals.reverse
         
     | 
| 
      
 57 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 58 
     | 
    
         
            +
                    val64 <= _0110101001101010011010100110101001101010011010100110101001101010
         
     | 
| 
      
 59 
     | 
    
         
            +
                    res64 <= val64s.reverse
         
     | 
| 
      
 60 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 61 
     | 
    
         
            +
                    val <= _00000000
         
     | 
| 
      
 62 
     | 
    
         
            +
                    val64 <= _0000000000000000000000000000000000000000000000000000000000000000
         
     | 
| 
      
 63 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 64 
     | 
    
         
            +
                    vals.each.with_index do |v,i|
         
     | 
| 
      
 65 
     | 
    
         
            +
                        v <= (i/2) & _1
         
     | 
| 
      
 66 
     | 
    
         
            +
                    end
         
     | 
| 
      
 67 
     | 
    
         
            +
                    res <= val
         
     | 
| 
      
 68 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 69 
     | 
    
         
            +
                    val64s.each.with_index do |v,i|
         
     | 
| 
      
 70 
     | 
    
         
            +
                        v <= (i/2) & _1
         
     | 
| 
      
 71 
     | 
    
         
            +
                    end
         
     | 
| 
      
 72 
     | 
    
         
            +
                    res64 <= val64
         
     | 
| 
      
 73 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 74 
     | 
    
         
            +
                    val <= _01010011
         
     | 
| 
      
 75 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 76 
     | 
    
         
            +
                    8.times do |i|
         
     | 
| 
      
 77 
     | 
    
         
            +
                        val64s[i] <= val[i]
         
     | 
| 
      
 78 
     | 
    
         
            +
                        val64s[i+32] <= val[i]
         
     | 
| 
      
 79 
     | 
    
         
            +
                        val64s[i+56] <= val[i]
         
     | 
| 
      
 80 
     | 
    
         
            +
                    end
         
     | 
| 
      
 81 
     | 
    
         
            +
                    res64 <= val64
         
     | 
| 
      
 82 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 83 
     | 
    
         
            +
                    four <= _0000
         
     | 
| 
      
 84 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 85 
     | 
    
         
            +
                    four <= _0001
         
     | 
| 
      
 86 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 87 
     | 
    
         
            +
                    four <= _1100
         
     | 
| 
      
 88 
     | 
    
         
            +
                    !10.ns
         
     | 
| 
      
 89 
     | 
    
         
            +
                end
         
     | 
| 
      
 90 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/HDLRuby/hruby_high.rb
    CHANGED
    
    | 
         @@ -2499,7 +2499,11 @@ module HDLRuby::High 
     | 
|
| 
       2499 
2499 
     | 
    
         | 
| 
       2500 
2500 
     | 
    
         
             
                    # Casts as +type+.
         
     | 
| 
       2501 
2501 
     | 
    
         
             
                    def as(type)
         
     | 
| 
       2502 
     | 
    
         
            -
                         
     | 
| 
      
 2502 
     | 
    
         
            +
                        if (self.parent)
         
     | 
| 
      
 2503 
     | 
    
         
            +
                            return Cast.new(type.to_type,self.to_expr)
         
     | 
| 
      
 2504 
     | 
    
         
            +
                        else
         
     | 
| 
      
 2505 
     | 
    
         
            +
                            return Cast.new(type.to_type,self)
         
     | 
| 
      
 2506 
     | 
    
         
            +
                        end
         
     | 
| 
       2503 
2507 
     | 
    
         
             
                    end
         
     | 
| 
       2504 
2508 
     | 
    
         | 
| 
       2505 
2509 
     | 
    
         
             
                    # Casts to a bit vector type.
         
     | 
    
        data/lib/HDLRuby/hruby_low2c.rb
    CHANGED
    
    | 
         @@ -1575,9 +1575,10 @@ module HDLRuby::Low 
     | 
|
| 
       1575 
1575 
     | 
    
         
             
                        if str =~ /^[01]+$/ && str.length <= 64 then
         
     | 
| 
       1576 
1576 
     | 
    
         
             
                            # Yes, generate a numeral value.
         
     | 
| 
       1577 
1577 
     | 
    
         
             
                            res << " " * (level+1)*3
         
     | 
| 
       1578 
     | 
    
         
            -
                            res << "static unsigned long long data[] = { "
         
     | 
| 
      
 1578 
     | 
    
         
            +
                            # res << "static unsigned long long data[] = { "
         
     | 
| 
      
 1579 
     | 
    
         
            +
                            res << "static unsigned int data[] = { "
         
     | 
| 
       1579 
1580 
     | 
    
         
             
                            res << str.scan(/.{1,#{Low2C.int_width}}/m).map do |sub|
         
     | 
| 
       1580 
     | 
    
         
            -
                                sub.to_i(2).to_s + "ULL"
         
     | 
| 
      
 1581 
     | 
    
         
            +
                                sub.to_i(2).to_s # + "ULL"
         
     | 
| 
       1581 
1582 
     | 
    
         
             
                            end.join(",")
         
     | 
| 
       1582 
1583 
     | 
    
         
             
                            res << " };\n"
         
     | 
| 
       1583 
1584 
     | 
    
         
             
                            # Create the value.
         
     | 
| 
         @@ -1930,11 +1931,10 @@ module HDLRuby::Low 
     | 
|
| 
       1930 
1931 
     | 
    
         
             
                        res << "ref = #{self.ref.to_c(level+2)};\n"
         
     | 
| 
       1931 
1932 
     | 
    
         
             
                        # Compute the index.
         
     | 
| 
       1932 
1933 
     | 
    
         
             
                        res << (" " * ((level+1)*3))
         
     | 
| 
       1933 
     | 
    
         
            -
                        # res << "idx = read64(#{self.index.to_c(level+2)});\n"
         
     | 
| 
       1934 
1934 
     | 
    
         
             
                        res << "idx = value2integer(#{self.index.to_c(level+2)});\n"
         
     | 
| 
       1935 
1935 
     | 
    
         
             
                        # Make the access.
         
     | 
| 
       1936 
1936 
     | 
    
         
             
                        res << (" " * ((level+1)*3))
         
     | 
| 
       1937 
     | 
    
         
            -
                        #  
     | 
| 
      
 1937 
     | 
    
         
            +
                        # puts "self.type.width=#{self.type.width}"
         
     | 
| 
       1938 
1938 
     | 
    
         
             
                        res << "dst = read_range(ref,idx,idx,#{self.type.to_c(level)},dst);\n"
         
     | 
| 
       1939 
1939 
     | 
    
         
             
                        # Restore the state of the value pool.
         
     | 
| 
       1940 
1940 
     | 
    
         
             
                        res << (" " * ((level+1)*3))
         
     | 
| 
         @@ -1947,7 +1947,9 @@ module HDLRuby::Low 
     | 
|
| 
       1947 
1947 
     | 
    
         
             
                    # Generates the C text for reference as left value to a signal.
         
     | 
| 
       1948 
1948 
     | 
    
         
             
                    # +level+ is the hierarchical level of the object.
         
     | 
| 
       1949 
1949 
     | 
    
         
             
                    def to_c_signal(level = 0)
         
     | 
| 
      
 1950 
     | 
    
         
            +
                        # puts "to_c_signal for RefIndex"
         
     | 
| 
       1950 
1951 
     | 
    
         
             
                        return "make_ref_rangeS(#{self.ref.to_c_signal(level)}," +
         
     | 
| 
      
 1952 
     | 
    
         
            +
                            "#{self.type.to_c(level)}," + 
         
     | 
| 
       1951 
1953 
     | 
    
         
             
                            "value2integer(#{self.index.to_c(level)}),value2integer(#{self.index.to_c(level)}))"
         
     | 
| 
       1952 
1954 
     | 
    
         
             
                    end
         
     | 
| 
       1953 
1955 
     | 
    
         
             
                end
         
     | 
| 
         @@ -1985,7 +1987,7 @@ module HDLRuby::Low 
     | 
|
| 
       1985 
1987 
     | 
    
         
             
                        # Make the access.
         
     | 
| 
       1986 
1988 
     | 
    
         
             
                        res << (" " * ((level+1)*3))
         
     | 
| 
       1987 
1989 
     | 
    
         
             
                        # res << "dst = #{command}_range(ref,first,last,#{self.ref.type.base.to_c(level)},dst);\n"
         
     | 
| 
       1988 
     | 
    
         
            -
                        # puts " 
     | 
| 
      
 1990 
     | 
    
         
            +
                        # puts "#{command}_range with first=#{self.range.first} and last=#{self.range.last}"
         
     | 
| 
       1989 
1991 
     | 
    
         
             
                        res << "dst = #{command}_range(ref,first,last,#{self.type.base.to_c(level)},dst);\n"
         
     | 
| 
       1990 
1992 
     | 
    
         
             
                        # Restore the state of the value pool.
         
     | 
| 
       1991 
1993 
     | 
    
         
             
                        res << (" " * ((level+1)*3))
         
     | 
| 
         @@ -56,9 +56,9 @@ module HDLRuby::Low 
     | 
|
| 
       56 
56 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       57 
57 
     | 
    
         
             
                    def casts_without_expression!
         
     | 
| 
       58 
58 
     | 
    
         
             
                        # Apply on the left value.
         
     | 
| 
       59 
     | 
    
         
            -
                        self.set_left!(self.left.casts_without_expression)
         
     | 
| 
      
 59 
     | 
    
         
            +
                        self.set_left!(self.left.casts_without_expression!)
         
     | 
| 
       60 
60 
     | 
    
         
             
                        # Apply on the right value.
         
     | 
| 
       61 
     | 
    
         
            -
                        self.set_right!(self.right.casts_without_expression)
         
     | 
| 
      
 61 
     | 
    
         
            +
                        self.set_right!(self.right.casts_without_expression!)
         
     | 
| 
       62 
62 
     | 
    
         
             
                        return self
         
     | 
| 
       63 
63 
     | 
    
         
             
                    end
         
     | 
| 
       64 
64 
     | 
    
         
             
                end
         
     | 
| 
         @@ -71,7 +71,7 @@ module HDLRuby::Low 
     | 
|
| 
       71 
71 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       72 
72 
     | 
    
         
             
                    def casts_without_expression!
         
     | 
| 
       73 
73 
     | 
    
         
             
                        # Apply on the arguments.
         
     | 
| 
       74 
     | 
    
         
            -
                        self.map_args!(&:casts_without_expression)
         
     | 
| 
      
 74 
     | 
    
         
            +
                        self.map_args!(&:casts_without_expression!)
         
     | 
| 
       75 
75 
     | 
    
         
             
                        return self
         
     | 
| 
       76 
76 
     | 
    
         
             
                    end
         
     | 
| 
       77 
77 
     | 
    
         
             
                end
         
     | 
| 
         @@ -84,12 +84,12 @@ module HDLRuby::Low 
     | 
|
| 
       84 
84 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       85 
85 
     | 
    
         
             
                    def casts_without_expression!
         
     | 
| 
       86 
86 
     | 
    
         
             
                        # Apply on the condition.
         
     | 
| 
       87 
     | 
    
         
            -
                        self.set_condition!(self.condition.casts_without_expression)
         
     | 
| 
      
 87 
     | 
    
         
            +
                        self.set_condition!(self.condition.casts_without_expression!)
         
     | 
| 
       88 
88 
     | 
    
         
             
                        # Apply on the yes.
         
     | 
| 
       89 
89 
     | 
    
         
             
                        self.yes.casts_without_expression!
         
     | 
| 
       90 
90 
     | 
    
         
             
                        # Apply on the noifs.
         
     | 
| 
       91 
91 
     | 
    
         
             
                        @noifs.map! do |cond,stmnt|
         
     | 
| 
       92 
     | 
    
         
            -
                            [cond.casts_without_expression 
     | 
| 
      
 92 
     | 
    
         
            +
                            [cond.casts_without_expression!,stmnt.casts_without_expression!]
         
     | 
| 
       93 
93 
     | 
    
         
             
                        end
         
     | 
| 
       94 
94 
     | 
    
         
             
                        # Apply on the no if any.
         
     | 
| 
       95 
95 
     | 
    
         
             
                        self.no.casts_without_expression! if self.no
         
     | 
| 
         @@ -104,7 +104,7 @@ module HDLRuby::Low 
     | 
|
| 
       104 
104 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       105 
105 
     | 
    
         
             
                    def casts_without_expression!
         
     | 
| 
       106 
106 
     | 
    
         
             
                        # Apply on the match.
         
     | 
| 
       107 
     | 
    
         
            -
                        self.set_match!(self.match.casts_without_expression)
         
     | 
| 
      
 107 
     | 
    
         
            +
                        self.set_match!(self.match.casts_without_expression!)
         
     | 
| 
       108 
108 
     | 
    
         
             
                        # Apply on the statement.
         
     | 
| 
       109 
109 
     | 
    
         
             
                        self.statement.casts_without_expression!
         
     | 
| 
       110 
110 
     | 
    
         
             
                        return self
         
     | 
| 
         @@ -120,7 +120,7 @@ module HDLRuby::Low 
     | 
|
| 
       120 
120 
     | 
    
         
             
                    def casts_without_expression!
         
     | 
| 
       121 
121 
     | 
    
         
             
                        # No need to apply on the value!
         
     | 
| 
       122 
122 
     | 
    
         
             
                        # Apply on the value.
         
     | 
| 
       123 
     | 
    
         
            -
                        self.set_value!(self.value.casts_without_expression)
         
     | 
| 
      
 123 
     | 
    
         
            +
                        self.set_value!(self.value.casts_without_expression!)
         
     | 
| 
       124 
124 
     | 
    
         
             
                        # Apply on the whens.
         
     | 
| 
       125 
125 
     | 
    
         
             
                        self.each_when(&:casts_without_expression!)
         
     | 
| 
       126 
126 
     | 
    
         
             
                        # Apply on the default if any.
         
     | 
| 
         @@ -169,9 +169,10 @@ module HDLRuby::Low 
     | 
|
| 
       169 
169 
     | 
    
         
             
                #  expressions from cast.
         
     | 
| 
       170 
170 
     | 
    
         
             
                class Value
         
     | 
| 
       171 
171 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       172 
     | 
    
         
            -
                    def casts_without_expression
         
     | 
| 
       173 
     | 
    
         
            -
                        # Simple clones.
         
     | 
| 
       174 
     | 
    
         
            -
                        return self.clone
         
     | 
| 
      
 172 
     | 
    
         
            +
                    def casts_without_expression!
         
     | 
| 
      
 173 
     | 
    
         
            +
                        # # Simple clones.
         
     | 
| 
      
 174 
     | 
    
         
            +
                        # return self.clone
         
     | 
| 
      
 175 
     | 
    
         
            +
                        return self
         
     | 
| 
       175 
176 
     | 
    
         
             
                    end
         
     | 
| 
       176 
177 
     | 
    
         
             
                end
         
     | 
| 
       177 
178 
     | 
    
         | 
| 
         @@ -180,9 +181,10 @@ module HDLRuby::Low 
     | 
|
| 
       180 
181 
     | 
    
         
             
                #  expressions from cast.
         
     | 
| 
       181 
182 
     | 
    
         
             
                class Cast
         
     | 
| 
       182 
183 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       183 
     | 
    
         
            -
                    def casts_without_expression
         
     | 
| 
      
 184 
     | 
    
         
            +
                    def casts_without_expression!
         
     | 
| 
       184 
185 
     | 
    
         
             
                        # Recurse on the child.
         
     | 
| 
       185 
     | 
    
         
            -
                        nchild = self.child.casts_without_expression
         
     | 
| 
      
 186 
     | 
    
         
            +
                        nchild = self.child.casts_without_expression!
         
     | 
| 
      
 187 
     | 
    
         
            +
                        nchild.parent = nil
         
     | 
| 
       186 
188 
     | 
    
         
             
                        # Process the cast.
         
     | 
| 
       187 
189 
     | 
    
         
             
                        unless (nchild.is_a?(Ref)) then
         
     | 
| 
       188 
190 
     | 
    
         
             
                            # Need to extract the child.
         
     | 
| 
         @@ -221,10 +223,11 @@ module HDLRuby::Low 
     | 
|
| 
       221 
223 
     | 
    
         
             
                class Unary
         
     | 
| 
       222 
224 
     | 
    
         | 
| 
       223 
225 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       224 
     | 
    
         
            -
                    def casts_without_expression
         
     | 
| 
       225 
     | 
    
         
            -
                        # Recurse on the sub node.
         
     | 
| 
       226 
     | 
    
         
            -
                        return Unary.new(self.type,self.operator,
         
     | 
| 
       227 
     | 
    
         
            -
             
     | 
| 
      
 226 
     | 
    
         
            +
                    def casts_without_expression!
         
     | 
| 
      
 227 
     | 
    
         
            +
                        # # Recurse on the sub node.
         
     | 
| 
      
 228 
     | 
    
         
            +
                        # return Unary.new(self.type,self.operator,
         
     | 
| 
      
 229 
     | 
    
         
            +
                        #                  self.child.casts_without_expression)
         
     | 
| 
      
 230 
     | 
    
         
            +
                        self.set_child!(self.child.casts_without_expression!)
         
     | 
| 
       228 
231 
     | 
    
         
             
                        return self
         
     | 
| 
       229 
232 
     | 
    
         
             
                    end
         
     | 
| 
       230 
233 
     | 
    
         
             
                end
         
     | 
| 
         @@ -235,11 +238,14 @@ module HDLRuby::Low 
     | 
|
| 
       235 
238 
     | 
    
         
             
                class Binary
         
     | 
| 
       236 
239 
     | 
    
         | 
| 
       237 
240 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       238 
     | 
    
         
            -
                    def casts_without_expression
         
     | 
| 
       239 
     | 
    
         
            -
                        # Recurse on the sub nodes.
         
     | 
| 
       240 
     | 
    
         
            -
                        return Binary.new(self.type,self.operator,
         
     | 
| 
       241 
     | 
    
         
            -
             
     | 
| 
       242 
     | 
    
         
            -
             
     | 
| 
      
 241 
     | 
    
         
            +
                    def casts_without_expression!
         
     | 
| 
      
 242 
     | 
    
         
            +
                        # # Recurse on the sub nodes.
         
     | 
| 
      
 243 
     | 
    
         
            +
                        # return Binary.new(self.type,self.operator,
         
     | 
| 
      
 244 
     | 
    
         
            +
                        #                   self.left.casts_without_expression,
         
     | 
| 
      
 245 
     | 
    
         
            +
                        #                   self.right.casts_without_expression)
         
     | 
| 
      
 246 
     | 
    
         
            +
                        self.set_left!(self.left.casts_without_expression!)
         
     | 
| 
      
 247 
     | 
    
         
            +
                        self.set_right!(self.right.casts_without_expression!)
         
     | 
| 
      
 248 
     | 
    
         
            +
                        return self
         
     | 
| 
       243 
249 
     | 
    
         
             
                    end
         
     | 
| 
       244 
250 
     | 
    
         
             
                end
         
     | 
| 
       245 
251 
     | 
    
         | 
| 
         @@ -250,13 +256,15 @@ module HDLRuby::Low 
     | 
|
| 
       250 
256 
     | 
    
         
             
                class Select
         
     | 
| 
       251 
257 
     | 
    
         | 
| 
       252 
258 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       253 
     | 
    
         
            -
                    def casts_without_expression
         
     | 
| 
      
 259 
     | 
    
         
            +
                    def casts_without_expression!
         
     | 
| 
       254 
260 
     | 
    
         
             
                        # Recurse on the sub node.
         
     | 
| 
       255 
     | 
    
         
            -
                        return Select.new(self.type,"?", 
         
     | 
| 
       256 
     | 
    
         
            -
             
     | 
| 
       257 
     | 
    
         
            -
             
     | 
| 
       258 
     | 
    
         
            -
             
     | 
| 
       259 
     | 
    
         
            -
             
     | 
| 
      
 261 
     | 
    
         
            +
                        # return Select.new(self.type,"?", 
         
     | 
| 
      
 262 
     | 
    
         
            +
                        #                   self.select.casts_without_expression,
         
     | 
| 
      
 263 
     | 
    
         
            +
                        #                   *self.each_choice.map do |choice|
         
     | 
| 
      
 264 
     | 
    
         
            +
                        #                       choice.casts_without_expression
         
     | 
| 
      
 265 
     | 
    
         
            +
                        #                   end )
         
     | 
| 
      
 266 
     | 
    
         
            +
                        self.set_select!(self.select.casts_without_expression!)
         
     | 
| 
      
 267 
     | 
    
         
            +
                        sef.map_choices! { |choice| choice.casts_without_expression! }
         
     | 
| 
       260 
268 
     | 
    
         
             
                        return self
         
     | 
| 
       261 
269 
     | 
    
         
             
                    end
         
     | 
| 
       262 
270 
     | 
    
         
             
                end
         
     | 
| 
         @@ -266,11 +274,13 @@ module HDLRuby::Low 
     | 
|
| 
       266 
274 
     | 
    
         
             
                #  in assignments to select operators.
         
     | 
| 
       267 
275 
     | 
    
         
             
                class Concat
         
     | 
| 
       268 
276 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       269 
     | 
    
         
            -
                    def casts_without_expression
         
     | 
| 
      
 277 
     | 
    
         
            +
                    def casts_without_expression!
         
     | 
| 
       270 
278 
     | 
    
         
             
                        # Recurse on the sub expressions.
         
     | 
| 
       271 
     | 
    
         
            -
                        return Concat.new(self.type,self.each_expression.map do |expr|
         
     | 
| 
       272 
     | 
    
         
            -
             
     | 
| 
       273 
     | 
    
         
            -
                        end )
         
     | 
| 
      
 279 
     | 
    
         
            +
                        # return Concat.new(self.type,self.each_expression.map do |expr|
         
     | 
| 
      
 280 
     | 
    
         
            +
                        #     expr.casts_without_expression
         
     | 
| 
      
 281 
     | 
    
         
            +
                        # end )
         
     | 
| 
      
 282 
     | 
    
         
            +
                        self.map_expressions! {|expr| expr.casts_without_expression! }
         
     | 
| 
      
 283 
     | 
    
         
            +
                        return self
         
     | 
| 
       274 
284 
     | 
    
         
             
                    end
         
     | 
| 
       275 
285 
     | 
    
         
             
                end
         
     | 
| 
       276 
286 
     | 
    
         | 
| 
         @@ -279,11 +289,13 @@ module HDLRuby::Low 
     | 
|
| 
       279 
289 
     | 
    
         
             
                #  in assignments to select operators.
         
     | 
| 
       280 
290 
     | 
    
         
             
                class RefConcat
         
     | 
| 
       281 
291 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       282 
     | 
    
         
            -
                    def casts_without_expression
         
     | 
| 
       283 
     | 
    
         
            -
                        # Recurse on the sub references.
         
     | 
| 
       284 
     | 
    
         
            -
                        return RefConcat.new(self.type,self.each_expression.map do |expr|
         
     | 
| 
       285 
     | 
    
         
            -
             
     | 
| 
       286 
     | 
    
         
            -
                        end )
         
     | 
| 
      
 292 
     | 
    
         
            +
                    def casts_without_expression!
         
     | 
| 
      
 293 
     | 
    
         
            +
                        # # Recurse on the sub references.
         
     | 
| 
      
 294 
     | 
    
         
            +
                        # return RefConcat.new(self.type,self.each_expression.map do |expr|
         
     | 
| 
      
 295 
     | 
    
         
            +
                        #     expr.casts_without_expression
         
     | 
| 
      
 296 
     | 
    
         
            +
                        # end )
         
     | 
| 
      
 297 
     | 
    
         
            +
                        self.map_expressions! {|expr| expr.casts_without_expression! }
         
     | 
| 
      
 298 
     | 
    
         
            +
                        return self
         
     | 
| 
       287 
299 
     | 
    
         
             
                    end
         
     | 
| 
       288 
300 
     | 
    
         
             
                end
         
     | 
| 
       289 
301 
     | 
    
         | 
| 
         @@ -292,11 +304,14 @@ module HDLRuby::Low 
     | 
|
| 
       292 
304 
     | 
    
         
             
                #  in assignments to select operators.
         
     | 
| 
       293 
305 
     | 
    
         
             
                class RefIndex
         
     | 
| 
       294 
306 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       295 
     | 
    
         
            -
                    def casts_without_expression
         
     | 
| 
      
 307 
     | 
    
         
            +
                    def casts_without_expression!
         
     | 
| 
       296 
308 
     | 
    
         
             
                        # Recurse on the sub references.
         
     | 
| 
       297 
     | 
    
         
            -
                        return RefIndex.new(self.type,
         
     | 
| 
       298 
     | 
    
         
            -
             
     | 
| 
       299 
     | 
    
         
            -
             
     | 
| 
      
 309 
     | 
    
         
            +
                        # return RefIndex.new(self.type,
         
     | 
| 
      
 310 
     | 
    
         
            +
                        #                     self.ref.casts_without_expression,
         
     | 
| 
      
 311 
     | 
    
         
            +
                        #                     self.index.casts_without_expression)
         
     | 
| 
      
 312 
     | 
    
         
            +
                        self.set_ref!(self.ref.casts_without_expression!)
         
     | 
| 
      
 313 
     | 
    
         
            +
                        self.set_index!(self.index.casts_without_expression!)
         
     | 
| 
      
 314 
     | 
    
         
            +
                        return self
         
     | 
| 
       300 
315 
     | 
    
         
             
                    end
         
     | 
| 
       301 
316 
     | 
    
         
             
                end
         
     | 
| 
       302 
317 
     | 
    
         | 
| 
         @@ -305,12 +320,16 @@ module HDLRuby::Low 
     | 
|
| 
       305 
320 
     | 
    
         
             
                #  in assignments to select operators.
         
     | 
| 
       306 
321 
     | 
    
         
             
                class RefRange
         
     | 
| 
       307 
322 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       308 
     | 
    
         
            -
                    def casts_without_expression
         
     | 
| 
      
 323 
     | 
    
         
            +
                    def casts_without_expression!
         
     | 
| 
       309 
324 
     | 
    
         
             
                        # Recurse on the sub references.
         
     | 
| 
       310 
     | 
    
         
            -
                        return RefRange.new(self.type,
         
     | 
| 
       311 
     | 
    
         
            -
             
     | 
| 
       312 
     | 
    
         
            -
             
     | 
| 
       313 
     | 
    
         
            -
             
     | 
| 
      
 325 
     | 
    
         
            +
                        # return RefRange.new(self.type,
         
     | 
| 
      
 326 
     | 
    
         
            +
                        #                     self.ref.casts_without_expression,
         
     | 
| 
      
 327 
     | 
    
         
            +
                        #                     self.range.first.casts_without_expression ..
         
     | 
| 
      
 328 
     | 
    
         
            +
                        #                     self.range.last.casts_without_expression)
         
     | 
| 
      
 329 
     | 
    
         
            +
                        self.set_ref!(self.ref.casts_without_expression!)
         
     | 
| 
      
 330 
     | 
    
         
            +
                        self.set_range!(self.range.first.casts_without_expression! ..
         
     | 
| 
      
 331 
     | 
    
         
            +
                                        self.range.last.casts_without_expression!)
         
     | 
| 
      
 332 
     | 
    
         
            +
                        return self
         
     | 
| 
       314 
333 
     | 
    
         
             
                    end
         
     | 
| 
       315 
334 
     | 
    
         
             
                end
         
     | 
| 
       316 
335 
     | 
    
         | 
| 
         @@ -319,11 +338,13 @@ module HDLRuby::Low 
     | 
|
| 
       319 
338 
     | 
    
         
             
                #  in assignments to select operators.
         
     | 
| 
       320 
339 
     | 
    
         
             
                class RefName
         
     | 
| 
       321 
340 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       322 
     | 
    
         
            -
                    def casts_without_expression
         
     | 
| 
      
 341 
     | 
    
         
            +
                    def casts_without_expression!
         
     | 
| 
       323 
342 
     | 
    
         
             
                        # Recurse on the sub references.
         
     | 
| 
       324 
     | 
    
         
            -
                        return RefName.new(self.type,
         
     | 
| 
       325 
     | 
    
         
            -
             
     | 
| 
       326 
     | 
    
         
            -
             
     | 
| 
      
 343 
     | 
    
         
            +
                        # return RefName.new(self.type,
         
     | 
| 
      
 344 
     | 
    
         
            +
                        #                    self.ref.casts_without_expression,
         
     | 
| 
      
 345 
     | 
    
         
            +
                        #                    self.name)
         
     | 
| 
      
 346 
     | 
    
         
            +
                        self.set_ref!(self.ref.casts_without_expression!)
         
     | 
| 
      
 347 
     | 
    
         
            +
                        return self
         
     | 
| 
       327 
348 
     | 
    
         
             
                    end
         
     | 
| 
       328 
349 
     | 
    
         
             
                end
         
     | 
| 
       329 
350 
     | 
    
         | 
| 
         @@ -332,9 +353,10 @@ module HDLRuby::Low 
     | 
|
| 
       332 
353 
     | 
    
         
             
                #  in assignments to select operators.
         
     | 
| 
       333 
354 
     | 
    
         
             
                class RefThis 
         
     | 
| 
       334 
355 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       335 
     | 
    
         
            -
                    def casts_without_expression
         
     | 
| 
       336 
     | 
    
         
            -
                        # Simply clone.
         
     | 
| 
       337 
     | 
    
         
            -
                        return self.clone
         
     | 
| 
      
 356 
     | 
    
         
            +
                    def casts_without_expression!
         
     | 
| 
      
 357 
     | 
    
         
            +
                        # # Simply clone.
         
     | 
| 
      
 358 
     | 
    
         
            +
                        # return self.clone
         
     | 
| 
      
 359 
     | 
    
         
            +
                        return self
         
     | 
| 
       338 
360 
     | 
    
         
             
                    end
         
     | 
| 
       339 
361 
     | 
    
         
             
                end
         
     | 
| 
       340 
362 
     | 
    
         | 
| 
         @@ -344,9 +366,10 @@ module HDLRuby::Low 
     | 
|
| 
       344 
366 
     | 
    
         
             
                class StringE
         
     | 
| 
       345 
367 
     | 
    
         | 
| 
       346 
368 
     | 
    
         
             
                    # Extracts the expressions from the casts.
         
     | 
| 
       347 
     | 
    
         
            -
                    def casts_without_expression
         
     | 
| 
       348 
     | 
    
         
            -
                        return StringE.new(self.content,
         
     | 
| 
       349 
     | 
    
         
            -
             
     | 
| 
      
 369 
     | 
    
         
            +
                    def casts_without_expression!
         
     | 
| 
      
 370 
     | 
    
         
            +
                        # return StringE.new(self.content,
         
     | 
| 
      
 371 
     | 
    
         
            +
                        #                    *self.each_arg.map(&:casts_without_expression))
         
     | 
| 
      
 372 
     | 
    
         
            +
                        self.map_args! {|arg| arg.casts_without_expression! }
         
     | 
| 
       350 
373 
     | 
    
         
             
                        return self
         
     | 
| 
       351 
374 
     | 
    
         
             
                    end
         
     | 
| 
       352 
375 
     | 
    
         
             
                end
         
     | 
| 
         @@ -1959,4 +1959,25 @@ module HDLRuby::Low 
     | 
|
| 
       1959 
1959 
     | 
    
         
             
                        # Nothing to do.
         
     | 
| 
       1960 
1960 
     | 
    
         
             
                    end
         
     | 
| 
       1961 
1961 
     | 
    
         
             
                end
         
     | 
| 
      
 1962 
     | 
    
         
            +
             
     | 
| 
      
 1963 
     | 
    
         
            +
                ##
         
     | 
| 
      
 1964 
     | 
    
         
            +
                # Describes a string.
         
     | 
| 
      
 1965 
     | 
    
         
            +
                #
         
     | 
| 
      
 1966 
     | 
    
         
            +
                # NOTE: This is not synthesizable!
         
     | 
| 
      
 1967 
     | 
    
         
            +
                class StringE
         
     | 
| 
      
 1968 
     | 
    
         
            +
                    
         
     | 
| 
      
 1969 
     | 
    
         
            +
                    # Maps on the arguments.
         
     | 
| 
      
 1970 
     | 
    
         
            +
                    def map_args!(&ruby_block)
         
     | 
| 
      
 1971 
     | 
    
         
            +
                        @args.map! do |arg|
         
     | 
| 
      
 1972 
     | 
    
         
            +
                            arg = ruby_block.call(arg)
         
     | 
| 
      
 1973 
     | 
    
         
            +
                            arg.parent = self unless arg.parent
         
     | 
| 
      
 1974 
     | 
    
         
            +
                            arg
         
     | 
| 
      
 1975 
     | 
    
         
            +
                        end
         
     | 
| 
      
 1976 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1977 
     | 
    
         
            +
             
     | 
| 
      
 1978 
     | 
    
         
            +
                    # Maps on the children.
         
     | 
| 
      
 1979 
     | 
    
         
            +
                    def map_nodes!(&ruby_block)
         
     | 
| 
      
 1980 
     | 
    
         
            +
                        self.map_args!(&ruby_block)
         
     | 
| 
      
 1981 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1982 
     | 
    
         
            +
                end
         
     | 
| 
       1962 
1983 
     | 
    
         
             
            end
         
     | 
| 
         @@ -6,63 +6,35 @@ module HDLRuby::Verilog 
     | 
|
| 
       6 
6 
     | 
    
         
             
              # This is sample.
         
     | 
| 
       7 
7 
     | 
    
         
             
              # n = "abc_ABC_いろは"
         
     | 
| 
       8 
8 
     | 
    
         
             
              # puts n            
         
     | 
| 
       9 
     | 
    
         
            -
              # name = n.split("") 
     | 
| 
      
 9 
     | 
    
         
            +
              # name = n.split("")
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              @@hdr2verilog = {}
         
     | 
| 
       10 
12 
     | 
    
         | 
| 
       11 
13 
     | 
    
         
             
              # Since it is possible to use $ and numbers other than the beginning of the character string, it is divided.
         
     | 
| 
       12 
14 
     | 
    
         
             
              def name_to_verilog(name)
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                # 
         
     | 
| 
       30 
     | 
    
         
            -
                # name[1..-1].each_char do |c|
         
     | 
| 
       31 
     | 
    
         
            -
                #   # Confirmation of characters in array.
         
     | 
| 
       32 
     | 
    
         
            -
                #   # If it is a-zA-Z 0 - 9, it is added to ref as it is.
         
     | 
| 
       33 
     | 
    
         
            -
                #   if (c =~ /[a-zA-Z0-9]|\$/) then
         
     | 
| 
       34 
     | 
    
         
            -
                #     ref << c
         
     | 
| 
       35 
     | 
    
         
            -
                #   # _ To convert it to __.
         
     | 
| 
       36 
     | 
    
         
            -
                #   elsif (c == "_") then
         
     | 
| 
       37 
     | 
    
         
            -
                #     ref << "__"
         
     | 
| 
       38 
     | 
    
         
            -
                #   # If it does not satisfy the above, it is another character.
         
     | 
| 
       39 
     | 
    
         
            -
                #   # In that case, convert it to UTF-8 and convert it to a usable character string.
         
     | 
| 
       40 
     | 
    
         
            -
                #   else
         
     | 
| 
       41 
     | 
    
         
            -
                #     l = c.bytes.map{|v| v.to_s(16)}.join # Conversion to UTF-8 hexadecimal number.
         
     | 
| 
       42 
     | 
    
         
            -
                #  
         
     | 
| 
       43 
     | 
    
         
            -
                #     ref << "_" + l.rjust(6,"0")      # Add an underscore indicating conversion.
         
     | 
| 
       44 
     | 
    
         
            -
                #                                      # The remainder of 6 digits is filled with 0.
         
     | 
| 
       45 
     | 
    
         
            -
                #   end
         
     | 
| 
       46 
     | 
    
         
            -
                # end
         
     | 
| 
       47 
     | 
    
         
            -
                # return ref
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                
         
     | 
| 
      
 15 
     | 
    
         
            +
                  # name = name.to_s
         
     | 
| 
      
 16 
     | 
    
         
            +
                  # # Convert special characters.
         
     | 
| 
      
 17 
     | 
    
         
            +
                  # name = name.each_char.map do |c|
         
     | 
| 
      
 18 
     | 
    
         
            +
                  #     if c=~ /[a-z0-9]/ then
         
     | 
| 
      
 19 
     | 
    
         
            +
                  #         c
         
     | 
| 
      
 20 
     | 
    
         
            +
                  #     elsif c == "_" then
         
     | 
| 
      
 21 
     | 
    
         
            +
                  #         "__"
         
     | 
| 
      
 22 
     | 
    
         
            +
                  #     else
         
     | 
| 
      
 23 
     | 
    
         
            +
                  #         "_" + c.ord.to_s
         
     | 
| 
      
 24 
     | 
    
         
            +
                  #     end
         
     | 
| 
      
 25 
     | 
    
         
            +
                  # end.join
         
     | 
| 
      
 26 
     | 
    
         
            +
                  # # First character: only letter is possible.
         
     | 
| 
      
 27 
     | 
    
         
            +
                  # unless name[0] =~ /[a-z_]/ then
         
     | 
| 
      
 28 
     | 
    
         
            +
                  #     name = "_" + name
         
     | 
| 
      
 29 
     | 
    
         
            +
                  # end
         
     | 
| 
      
 30 
     | 
    
         
            +
                  # return name
         
     | 
| 
       50 
31 
     | 
    
         
             
                  name = name.to_s
         
     | 
| 
       51 
     | 
    
         
            -
                   
     | 
| 
       52 
     | 
    
         
            -
                   
     | 
| 
       53 
     | 
    
         
            -
                       
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                      elsif c == "_" then
         
     | 
| 
       56 
     | 
    
         
            -
                          "__"
         
     | 
| 
       57 
     | 
    
         
            -
                      else
         
     | 
| 
       58 
     | 
    
         
            -
                          "_" + c.ord.to_s
         
     | 
| 
       59 
     | 
    
         
            -
                      end
         
     | 
| 
       60 
     | 
    
         
            -
                  end.join
         
     | 
| 
       61 
     | 
    
         
            -
                  # First character: only letter is possible.
         
     | 
| 
       62 
     | 
    
         
            -
                  unless name[0] =~ /[a-z_]/ then
         
     | 
| 
       63 
     | 
    
         
            -
                      name = "_" + name
         
     | 
| 
      
 32 
     | 
    
         
            +
                  vname = @@hdr2verilog[name]
         
     | 
| 
      
 33 
     | 
    
         
            +
                  unless vname then
         
     | 
| 
      
 34 
     | 
    
         
            +
                      vname = "_v#{@@hdr2verilog.size}_#{name.split(/[^a-zA-Z_0-9]/)[-1]}"
         
     | 
| 
      
 35 
     | 
    
         
            +
                        @@hdr2verilog[name] = vname
         
     | 
| 
       64 
36 
     | 
    
         
             
                  end
         
     | 
| 
       65 
     | 
    
         
            -
                  return  
     | 
| 
      
 37 
     | 
    
         
            +
                  return vname
         
     | 
| 
       66 
38 
     | 
    
         
             
              end
         
     | 
| 
       67 
39 
     | 
    
         | 
| 
       68 
40 
     | 
    
         
             
              #puts ref
         
     | 
    
        data/lib/HDLRuby/sim/hruby_sim.h
    CHANGED
    
    | 
         @@ -101,6 +101,7 @@ typedef struct ValueS_ { 
     | 
|
| 
       101 
101 
     | 
    
         
             
            /* The tructure of a reference to a range in a value. */
         
     | 
| 
       102 
102 
     | 
    
         
             
            typedef struct RefRangeS_ {
         
     | 
| 
       103 
103 
     | 
    
         
             
                SignalI signal;           /* The refered signal. */
         
     | 
| 
      
 104 
     | 
    
         
            +
                Type type;                /* The tyep of the elements. */
         
     | 
| 
       104 
105 
     | 
    
         
             
                unsigned long long first; /* The first index in the range. */
         
     | 
| 
       105 
106 
     | 
    
         
             
                unsigned long long last;  /* The last index in the range. */
         
     | 
| 
       106 
107 
     | 
    
         
             
            } RefRangeS;
         
     | 
| 
         @@ -308,11 +309,12 @@ extern int same_content_value_range(Value value0, unsigned long long first, 
     | 
|
| 
       308 
309 
     | 
    
         | 
| 
       309 
310 
     | 
    
         
             
            /** Creates a reference to a range inside a signal.
         
     | 
| 
       310 
311 
     | 
    
         
             
             *  @param signal the signal to refer
         
     | 
| 
      
 312 
     | 
    
         
            +
             *  @param typ the type of the elements.
         
     | 
| 
       311 
313 
     | 
    
         
             
             *  @param first the start index of the range
         
     | 
| 
       312 
314 
     | 
    
         
             
             *  @param last the end index of the range
         
     | 
| 
       313 
315 
     | 
    
         
             
             *  @return the resulting reference */
         
     | 
| 
       314 
     | 
    
         
            -
            extern RefRangeS make_ref_rangeS(SignalI signal,  
     | 
| 
       315 
     | 
    
         
            -
                    unsigned long long last);
         
     | 
| 
      
 316 
     | 
    
         
            +
            extern RefRangeS make_ref_rangeS(SignalI signal, Type typ, 
         
     | 
| 
      
 317 
     | 
    
         
            +
                    unsigned long long first, unsigned long long last);
         
     | 
| 
       316 
318 
     | 
    
         | 
| 
       317 
319 
     | 
    
         | 
| 
       318 
320 
     | 
    
         
             
            /* The interface for the lists. */
         
     | 
| 
         @@ -2171,7 +2171,8 @@ Value read_range_numeric(Value value, long long first, long long last, 
     | 
|
| 
       2171 
2171 
     | 
    
         
             
                /* Compute the read mask. */
         
     | 
| 
       2172 
2172 
     | 
    
         
             
                // unsigned long long mask = ((-1LL) << first) & (~((-1LL) << (last+1)));
         
     | 
| 
       2173 
2173 
     | 
    
         
             
                /* NOTE: once again, << 64 does not work like expected. */
         
     | 
| 
       2174 
     | 
    
         
            -
                unsigned long long mask =  
     | 
| 
      
 2174 
     | 
    
         
            +
                unsigned long long mask = last+bw < 64 ? (~((-1LL) << (last+bw))) : -1LL;
         
     | 
| 
      
 2175 
     | 
    
         
            +
                // printf("mask=%llx\n",mask);
         
     | 
| 
       2175 
2176 
     | 
    
         
             
                /* Performs the read. */
         
     | 
| 
       2176 
2177 
     | 
    
         
             
                unsigned long long data = (value->data_int & mask) >> first;
         
     | 
| 
       2177 
2178 
     | 
    
         
             
                /* Write it to the destination. */
         
     | 
| 
         @@ -2216,7 +2217,9 @@ Value write_range_numeric(Value src, long long first, long long last, 
     | 
|
| 
       2216 
2217 
     | 
    
         
             
                /* Copy from the source. */
         
     | 
| 
       2217 
2218 
     | 
    
         
             
                unsigned long long src_data = src->data_int & ~((-1LL) << (last-first+1));
         
     | 
| 
       2218 
2219 
     | 
    
         
             
                /* Cleans the destination where to place the data. */
         
     | 
| 
       2219 
     | 
    
         
            -
                unsigned long long mask 
     | 
| 
      
 2220 
     | 
    
         
            +
                unsigned long long mask;
         
     | 
| 
      
 2221 
     | 
    
         
            +
                if (last<63) mask = ~(((-1LL) << first) & ~((-1LL) << (last+1)));
         
     | 
| 
      
 2222 
     | 
    
         
            +
                else         mask = ~((-1LL)<<first);
         
     | 
| 
       2220 
2223 
     | 
    
         
             
                unsigned long long dst_data = dst->data_int & mask;
         
     | 
| 
       2221 
2224 
     | 
    
         
             
                // printf("src_data=%llx  mask=%llx dst_data=%llx\n",src_data,mask,dst_data);
         
     | 
| 
       2222 
2225 
     | 
    
         
             
                /* Write the data. */
         
     | 
| 
         @@ -2947,12 +2950,13 @@ int same_content_value_range(Value value0, 
     | 
|
| 
       2947 
2950 
     | 
    
         | 
| 
       2948 
2951 
     | 
    
         
             
            /** Creates a reference to a range inside a signal.
         
     | 
| 
       2949 
2952 
     | 
    
         
             
             *  @param signal the signal to refer
         
     | 
| 
      
 2953 
     | 
    
         
            +
             *  @param typ the type of the elements
         
     | 
| 
       2950 
2954 
     | 
    
         
             
             *  @param first the start index of the range
         
     | 
| 
       2951 
2955 
     | 
    
         
             
             *  @param last the end index of the range
         
     | 
| 
       2952 
2956 
     | 
    
         
             
             *  @return the resulting reference */
         
     | 
| 
       2953 
     | 
    
         
            -
            RefRangeS make_ref_rangeS(SignalI signal, unsigned long long first,
         
     | 
| 
      
 2957 
     | 
    
         
            +
            RefRangeS make_ref_rangeS(SignalI signal, Type typ, unsigned long long first,
         
     | 
| 
       2954 
2958 
     | 
    
         
             
                    unsigned long long last) {
         
     | 
| 
       2955 
     | 
    
         
            -
                RefRangeS result = { signal, first, last };
         
     | 
| 
      
 2959 
     | 
    
         
            +
                RefRangeS result = { signal, typ, first, last };
         
     | 
| 
       2956 
2960 
     | 
    
         
             
                return result;
         
     | 
| 
       2957 
2961 
     | 
    
         
             
            }
         
     | 
| 
       2958 
2962 
     | 
    
         | 
| 
         @@ -586,12 +586,14 @@ void transmit_to_signal_range_seq(Value value, RefRangeS ref) { 
     | 
|
| 
       586 
586 
     | 
    
         
             
                SignalI signal = ref.signal;
         
     | 
| 
       587 
587 
     | 
    
         
             
                unsigned long long first = ref.first;
         
     | 
| 
       588 
588 
     | 
    
         
             
                unsigned long long last = ref.last;
         
     | 
| 
       589 
     | 
    
         
            -
                // printf("Tansmit to signal range: %s(%p)\n",signal->name,signal);
         
     | 
| 
      
 589 
     | 
    
         
            +
                // printf("Tansmit to signal range: %s(%p) [%llu,%llu]\n",signal->name,signal,first,last);
         
     | 
| 
       590 
590 
     | 
    
         
             
                /* Can transmit, copy the content. */
         
     | 
| 
       591 
591 
     | 
    
         
             
                if (signal->fading)
         
     | 
| 
       592 
     | 
    
         
            -
                    write_range(value,first,last,signal->f_value->type,signal->f_value);
         
     | 
| 
      
 592 
     | 
    
         
            +
                    // write_range(value,first,last,signal->f_value->type,signal->f_value);
         
     | 
| 
      
 593 
     | 
    
         
            +
                    write_range(value,first,last,ref.type,signal->f_value);
         
     | 
| 
       593 
594 
     | 
    
         
             
                else
         
     | 
| 
       594 
     | 
    
         
            -
                    write_range_no_z(value,first,last,signal->f_value->type,signal->f_value);
         
     | 
| 
      
 595 
     | 
    
         
            +
                    // write_range_no_z(value,first,last,signal->f_value->type,signal->f_value);
         
     | 
| 
      
 596 
     | 
    
         
            +
                    write_range_no_z(value,first,last,ref.type,signal->f_value);
         
     | 
| 
       595 
597 
     | 
    
         
             
                /* And touch the signal. */
         
     | 
| 
       596 
598 
     | 
    
         
             
                touch_signal_seq(signal);
         
     | 
| 
       597 
599 
     | 
    
         
             
            }
         
     | 
    
        data/lib/HDLRuby/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: HDLRuby
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 2.6. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.6.24
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Lovic Gauthier
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2021- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-11-28 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -150,6 +150,9 @@ files: 
     | 
|
| 
       150 
150 
     | 
    
         
             
            - lib/HDLRuby/hdr_samples/with_memory_rom.rb
         
     | 
| 
       151 
151 
     | 
    
         
             
            - lib/HDLRuby/hdr_samples/with_multi_channels.rb
         
     | 
| 
       152 
152 
     | 
    
         
             
            - lib/HDLRuby/hdr_samples/with_reconf.rb
         
     | 
| 
      
 153 
     | 
    
         
            +
            - lib/HDLRuby/hdr_samples/with_reduce.rb
         
     | 
| 
      
 154 
     | 
    
         
            +
            - lib/HDLRuby/hdr_samples/with_str2value.rb
         
     | 
| 
      
 155 
     | 
    
         
            +
            - lib/HDLRuby/hdr_samples/with_to_a.rb
         
     | 
| 
       153 
156 
     | 
    
         
             
            - lib/HDLRuby/hdr_samples/with_to_array.rb
         
     | 
| 
       154 
157 
     | 
    
         
             
            - lib/HDLRuby/hdrcc.rb
         
     | 
| 
       155 
158 
     | 
    
         
             
            - lib/HDLRuby/high_samples/_adder_fault.rb
         
     |