Перейти к содержанию
    

Modelsim, автоматизация создания do скриптов

Тема ожила =) Получил аж вдохновение, придется накатать bash скрипт с парсером qsf и другими линукс примочками =) Если красиво получится, может тут выложу, вдруг пригодится

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 minutes ago, new123 said:

Тема ожила =) Получил аж вдохновение, придется накатать bash скрипт с парсером qsf и другими линукс примочками =) Если красиво получится, может тут выложу, вдруг пригодится

Лучше на питоне. Даёшь кроссплатформенность)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, nice_vladi said:

Лучше на питоне. Даёшь кроссплатформенность)

Питон совсем не знаю. Я уже около 5 лет на линуксе и там как то привык на bash все парсить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, new123 said:

Питон совсем не знаю. Я уже около 5 лет на линуксе и там как то привык на bash все парсить.

Отличный повод просветиться и повысить компетенции =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

pyfxbn Приветствую!

2 hours ago, nice_vladi said:

Лучше на питоне. Даёшь кроссплатформенность)

Тут уж  кому что более нравится, НО! -TCL родной язык FPGA тулов -  тянуть что то внешнее значит добавлять зависимости.  Простой парсер на tcl займет от силы сотню строк, например как основа:

Spoiler

proc qip_prser {fname {out_lib "work"} {out_dir "./out"}} {
  puts ">>> qip_prser: file:$fname -> lib:$out_lib -> out:$out_dir"

  set fname   [file normalize $fname]
  set qip_dir [file dirname   $fname]
 
  set fi    [open $fname "r"]
  set lines [split [read $fi] "\n"]
  close $fi

  set qip_list [list]
  set out_list [list]
  set ::quartus(qip_path) $qip_dir
  set ::quartus(sip_path) $qip_dir

  foreach line $lines {
    puts ">>$line"
    if {[regexp -- {^\#} $line]} {
      continue
    }

    if {![regexp -- {^\s*set_global_assignment\s+.*?-name\s+(\w+)\s+((?:\[.+?\])|(?:\".+\")|(?:\$.+))} $line -> kind kind_val]} {
      continue
    }
    set in_fname  [relative_to [subst $kind_val] $qip_dir]
    set ip_name   [file rootname  [file tail $in_fname]]

    set src_fname [lexnormalize [file join $qip_dir $in_fname]]
    set out_fname [file join $out_dir $in_fname]

    if {![regexp -- {-library\s+((?:\"\w+\")|(?:\w+))} $line -> lib_name]} {
      set lib_name $out_lib
    }
    set lib_name [string map {\" {}} $lib_name]

    switch $kind {
      "SIP_FILE" -
      "QIP_FILE" {
        # ...
      }

      "VERILOGINCLUDE_FILE" {
        # ...
      }

      "VERILOG_FILE" -
      "VHDL_FILE"    -
      "SYSTEMVERILOG_FILE" {
        # ...
      }

      "SOURCE_FILE" -
      "MISC_FILE" {
        puts ">> sip:$is_sip, misc kind: $kind, val:[subst $kind_val]"

        set fext [string tolower [file extension $in_fname]]

        switch $fext {
          ".vhd" {
            # ...
          }

          ".sv" {
            # ...
          }

          ".vo" -
          ".v" {
            # ...
          }

          ".mem" -
          ".hex" {
            # ...
          }

          default {
            puts ">> undefine misc file ext: $fext"
          }
        }
      }

      default {
        puts ">> undefine kind: $kind"
      }
    }
  }

  # recursive process included QIP
  foreach qip_file $qip_list {
    lappend out_list {*}[qip_prser $qip_file $out_lib "$out_dir/$ip_name"]
  }

  return $out_list
}

 

 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

25 minutes ago, RobFPGA said:

Простой парсер на tcl займе

не знал что он так может, еще и регексы поддерживает. спасибо за пример

Изменено пользователем new123

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

On 8/7/2020 at 1:43 PM, new123 said:

не знал что он так может, еще и регексы поддерживает. спасибо за пример

Удивительное  рядом -  например весь  GUI Modelsim писан на TCL/TK  и там не только regexp есть :wink3:  Что позволяет при некотором усилии например менять или добавлять свой функционал внутрь GUI (свои менюшки,  дополнительные функции, и.т.д. и.т.п. )

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...