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

Переназначение parameter в тестбенче через tcl файл modelsim

 

Здравствуйте.

Подскажите пожалуйста, как переназначить в tcl файле значение parameter (verilog).

Поменять нужно: parameter integer ITERATION_NUM  = 1000000;

`timescale 1ns / 1ps

module pwm_tb;

    parameter integer                  PWM_DATA_WIDTH = $clog2(PWM_DATA_MAX_VALUE);
    parameter integer                  ITERATION_NUM  = 1000000;
    parameter [PWM_DATA_WIDTH - 1 : 0] PWM_VALUE      = {PWM_DATA_WIDTH{1'h0}} + 8'hF0;

    localparam integer CLOCK_PERIOD       = 100;
    localparam integer PWM_DATA_MAX_VALUE = 255;

    wire pwm_signal;

    reg                          clk           = 1'h0;
    reg                          s_rst_n       = 1'h1;
    reg                          enable        = 1'h0;
    reg [PWM_DATA_WIDTH - 1 : 0] req_value     = {PWM_DATA_WIDTH{1'h0}};
    reg [PWM_DATA_WIDTH - 1 : 0] check_counter = {PWM_DATA_WIDTH{1'h0}};

    pwm #
    (
        .COUNTER_WIDTH (PWM_DATA_WIDTH)
    )
    pwm_dut
    ( 
        .clk_i       (clk),
        .s_rst_n_i   (s_rst_n),
    	.enable_i    (enable),
        
        .req_value_i (req_value),
        
        .channel_o	 (pwm_signal)
    );
    
    initial begin
        clk = 1'h0;
 
        forever begin
            #( CLOCK_PERIOD / 2 ) clk = !clk;
        end 
    end
    
    initial begin
        $monitor($time,"ns The check counter= %d, the pwm value = %d",check_counter, pwm_signal);
    
        s_rst_n    <= 1'h0;
        @(posedge clk);
        
        s_rst_n   <= 1'h1;
        enable    <= 1'h1;
        req_value <= PWM_VALUE ;
        @(posedge clk);
        
        repeat(ITERATION_NUM) begin
           @(posedge clk);
           check_counter <= check_counter + 1'h1;
        end

        $stop();
    end

endmodule

Вот так параметр ITERATION_NUM не меняется:

transcript on
vlib work
vmap work work

# variables---------
set dut ../../hdl/pwm.v
set tb pwm_tb.v
# ------------------

vsim -gITERATION_NUM=1000
vlog $dut $tb

 
vsim -t 100ns -voptargs="+acc" pwm_tb

# waves    ---------
add wave /pwm_tb/clk
add wave /pwm_tb/s_rst_n
add wave /pwm_tb/enable
add wave -radix hex /pwm_tb/req_value
add wave -radix hex /pwm_tb/check_counter
add wave /pwm_tb/pwm_signal
# ------------------

configure wave -timelineunits us

run -all 
wave zoom full

Заранее спасибо.

Изменено пользователем Drakonof

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


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

Для изменения параметра, нужно перезапустить элаборацию проекта, после вычитки и изменения. Ибо при первом читании берутся во внимание заданные значения в RTL и только потом можно их менять.

Увы я не работаю с Моделсим, но на форумах видел что-то типа такого:

ncelab -DEFPARAM param=val

Если кто-то покажет как точно сделать - будет тоже интересно.

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


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

Параметры снаружи никак не изменить. Изменить можно define-ы (для ncverilog: ncelab +define+name). Это с полной пересборкой проекта.

Параметры внутри можно вычислить (например parameter name = `extdefine) Это все тоже приведет к пересборке проекта, т.к. собственно меняется сама схема.

Без пересборки проекта тестбенчем можно управлять через $plusargs

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


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

Приветствую!

Параметры менять  нельзя, но  можно менять  переменные из  скрипта запуска,  например  

int iterations;

initial begin
  iterations = ITERATION_NUM;
  #10;
  
  repeat(iterations) begin
    @(posedge clk);
    check_counter <= check_counter + 1'h1;
  end
end

и  тогда  можно в скрипте  сделать
run 1 ns

force pwm_tb/iterations  2000000

run ...  

Удачи! Rob.

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


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

Спасибо за ответы) 

Да, через переменные работает как надо)

Изменено пользователем Drakonof

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


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

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

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

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

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

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

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

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

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

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