alex1985 0 31 мая, 2018 Опубликовано 31 мая, 2018 · Жалоба Доброго всем времени суток! Изучаю TimeQuest, есть несколько вопросов. Есть модуль: module adc ( input clk, input clk_32MHz, input ena, input [7:0]data, output reg alarm ); reg [1:0] state; parameter s0=0, s1=1, s2=2, s3=3; reg [7:0] data_ch1[2:0]; reg [1:0] clk_32MHz_reg; initial begin state = 0; data_ch1[0] = 8'd0; data_ch1[1] = 8'd0; data_ch1[2] = 8'd0; clk_32MHz_reg = 2'b00; alarm = 0; end wire clk_32MHz_risingEdge; wire clk_32MHz_fallingEdge; //--------------------------------- // Select front and fall moment //--------------------------------- always @(posedge clk) begin clk_32MHz_reg <= {clk_32MHz_reg[0], clk_32MHz}; end assign clk_32MHz_risingEdge = (clk_32MHz_reg == 2'b01); assign clk_32MHz_fallingEdge = (clk_32MHz_reg == 2'b10); //---------------------------------------- always @ (posedge clk) begin if (ena) begin case (state) //============================ //Channel process //============================ s0: begin state <= clk_32MHz_risingEdge? s1:s0; end //---------------------------- s1: begin if (clk_32MHz_fallingEdge) begin data_ch1[0] <= data; state <= s2; end else state <= s1; end //---------------------------- s2: begin if ((data_ch1[0] > data_ch1[1]) && (data_ch1[1] > data_ch1[2])) alarm = 1; else alarm = 0; state <= s3; end //---------------------------- s3: begin data_ch1[2] <= data_ch1[1]; data_ch1[1] <= data_ch1[0]; state <= s0; end //---------------------------- default: begin alarm <= 0; state <= s0; end //---------------------------- endcase end else begin alarm <= 0; state <= s0; end end //---------------------------------------- endmodule И есть pll с входной частотой 36МГц (clk) и двумя выходными частотами: 216 (с0) и 32МГц (с1). В общем виде это выглядит вот так: В двух словах: сигнал с выхода c1 pll (32MГц) поступает на детектор фронта/спада сигнала модуля, тактовая частота которого 216Мгц. Написал вот такой констрейн: derive_clock_uncertainty create_clock -name clk -period 36.1MHz [get_ports {clk}] create_generated_clock -name clk_216MHz -source [get_ports {clk}] -multiply_by 6 [get_nets {pll1|altpll_component|auto_generated|wire_pll1_clk[0]}] create_generated_clock -name clk_32MHz -source [get_ports {clk}] -divide_by 17 -multiply_by 15 [get_nets {pll1|altpll_component|auto_generated|wire_pll1_clk[1]}] После компиляции TimeQuest выдает слаки: Прошу знающих людей объяснить на что ругается TimeQuest. Заранее спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 1 июня, 2018 Опубликовано 1 июня, 2018 · Жалоба У вас частоты не кратные, надо бы зафальспасить переходы в этих доменах. Ну и о синхронизаторах не забывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 1 июня, 2018 Опубликовано 1 июня, 2018 · Жалоба Прошу знающих людей объяснить на что ругается TimeQuest. Заранее спасибо! TimeQuest ругается на временные нарушения при передачи сигнала с1 из домена 32 Мгц в регистр clk_32MHz_reg(0) в домене 216 Мгц. В частности происходит нарушения по времени удержания. Как говорил уважаемый _Anatoliy исключите эти пути из анализа TimeQuest, и передавайте сигнал в другой домен через синхронизатор. Я привык задавать пути, которые не нужно анализировать, путем команды: set_clock_groups -exclusive -group [get_clocks {clk1}] \ -group [get_clocks {clk2}] \ -group [get_clocks {clk3}] \ -group [get_clocks {clk4}] где каждая группа асинхронные клоки. Вот хорошая ссылка, много интересного там: http://www.alterawiki.com/wiki/Timing_Constraints Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex1985 0 1 июня, 2018 Опубликовано 1 июня, 2018 · Жалоба _Anatoliy, Flip-fl0p спасибо за советы! Поставил синхронизатор между выходом pll c1 и входом clk_32MHz и прописал false_path: set_false_path -from [get_clocks {clk_adc}] -to [get_clocks {clk_216MHz}] Предупреждения ушли. Но в списке Unconstreined Ports стоит несколько (все кроме клоков) сигналов. Насколько я понимаю нужно задать параметры set_input_delay и set_output_delay. Но какие значения выставлять не понятно. Например, в этом документе указаны значения 3,75, но откуда берется эта цифра не объясняется. Какие параметры помимо create_clock нужно задавать в констрейнах? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 1 июня, 2018 Опубликовано 1 июня, 2018 · Жалоба _Anatoliy, Flip-fl0p спасибо за советы! Поставил синхронизатор между выходом pll c1 и входом clk_32MHz и прописал false_path: set_false_path -from [get_clocks {clk_adc}] -to [get_clocks {clk_216MHz}] Предупреждения ушли. Но в списке Unconstreined Ports стоит несколько (все кроме клоков) сигналов. Насколько я понимаю нужно задать параметры set_input_delay и set_output_delay. Но какие значения выставлять не понятно. Например, в этом документе указаны значения 3,75, но откуда берется эта цифра не объясняется. Какие параметры помимо create_clock нужно задавать в констрейнах? Ознакомьтесь с серией статей : http://caxapa.ru/thumbs/442268/TimeQuest_for_dummies.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex1985 0 4 июня, 2018 Опубликовано 4 июня, 2018 · Жалоба Спасибо, ознакомлюсь! В тестбенче, в зависимости от дефайна, включаются или не включаются в проект некоторые блоки, в частности pll, но файл констрейна один, поэтому при комментировании дефайна и компиляции проекта в квартусе выскакивают несколько десятков варнингов касательно настроек pll, которых при компиляции проекта фактически нет. В связи с этим вопрос: можно ли использовать дефайны в макросе? Или можно ли в зависимости от дефайна подключать соответствующий файл констрейна? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться