2017-02-15 20 views
1

В настоящее время у меня есть несколько файлов tcl. в файлах tcl, особенно в одном tcl, я нашел ниже функцию proc в tcl.Как запустить функцию tcl proc с помощью verilog?

proc ahb_write {addr data {str s}} { 
    set ahbm top.cpu_subsys      
    ... 

    if {$::verbose > 0} { 
    } 
    silent { 
      ........... 
      ........... 
      delay 1 

Так что я хочу, чтобы вызвать и запустить эту функцию ahb_write ргос при запуске моделирования.

Есть ли какой-либо возможный способ запуска функции proc, когда я запускаю симуляцию с verilog?

+0

большинство симуляторов имеют оболочку на основе TCL, не знают, что вы используете, но, скорее всего, тренажер является целевым для вашего прока а не verilog. взгляните на графический интерфейс и посмотрите место записи стенограммы - обычно здесь вы можете добавить свой текст. – user2141046

+0

@ user2141046 спасибо BTW, можете ли вы сообщить мне какой-нибудь пример о том, как запустить симуляцию в ncverilog или irun с proc tcl? – grander3

+0

Извините, у меня только был шанс использовать Modelsim и небольшой VNC, прежде чем покинуть этот район. Оба они использовали интерфейсы tcl - и мы говорим о двух крупнейших компаниях в этой области (Mentor и Synopsys). – user2141046

ответ

0

Вам понадобится DPI SystemVerilog для этого в любом симуляторе. В Modelsim вы бы вызвали функцию mti_fli::mti_com("command") Альтернативой, которая, вероятно, будет работать в любом симуляторе, является выполнение команды, выполняемой при ударе точки останова.

+0

жаль, что наша компания только что получила каденцию ncverilog и simvision. можете ли вы сообщить мне, используя каденцию? – grander3

+0

Извините, я не могу с этим поделать. –

0

Я сделал это раньше, когда захотел использовать задачу verilog, которая бы вносила ошибки в память. В NCSim мне пришлось сначала индивидуально внести значения для параметров задачи, а затем вызвать сама задача.

deposit tinst.u_buffer.u_fifo.u_sram_0.injectSA.addr 1 
deposit tinst.u_buffer.u_fifo.u_sram_0.injectSA.bitn 2 
deposit tinst.u_buffer.u_fifo.u_sram_0.injectSA.typen 1 
task tinst.u_buffer.u_fifo.u_sram_0.injectSA 
run 0.1 

Я не знаю точно, если «запустить 0,1» надо было или нет, но я знаю, что это, по крайней мере работал в моем примере.

Verilog задача была определена в модели RAM, как это:

task injectSA; 
input [numWordAddr-1:0] addr; 
input integer bitn; 
input typen; 
...