Jump to content

    
Sign in to follow this  
Drakonof

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

Recommended Posts

 

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

Подскажите пожалуйста, как переназначить в 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

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

Edited by Drakonof

Share this post


Link to post
Share on other sites

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

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

ncelab -DEFPARAM param=val

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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.

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.

Sign in to follow this