origen_sim 0.5.5 → 0.6.0
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/config/application.rb +12 -1
- data/config/commands.rb +31 -10
- data/config/global_commands.rb +12 -0
- data/config/shared_commands.rb +11 -4
- data/config/version.rb +2 -2
- data/ext/bridge.c +18 -8
- data/ext/client.c +1 -1
- data/ext/defines.h.erb +6 -0
- data/ext/origen.c +6 -6
- data/lib/origen_sim/commands/build.rb +119 -81
- data/lib/origen_sim/commands/ci.rb +36 -0
- data/lib/origen_sim/commands/co.rb +36 -0
- data/lib/origen_sim/origen/pins/pin.rb +7 -13
- data/lib/origen_sim/origen_testers/api.rb +66 -0
- data/lib/origen_sim/simulator.rb +123 -43
- data/lib/origen_sim_dev/dut.rb +6 -4
- data/pattern/test.rb +28 -16
- data/templates/empty.gtkw +26 -0
- data/templates/rtl_v/origen.v.erb +10 -49
- metadata +24 -6
- data/ext/README.md +0 -2
    
        data/lib/origen_sim_dev/dut.rb
    CHANGED
    
    | @@ -16,11 +16,12 @@ module OrigenSimDev | |
| 16 16 | 
             
                  add_pin :trstn, reset: :drive_lo
         | 
| 17 17 | 
             
                  add_pin_alias :tclk, :tck
         | 
| 18 18 | 
             
                  add_pin :dout, size: 32
         | 
| 19 | 
            +
                  add_pin :test_bus, size: 16
         | 
| 19 20 | 
             
                  add_pin :din_port, size: 32, rtl_name: 'din', reset: :drive_lo
         | 
| 20 | 
            -
                  add_pin :p1,  | 
| 21 | 
            -
                  add_pin :p2,  | 
| 22 | 
            -
                  add_pin :p3, size: 4,  | 
| 23 | 
            -
                  add_pin :p4, size: 4,  | 
| 21 | 
            +
                  add_pin :p1, force: 0
         | 
| 22 | 
            +
                  add_pin :p2, force: 1
         | 
| 23 | 
            +
                  add_pin :p3, size: 4, force: 0
         | 
| 24 | 
            +
                  add_pin :p4, size: 4, force: 0xA
         | 
| 24 25 | 
             
                  add_pin :v1, rtl_name: 'nc'
         | 
| 25 26 | 
             
                  add_pin :v2, rtl_name: :nc
         | 
| 26 27 |  | 
| @@ -68,6 +69,7 @@ module OrigenSimDev | |
| 68 69 | 
             
                end
         | 
| 69 70 |  | 
| 70 71 | 
             
                def startup(options = {})
         | 
| 72 | 
            +
                  # tester.simulator.log_messages = true
         | 
| 71 73 | 
             
                  tester.set_timeset('func', 100)
         | 
| 72 74 |  | 
| 73 75 | 
             
                  dut.pin(:rstn).drive!(1)
         | 
    
        data/pattern/test.rb
    CHANGED
    
    | @@ -34,27 +34,32 @@ Pattern.create do | |
| 34 34 | 
             
              dut.cmd.write!(0x1234_5678)
         | 
| 35 35 | 
             
              dut.cmd.read!(0x1234_5678)
         | 
| 36 36 |  | 
| 37 | 
            -
              tester. | 
| 38 | 
            -
             | 
| 37 | 
            +
              if tester.sim?
         | 
| 38 | 
            +
                tester.simulator.poke("dut.cmd", 0x1122_3344)
         | 
| 39 | 
            +
                dut.cmd.read!(0x1122_3344)
         | 
| 40 | 
            +
              end
         | 
| 39 41 |  | 
| 40 42 | 
             
              ss "Test storing a register"
         | 
| 41 43 | 
             
              dut.cmd.write!(0x2244_6688)
         | 
| 42 44 | 
             
              dut.cmd.store!
         | 
| 43 45 |  | 
| 44 | 
            -
               | 
| 45 | 
            -
             | 
| 46 | 
            -
                 | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 46 | 
            +
              if tester.sim?
         | 
| 47 | 
            +
                sim = tester.simulator
         | 
| 48 | 
            +
                capture_value = sim.peek("origen.pins.tdo.memory").to_i
         | 
| 49 | 
            +
                unless capture_value == 0x11662244 # 0x2244_6688 reversed
         | 
| 50 | 
            +
                  if capture_value
         | 
| 51 | 
            +
                    fail "Captured #{capture_value.to_hex} instead of 0x11662244!"
         | 
| 52 | 
            +
                  else
         | 
| 53 | 
            +
                    fail "Nothing captured instead of 0x11662244!"
         | 
| 54 | 
            +
                  end
         | 
| 50 55 | 
             
                end
         | 
| 51 | 
            -
              end
         | 
| 52 56 |  | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 57 | 
            +
                ss "Test sync of a register"
         | 
| 58 | 
            +
                dut.cmd.write(0) # Make Origen forget the actual value
         | 
| 59 | 
            +
                dut.cmd.sync
         | 
| 60 | 
            +
                unless dut.cmd.data == 0x2244_6688
         | 
| 61 | 
            +
                  fail "CMD register did not sync from simulation"
         | 
| 62 | 
            +
                end
         | 
| 58 63 | 
             
              end
         | 
| 59 64 |  | 
| 60 65 | 
             
              ss "Do some operations with the counter, just for fun"
         | 
| @@ -76,9 +81,16 @@ Pattern.create do | |
| 76 81 | 
             
              dut.pins(:dout).assert!(0x5555_AAAA)
         | 
| 77 82 | 
             
              dut.pins(:dout).dont_care
         | 
| 78 83 |  | 
| 79 | 
            -
              ss "Verify that  | 
| 84 | 
            +
              ss "Verify that forcing pins works"
         | 
| 80 85 | 
             
              dut.p.p1.assert!(0)
         | 
| 81 86 | 
             
              dut.p.p2.assert!(1)
         | 
| 82 87 | 
             
              dut.p.p3.assert!(0)
         | 
| 83 | 
            -
              dut.p.p4.assert!( | 
| 88 | 
            +
              dut.p.p4.assert!(0xA)
         | 
| 89 | 
            +
             | 
| 90 | 
            +
              ss "Test sim_capture"
         | 
| 91 | 
            +
              tester.sim_capture :cmd55, :dout, :test_bus, :tdo do
         | 
| 92 | 
            +
                dut.pins(:din_port).drive!(0x1234_5678)
         | 
| 93 | 
            +
                dut.cmd.write!(0x55)
         | 
| 94 | 
            +
                60.cycles
         | 
| 95 | 
            +
              end
         | 
| 84 96 | 
             
            end
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            [*]
         | 
| 2 | 
            +
            [*] GTKWave Analyzer v3.3.66 (w)1999-2015 BSI
         | 
| 3 | 
            +
            [*] Thu Jan 11 09:12:49 2018
         | 
| 4 | 
            +
            [*]
         | 
| 5 | 
            +
            [dumpfile] "/home/stephen/Code/github/origen_sim/waves/default/origen.vcd"
         | 
| 6 | 
            +
            [dumpfile_mtime] "Wed Jan 10 17:49:53 2018"
         | 
| 7 | 
            +
            [dumpfile_size] 411132
         | 
| 8 | 
            +
            [savefile] "/home/stephen/Code/github/origen_sim/templates/empty.gtkw"
         | 
| 9 | 
            +
            [timestart] 0
         | 
| 10 | 
            +
            [size] 2308 1127
         | 
| 11 | 
            +
            [pos] -1 -1
         | 
| 12 | 
            +
            *-25.716982 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
         | 
| 13 | 
            +
            [treeopen] origen.
         | 
| 14 | 
            +
            [treeopen] origen.debug.
         | 
| 15 | 
            +
            [treeopen] origen.dut.
         | 
| 16 | 
            +
            [sst_width] 225
         | 
| 17 | 
            +
            [signals_width] 158
         | 
| 18 | 
            +
            [sst_expanded] 1
         | 
| 19 | 
            +
            [sst_vpaned_height] 337
         | 
| 20 | 
            +
            @820
         | 
| 21 | 
            +
            origen.debug.pattern[1023:0]
         | 
| 22 | 
            +
            origen.debug.comments[1023:0]
         | 
| 23 | 
            +
            @22
         | 
| 24 | 
            +
            origen.debug.errors[31:0]
         | 
| 25 | 
            +
            [pattern_trace] 1
         | 
| 26 | 
            +
            [pattern_trace] 0
         | 
| @@ -63,18 +63,14 @@ module pin_driver(error, pin, sync); | |
| 63 63 |  | 
| 64 64 | 
             
            endmodule
         | 
| 65 65 |  | 
| 66 | 
            -
            module pin_drivers(errors, <%= dut.rtl_pins.map { |n, p, o| "#{p.id}_o"  | 
| 66 | 
            +
            module pin_drivers(errors, <%= dut.rtl_pins.map { |n, p, o| "#{p.id}_o" }.join(', ') %>);
         | 
| 67 67 |  | 
| 68 68 | 
             
            % dut.rtl_pins.each do |name, pin, options|
         | 
| 69 | 
            -
            %   unless pin.tie_off
         | 
| 70 69 | 
             
              output <%= pin.id %>_o;
         | 
| 71 | 
            -
            %   end
         | 
| 72 70 | 
             
            % end
         | 
| 73 71 |  | 
| 74 72 | 
             
            % dut.rtl_pins.each do |name, pin, options|
         | 
| 75 | 
            -
            %   unless pin.tie_off
         | 
| 76 73 | 
             
              wire <%= pin.id %>_err;
         | 
| 77 | 
            -
            %   end
         | 
| 78 74 | 
             
            % end
         | 
| 79 75 |  | 
| 80 76 | 
             
              output reg [31:0] errors = 0;
         | 
| @@ -83,12 +79,10 @@ module pin_drivers(errors, <%= dut.rtl_pins.map { |n, p, o| "#{p.id}_o" unless p | |
| 83 79 | 
             
              always @(
         | 
| 84 80 |  | 
| 85 81 | 
             
            % dut.rtl_pins.each_with_index do |(name, pin, options), i|
         | 
| 86 | 
            -
            %    | 
| 87 | 
            -
            %     if i == 0
         | 
| 82 | 
            +
            %   if i == 0
         | 
| 88 83 | 
             
                posedge <%= pin.id %>_err
         | 
| 89 | 
            -
            % | 
| 84 | 
            +
            %   else
         | 
| 90 85 | 
             
                or posedge <%= pin.id %>_err
         | 
| 91 | 
            -
            %     end
         | 
| 92 86 | 
             
            %   end
         | 
| 93 87 | 
             
            % end
         | 
| 94 88 | 
             
              ) begin
         | 
| @@ -96,9 +90,7 @@ module pin_drivers(errors, <%= dut.rtl_pins.map { |n, p, o| "#{p.id}_o" unless p | |
| 96 90 | 
             
              end
         | 
| 97 91 |  | 
| 98 92 | 
             
            % dut.rtl_pins.each do |name, pin, options|
         | 
| 99 | 
            -
            %   unless pin.tie_off
         | 
| 100 93 | 
             
              pin_driver <%= pin.driving? ? "#(#{pin.value}) " : '' %><%= pin.id %>(.pin(<%= pin.id %>_o), .error(<%= pin.id %>_err), .sync(sync));
         | 
| 101 | 
            -
            %   end 
         | 
| 102 94 | 
             
            % end
         | 
| 103 95 |  | 
| 104 96 | 
             
            endmodule
         | 
| @@ -120,68 +112,37 @@ module origen; | |
| 120 112 | 
             
              reg finish = 0;
         | 
| 121 113 |  | 
| 122 114 | 
             
            % dut.rtl_pins.each do |name, pin, options|
         | 
| 123 | 
            -
            %   unless pin.tie_off
         | 
| 124 115 | 
             
              wire <%= pin.id %>;
         | 
| 125 | 
            -
            %   end
         | 
| 126 116 | 
             
            % end
         | 
| 127 117 |  | 
| 128 118 | 
             
              wire [31:0] errors;
         | 
| 129 119 |  | 
| 130 120 | 
             
              pin_drivers pins (
         | 
| 131 121 | 
             
            % dut.rtl_pins.each_with_index do |(name, pin, options), i|
         | 
| 132 | 
            -
            %   unless pin.tie_off
         | 
| 133 122 | 
             
                .<%= pin.id %>_o(<%= pin.id %>),
         | 
| 134 | 
            -
            %   end
         | 
| 135 123 | 
             
            % end
         | 
| 136 124 | 
             
                .errors(errors)
         | 
| 137 125 | 
             
              );
         | 
| 138 126 |  | 
| 139 | 
            -
              // Create wires to tie off DUT signals, initially this was done by hardcoded values when instantiating
         | 
| 140 | 
            -
              // below, however the simulator didn't like that if the target pin was defined as an inout
         | 
| 141 | 
            -
            % dut.rtl_pins.each do |name, pin, options|
         | 
| 142 | 
            -
            %   if options[:group]
         | 
| 143 | 
            -
            %     if pin.group_index == 0
         | 
| 144 | 
            -
            %       if pin.primary_group.tie_off
         | 
| 145 | 
            -
              wire [<%= pin.primary_group.size - 1 %>:0] <%= pin.rtl_name %>;
         | 
| 146 | 
            -
              assign <%= pin.rtl_name %> = <%= "#{pin.primary_group.size}'b#{pin.tie_off.to_s * pin.primary_group.size}" %>;
         | 
| 147 | 
            -
            %       end
         | 
| 148 | 
            -
            %     end
         | 
| 149 | 
            -
            %   else
         | 
| 150 | 
            -
            %     if pin.tie_off
         | 
| 151 | 
            -
              wire <%= pin.rtl_name %>;
         | 
| 152 | 
            -
              assign <%= pin.rtl_name %> = 1'b<%= pin.tie_off %>;
         | 
| 153 | 
            -
            %     end
         | 
| 154 | 
            -
            %   end
         | 
| 155 | 
            -
            % end
         | 
| 156 | 
            -
             | 
| 157 | 
            -
             | 
| 158 127 | 
             
              // Instantiate the DUT
         | 
| 159 128 | 
             
              <%= options[:top].sub(/\..*/, '') %> dut (
         | 
| 160 129 | 
             
            % dut.power_pins.each do |name, pin, options|
         | 
| 161 | 
            -
            %   unless pin.tie_off
         | 
| 162 130 | 
             
                .<%= pin.id %>(<%= pin.id %>),
         | 
| 163 | 
            -
            %   end
         | 
| 164 131 | 
             
            % end
         | 
| 165 132 | 
             
            % dut.ground_pins.each do |name, pin, options|
         | 
| 166 | 
            -
            %   unless pin.tie_off
         | 
| 167 133 | 
             
                .<%= pin.id %>(<%= pin.id %>),
         | 
| 168 | 
            -
            %   end
         | 
| 169 134 | 
             
            % end
         | 
| 170 135 | 
             
            % dut.rtl_pins.each_with_index do |(name, pin, options), i|
         | 
| 171 136 | 
             
            %   if options[:group]
         | 
| 172 137 | 
             
            %     if pin.group_index == 0
         | 
| 173 | 
            -
             | 
| 174 | 
            -
             | 
| 175 | 
            -
            %       else
         | 
| 176 | 
            -
                .<%= pin.rtl_name %>({
         | 
| 177 | 
            -
            %         pin.primary_group.each_with_index do |pin, i|
         | 
| 138 | 
            +
                .<%= pin.primary_group.id %>({
         | 
| 139 | 
            +
            %       pin.primary_group.each_with_index do |pin, i|
         | 
| 178 140 | 
             
                  <%= pin.id %><%= i == (pin.primary_group.size - 1) ? '' : ',' %>
         | 
| 179 | 
            -
            %         end
         | 
| 180 | 
            -
                })<%= i == (dut.rtl_pins.size - 1) ? '' : ',' %>
         | 
| 181 141 | 
             
            %       end
         | 
| 142 | 
            +
                })<%= i == (dut.rtl_pins.size - 1) ? '' : ',' %>
         | 
| 182 143 | 
             
            %     end
         | 
| 183 144 | 
             
            %   else
         | 
| 184 | 
            -
                .<%= pin.rtl_name %>(<%= pin. | 
| 145 | 
            +
                .<%= pin.rtl_name %>(<%= pin.id %>)<%= i == (dut.rtl_pins.size - 1) ? '' : ',' %>
         | 
| 185 146 | 
             
            %   end
         | 
| 186 147 | 
             
            % end
         | 
| 187 148 | 
             
              );
         | 
| @@ -190,13 +151,13 @@ module origen; | |
| 190 151 | 
             
                .errors(errors)
         | 
| 191 152 | 
             
              );
         | 
| 192 153 |  | 
| 193 | 
            -
             | 
| 154 | 
            +
            `ifdef ICARUS 
         | 
| 194 155 | 
             
              initial
         | 
| 195 156 | 
             
              begin
         | 
| 196 | 
            -
                $dumpfile(" | 
| 157 | 
            +
                $dumpfile("origen.vcd");
         | 
| 197 158 | 
             
                $dumpvars(0,origen);
         | 
| 198 159 | 
             
              end
         | 
| 199 | 
            -
             | 
| 160 | 
            +
            `endif
         | 
| 200 161 |  | 
| 201 162 | 
             
              always @(posedge finish) begin
         | 
| 202 163 | 
             
                $finish(2);
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: origen_sim
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.6.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Stephen McGinty
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2018-01-19 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: origen
         | 
| @@ -16,14 +16,14 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - ">="
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: '0. | 
| 19 | 
            +
                    version: '0.29'
         | 
| 20 20 | 
             
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - ">="
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: '0. | 
| 26 | 
            +
                    version: '0.29'
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: origen_testers
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -38,6 +38,20 @@ dependencies: | |
| 38 38 | 
             
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 40 | 
             
                    version: '0'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: origen_verilog
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - ">="
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '0.3'
         | 
| 48 | 
            +
              type: :runtime
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - ">="
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '0.3'
         | 
| 41 55 | 
             
            description: 
         | 
| 42 56 | 
             
            email:
         | 
| 43 57 | 
             
            - stephen.f.mcginty@gmail.com
         | 
| @@ -48,19 +62,22 @@ files: | |
| 48 62 | 
             
            - config/application.rb
         | 
| 49 63 | 
             
            - config/boot.rb
         | 
| 50 64 | 
             
            - config/commands.rb
         | 
| 65 | 
            +
            - config/global_commands.rb
         | 
| 51 66 | 
             
            - config/shared_commands.rb
         | 
| 52 67 | 
             
            - config/version.rb
         | 
| 53 | 
            -
            - ext/README.md
         | 
| 54 68 | 
             
            - ext/bridge.c
         | 
| 55 69 | 
             
            - ext/bridge.h
         | 
| 56 70 | 
             
            - ext/client.c
         | 
| 57 71 | 
             
            - ext/client.h
         | 
| 58 72 | 
             
            - ext/common.h
         | 
| 73 | 
            +
            - ext/defines.h.erb
         | 
| 59 74 | 
             
            - ext/origen.c
         | 
| 60 75 | 
             
            - ext/origen.h
         | 
| 61 76 | 
             
            - ext/vpi_user.h
         | 
| 62 77 | 
             
            - lib/origen_sim.rb
         | 
| 63 78 | 
             
            - lib/origen_sim/commands/build.rb
         | 
| 79 | 
            +
            - lib/origen_sim/commands/ci.rb
         | 
| 80 | 
            +
            - lib/origen_sim/commands/co.rb
         | 
| 64 81 | 
             
            - lib/origen_sim/flow.rb
         | 
| 65 82 | 
             
            - lib/origen_sim/generator.rb
         | 
| 66 83 | 
             
            - lib/origen_sim/origen/pins/pin.rb
         | 
| @@ -72,6 +89,7 @@ files: | |
| 72 89 | 
             
            - lib/tasks/origen_sim.rake
         | 
| 73 90 | 
             
            - pattern/test.rb
         | 
| 74 91 | 
             
            - program/p1.rb
         | 
| 92 | 
            +
            - templates/empty.gtkw
         | 
| 75 93 | 
             
            - templates/empty.svcf
         | 
| 76 94 | 
             
            - templates/probe.tcl.erb
         | 
| 77 95 | 
             
            - templates/rtl_v/origen.v.erb
         | 
| @@ -98,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 98 116 | 
             
                  version: 1.8.11
         | 
| 99 117 | 
             
            requirements: []
         | 
| 100 118 | 
             
            rubyforge_project: 
         | 
| 101 | 
            -
            rubygems_version: 2.6. | 
| 119 | 
            +
            rubygems_version: 2.6.8
         | 
| 102 120 | 
             
            signing_key: 
         | 
| 103 121 | 
             
            specification_version: 4
         | 
| 104 122 | 
             
            summary: Plugin that provides a testbench environment to simulate Origen test patterns
         | 
    
        data/ext/README.md
    DELETED