ianpo 0 4 апреля, 2019 Опубликовано 4 апреля, 2019 · Жалоба Разрабатываю устройство на Cyclone II. Есть два домена(модуля): 60 и 100 МГц Первый пишет ЗАРАНЕЕ в некий регистр regA, который читается ПОТОМ во втором домене. Но значение regA не меняется во время работы второго домена. ОБЯЗАТЕЛЬНО ли использовать два последовательных регистра для передачи данных регистра в данном случае? TimeQuest ругается сейчас(без регистров), но можно запретить анализировать переход данныз из 60 в 100. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 4 апреля, 2019 Опубликовано 4 апреля, 2019 · Жалоба Только что, ianpo сказал: ОБЯЗАТЕЛЬНО ли использовать два последовательных регистра для передачи данных регистра в данном случае? Можно сделать только сигнал "готовность данных" и вот его пропустить через 2 триггера. И когда он придет на другую сторону, то тогда и данные из регистра можно считать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 4 апреля, 2019 Опубликовано 4 апреля, 2019 · Жалоба 10 minutes ago, ianpo said: Есть два домена(модуля): 60 и 100 МГц TimeQuest ругается сейчас(без регистров), но можно запретить анализировать переход данных из 60 в 100. RTFM: Quote set_clock_groups -asynchronous -group {<clock1>...<clockn>} ... -group {<clocka>...<clockn>} Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ianpo 0 4 апреля, 2019 Опубликовано 4 апреля, 2019 (изменено) · Жалоба iosifk, cпасибо за ответ Между записью в регистр и последующим чтением гарантированно проходит очень много тактов, тогда и один регистр, наверно, не нужен. Изменено 4 апреля, 2019 пользователем ianpo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ianpo 0 4 апреля, 2019 Опубликовано 4 апреля, 2019 · Жалоба 2 minutes ago, blackfin said: RTFM: Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
druzhin 4 13 апреля, 2019 Опубликовано 13 апреля, 2019 · Жалоба On 4/4/2019 at 1:25 PM, ianpo said: Разрабатываю устройство на Cyclone II. Есть два домена(модуля): 60 и 100 МГц Первый пишет ЗАРАНЕЕ в некий регистр regA, который читается ПОТОМ во втором домене. Но значение regA не меняется во время работы второго домена. ОБЯЗАТЕЛЬНО ли использовать два последовательных регистра для передачи данных регистра в данном случае? TimeQuest ругается сейчас(без регистров), но можно запретить анализировать переход данныз из 60 в 100. module _synchronizer #( parameter integer pLENGTH = 2, parameter [0:0] INIT = 0 )( //---------------------------------------------------------- input rstin, input clkin, input clkout, input sin, output reg sout //---------------------------------------------------------- ); reg main_reg = INIT; // RS level triger for input pulses (* ASYNC_REG = "TRUE" *) reg [pLENGTH-1:0] in2out = {pLENGTH{INIT}}; // clkin -> clkout syncronizer for level (* ASYNC_REG = "TRUE" *) reg [pLENGTH-1:0] out2in = {pLENGTH{INIT}}; // clkout -> clk_in synronizer for level clear feedback wire sout_ack, main_en; //---------------------------------------------------------------------------------------------- // Input converter edge/level clkin -> level clkin //---------------------------------------------------------------------------------------------- always @(posedge clkin, posedge rstin) if (rstin) main_reg <= INIT; else if (main_en) main_reg <= sin; assign main_en = ~( sout_ack ^ main_reg ); //---------------------------------------------------------------------------------------------- // Forward syncronizer level clkin -> edge clkout //---------------------------------------------------------------------------------------------- always @(posedge clkout, posedge rstin) if (rstin) in2out <= {pLENGTH{INIT}}; else in2out <= {in2out[pLENGTH-2:0], main_reg}; assign sout = in2out[pLENGTH-1]; //---------------------------------------------------------------------------------------------- // Feedback syncronizer level clkout -> level clkin //---------------------------------------------------------------------------------------------- always @(posedge clkin, posedge rstin) if (rstin) out2in <= {pLENGTH{INIT}}; else out2in <= {out2in[pLENGTH-2:0], sout}; assign sout_ack = out2in[pLENGTH-1]; //---------------------------------------------------------------------------------------------- // end //---------------------------------------------------------------------------------------------- endmodule Применение всего этого выглядит так: ............ parameter integer Wsync = 2; ........... //=========== AZIMUTH domen2 > domen1 ============================== _synchronizer #( // 2 -> 1 .INIT ( 0 ), .pLENGTH ( Wsync )) sync21_azimwr ( .rstin ( ~d2i_SYS ), // <- domen2 .clkin ( d2_CLK ), // <- domen2 .sin ( d2i_AZIM_WR ), // <- domen2 .clkout ( d1_CLK ), // <- domen1 .sout ( d1o_AZIM_WR )); // -> domen1 ............ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться