MaratZuev 0 21 сентября, 2021 Опубликовано 21 сентября, 2021 · Жалоба Всем добра. Продолжаю разбираться с 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 21 сентября, 2021 Опубликовано 21 сентября, 2021 · Жалоба Приветствую! Могу предположить что при загрузке скрипта по опции -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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaratZuev 0 21 сентября, 2021 Опубликовано 21 сентября, 2021 · Жалоба 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% Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться