torik 0 18 сентября, 2017 Опубликовано 18 сентября, 2017 · Жалоба Такая задачка... Есть модуль 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 строк с параметрами периода. Это возможно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться