SM 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Если я правильно понял, sazh имеет в виду: Сомневаюсь, это что-то, о чем сам автор поста говорил, что раньше что-то там считал.... Я так понимаю, что речь о третьем процессе, где смесь блокирующих и неблокирующих присваиваний... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Не, аж на жирный еррор. Ради интереса проверил. По крайней мере в Q8.0 Может я что не то проверяю, но данный кусок кода проходит без warning в 9.0 и 8.1 module test (input clk, a, b, output c); logic tmp; always @(posedge clk) begin c <= pipa(a,b); end function automatic logic pipa (input logic data, datb); logic tmp; begin tmp = data ^ datb; return tmp; end endfunction endmodule Да и на работе 8.0 стоит - вроде без проблем такие вещи синтезирует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба 2) Разное функциональное воздействие сигнала reset 3) Мелочи, вроде использования begin/end для обрамления одной строки кода в одном случае и не использования в другом Мне кажется, что либо автор действительно не понимал Да там, блин, три вырезки из трех разных источников... Один, третий - альтерский, первый и второй вообще неизвестного происхождения... Как их можно друг с другом-то сравнивать и объединять? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Сомневаюсь, это что-то, о чем сам автор поста говорил, что раньше что-то там считал.... Я так понимаю, что речь о третьем процессе, где смесь блокирующих и неблокирующих присваиваний... Я тот пост писал насчет следующего: В проекте группа триггеров, по одному фронту клока. На всех подан ресет. Но одна группа -на aclr, другая на ena Да там, блин, три вырезки из трех разных источников... Один, третий - альтерский, первый и второй вообще неизвестного происхождения... Как их можно друг с другом-то сравнивать и объединять? Все пункты я писал по поводу данного куска кода: module statem_dyn_phase(smclk, reset, dyn_phase, counter, phasecounterselect, phaseupdown, phasestep, next_state, phasedone); input smclk; input reset; input [2:0] counter; input phasedone; input [1:0] dyn_phase; output [2:0] phasecounterselect; output phaseupdown; output phasestep; output [1:0] next_state; reg [2:0] phasecounterselect; reg phaseupdown; reg phasestep; reg [1:0] state; reg [1:0] next_state; reg [2:0] count; reg step; parameter phase_up=2'b01, phase_down=2'b10, do_nothing=2'b00, up=1'b1, down=1'b0; always @ (posedge smclk) begin if (reset) begin count <= 0; phasestep <= 1'b0; phaseupdown = 1'b0; end else begin if (state == phase_up) step = up; if (state == phase_down) step = down; if (state != do_nothing && count == 0 && phasedone) begin phasestep <= 1'b1; count <= count + 1; end if (count == 1) begin phaseupdown <= step; phasecounterselect = counter; count <= count + 1; end if (count == 2) begin phasestep <= 1'b0; count <= count + 1; end if (count == 3) begin phaseupdown <= 1'b0; phasecounterselect = counter; count <= count + 1; end if (count == 4) count <= 0; end end always @(posedge smclk or posedge reset) begin if (reset) begin state <= do_nothing; end else state <= next_state; end always @(posedge smclk) begin case (dyn_phase) 2'b01: next_state = phase_up; 2'b10: next_state = phase_down; default: next_state = do_nothing; endcase end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Да и на работе 8.0 стоит - вроде без проблем такие вещи синтезирует. Значит Вы ему чего-то лишнего наотломали, кроме лицензии :) :) код: module test2 (input clk, a, b, output c); always @(posedge clk) begin c = b ^ c; c <= a ^ c; end endmodule лог: Info: ******************************************************************* Info: Running Quartus II Analysis & Synthesis Info: Version 8.0 Build 231 07/10/2008 Service Pack 1 SJ Full Version Info: Processing started: Mon May 11 18:10:13 2009 Info: Command: quartus_map --read_settings_files=on --write_settings_files=off test2 -c test2 Info: Found 1 design units, including 1 entities, in source file test2.v Info: Found entity 1: test2 Error (10137): Verilog HDL Procedural Assignment error at test2.v(4): object "c" on left-hand side of assignment must have a variable data type File: /home/s-markov/work2/temp/test2.v Line: 4 Error (10137): Verilog HDL Procedural Assignment error at test2.v(5): object "c" on left-hand side of assignment must have a variable data type File: /home/s-markov/work2/temp/test2.v Line: 5 Error: Quartus II Analysis & Synthesis was unsuccessful. 2 errors, 0 warnings Error: Processing ended: Mon May 11 18:10:14 2009 Error: Elapsed time: 00:00:01 Error: Total CPU time (on all processors): 00:00:01 ну разумеется добавление слова "reg" после output решает все проблемы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Не, аж на жирный еррор. Ради интереса проверил. По крайней мере в Q8.0 На жирный error, это если в Settings -> Analysis & Synthesis Settings -> Verilog HDL Input -> Verilog version стоит Verilog-2001, а если SystemVerilog-2005, то и без warning. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Все пункты я писал по поводу данного куска кода: Ну я и говорю, что перемешали три куска в кучу. Я все свои посты говорил про код, приведенный автором первого сообщения ниже его слов "Но периодически в примерах встречаю вот такое описание", а то, что выше, отношу к чему-то такому, данному как пример, так как, цитирую, автор "считал ранее что следует использовать конструкции следующего вида". а если SystemVerilog-2005, то и без warning. Да, в натуре. Я то 2001 ставлю, чтобы оно отсеивало случайные SV-шные штучки... А что, в стандарте это стало разрешено? Т.е. типа любой output по умолчанию reg/logic ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Ну я и говорю, что перемешали три куска в кучу. Я все свои посты говорил про код, приведенный автором первого сообщения ниже его слов "Но периодически в примерах встречаю вот такое описание"... Я тоже. :) Именно этот кусок и представляет интерес, так как является примеров Altera, и так как имеет "дефекты", которые я указывал выше. Да и sazh, опять же, насчет reset писал про этот же кусок(если я правильно его понял) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Я тоже. :) Именно этот кусок и представляет интерес, так как является примеров Altera, и так как имеет "дефекты", которые я указывал выше. Ну и какого же черта тогда там aclr? Если именно в том куске ОДИН блок always, а не три, и в нем только posedge smclk ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 11 мая, 2009 Опубликовано 11 мая, 2009 (изменено) · Жалоба Да, в натуре. Я то 2001 ставлю, чтобы оно отсеивало случайные SV-шные штучки... А что, в стандарте это стало разрешено? Т.е. типа любой output по умолчанию reg/logic ? Я, к сожалению, пока так и не нашел страндарт на SV. Имеется только LRM, но на память, к сожалению, не скажу. Ну и какого же черта тогда там aclr? Если именно в том куске ОДИН блок always, а не три, и в нем только posedge smclk ? Как же один? Я же приводил модуль целиком выше 1) always @ (posedge smclk) begin if (reset) begin count <= 0; phasestep <= 1'b0; phaseupdown = 1'b0; end else ... ... ... 2)always @(posedge smclk or posedge reset) begin if (reset) begin state <= do_nothing; end else state <= next_state; end 3) always @(posedge smclk) begin case (dyn_phase) 2'b01: next_state = phase_up; 2'b10: next_state = phase_down; default: next_state = do_nothing; endcase end Кстати, у автора темы-то в первом посте все три куска из одного модуля-примера Altera Изменено 11 мая, 2009 пользователем des333 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба но на память, к сожалению, не скажу. Ну синопсис и в SV-режиме давится без "reg" : Loading sverilog file '/home/s-markov/work2/temp/test2.v' Detecting input file type automatically (-rtl or -netlist). Reading with Presto HDL Compiler (equivalent to -rtl option). Running PRESTO HDLC Compiling source file /home/s-markov/work2/temp/test2.v Error: /home/s-markov/work2/temp/test2.v:4: Assigment to 'c' requires that it be a register. (VER-952) Error: /home/s-markov/work2/temp/test2.v:5: Assigment to 'c' requires that it be a register. (VER-952) *** Presto compilation terminated with 2 errors. *** Мда. Чем дальше в лес, тем больше вольностей. Квартус по ходу делает implicit объявления аутпутов типом reg (logic?).... А синопсис наверное как wire (как это было в классическом верилоге). Как же один? Я же приводил модуль целиком выше .... Кстати, у автора темы-то в первом посте все три куска из одного модуля-примера Altera Вот именно, что это Вы приводили модуль (который я первый раз увидел именно в вашем посте) :) А у автора после указанных слов был всего лишь один always... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Вот именно, что это Вы приводили модуль :) А у автора после указанных слов был всего лишь один always... Просто я именно поэтому у автора и просил ссылку на документ. Мне просто больше интересно, что из себя представляет модуль Altera целиком, а не разбитый по кускам. :) И именно в этом модуле куча неточностей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Если рассматривать код приведенного Вами модуля, то да, state имеет (наверное по ошибке) асинхронный резет... Но вряд-ли это заботило альтерского индуса, писавшего код :) Ведь работает же! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Если рассматривать код приведенного Вами модуля, то да, state имеет (наверное по ошибке) асинхронный резет... Но вряд-ли это заботило альтерского индуса, писавшего код :) Ведь работает же! Просто автор может использовать данный код как пример. Надо предостеречь его от этого. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Просто автор может использовать данный код как пример. Надо предостеречь его от этого. :) Это да. Но только не в части его основного вопроса - описывать в блоках always, описывающих регистры, надо только те пути, которые могут приводить к смене состояния описываемого регистра. Остальные же - только лишняя писанина, приводящая к запутанности, увеличению размера текста и ухудшению читаемости. Тоже касается описания в одном блоке always одновременно нескольких регистров. ИМХО идеально - один регистр один блок. А тут в целях, чтобы "враг не догадался", целых три (или 4) сущности в один always запиндюрили - счетчик и регистры его управления. А вот касаемо резетов - то да, надо следить, чтобы резетовалось только то, что нужно резетовать, и именно так, как нужно (синхронно/асинхронно), причем выбор синхронного или асинхронного должен быть обоснованным. В этом примере тут явный необъяснимый ляп. И то же касается блокирующих/неблокирующих (на мой взгляд - всегда неблокирующие, за тем исключением, когда его применение приводит к неразумному разрастанию кода, но это уже чисто IMHO) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться