Drakonof 0 14 июля, 2021 Опубликовано 14 июля, 2021 (изменено) · Жалоба Здравствуйте. Подскажите пожалуйста, как переназначить в 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 Заранее спасибо. Изменено 14 июля, 2021 пользователем Drakonof Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 14 июля, 2021 Опубликовано 14 июля, 2021 · Жалоба Для изменения параметра, нужно перезапустить элаборацию проекта, после вычитки и изменения. Ибо при первом читании берутся во внимание заданные значения в RTL и только потом можно их менять. Увы я не работаю с Моделсим, но на форумах видел что-то типа такого: ncelab -DEFPARAM param=val Если кто-то покажет как точно сделать - будет тоже интересно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 14 июля, 2021 Опубликовано 14 июля, 2021 · Жалоба Параметры снаружи никак не изменить. Изменить можно define-ы (для ncverilog: ncelab +define+name). Это с полной пересборкой проекта. Параметры внутри можно вычислить (например parameter name = `extdefine) Это все тоже приведет к пересборке проекта, т.к. собственно меняется сама схема. Без пересборки проекта тестбенчем можно управлять через $plusargs Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 15 июля, 2021 Опубликовано 15 июля, 2021 · Жалоба Приветствую! Параметры менять нельзя, но можно менять переменные из скрипта запуска, например 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 0 19 июля, 2021 Опубликовано 19 июля, 2021 (изменено) · Жалоба Спасибо за ответы) Да, через переменные работает как надо) Изменено 19 июля, 2021 пользователем Drakonof Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться