2015-10-15 4 views
0

Возможно ли использовать строку в качестве параметра интерфейса SystemVerilog. У меня есть 4 экземпляра одного и того же интерфейса, и мне было интересно, могу ли я включать различные файлы утверждения для каждого экземпляра.Использование строки имени файла в качестве параметра интерфейса SystemVerilog?

Моего интерфейс выглядит следующим образом:

interface dai_if #(P_WD_DATA = 24, 
        string P_FILE_NAME = "assertion_file_name")(); 


    //Internal Signal Defined Here 


    `include "assertion_file_name" 

endinterface : dai_if 

В верхнем уровне, где я инстанцирует четыре экземпляра У меня есть следующий код:

module tb_top; 

    parameter P_WD_DATA = 24; 
    parameter string DAI_SER_IN_FILE = "dai_ser_in_checkers.v"; 
    parameter string DAI_SER_OUT_FILE = "dai_ser_out_checkers.v"; 
    parameter string DAI_PAR_IN_FILE = "dai_par_in_checkers.v"; 
    parameter string DAI_PAR_OUT_FILE = "dai_par_out_checkers.v"; 

Тогда я инстансовый каждый из интерфейсов, как это :

dai_if #(.P_WD_DATA(P_WD_DATA), 
     .P_FILE_NAME(DAI_SER_IN_FILE)) 
     dai_ser_ivif(); 

Это правильный метод, или я что-то упускаю?

Благодаря

ответ

2

Вы не можете использовать параметры для определения включают в себя файлы в качестве `включает макрос выполняется задолго до того, параметров оцениваются (обратите внимание, что Маркос, такие как` включают и `определить выполняется как часть предварительной обработки, а параметры определенные и используемые во время разработки, этап компиляции).

Однако есть способы получить желаемое поведение. Вместо того чтобы использовать строку параметров непосредственно включать в файл, вы можете использовать его, чтобы условно экземпляр кода из включаемого файла следующим образом:

module top; 
    ... 
    myInterface #(.assertType("TYPE1")) myInstance(); 
    ... 

interface myInterface #(parameter assertType = "TYPE0")(); 
    ... 
    // NOTE: This is NOT inside any process block (like always, initial, etc) 
    case (assertType) 
    "TYPE0": begin 
     `include "assert_type0.sv" 
    end 
    "TYPE1": begin 
     `include "assert_type1.sv" 
    end 
    "TYPE2": begin 
     `include "assert_type2.sv" 
    end 
    endcase 
    ... 
endinterface 

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

+0

Это именно то, что я искал. Благодарю. –