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

Снова TCL ставит ногу в стремя ...

Всем добра.
Продолжаю разбираться с TCL, но уже в применении к Mentor-у.
Итого имею simulate.bat

@echo off
set Mentor=c:\MentorGraphics\QuestaSim64_2020.1\win64\questasim.exe
set TCL=simulate.tcl
%Mentor% -do %TCL%
pause

который передаёт exe Mentor-a (в данном случае Questa) simulate.tcl

Spoiler

# clear transript window
.main clear

# main window at full screen
wm state . zoomed

source compilation.tcl
source printLine.tcl
source wave_window_signals_pre.tcl
source wave_window_signals_post.tcl
    
variable testbench frontdetect_tb

# create library
variable library work

if [file exists $library] {
    vdel -all
}

vlib $library

variable project_path [pwd]/../RTL/Project
variable testbench_path [pwd]/../RTL/TestBench

if {[compilation $project_path] && [compilation $testbench_path]} {

    vsim -L work work.$testbench
   
    variable wave_window_kind "white_foreground_and_black_background"    
    
    variable wave_window_signals_pre_result [wave_window_signals_pre $wave_window_kind]
    variable wave_attrib_string_color [lindex $wave_window_signals_pre_result 0]
    variable wave_attrib_string_black [lindex $wave_window_signals_pre_result 1]
    
    variable add_wave_start_line_num [printLine [info frame]]
    
    variable curr_sim_path sim:/$testbench
    add wave $wave_attrib_string_color $wave_attrib_string_black -divider "frontdetect_tb"
    add wave $wave_attrib_string_color $wave_attrib_string_black $curr_sim_path/rstn
    add wave $wave_attrib_string_color $wave_attrib_string_black $curr_sim_path/clk
    add wave $wave_attrib_string_color $wave_attrib_string_black $curr_sim_path/din
    add wave $wave_attrib_string_color $wave_attrib_string_black $curr_sim_path/rising_front
    add wave $wave_attrib_string_color $wave_attrib_string_black $curr_sim_path/falling_front    
    
    variable curr_sim_path $curr_sim_path/frontdetect_inst
    add wave $wave_attrib_string_color $wave_attrib_string_black -divider "frontdetect_inst"
    add wave $wave_attrib_string_color $wave_attrib_string_black $curr_sim_path/dinreg

    variable add_wave_end_line_num [printLine [info frame]]
    
    variable start_display_time 0ns
    variable end_display_time 200ns     
    
    wave_window_signals_post $wave_window_kind $testbench $add_wave_start_line_num $add_wave_end_line_num $start_display_time $end_display_time    
    
} else {
    puts "Error compiling files!"
} 

 

в котором в двух строках в соответствии с этими рекомендациями вычисляются номера строк следующим образом

variable add_wave_start_line_num [printLine [info frame]]

где printLine.tcl выгядит так:

proc printLine {frame_info} {
    return [dict get [info frame $frame_info] line]
}

а эти номера позднее используются при поиске и подсчёте количества строк в функции cnt_add_wave_strings.tcl
 

Spoiler

proc cnt_add_wave_strings {add_wave_start_line_num add_wave_end_line_num} {

    variable searched_file "simulate.tcl"
    variable searched_string "add wave"

    variable searched_file_id [open $searched_file r]
    seek $searched_file_id 0 start

    variable line_num 1
    while {[gets $searched_file_id line] >= 0 && $line_num < $add_wave_start_line_num} {
        incr line_num
    }
    
    variable searched_string_line_num 0
    while {[gets $searched_file_id line] >= 0 && $line_num < $add_wave_end_line_num} {
        puts "searching line = $line"
        variable searched_string_is_found [string first $searched_string $line]
        if {$searched_string_is_found != -1} { # found
            puts "at line = $line_num searched_string = $searched_string is found"
            incr searched_string_line_num
        }
        incr line_num
    }

    close $searched_file_id
    return $searched_string_line_num
};

 

Transcript при запуске выдаёт полностью
 

Spoiler

# Reading pref.tcl
# //  Questa Sim-64
# //  Version 2020.1 win64 Jan 28 2020
# //
# //  Copyright 1991-2020 Mentor Graphics Corporation
# //  All Rights Reserved.
# //
# //  QuestaSim and its associated documentation contain trade
# //  secrets and commercial or financial information that are the property of
# //  Mentor Graphics Corporation and are privileged, confidential,
# //  and exempt from disclosure under the Freedom of Information Act,
# //  5 U.S.C. Section 552. Furthermore, this information
# //  is prohibited from disclosure under the Trade Secrets Act,
# //  18 U.S.C. Section 1905.
# //
# do simulate.tcl
# QuestaSim-64 vlog 2020.1 Compiler 2020.01 Jan 28 2020
# Start time: 14:45:26 on Sep 21,2021
# vlog -reportprogress 300 "+acc" F:/Emasculated/Sim/../RTL/Project/frontdetect.sv 
# -- Compiling module frontdetect
# 
# Top level modules:
# 	frontdetect
# End time: 14:45:26 on Sep 21,2021, Elapsed time: 0:00:00
# Errors: 0, Warnings: 0
# FilesCompiled = 1
# QuestaSim-64 vlog 2020.1 Compiler 2020.01 Jan 28 2020
# Start time: 14:45:26 on Sep 21,2021
# vlog -reportprogress 300 "+acc" F:/Emasculated/Sim/../RTL/TestBench/frontdetect_tb.sv 
# -- Compiling package frontdetect_tb_sv_unit
# -- Compiling module frontdetect_tb
# 
# Top level modules:
# 	frontdetect_tb
# End time: 14:45:26 on Sep 21,2021, Elapsed time: 0:00:00
# Errors: 0, Warnings: 0
# FilesCompiled = 1
# vsim -L work work.frontdetect_tb 
# Start time: 14:45:26 on Sep 21,2021
# ** Note: (vsim-3812) Design is being optimized...
# Loading sv_std.std
# Loading work.frontdetect_tb_sv_unit(fast)
# Loading work.frontdetect_tb(fast)
# Loading work.frontdetect(fast)
# add_wave_start_line_num = 11, add_wave_end_line_num = 25
# searching line = variable testbench frontdetect_tb
# searching line = 
# searching line = # create library
# searching line = variable library work
# searching line = 
# searching line = if [file exists $library] {
# searching line =     vdel -all
# searching line = }
# searching line = 
# searching line = vlib $library
# searching line = 
# searching line = variable project_path [pwd]/../RTL/Project
# searching line = variable testbench_path [pwd]/../RTL/TestBench
# searching line = 
# num_lines counted by cnt_add_wave_strings.tcl is 0
# Time scale of (frontdetect_tb) is  10fs /  1fs
# Time scale of (frontdetect_tb.frontdetect_inst) is  1fs /  1fs
# CLK_64MHZ_PERIOD   = 1562500
# CLK_64MHZ_HALF_PRD = 781250
# Run time was 185 milliseconds : 315 microseconds
# 0 fs
# 200 ns

 

Или номера строк
# add_wave_start_line_num = 11, add_wave_end_line_num = 25
что не соответствует действительности.
Не надеюсь на хоть какую-то осмысленную помощь в этом деле, всё-таки позволю себе спросить: ЧЯДНТ?
Все концы, как обычно, прилагаю.

front_detect.zip

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


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

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

 

Могу предположить что при загрузке скрипта по опции -do (или запуском в консоли через do ...) последний как то пакуется/частично исполняется до исполнения непосредственно самого скрипта, например убираются пробелы, пустые строки, определения proc ... Что  естественно ломает  ожидаемую нумерацию  строк при его дальнейшем исполнении. То есть -do это не эквивалент source, это не просто загрузка фала. 
Во всяком случае на моей тестовой кошечке это выглядит похоже.
При запуске через source tst_cat.tcl в консоли Ms все ок, а вот при запуске через опцию -do или в консоли через do tst_cat.tcl такие же непонятные значения   

Spoiler

proc printLine {frame_id} {
    return [dict get [info frame $frame_id] line]
}

proc printFrame {frame_id} {
    return [info frame $frame_id]
}

for {set ii 1} {$ii<=[info frame]} {incr ii} {
  puts ">> $ii==>[info frame $ii] : [printFrame $ii] : [printLine $ii]"
}

variable  start_line [printLine [info frame]]

if {$start_line>0} {
  puts ">>1  [printFrame [info frame]]"

  puts ">>2  [printFrame [info frame]]"
}
variable  end_line [printLine [info frame]]

puts ">>3 start_line:$start_line,  end_line:$end_line"

 

 

Удачи! Rob. 

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


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

8 hours ago, RobFPGA said:

При запуске через source tst_cat.tcl в консоли Ms все ок

Да, спасибо: замена на Ваш вариант решила поставленный вопрос.
Скорректированный командный файл выглядит так:

set Mentor=c:\MentorGraphics\QuestaSim64_2020.1\win64\questasim.exe
set TCL="source simulate.tcl"
%Mentor% -do %TCL%

 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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