Koluchiy 0 5 июля, 2023 Опубликовано 5 июля, 2023 · Жалоба Приветствую. В некоем проекте (Аррия-10) есть модуль 2хпортовой памяти. Порты синхронны (работают на 1 частоте). В порт а ведется запись, из порта b производится чтение. Никаких clock enable нет (=1). В чем проблема. Есть в altsyncram параметр: clock_enable_output_b . И вот при изменении этого параметра (NORMAL или BYPASS) задержка выходных данных при чтении из порта b изменяется на 1 такт 😲. (при NORMAL - задержка больше). Прошерстил документацию, и нигде не увидел, чтобы было написано, как этот параметр влияет на задержку и почему. Кто-нибудь может пояснить, что происходит? Всем заранее спасибо. altsyncram# ( .operation_mode ("DUAL_PORT"), //////////////////////////// // port a parameters // //////////////////////////// .width_a (18), .widthad_a (10), .numwords_a (1024), // registering parameters .outdata_reg_a ("CLOCK0"), // clearing parameters .address_aclr_a ("NONE"), .outdata_aclr_a ("NONE"), .wrcontrol_aclr_a ("NONE"), .indata_aclr_a ("NONE"), .byteena_aclr_a ("NONE"), //////////////////////////// // port B // //////////////////////////// .width_b (18), .widthad_b (10), .numwords_b (1024), // registering parameters .indata_reg_b ("CLOCK1"), .wrcontrol_wraddress_reg_b ("CLOCK1"), .rdcontrol_reg_b ("CLOCK1"), .address_reg_b ("CLOCK1"), .outdata_reg_b ("CLOCK1"), .byteena_reg_b ("CLOCK1"), // clearing parameters .indata_aclr_b ("NONE"), .wrcontrol_aclr_b ("NONE"), .address_aclr_b ("NONE"), .outdata_aclr_b ("NONE"), .rdcontrol_aclr_b ("NONE"), .byteena_aclr_b ("NONE"), // byte enable parameters .width_byteena_a (2), .width_byteena_b (2), // ram block type choices are )"AUTO"), )SMALL), )MEDIUM) and )LARGE) .ram_block_type ("AUTO"), // width of a byte for byte enables .byte_size (9), // Mixed port feed through mode choices are // OLD_DATA and DONT_CARE .read_during_write_mode_mixed_ports ("DONT_CARE"), .read_during_write_mode_port_a ("NEW_DATA_NO_NBE_READ"), .read_during_write_mode_port_b ("NEW_DATA_NO_NBE_READ"), // General operation parameters .init_file ("UNUSED"), .init_file_layout ("PORT_A"), .maximum_depth (0), .clock_enable_input_a ("NORMAL"), // choices are normal and bypass not valid for Stratix .clock_enable_input_b ("NORMAL"), // choices are normal and bypass not valid for Stratix .clock_enable_output_a ("BYPASS"), // choices are normal and bypass not valid for Stratix .clock_enable_output_b ("BYPASS"), // choices are normal and bypass not valid for Stratix .clock_enable_core_a ("USE_INPUT_CLKEN"), .clock_enable_core_b ("USE_INPUT_CLKEN"), .enable_ecc ("FALSE"), .ecc_pipeline_stage_enabled ("FALSE"), .width_eccstatus (3), .intended_device_family ("Arria V")//, //.cbxi_parameter ("NOTHING") ) altsyncram0 ( .aclr0 (Reset),// = 0, //.aclr1 (Reset),// = 0, .aclr1 (0),// = 0, .clock0 (Clk),// = 1, .clocken0 (ClkEna0),// = 1, .address_a (WrAddr ),// = 0, .rden_a (1'b0 ),// = 1, .q_a (), .data_a (WrData ),// = 1, .wren_a (WrEna ),// = 0, .byteena_a (2'b11 ),// = 1, .clock1 (Clk),// = 1, .clocken1 (ClkEna1),// = 1, .address_b (RdAddr ),// = 1, .rden_b (1),// = 1, .q_b (RdData ), .data_b (),// = 1, .wren_b (0), .byteena_b (0)// = 1, ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 5 июля, 2023 Опубликовано 5 июля, 2023 · Жалоба а если в Technology mapper посмотреть инстанцированную память и ее параметры и сравнить с документацией? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 5 июля, 2023 Опубликовано 5 июля, 2023 · Жалоба Посмотрю. Вообще, сейчас это чисто симуляторный проект (Questa). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 5 июля, 2023 Опубликовано 5 июля, 2023 · Жалоба 1 hour ago, Koluchiy said: Посмотрю. Вообще, сейчас это чисто симуляторный проект (Questa). аа, ну дык это простож решается, модель altsyncram идет в сорцах, посмотрите что там происходит. Там обычный верилог, может быть у вас какие нить гонки возникают и что нить типа вот этого assign i_outlatch_clken_b = ((clock_enable_output_a == "NORMAL") && (outdata_reg_b == "UNREGISTERED") && (operation_mode == "BIDIR_DUAL_PORT") && (family_has_stratixv_style_ram == 1))? (((address_reg_b == "CLOCK0") && (outdata_reg_a == "CLOCK0")) ? clocken0 : (((address_reg_b == "CLOCK1") && (outdata_reg_a == "CLOCK1")) ? clocken1 : 1'b1)) : 1'b1; не совсем корректно обрабатывается) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться