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

Передача значения из TCL в HDL

Всем добра.
Хочу  передавать изменяющееся в TCL значение в симулируемый посредством Mentor-а HDL.

Запускаю simulate.bat

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

где simulate.tcl выглядит так

source compilation.tcl
variable testbench tb
variable library work

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

vlib $library

variable DirectoriesList [pwd]
variable Extension2Compile sv
variable Keys "+define+TEST_NUMBER=3"
 
if {[compilation $DirectoriesList $Extension2Compile $Keys]} {
    vsim -L work work.$testbench
    run 100ns
} else {
    puts "Error compiling files!"
} 

compilation.tcl, в свою очередь, так:
 

Spoiler

proc compilation {DirectoriesList Extension2Compile Keys} { 

    variable Failure 0
    variable Success 1
    
    variable DirectoriesListNum [llength $DirectoriesList]
    puts "DirectoriesListNum == $DirectoriesListNum"
    if { $DirectoriesListNum == 0} {
        puts "No directories to compile!"
        return $Failure
    }    

    for {set i 0} {$i < $DirectoriesListNum} {incr i} {
    
        variable CurrDirectoryPath [lindex $DirectoriesList $i]
        puts "CurrDirectoryPath == $CurrDirectoryPath at lindex = $i"
        
        variable FilesOfCurrDirCompiled $Failure
        variable FilesOfCurrDir2Compile [glob -nocomplain $CurrDirectoryPath/*.$Extension2Compile]
        
        if [llength $FilesOfCurrDir2Compile] {
            vlog +acc $Keys $CurrDirectoryPath/*.$Extension2Compile
            variable FilesOfCurrDirCompiled $Success
        }
        
        puts "FilesOfCurrDirCompiled = $FilesOfCurrDirCompiled"
        if {$FilesOfCurrDirCompiled == $Failure} {
            puts "failure"
            return $Failure        
        } else {
            puts "success"        
        }
        
    }
    
    return $Success
    
} 

 

итоговый transcript выглядит так:
 

# 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.
# //
# source simulate.tcl
# DirectoriesListNum == 1
# CurrDirectoryPath == D:/tcl2tb/Sim at lindex = 0
# QuestaSim-64 vlog 2020.1 Compiler 2020.01 Jan 28 2020
# Start time: 18:56:06 on Sep 24,2021
# vlog -reportprogress 300 "+acc" "+define+TEST_NUMBER=3" D:/tcl2tb/Sim/tb.sv 
# -- Compiling module tb
# 
# Top level modules:
# 	tb
# End time: 18:56:06 on Sep 24,2021, Elapsed time: 0:00:00
# Errors: 0, Warnings: 0
# FilesOfCurrDirCompiled = 1
# success
# End time: 18:56:09 on Sep 24,2021, Elapsed time: 0:07:02
# Errors: 0, Warnings: 0
# vsim -L work work.tb 
# Start time: 18:56:10 on Sep 24,2021
# ** Note: (vsim-8009) Loading existing optimized design _opt
# Loading sv_std.std
# Loading work.tb(fast)
# TSTNUM1 = 1
# TSTNUM2 = 2

откуда следует, что из TCL в HDL (SV) величины не передались. ЧЯДНТ?

Проект, как всегда, в скрепке.

tcl2hdl.zip

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


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

12 часов назад, MaratZuev сказал:

ЧЯДНТ?

Не читаете документацию на симулятор? Не верю, чтобы там не было это описано.

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


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

2 hours ago, andrew_b said:

Не читаете документацию на симулятор? Не верю, чтобы там не было это описано.

Не поверите, но, прежде задавать вопросы здесь ли или где, я приучен сам сначала искать где возможно ответы. В документации не нашёл. Но сам дошёл до ответа, как и в предыдущий раз. Видимо, не хватает стимулов в виде порицания.

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


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

У vsim есть ключик -G для переопределения всех параметров с таким именем в исходника, либо ключик -g, который перреопределяет параметр с таким именем в модуле верхнего уровня

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


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

On 9/25/2021 at 9:54 AM, MaratZuev said:

 В документации не нашёл. Но сам дошёл до ответа, как и в предыдущий раз. 

Анатолий, могли бы написать, в чем была проблема?

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


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

On 9/26/2021 at 3:17 PM, Джеймс said:

в чем была проблема?

Вот в этой строке 

variable Keys "+define+TEST_NUMBER=3"

кавычки лишние

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


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

On 9/27/2021 at 4:40 PM, MaratZuev said:

Вот в этой строке 


variable Keys "+define+TEST_NUMBER=3"

кавычки лишние

Это выглядит потрясающе. Для стандартного TCL парсера не должно быть никакой разницы. Я специально проверил в tclsh:

set a "+define+TEST_NUMBER=3"
set b +define+TEST_NUMBER=3
put [expr {$a==$b}]
1

Неужели у Квесты парсер какой-то не стандартный?

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


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

Тогда непонятно, как кавычки могли повлиять. Ещё хочу заметить, чтобы в vlog можно было передать несколько ключей, заданных в Keys списком, как независимые параметры, а не одной строкой, нужно написать в compilation.tcl

eval vlog +acc $Keys [list $CurrDirectoryPath/*.$Extension2Compile]

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

Или в современном варианте 

vlog +acc {*}$Keys $CurrDirectoryPath/*.$Extension2Compile

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


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

On 10/14/2021 at 7:23 AM, Timmy said:

в современном варианте

Прошу пояснить, что Вы подразумеваете под оным?

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


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

1 hour ago, MaratZuev said:

Прошу пояснить, что Вы подразумеваете под оным?

Оператор {*}, позволяющий непосредственно разворачивать список в несколько параметров, появился относительно недавно.

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


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

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

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

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

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

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

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

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

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

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