Jump to content

    
MaratZuev

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

Recommended Posts

Всем добра.
Хочу  передавать изменяющееся в 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

Share this post


Link to post
Share on other sites
2 hours ago, andrew_b said:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
On 9/25/2021 at 9:54 AM, MaratZuev said:

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

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

Share this post


Link to post
Share on other sites
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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites
1 hour ago, MaratZuev said:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.