rvvm 0.9.2 → 0.9.4
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/CHANGELOG.md +59 -5
 - data/bin/sandbox +26 -0
 - data/lib/rvvm/templates.rb +7 -1
 - data/lib/rvvm/utils.rb +60 -3
 - data/lib/rvvm/version.rb +3 -1
 - data/lib/rvvm.rb +154 -17
 - metadata +3 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 23fecb22e1dceb684c808440d5d88e14e288e3001287a50435acfa57baedad5c
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 88b6836f137f99529ba872045ab934cc618fcf71420e674117a0856b225dce63
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 3197267e3a5f1f713167837ed16ff1410d7aea0429e031c60a78cd3f85b4aea88b200c0bcbe5bd2174de75182119fff227d08bc79eaff720c73654d2f095e6ae
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 36f3c3f230eb785626b16f8b6200bd0277fe7635eec3982f6ef1fe2bf0ee7346fa531b7ee740cd987f8428c5cda7c2d73bc25370b0ef19ea014797b1fca4cdd9
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -47,16 +47,70 @@ 
     | 
|
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
            1. Test list parsing and batch simulation
         
     | 
| 
       49 
49 
     | 
    
         
             
            2. Unit tests
         
     | 
| 
       50 
     | 
    
         
            -
            3. CLI log  
     | 
| 
      
 50 
     | 
    
         
            +
            3. CLI log graphic
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
52 
     | 
    
         
             
            ## [0.9.1] - 2024-09-16
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
     | 
    
         
            -
            ### Fixes
         
     | 
| 
      
 54 
     | 
    
         
            +
            ### Fixes:
         
     | 
| 
       55 
55 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
            1. Fixed rvvm exacutable being excluded by gemspec
         
     | 
| 
      
 56 
     | 
    
         
            +
            1. Fixed `rvvm` exacutable being excluded by gemspec
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
            ## [0.9.2] - 2024-09-16
         
     | 
| 
       59 
59 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
            ### Fixes
         
     | 
| 
      
 60 
     | 
    
         
            +
            ### Fixes:
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
            1. `rvvm` executable still missing after 0.9.1 update
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
            ### TBI:
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            1. Test list parsing and batch simulation
         
     | 
| 
      
 67 
     | 
    
         
            +
            2. Tests
         
     | 
| 
      
 68 
     | 
    
         
            +
            3. CLI log graphic
         
     | 
| 
      
 69 
     | 
    
         
            +
            4. Project config load failure handling/error message when parsing invalid json
         
     | 
| 
      
 70 
     | 
    
         
            +
            5. Template file generation in pwd
         
     | 
| 
      
 71 
     | 
    
         
            +
            6. Elaboration and simulation custom waveform trace dump file
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
            ## [0.9.3] - 2024-09-16
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
            ### Added:
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            1. Test list parsing and batch simulation
         
     | 
| 
      
 78 
     | 
    
         
            +
            2. Tests
         
     | 
| 
      
 79 
     | 
    
         
            +
            3. Updated gitlab pipeline
         
     | 
| 
      
 80 
     | 
    
         
            +
            4. `sandbox` script to play with during development
         
     | 
| 
      
 81 
     | 
    
         
            +
            5. Code documentation
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
            ### Fixed:
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            1. Hash key conversion to symbols when parsing config json
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            ### TBI:
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            1. CLI log graphic
         
     | 
| 
      
 90 
     | 
    
         
            +
            2. Project config load failure handling/error message when parsing invalid json
         
     | 
| 
      
 91 
     | 
    
         
            +
            3. Template file generation in pwd
         
     | 
| 
      
 92 
     | 
    
         
            +
            4. Elaboration and simulation custom waveform trace dump file
         
     | 
| 
      
 93 
     | 
    
         
            +
            5. Project template files regeneration/restoration to default
         
     | 
| 
      
 94 
     | 
    
         
            +
            6. Rescue on script crash due to creating a project dir that already exists
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
            ## [0.9.4] - 2024-09-17
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
            ### Added:
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
            1. More tests
         
     | 
| 
      
 101 
     | 
    
         
            +
            2. Cleaned up code documentation
         
     | 
| 
      
 102 
     | 
    
         
            +
            3. JSON::ParserError handling when loading an invalid config json
         
     | 
| 
      
 103 
     | 
    
         
            +
            4. Promt to overwrite an existing directory while creating project
         
     | 
| 
      
 104 
     | 
    
         
            +
            5. Project creation error handling
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
            ### Fixed:
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
            1. Script crash due to loading invalid json config
         
     | 
| 
      
 109 
     | 
    
         
            +
            2. Script crash due to creating a project dir that already exists
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
            ### TBI:
         
     | 
| 
       61 
112 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
            1.  
     | 
| 
      
 113 
     | 
    
         
            +
            1. CLI log graphic
         
     | 
| 
      
 114 
     | 
    
         
            +
            2. Template file generation in pwd
         
     | 
| 
      
 115 
     | 
    
         
            +
            3. Elaboration and simulation custom waveform trace dump file
         
     | 
| 
      
 116 
     | 
    
         
            +
            4. Project template files regeneration/restoration to default
         
     | 
    
        data/bin/sandbox
    ADDED
    
    | 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            # just a sandbox to play with ruby during development
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require "json"
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            json = %(
         
     | 
| 
      
 9 
     | 
    
         
            +
            {
         
     | 
| 
      
 10 
     | 
    
         
            +
              "sizmaj": "bit"
         
     | 
| 
      
 11 
     | 
    
         
            +
              "akafuka" : {
         
     | 
| 
      
 12 
     | 
    
         
            +
                "siz": 1,
         
     | 
| 
      
 13 
     | 
    
         
            +
                "maj": 2,
         
     | 
| 
      
 14 
     | 
    
         
            +
                "bit": 3
         
     | 
| 
      
 15 
     | 
    
         
            +
              }
         
     | 
| 
      
 16 
     | 
    
         
            +
            }
         
     | 
| 
      
 17 
     | 
    
         
            +
            )
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            def json_parse(data)
         
     | 
| 
      
 20 
     | 
    
         
            +
              parsed = JSON.parse(data)
         
     | 
| 
      
 21 
     | 
    
         
            +
              puts parsed
         
     | 
| 
      
 22 
     | 
    
         
            +
            rescue JSON::ParserError => e
         
     | 
| 
      
 23 
     | 
    
         
            +
              puts "Invalid JSON!\nError #{e.message}"
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            json_parse(json)
         
     | 
    
        data/lib/rvvm/templates.rb
    CHANGED
    
    | 
         @@ -1,5 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            # Module containing template hashes for rvvm.
         
     | 
| 
       3 
4 
     | 
    
         
             
            module Templates
         
     | 
| 
       4 
5 
     | 
    
         
             
              @templates = {}
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
         @@ -49,7 +50,7 @@ module Templates 
     | 
|
| 
       49 
50 
     | 
    
         
             
                "verbosity": "LOW",
         
     | 
| 
       50 
51 
     | 
    
         
             
                "defTest": " ",
         
     | 
| 
       51 
52 
     | 
    
         
             
                "batch": 0,
         
     | 
| 
       52 
     | 
    
         
            -
                " 
     | 
| 
      
 53 
     | 
    
         
            +
                "testlist": [" "],
         
     | 
| 
       53 
54 
     | 
    
         
             
                "args": " "
         
     | 
| 
       54 
55 
     | 
    
         
             
              }
         
     | 
| 
       55 
56 
     | 
    
         
             
            })
         
     | 
| 
         @@ -245,6 +246,11 @@ endpackage 
     | 
|
| 
       245 
246 
     | 
    
         
             
            )
         
     | 
| 
       246 
247 
     | 
    
         
             
              }
         
     | 
| 
       247 
248 
     | 
    
         | 
| 
      
 249 
     | 
    
         
            +
              # Loads template hashes.
         
     | 
| 
      
 250 
     | 
    
         
            +
              #
         
     | 
| 
      
 251 
     | 
    
         
            +
              # @return [Hash] template hashes
         
     | 
| 
      
 252 
     | 
    
         
            +
              #
         
     | 
| 
      
 253 
     | 
    
         
            +
              # @since 0.8.0
         
     | 
| 
       248 
254 
     | 
    
         
             
              def self.load
         
     | 
| 
       249 
255 
     | 
    
         
             
                @templates
         
     | 
| 
       250 
256 
     | 
    
         
             
              end
         
     | 
    
        data/lib/rvvm/utils.rb
    CHANGED
    
    | 
         @@ -1,12 +1,35 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            # Utils module providing utilities and helper methods to rvvm.
         
     | 
| 
      
 4 
     | 
    
         
            +
            #
         
     | 
| 
      
 5 
     | 
    
         
            +
            # Mainly used to generate files and templates.
         
     | 
| 
      
 6 
     | 
    
         
            +
            #
         
     | 
| 
      
 7 
     | 
    
         
            +
            # @since 0.1.0
         
     | 
| 
       3 
8 
     | 
    
         
             
            module Utils
         
     | 
| 
       4 
     | 
    
         
            -
               
     | 
| 
      
 9 
     | 
    
         
            +
              # Interpolates string.
         
     | 
| 
      
 10 
     | 
    
         
            +
              #
         
     | 
| 
      
 11 
     | 
    
         
            +
              # Replaces named keys `${example_key}` with provided values based on a hash.
         
     | 
| 
      
 12 
     | 
    
         
            +
              #
         
     | 
| 
      
 13 
     | 
    
         
            +
              # @param string [String] string to be interpolated
         
     | 
| 
      
 14 
     | 
    
         
            +
              # @param hash [Hash] Hash to provide values to replace instead of the named keys
         
     | 
| 
      
 15 
     | 
    
         
            +
              #
         
     | 
| 
      
 16 
     | 
    
         
            +
              # @return [string] interpolated string
         
     | 
| 
      
 17 
     | 
    
         
            +
              #
         
     | 
| 
      
 18 
     | 
    
         
            +
              # @since 0.1.0
         
     | 
| 
      
 19 
     | 
    
         
            +
              def self.interpolate(string, hash)
         
     | 
| 
       5 
20 
     | 
    
         
             
                string.gsub(/\$\{([^}]+)\}/) do |match|
         
     | 
| 
       6 
21 
     | 
    
         
             
                  hash[Regexp.last_match(1).to_sym] || match
         
     | 
| 
       7 
22 
     | 
    
         
             
                end
         
     | 
| 
       8 
23 
     | 
    
         
             
              end
         
     | 
| 
       9 
24 
     | 
    
         | 
| 
      
 25 
     | 
    
         
            +
              # Generates a file with a provided content.
         
     | 
| 
      
 26 
     | 
    
         
            +
              #
         
     | 
| 
      
 27 
     | 
    
         
            +
              # @param path [String] path of the file to be generated
         
     | 
| 
      
 28 
     | 
    
         
            +
              # @param content [String] content of the file to be generated
         
     | 
| 
      
 29 
     | 
    
         
            +
              #
         
     | 
| 
      
 30 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 31 
     | 
    
         
            +
              #
         
     | 
| 
      
 32 
     | 
    
         
            +
              # @since 0.8.0
         
     | 
| 
       10 
33 
     | 
    
         
             
              def self.gen_file(path, content)
         
     | 
| 
       11 
34 
     | 
    
         
             
                File.open(path, "w") do |file|
         
     | 
| 
       12 
35 
     | 
    
         
             
                  file.write(content)
         
     | 
| 
         @@ -15,16 +38,36 @@ module Utils 
     | 
|
| 
       15 
38 
     | 
    
         
             
                puts "\nFailed to create a file!\nError #{e.message}"
         
     | 
| 
       16 
39 
     | 
    
         
             
              end
         
     | 
| 
       17 
40 
     | 
    
         | 
| 
      
 41 
     | 
    
         
            +
              # Generates a file based on a template.
         
     | 
| 
      
 42 
     | 
    
         
            +
              #
         
     | 
| 
      
 43 
     | 
    
         
            +
              # @param template [Hash] hash with the template content
         
     | 
| 
      
 44 
     | 
    
         
            +
              # @param name [String] name of the file to be generated
         
     | 
| 
      
 45 
     | 
    
         
            +
              # @param config [Hash] template config hash for content interpolation
         
     | 
| 
      
 46 
     | 
    
         
            +
              # @param path [String] path of the template file to be generated (excluding file name)
         
     | 
| 
      
 47 
     | 
    
         
            +
              #
         
     | 
| 
      
 48 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 49 
     | 
    
         
            +
              #
         
     | 
| 
      
 50 
     | 
    
         
            +
              # @since 0.8.0
         
     | 
| 
       18 
51 
     | 
    
         
             
              def self.gen_template(template, name = nil, config = nil, path = nil)
         
     | 
| 
       19 
52 
     | 
    
         
             
                temp_config = config || template[:config]
         
     | 
| 
       20 
     | 
    
         
            -
                content =  
     | 
| 
      
 53 
     | 
    
         
            +
                content = interpolate(template[:content], temp_config)
         
     | 
| 
       21 
54 
     | 
    
         
             
                filename = name || template[:file][:name]
         
     | 
| 
       22 
55 
     | 
    
         
             
                filepath = path || template[:file][:path]
         
     | 
| 
       23 
56 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                puts "Generating: #{filepath}/#{filename}"
         
     | 
| 
      
 57 
     | 
    
         
            +
                puts "      Generating: #{filepath}/#{filename}"
         
     | 
| 
       25 
58 
     | 
    
         
             
                gen_file("#{filepath}/#{filename}", content)
         
     | 
| 
       26 
59 
     | 
    
         
             
              end
         
     | 
| 
       27 
60 
     | 
    
         | 
| 
      
 61 
     | 
    
         
            +
              # Recursively searches provided directory for a file.
         
     | 
| 
      
 62 
     | 
    
         
            +
              #
         
     | 
| 
      
 63 
     | 
    
         
            +
              # @param filename [String] name of the file to look for
         
     | 
| 
      
 64 
     | 
    
         
            +
              # @param path [String] path to start search on
         
     | 
| 
      
 65 
     | 
    
         
            +
              #
         
     | 
| 
      
 66 
     | 
    
         
            +
              # @return [String] path of the first occurence of the file
         
     | 
| 
      
 67 
     | 
    
         
            +
              # or
         
     | 
| 
      
 68 
     | 
    
         
            +
              # @return [nil] if file not found
         
     | 
| 
      
 69 
     | 
    
         
            +
              #
         
     | 
| 
      
 70 
     | 
    
         
            +
              # @since 0.8.0
         
     | 
| 
       28 
71 
     | 
    
         
             
              def self.find_file_dir(filename, path)
         
     | 
| 
       29 
72 
     | 
    
         
             
                Dir.foreach(path) do |file|
         
     | 
| 
       30 
73 
     | 
    
         
             
                  next if file == "."
         
     | 
| 
         @@ -42,6 +85,11 @@ module Utils 
     | 
|
| 
       42 
85 
     | 
    
         
             
                nil
         
     | 
| 
       43 
86 
     | 
    
         
             
              end
         
     | 
| 
       44 
87 
     | 
    
         | 
| 
      
 88 
     | 
    
         
            +
              # Extracts git username using git config system call.
         
     | 
| 
      
 89 
     | 
    
         
            +
              #
         
     | 
| 
      
 90 
     | 
    
         
            +
              # @return [String] git username
         
     | 
| 
      
 91 
     | 
    
         
            +
              #
         
     | 
| 
      
 92 
     | 
    
         
            +
              # @since 0.9.0
         
     | 
| 
       45 
93 
     | 
    
         
             
              def self.git_userame
         
     | 
| 
       46 
94 
     | 
    
         
             
                username = nil
         
     | 
| 
       47 
95 
     | 
    
         
             
                IO.popen("git config --get user.name") do |handle|
         
     | 
| 
         @@ -52,6 +100,15 @@ module Utils 
     | 
|
| 
       52 
100 
     | 
    
         
             
                username
         
     | 
| 
       53 
101 
     | 
    
         
             
              end
         
     | 
| 
       54 
102 
     | 
    
         | 
| 
      
 103 
     | 
    
         
            +
              # Checks if hash contains keys provided from an array.
         
     | 
| 
      
 104 
     | 
    
         
            +
              #
         
     | 
| 
      
 105 
     | 
    
         
            +
              # @param hash [Hash] hash to analyze
         
     | 
| 
      
 106 
     | 
    
         
            +
              # @param arra [Array] array of keys to look for in the hash
         
     | 
| 
      
 107 
     | 
    
         
            +
              #
         
     | 
| 
      
 108 
     | 
    
         
            +
              # @return [Bolean] true if all provided keys from a hash return nil
         
     | 
| 
      
 109 
     | 
    
         
            +
              # @return [Boolean] false if a provided key is found in the hash
         
     | 
| 
      
 110 
     | 
    
         
            +
              #
         
     | 
| 
      
 111 
     | 
    
         
            +
              # @since 0.9.0
         
     | 
| 
       55 
112 
     | 
    
         
             
              def self.all_nil?(hash, array)
         
     | 
| 
       56 
113 
     | 
    
         
             
                array.each do |key|
         
     | 
| 
       57 
114 
     | 
    
         
             
                  return false if hash[key]
         
     | 
    
        data/lib/rvvm/version.rb
    CHANGED
    
    
    
        data/lib/rvvm.rb
    CHANGED
    
    | 
         @@ -8,13 +8,28 @@ require "optparse" 
     | 
|
| 
       8 
8 
     | 
    
         
             
            require "fileutils"
         
     | 
| 
       9 
9 
     | 
    
         
             
            require "json"
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
      
 11 
     | 
    
         
            +
            # Top level module of the rvvm cli meta tool.
         
     | 
| 
      
 12 
     | 
    
         
            +
            #
         
     | 
| 
      
 13 
     | 
    
         
            +
            # Handles argument parsing, project creation, template file
         
     | 
| 
      
 14 
     | 
    
         
            +
            # generation and all interaction with Xilinx Vivado tools.
         
     | 
| 
      
 15 
     | 
    
         
            +
            #
         
     | 
| 
      
 16 
     | 
    
         
            +
            # Argument parsing runs on `require`, rest is run using run
         
     | 
| 
      
 17 
     | 
    
         
            +
            #
         
     | 
| 
      
 18 
     | 
    
         
            +
            # @example
         
     | 
| 
      
 19 
     | 
    
         
            +
            #   require "rvvm"
         
     | 
| 
      
 20 
     | 
    
         
            +
            #
         
     | 
| 
      
 21 
     | 
    
         
            +
            #   Rvvm.run
         
     | 
| 
      
 22 
     | 
    
         
            +
            #
         
     | 
| 
      
 23 
     | 
    
         
            +
            # @since 0.1.0
         
     | 
| 
       11 
24 
     | 
    
         
             
            module Rvvm
         
     | 
| 
       12 
25 
     | 
    
         
             
              class Error < StandardError; end
         
     | 
| 
       13 
26 
     | 
    
         | 
| 
      
 27 
     | 
    
         
            +
              # Module instance variables to hold tempaltes and project config
         
     | 
| 
       14 
28 
     | 
    
         
             
              @templates = Templates.load
         
     | 
| 
       15 
29 
     | 
    
         
             
              @config_path = nil
         
     | 
| 
       16 
30 
     | 
    
         
             
              @config = nil
         
     | 
| 
       17 
31 
     | 
    
         | 
| 
      
 32 
     | 
    
         
            +
              # Instance variables to hold parsed args and required arg symbol list
         
     | 
| 
       18 
33 
     | 
    
         
             
              @args = {}
         
     | 
| 
       19 
34 
     | 
    
         
             
              @required_args = %i[
         
     | 
| 
       20 
35 
     | 
    
         
             
                version
         
     | 
| 
         @@ -34,6 +49,8 @@ module Rvvm 
     | 
|
| 
       34 
49 
     | 
    
         
             
                covreport
         
     | 
| 
       35 
50 
     | 
    
         
             
              ]
         
     | 
| 
       36 
51 
     | 
    
         | 
| 
      
 52 
     | 
    
         
            +
              # Script argument parsing block.
         
     | 
| 
      
 53 
     | 
    
         
            +
              # Runs on loading the module using require.
         
     | 
| 
       37 
54 
     | 
    
         
             
              OptionParser.new do |args|
         
     | 
| 
       38 
55 
     | 
    
         
             
                args.on("-h", "--help", "Shows this help") do
         
     | 
| 
       39 
56 
     | 
    
         
             
                  puts "\nRVvM - Ruby Vivado Manager\n\n"
         
     | 
| 
         @@ -44,16 +61,11 @@ module Rvvm 
     | 
|
| 
       44 
61 
     | 
    
         
             
                  @current_time = Time.now
         
     | 
| 
       45 
62 
     | 
    
         
             
                  @formatted_time = @current_time.strftime("%Y-%m-%d %H:%M:%S")
         
     | 
| 
       46 
63 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
64 
     | 
    
         
             
                  req_args = String.new
         
     | 
| 
       49 
65 
     | 
    
         
             
                  @required_args.each do |arg|
         
     | 
| 
       50 
66 
     | 
    
         
             
                    req_args << "--#{arg} "
         
     | 
| 
       51 
67 
     | 
    
         
             
                  end
         
     | 
| 
       52 
68 
     | 
    
         
             
                  puts "\nRequired args (at least one): #{req_args}\n\n"
         
     | 
| 
       53 
     | 
    
         
            -
                  # puts "\nRequired args (at least one):"
         
     | 
| 
       54 
     | 
    
         
            -
                  # @required_args.each do |arg|
         
     | 
| 
       55 
     | 
    
         
            -
                  #   puts "\t--#{arg}"
         
     | 
| 
       56 
     | 
    
         
            -
                  # end
         
     | 
| 
       57 
69 
     | 
    
         
             
                  exit(0)
         
     | 
| 
       58 
70 
     | 
    
         
             
                end
         
     | 
| 
       59 
71 
     | 
    
         
             
                args.on("-v", "--version", "Displays RVvM gem version") do
         
     | 
| 
         @@ -66,7 +78,6 @@ module Rvvm 
     | 
|
| 
       66 
78 
     | 
    
         
             
                args.on("--pkg NAME", "Creates a SystemVerilog package template (default path: <prj dir>/design/pkg)")
         
     | 
| 
       67 
79 
     | 
    
         
             
                args.on("--itf NAME", "Creates a SystemVerilog interface template (default path: <prj dir>/design/itf)")
         
     | 
| 
       68 
80 
     | 
    
         
             
                args.on("--svfile NAME", "Creates a generic SystemVerilog file template (default path: <prj dir>/design/src)")
         
     | 
| 
       69 
     | 
    
         
            -
                # args.on("--here", "Speciies pwd as a path when creating a file template")
         
     | 
| 
       70 
81 
     | 
    
         
             
                args.on("--path PATH", "Specifies a path relative to <prj dir> when creating a file template")
         
     | 
| 
       71 
82 
     | 
    
         
             
                args.on("-c", "--comp", "Compile SystemVerilog sources")
         
     | 
| 
       72 
83 
     | 
    
         
             
                args.on("-e", "--elab", "Elaborates project")
         
     | 
| 
         @@ -97,22 +108,31 @@ module Rvvm 
     | 
|
| 
       97 
108 
     | 
    
         
             
                args.on("--debug", "Script debug")
         
     | 
| 
       98 
109 
     | 
    
         
             
              end.parse!(into: @args)
         
     | 
| 
       99 
110 
     | 
    
         | 
| 
       100 
     | 
    
         
            -
               
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
               
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
      
 111 
     | 
    
         
            +
              # Simple argument check.
         
     | 
| 
      
 112 
     | 
    
         
            +
              #
         
     | 
| 
      
 113 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 114 
     | 
    
         
            +
              #
         
     | 
| 
      
 115 
     | 
    
         
            +
              # @since 0.8.0
         
     | 
| 
       104 
116 
     | 
    
         
             
              def self.check_args
         
     | 
| 
       105 
117 
     | 
    
         
             
                if @args[:all]
         
     | 
| 
       106 
118 
     | 
    
         
             
                  @args[:comp] = 1
         
     | 
| 
       107 
119 
     | 
    
         
             
                  @args[:elab] = 1
         
     | 
| 
       108 
120 
     | 
    
         
             
                  @args[:run] = 1
         
     | 
| 
       109 
121 
     | 
    
         
             
                end
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                # Check if a required arg is provided
         
     | 
| 
       110 
124 
     | 
    
         
             
                if Utils.all_nil?(@args, @required_args)
         
     | 
| 
       111 
125 
     | 
    
         
             
                  puts "\nNo required options provided!\nFor more info use -h or --help\n"
         
     | 
| 
       112 
     | 
    
         
            -
                  exit
         
     | 
| 
      
 126 
     | 
    
         
            +
                  exit(1)
         
     | 
| 
       113 
127 
     | 
    
         
             
                end
         
     | 
| 
       114 
128 
     | 
    
         
             
              end
         
     | 
| 
       115 
129 
     | 
    
         | 
| 
      
 130 
     | 
    
         
            +
              # Argument collision handling and additional settings for
         
     | 
| 
      
 131 
     | 
    
         
            +
              # batch simulation and dpi compilation.
         
     | 
| 
      
 132 
     | 
    
         
            +
              #
         
     | 
| 
      
 133 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 134 
     | 
    
         
            +
              #
         
     | 
| 
      
 135 
     | 
    
         
            +
              # @since 0.8.0
         
     | 
| 
       116 
136 
     | 
    
         
             
              def self.handle_args
         
     | 
| 
       117 
137 
     | 
    
         
             
                @args[:dpi] = 1 if @args[:all] && @config[:dpi][:dpilib] == 1
         
     | 
| 
       118 
138 
     | 
    
         | 
| 
         @@ -127,6 +147,16 @@ module Rvvm 
     | 
|
| 
       127 
147 
     | 
    
         
             
                end
         
     | 
| 
       128 
148 
     | 
    
         
             
              end
         
     | 
| 
       129 
149 
     | 
    
         | 
| 
      
 150 
     | 
    
         
            +
              # Shell command with debug printout.
         
     | 
| 
      
 151 
     | 
    
         
            +
              #
         
     | 
| 
      
 152 
     | 
    
         
            +
              # If --debug arg provided instead of calling `system`
         
     | 
| 
      
 153 
     | 
    
         
            +
              # prints the input command.
         
     | 
| 
      
 154 
     | 
    
         
            +
              #
         
     | 
| 
      
 155 
     | 
    
         
            +
              # @param command [String] command to be called/printed
         
     | 
| 
      
 156 
     | 
    
         
            +
              #
         
     | 
| 
      
 157 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 158 
     | 
    
         
            +
              #
         
     | 
| 
      
 159 
     | 
    
         
            +
              # @since 0.8.0
         
     | 
| 
       130 
160 
     | 
    
         
             
              def self.execute(command)
         
     | 
| 
       131 
161 
     | 
    
         
             
                if @args[:debug]
         
     | 
| 
       132 
162 
     | 
    
         
             
                  puts command
         
     | 
| 
         @@ -135,9 +165,28 @@ module Rvvm 
     | 
|
| 
       135 
165 
     | 
    
         
             
                end
         
     | 
| 
       136 
166 
     | 
    
         
             
              end
         
     | 
| 
       137 
167 
     | 
    
         | 
| 
      
 168 
     | 
    
         
            +
              # Creates a new RVvM project template in pwd with a given name.
         
     | 
| 
      
 169 
     | 
    
         
            +
              #
         
     | 
| 
      
 170 
     | 
    
         
            +
              # @param name [String] project name
         
     | 
| 
      
 171 
     | 
    
         
            +
              #
         
     | 
| 
      
 172 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 173 
     | 
    
         
            +
              #
         
     | 
| 
      
 174 
     | 
    
         
            +
              # @since 0.8.0
         
     | 
| 
       138 
175 
     | 
    
         
             
              def self.create_new_project(name)
         
     | 
| 
       139 
176 
     | 
    
         
             
                puts "\nRVvM: Generating new project: #{name} ...\n"
         
     | 
| 
       140 
177 
     | 
    
         | 
| 
      
 178 
     | 
    
         
            +
                if File.exist?(name)
         
     | 
| 
      
 179 
     | 
    
         
            +
                  print "      Directory #{name} already exists. Do you want to overwrite it? [y/n] "
         
     | 
| 
      
 180 
     | 
    
         
            +
                  input = gets.chomp
         
     | 
| 
      
 181 
     | 
    
         
            +
                  puts " "
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
                  if input == "y"
         
     | 
| 
      
 184 
     | 
    
         
            +
                    FileUtils.rm_rf(name)
         
     | 
| 
      
 185 
     | 
    
         
            +
                  else
         
     | 
| 
      
 186 
     | 
    
         
            +
                    exit(0)
         
     | 
| 
      
 187 
     | 
    
         
            +
                  end
         
     | 
| 
      
 188 
     | 
    
         
            +
                end
         
     | 
| 
      
 189 
     | 
    
         
            +
             
     | 
| 
       141 
190 
     | 
    
         
             
                FileUtils.mkdir(name)
         
     | 
| 
       142 
191 
     | 
    
         
             
                Dir.chdir(name)
         
     | 
| 
       143 
192 
     | 
    
         | 
| 
         @@ -187,15 +236,25 @@ module Rvvm 
     | 
|
| 
       187 
236 
     | 
    
         
             
                temp_conf[:PRJNAME] = name.upcase
         
     | 
| 
       188 
237 
     | 
    
         
             
                Utils.gen_template(@templates[:tbtop], "#{name}_tb_top.sv", temp_conf)
         
     | 
| 
       189 
238 
     | 
    
         | 
| 
      
 239 
     | 
    
         
            +
                puts " "
         
     | 
| 
       190 
240 
     | 
    
         
             
                system("git init")
         
     | 
| 
       191 
241 
     | 
    
         
             
                system("git add .")
         
     | 
| 
       192 
242 
     | 
    
         
             
                system('git commit -am "Initial commit"')
         
     | 
| 
       193 
243 
     | 
    
         | 
| 
       194 
     | 
    
         
            -
                puts "\nRVvM: New project generated.  
     | 
| 
      
 244 
     | 
    
         
            +
                puts "\nRVvM: New project generated. ^^\n\n"
         
     | 
| 
       195 
245 
     | 
    
         | 
| 
       196 
246 
     | 
    
         
             
                exit(0)
         
     | 
| 
      
 247 
     | 
    
         
            +
              rescue StandardError => e
         
     | 
| 
      
 248 
     | 
    
         
            +
                puts "RVvM: Failed to create project...\n #{e.message}\n"
         
     | 
| 
      
 249 
     | 
    
         
            +
                exit(1)
         
     | 
| 
       197 
250 
     | 
    
         
             
              end
         
     | 
| 
       198 
251 
     | 
    
         | 
| 
      
 252 
     | 
    
         
            +
              # Loads and parses rvvmconf.json config file from
         
     | 
| 
      
 253 
     | 
    
         
            +
              # an RVvM project rvvm directory.
         
     | 
| 
      
 254 
     | 
    
         
            +
              #
         
     | 
| 
      
 255 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 256 
     | 
    
         
            +
              #
         
     | 
| 
      
 257 
     | 
    
         
            +
              # @since 0.8.0
         
     | 
| 
       199 
258 
     | 
    
         
             
              def self.load_config
         
     | 
| 
       200 
259 
     | 
    
         
             
                puts "\nRVvM: Loading RVvM project config..."
         
     | 
| 
       201 
260 
     | 
    
         | 
| 
         @@ -210,14 +269,27 @@ module Rvvm 
     | 
|
| 
       210 
269 
     | 
    
         | 
| 
       211 
270 
     | 
    
         
             
                @config = JSON.parse(json_file) if json_file
         
     | 
| 
       212 
271 
     | 
    
         
             
                @config = @config.transform_values do |v|
         
     | 
| 
       213 
     | 
    
         
            -
                  v.transform_keys(&:to_sym)
         
     | 
| 
      
 272 
     | 
    
         
            +
                  v.is_a?(Hash) ? v.transform_keys(&:to_sym) : v
         
     | 
| 
       214 
273 
     | 
    
         
             
                end.transform_keys(&:to_sym)
         
     | 
| 
      
 274 
     | 
    
         
            +
              rescue JSON::ParserError => e
         
     | 
| 
      
 275 
     | 
    
         
            +
                puts "     Invalid config json!\n\n#{e.message}"
         
     | 
| 
      
 276 
     | 
    
         
            +
                exit(1)
         
     | 
| 
       215 
277 
     | 
    
         
             
              end
         
     | 
| 
       216 
278 
     | 
    
         | 
| 
      
 279 
     | 
    
         
            +
              # Navigates to project top (rvvm directory of the RVvM project).
         
     | 
| 
      
 280 
     | 
    
         
            +
              #
         
     | 
| 
      
 281 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 282 
     | 
    
         
            +
              #
         
     | 
| 
      
 283 
     | 
    
         
            +
              # @since 0.8.0
         
     | 
| 
       217 
284 
     | 
    
         
             
              def self.prj_top
         
     | 
| 
       218 
285 
     | 
    
         
             
                Dir.chdir(@config_path)
         
     | 
| 
       219 
286 
     | 
    
         
             
              end
         
     | 
| 
       220 
287 
     | 
    
         | 
| 
      
 288 
     | 
    
         
            +
              # Compiles project SystemVerilog sources using xvlog.
         
     | 
| 
      
 289 
     | 
    
         
            +
              #
         
     | 
| 
      
 290 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 291 
     | 
    
         
            +
              #
         
     | 
| 
      
 292 
     | 
    
         
            +
              # @since 0.8.0
         
     | 
| 
       221 
293 
     | 
    
         
             
              def self.compile
         
     | 
| 
       222 
294 
     | 
    
         
             
                cmd_args = @config[:compilation][:args]
         
     | 
| 
       223 
295 
     | 
    
         
             
                logname = @args[:complog] || File.join([@config[:project][:logDir], @config[:compilation][:logDir], @config[:compilation][:log]])
         
     | 
| 
         @@ -229,6 +301,12 @@ module Rvvm 
     | 
|
| 
       229 
301 
     | 
    
         
             
                execute(cmd)
         
     | 
| 
       230 
302 
     | 
    
         
             
              end
         
     | 
| 
       231 
303 
     | 
    
         | 
| 
      
 304 
     | 
    
         
            +
              # Compiles C/C++ sources into a shared library to use during
         
     | 
| 
      
 305 
     | 
    
         
            +
              # elaboration and simulation using DPI-C.
         
     | 
| 
      
 306 
     | 
    
         
            +
              #
         
     | 
| 
      
 307 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 308 
     | 
    
         
            +
              #
         
     | 
| 
      
 309 
     | 
    
         
            +
              # @Since 0.9.0
         
     | 
| 
       232 
310 
     | 
    
         
             
              def self.dpi_c
         
     | 
| 
       233 
311 
     | 
    
         
             
                cmd_args = @config[:dpi][:args]
         
     | 
| 
       234 
312 
     | 
    
         
             
                dpilist = @args[:dpilist] || @config[:dpi][:list]
         
     | 
| 
         @@ -239,6 +317,11 @@ module Rvvm 
     | 
|
| 
       239 
317 
     | 
    
         
             
                execute(cmd)
         
     | 
| 
       240 
318 
     | 
    
         
             
              end
         
     | 
| 
       241 
319 
     | 
    
         | 
| 
      
 320 
     | 
    
         
            +
              # Elaborates project into a testbench snapshot using xelab.
         
     | 
| 
      
 321 
     | 
    
         
            +
              #
         
     | 
| 
      
 322 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 323 
     | 
    
         
            +
              #
         
     | 
| 
      
 324 
     | 
    
         
            +
              # @since 0.8.0
         
     | 
| 
       242 
325 
     | 
    
         
             
              def self.elaborate
         
     | 
| 
       243 
326 
     | 
    
         
             
                cmd_args = @config[:elaboration][:args]
         
     | 
| 
       244 
327 
     | 
    
         
             
                cmd_args << " -sv_lib dpi" if @args[:dpi] || @args[:dpilib] || @config[:dpi][:dpilib] == 1
         
     | 
| 
         @@ -256,6 +339,11 @@ module Rvvm 
     | 
|
| 
       256 
339 
     | 
    
         
             
                execute(cmd)
         
     | 
| 
       257 
340 
     | 
    
         
             
              end
         
     | 
| 
       258 
341 
     | 
    
         | 
| 
      
 342 
     | 
    
         
            +
              # Runs UVM test simulation on an elaborated testbench snapshot using xrun.
         
     | 
| 
      
 343 
     | 
    
         
            +
              #
         
     | 
| 
      
 344 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 345 
     | 
    
         
            +
              #
         
     | 
| 
      
 346 
     | 
    
         
            +
              # @since 0.8.0
         
     | 
| 
       259 
347 
     | 
    
         
             
              def self.run_sim
         
     | 
| 
       260 
348 
     | 
    
         
             
                cmd_args = @config[:simulation][:args]
         
     | 
| 
       261 
349 
     | 
    
         
             
                if @args[:wave]
         
     | 
| 
         @@ -263,10 +351,12 @@ module Rvvm 
     | 
|
| 
       263 
351 
     | 
    
         
             
                else
         
     | 
| 
       264 
352 
     | 
    
         
             
                  cmd_args << "-R"
         
     | 
| 
       265 
353 
     | 
    
         
             
                end
         
     | 
| 
       266 
     | 
    
         
            -
             
     | 
| 
      
 354 
     | 
    
         
            +
                
         
     | 
| 
      
 355 
     | 
    
         
            +
                # Run simulaton on an array of tests.
         
     | 
| 
      
 356 
     | 
    
         
            +
                # If in not running in batch mode testlist is an array with a single test
         
     | 
| 
       267 
357 
     | 
    
         
             
                test = @args[:test] || @config[:simulation][:defTest]
         
     | 
| 
       268 
     | 
    
         
            -
                # TODO: parse test list
         
     | 
| 
       269 
358 
     | 
    
         
             
                testlist = [test]
         
     | 
| 
      
 359 
     | 
    
         
            +
                testlist = @args[:testlist] || @config[:simulation][:testlist] if @args[:batch] || @config[:simulation][:batch] == 1
         
     | 
| 
       270 
360 
     | 
    
         | 
| 
       271 
361 
     | 
    
         
             
                tb = @args[:simtb] || @args[:tb] || @config[:elaboration][:tb]
         
     | 
| 
       272 
362 
     | 
    
         | 
| 
         @@ -276,7 +366,7 @@ module Rvvm 
     | 
|
| 
       276 
366 
     | 
    
         
             
                  puts "RVvM: Running test #{i + 1}/#{testlist.size}: #{simtest}"
         
     | 
| 
       277 
367 
     | 
    
         | 
| 
       278 
368 
     | 
    
         
             
                  logname = File.join([@config[:project][:logDir], @config[:simulation][:logDir], @config[:simulation][:log]])
         
     | 
| 
       279 
     | 
    
         
            -
                  logname = Utils. 
     | 
| 
      
 369 
     | 
    
         
            +
                  logname = Utils.interpolate(logname, { testname: simtest })
         
     | 
| 
       280 
370 
     | 
    
         | 
| 
       281 
371 
     | 
    
         
             
                  verb = "UVM_#{@args[:verb] || @config[:simulation][:verbosity]}"
         
     | 
| 
       282 
372 
     | 
    
         | 
| 
         @@ -285,6 +375,11 @@ module Rvvm 
     | 
|
| 
       285 
375 
     | 
    
         
             
                end
         
     | 
| 
       286 
376 
     | 
    
         
             
              end
         
     | 
| 
       287 
377 
     | 
    
         | 
| 
      
 378 
     | 
    
         
            +
              # Runs a pure SystemVerilog/Verilog simulation using xrun.
         
     | 
| 
      
 379 
     | 
    
         
            +
              #
         
     | 
| 
      
 380 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 381 
     | 
    
         
            +
              #
         
     | 
| 
      
 382 
     | 
    
         
            +
              # @since 0.9.0
         
     | 
| 
       288 
383 
     | 
    
         
             
              def self.run_sv
         
     | 
| 
       289 
384 
     | 
    
         
             
                cmd_args = @config[:simulation][:args]
         
     | 
| 
       290 
385 
     | 
    
         
             
                tb = @args[:simtb] || @args[:tb] || @config[:elaboration][:tb]
         
     | 
| 
         @@ -295,7 +390,12 @@ module Rvvm 
     | 
|
| 
       295 
390 
     | 
    
         
             
                cmd = "xsim #{tb} -log #{logname} #{cmd_args}"
         
     | 
| 
       296 
391 
     | 
    
         
             
                execute(cmd)
         
     | 
| 
       297 
392 
     | 
    
         
             
              end
         
     | 
| 
       298 
     | 
    
         
            -
             
     | 
| 
      
 393 
     | 
    
         
            +
              
         
     | 
| 
      
 394 
     | 
    
         
            +
              # Opens last generated waveform trace dump to inspect in Vivado GUI.
         
     | 
| 
      
 395 
     | 
    
         
            +
              #
         
     | 
| 
      
 396 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 397 
     | 
    
         
            +
              #
         
     | 
| 
      
 398 
     | 
    
         
            +
              # @since 0.9.0
         
     | 
| 
       299 
399 
     | 
    
         
             
              def self.gui
         
     | 
| 
       300 
400 
     | 
    
         
             
                dump = @args[:wavefile] || "#{@config[:elaboration][:tb]}.wdb"
         
     | 
| 
       301 
401 
     | 
    
         | 
| 
         @@ -303,16 +403,34 @@ module Rvvm 
     | 
|
| 
       303 
403 
     | 
    
         
             
                execute(cmd)
         
     | 
| 
       304 
404 
     | 
    
         
             
              end
         
     | 
| 
       305 
405 
     | 
    
         | 
| 
      
 406 
     | 
    
         
            +
              # Generates UVM test functional coverage report using xcrg.
         
     | 
| 
      
 407 
     | 
    
         
            +
              #
         
     | 
| 
      
 408 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 409 
     | 
    
         
            +
              #
         
     | 
| 
      
 410 
     | 
    
         
            +
              # @since 0.9.0
         
     | 
| 
       306 
411 
     | 
    
         
             
              def self.coverage
         
     | 
| 
       307 
412 
     | 
    
         
             
                cmd = "xcrg -report_format html -dir xsim.covdb"
         
     | 
| 
       308 
413 
     | 
    
         
             
                execute(cmd)
         
     | 
| 
       309 
414 
     | 
    
         
             
              end
         
     | 
| 
       310 
415 
     | 
    
         | 
| 
      
 416 
     | 
    
         
            +
              # Opens last generated functional coverage report in a HTML dashboard.
         
     | 
| 
      
 417 
     | 
    
         
            +
              #
         
     | 
| 
      
 418 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 419 
     | 
    
         
            +
              #
         
     | 
| 
      
 420 
     | 
    
         
            +
              # @since 0.9.0
         
     | 
| 
       311 
421 
     | 
    
         
             
              def self.cov_report
         
     | 
| 
       312 
422 
     | 
    
         
             
                Dir.chdir("xcrg_func_cov_report")
         
     | 
| 
       313 
423 
     | 
    
         
             
                execute("./dashboard.html")
         
     | 
| 
       314 
424 
     | 
    
         
             
              end
         
     | 
| 
       315 
425 
     | 
    
         | 
| 
      
 426 
     | 
    
         
            +
              # Generates a SystemVerilog module/interface template.
         
     | 
| 
      
 427 
     | 
    
         
            +
              #
         
     | 
| 
      
 428 
     | 
    
         
            +
              # @param type [String] specifies modudle/itf
         
     | 
| 
      
 429 
     | 
    
         
            +
              # @param name [String] specifies module/itf name
         
     | 
| 
      
 430 
     | 
    
         
            +
              #
         
     | 
| 
      
 431 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 432 
     | 
    
         
            +
              #
         
     | 
| 
      
 433 
     | 
    
         
            +
              # @since 0.9.0
         
     | 
| 
       316 
434 
     | 
    
         
             
              def self.create_module(type, name)
         
     | 
| 
       317 
435 
     | 
    
         
             
                conf = @templates[:module][:conf]
         
     | 
| 
       318 
436 
     | 
    
         
             
                conf[:module] = name
         
     | 
| 
         @@ -330,6 +448,13 @@ module Rvvm 
     | 
|
| 
       330 
448 
     | 
    
         
             
                exit(0)
         
     | 
| 
       331 
449 
     | 
    
         
             
              end
         
     | 
| 
       332 
450 
     | 
    
         | 
| 
      
 451 
     | 
    
         
            +
              # Generates a SystemVerilog package template.
         
     | 
| 
      
 452 
     | 
    
         
            +
              #
         
     | 
| 
      
 453 
     | 
    
         
            +
              # @param name [String] specifies package name
         
     | 
| 
      
 454 
     | 
    
         
            +
              #
         
     | 
| 
      
 455 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 456 
     | 
    
         
            +
              #
         
     | 
| 
      
 457 
     | 
    
         
            +
              # @since 0.9.0
         
     | 
| 
       333 
458 
     | 
    
         
             
              def self.create_pkg(name)
         
     | 
| 
       334 
459 
     | 
    
         
             
                conf = @templates[:package][:conf]
         
     | 
| 
       335 
460 
     | 
    
         
             
                conf[:package] = name
         
     | 
| 
         @@ -346,6 +471,13 @@ module Rvvm 
     | 
|
| 
       346 
471 
     | 
    
         
             
                exit(0)
         
     | 
| 
       347 
472 
     | 
    
         
             
              end
         
     | 
| 
       348 
473 
     | 
    
         | 
| 
      
 474 
     | 
    
         
            +
              # Generates a generic SystemVerilog template file.
         
     | 
| 
      
 475 
     | 
    
         
            +
              #
         
     | 
| 
      
 476 
     | 
    
         
            +
              # @param name [String] specifies template name
         
     | 
| 
      
 477 
     | 
    
         
            +
              #
         
     | 
| 
      
 478 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 479 
     | 
    
         
            +
              #
         
     | 
| 
      
 480 
     | 
    
         
            +
              # @since 0.9.0
         
     | 
| 
       349 
481 
     | 
    
         
             
              def self.create_svfile(name)
         
     | 
| 
       350 
482 
     | 
    
         
             
                conf = @templates[:svfile][:conf]
         
     | 
| 
       351 
483 
     | 
    
         
             
                conf[:NAME] = name.upcase
         
     | 
| 
         @@ -361,6 +493,11 @@ module Rvvm 
     | 
|
| 
       361 
493 
     | 
    
         
             
                exit(0)
         
     | 
| 
       362 
494 
     | 
    
         
             
              end
         
     | 
| 
       363 
495 
     | 
    
         | 
| 
      
 496 
     | 
    
         
            +
              # Runs rvvm calling its methods based on provided script args.
         
     | 
| 
      
 497 
     | 
    
         
            +
              #
         
     | 
| 
      
 498 
     | 
    
         
            +
              # @return [void]
         
     | 
| 
      
 499 
     | 
    
         
            +
              #
         
     | 
| 
      
 500 
     | 
    
         
            +
              # @since 0.8.0
         
     | 
| 
       364 
501 
     | 
    
         
             
              def self.run
         
     | 
| 
       365 
502 
     | 
    
         
             
                create_new_project(@args[:new]) if @args[:new]
         
     | 
| 
       366 
503 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: rvvm
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.9. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.9.4
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - mrbya
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2024-09- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2024-09-17 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       13 
13 
     | 
    
         
             
            description: RVvM is a Ruby based meta tool to manage/compile/elaborate and run simulations
         
     | 
| 
       14 
14 
     | 
    
         
             
              on SystemVerilog and UVM based projects using Xilinx Vivado xvlog, xelab, xrun,
         
     | 
| 
         @@ -26,6 +26,7 @@ files: 
     | 
|
| 
       26 
26 
     | 
    
         
             
            - LICENSE.txt
         
     | 
| 
       27 
27 
     | 
    
         
             
            - README.md
         
     | 
| 
       28 
28 
     | 
    
         
             
            - Rakefile
         
     | 
| 
      
 29 
     | 
    
         
            +
            - bin/sandbox
         
     | 
| 
       29 
30 
     | 
    
         
             
            - exe/rvvm
         
     | 
| 
       30 
31 
     | 
    
         
             
            - lib/rvvm.rb
         
     | 
| 
       31 
32 
     | 
    
         
             
            - lib/rvvm/templates.rb
         
     |