Nagisa 0 1 февраля, 2020 Опубликовано 1 февраля, 2020 · Жалоба походу нашел странный глюк использую связку Quartus 64bit 13.0.1 SP1+ Cyclone II EP2C8Q208C8 код - cделал вырезку, в ней глюк сохранятся // // переключение режимов reg [31:0] div10; reg CLK10; always @ (posedge CLK) begin if (div10 == 2400000) begin CLK10 <= 1; div10 <= 0; end else begin div10 <= div10+1; CLK10 <= 0; end end // reg [3:0] work_mode; // режимы работы комплекса // реакция на кнопки reg [3:0] step_key; always @ (posedge CLK10 ) begin if (~KEY[1]) // режимы begin if (step_key ==0) begin work_mode <= work_mode +1; CT [39:36]<= work_mode[3:0]; step_key <=1; end else begin step_key <=step_key+1; end end if (work_mode==0) begin DOTPOZ <=1; end else begin DOTPOZ <=6; end //CT [39:36] <= work_mode[3:0]; //CT [15:0] <= RD_CHECK[15:0]; //CT [35:16] <= addrramreadstream [19:0]; end // индикатор reg [3:0] DOTPOZ; // позиция точки 1234567890 reg [39:0] CT ; din40 dinamicind ( .CLK(CLK), .DIG(DIG), .SEG(SEG), .CT(CT), .POZ(DOTPOZ) ); проблема связана с переменной work_mode в данном коде, при старте она равна 0, однако, все проверки "if (work_mode==0)" считают что она равна 1 - те любой if обнаруживает значение больше на 1 чем там есть реально. на индикатор значение выводится верно. собака зарыта в месте присвоения CT [39:36]<= work_mode[3:0]; те если это в блоке вверху, то см эффект выше если перенести (раскоментировать/закоментировать) в блок внизу - 0 становится нолем итд итп блок динамического индикатора нужен для проявления глюка - те если его выключить, глюк пропадает. соответственно приложил код динамического индикатора. что там такого неправильного ? с чем связан данный глюк ? (на самом деле я ловил другой глюк и нашел этот случайно) как избежать подобного ? может что-то я делаю не так ? din40.v Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 2 февраля, 2020 Опубликовано 2 февраля, 2020 · Жалоба 16 hours ago, Nagisa said: в данном коде, при старте она равна 0, Из вашего кода этого абсолютно не следует. И предвосхищая ваш следующий вопрос, напомню, что вы не программируете, а описываете схему. И значение любых регистров, может быть в любом состоянии, если в описании нет логики четкого задания начального состояния. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nagisa 0 2 февраля, 2020 Опубликовано 2 февраля, 2020 · Жалоба 2 hours ago, des00 said: Из вашего кода этого абсолютно не следует. И предвосхищая ваш следующий вопрос, напомню, что вы не программируете, а описываете схему. И значение любых регистров, может быть в любом состоянии, если в описании нет логики четкого задания начального состояния. я понимаю, однако есть кнопка с помощью которой я могу изменять значение if (~KEY[1]) // режимы begin if (step_key ==0) begin work_mode <= work_mode +1; CT [39:36]<= work_mode[3:0]; step_key <=1; end else begin step_key <=step_key+1; end end соответственно я проверил, что все проверки "if (work_mode== ' срабатываю как будто там значение на единицу больше условие "if (work_mode==0)" срабатывает при фактическом значении work_mode=4'hF да, если есть возможность дать рекомендацию по литературе, где описано как правильно делать была бы в тему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 2 февраля, 2020 Опубликовано 2 февраля, 2020 · Жалоба 25 минут назад, Nagisa сказал: я понимаю, однако есть кнопка с помощью которой я могу изменять значение А кнопка с дребезгом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Strob 0 2 февраля, 2020 Опубликовано 2 февраля, 2020 (изменено) · Жалоба 9 minutes ago, iosifk said: А кнопка с дребезгом? Кажется там без разницы... Т.к... 34 minutes ago, Nagisa said: я понимаю, однако есть кнопка с помощью которой я могу изменять значение Из кода вообще следует что срабатывает по уровню. Много-много раз за 1 нажатие Изменено 2 февраля, 2020 пользователем Strob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nagisa 0 3 февраля, 2020 Опубликовано 3 февраля, 2020 · Жалоба 6 minutes ago, iosifk said: А кнопка с дребезгом? см выше есть код. дребезг устранен. значение work_mode выведено на индикатор. похоже я понял, что именно происходит - вырезка из кода initial begin work_mode <=4'h0; step_key <=0; end // реакция на кнопки reg [3:0] step_key; always @ (posedge CLK10 ) begin if (~KEY[1]) // режимы begin if (step_key ==4'hF) begin work_mode <= work_mode +1; CT [39:36]<= work_mode[3:0]; step_key <=0; end else begin step_key <=step_key+1; end end в этой реализации при старте на индикаторе 1 и при этом согласно if-a в work_mode=0 получается, что участок work_mode <= work_mode +1; CT [39:36]<= work_mode[3:0]; имеет собственное значение work_mode=1, что в принципе логично. иначе говоря work_mode существует одновременно в двух ипостасях - одна с work_mode в чистом виде и другая work_mode+1 вопросу куда будет "прицплен" узел сравнения определяет логика которая в исходном коде у меня была нарушена те чистый work_mode оказался внутри а тот что work_mode+1 - снаружи и поступал на узлы сравнения (if-ы), как следствие и странный результат введение initial - переключило эту логику на правильную Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться