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

Массив параметров qsys, tcl

Такая задачка...

Есть модуль qsys:

Код
module SYNC
#(
    parameter num_sync = 4,                    //число выходов синхронизаци
    parameter period_cnt = 1                    //счетчик на csi_clksys_clk, исходя из заданного периода
)
(
    input                                                                                    csi_reset_n,
    input                                                                                    csi_clksys_clk,
    //сигнал синхронизации
    output            [(num_sync - 1) : 0]                                    coe_sync
);


В tcl задается параметр period в мкс, из которого расчитывается значение счетчика period_cnt. А количество интерфесов coe_sync задается параметром num_sync.

Код
add_parameter num_sync NATURAL 1
set_parameter_property num_sync DEFAULT_VALUE 4
set_parameter_property num_sync DISPLAY_NAME "Number of sync signals"
set_parameter_property num_sync TYPE NATURAL
set_parameter_property num_sync UNITS None
set_parameter_property num_sync ALLOWED_RANGES {1:16}
set_parameter_property num_sync HDL_PARAMETER true

#Период синхроимпульсов, мкс
add_parameter period NATURAL 1
set_parameter_property period DEFAULT_VALUE 10000
set_parameter_property period DISPLAY_NAME "Period, mks"
set_parameter_property period TYPE NATURAL
set_parameter_property period UNITS None
set_parameter_property period ALLOWED_RANGES {1:5000000}
set_parameter_property period HDL_PARAMETER true

#значение счетчика на системной частоте исходя из периода
add_parameter period_cnt NATURAL 1
set_parameter_property period_cnt DERIVED true
set_parameter_property period_cnt DISPLAY_NAME "Period cnt, ticks"
set_parameter_property period_cnt TYPE NATURAL
set_parameter_property period_cnt ALLOWED_RANGES {1:1000000000}
set_parameter_property period_cnt HDL_PARAMETER true

add_parameter clksys_rate INTEGER
set_parameter_property clksys_rate SYSTEM_INFO CLOCK_RATE
set_parameter_property clksys_rate SYSTEM_INFO_ARG clksys

#
# connection point sys_reset
#
add_interface sys_reset reset end
set_interface_property sys_reset associatedClock clksys
set_interface_property sys_reset synchronousEdges DEASSERT
set_interface_property sys_reset ENABLED true

add_interface_port sys_reset csi_reset_n reset_n Input 1


#
# connection point clksys
#
add_interface clksys clock end
set_interface_property clksys clockRate 0
set_interface_property clksys ENABLED true

add_interface_port clksys csi_clksys_clk clk Input 1

proc elaborate {} {

    # Generate sync ports
    for {set i 0} {$i < [ get_parameter_value num_sync ]} {incr i} {
        add_interface uart_sync$i conduit start
        set_interface_property uart_sync$i associatedClock ""
        set_interface_property uart_sync$i associatedReset ""
        set_interface_property uart_sync$i ENABLED true
        
        add_interface_port sync$i coe_sync_$i sync_pulse Output 1
        set_port_property coe_sync_$i FRAGMENT_LIST "coe_sync@$i"
    }

    # Считаем значение делителя из периода
    set divider_var [ expr [ get_parameter_value clksys_rate] / 1000 * [ get_parameter_value period] / 1000 - 1]
    set_parameter_value period_cnt $divider_var

}



Проблема в том, что вычисленный параметр period_cnt один на все интерфейсы sync.
А хотелось бы, чтобы для каждого интерфейса был свой параметр. Число параметров чтобы задавалось параметром num_sync. В интерфейсе задания параметров модуля в qsys должны появиться num_sync строк с параметрами периода.

Это возможно?




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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация