Timmy 1 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба Этот безусловный always должен всем понравится потому что нужен для того чтобы назначить reg значение ибо assign test_out=0 для reg не верно ну а смысл того always в том что я хочу выкинуть выход test_out и всю логику подключенную к нему независимо от сброса и смысла в сбросе не вижу для это выхода. Проверил в Active HDL: с собачкой always блок вообще не выполняется, значение не присваивается, без собачки даёт предупреждение на бесконечный цикл, и действительно молотит бесконечный цикл с нулевой дельтой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба А зачем там always блок? Там initial нужен. А синтез сам все выкинет и без блока вообще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба Проверил в Active HDL: с собачкой always блок вообще не выполняется, значение не присваивается, без собачки даёт предупреждение на бесконечный цикл, и действительно молотит бесконечный цикл с нулевой дельтой. я не считаю этот как бе симулятом за симулятор проверял в симплифае всё делает как надо вот попробуйте так module test #(parameter TEST_ON0=0, TEST_ON1=0 ) ( input clk, reset, input valid_in, input[31:0]data_in, output reg[31:0] data_out, output reg data_val, output [31:0]test_out ); reg[31:0]test_out_r; always@(posedge clk or posedge reset) if(reset) begin data_out<=0; data_val<=0; end else begin data_out<=(valid_in)?data_in:data_out; data_val<=valid_in; end generate if(TEST_ON0==1 && TEST_ON1==0)begin:TEST_ON0_GEN reg[31:0] testt; always@(posedge clk or posedge reset) if(reset) begin testt<=0; test_out_r<=0; end else begin testt<=(valid_in)?testt+1:testt; test_out_r<=(valid_in)?testt:test_out_r; end end endgenerate generate if(TEST_ON1==1 && TEST_ON0==0)begin:TEST_ON1_GEN reg[63:0] testt; always@(posedge clk or posedge reset) if(reset) begin testt<=64'd0; test_out_r<=0; end else begin testt<=(valid_in && data_in==2)?testt+1:testt; test_out_r<=(valid_in)?testt[63:32]:test_out_r; end end endgenerate assign test_out=(TEST_ON0==TEST_ON1)?0:test_out_r; endmodule А зачем там always блок? Там initial нужен. А синтез сам все выкинет и без блока вообще. это если синтез понимает initial, то да так тоже можно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба я не считаю этот как бе симулятом за симулятор проверял в симплифае всё делает как надо вот попробуйте так В этом случае при синтезе возможен варнинг о неиспользованном и неприсвоенном значении test_out_r. Вот на VHDL можно просто использовать continuous assigment на test_out, а как 100% правильно и переносимо сделать это на verilog, пока не понятно. Хотя нет, понятно: надо test_out_r декларировать только внутри generate, когда test_out используется, и в отдельном generate писать assign test_out = 1'b0;, когда test_out не используется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба это если синтез понимает initial, то да так тоже можно Синтезу не нужно ничего понимать в initial-ах. Синтез поголовно все регистры (порты, и т.п.), которым ничего и нигде не присвоено, просто выкинет, а если они где-то используются (а в данном примере они не должны использоваться, так как об этом вся ветка, что делать с неиспользуемым портом), то заводит их на GND. А initial только для симулятора, чтобы не было отличия от синтеза. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба Синтезу не нужно ничего понимать в initial-ах. Синтез поголовно все регистры (порты, и т.п.), которым ничего и нигде не присвоено, просто выкинет, а если они где-то используются (а в данном примере они не должны использоваться, так как об этом вся ветка, что делать с неиспользуемым портом), то заводит их на GND. А initial только для симулятора, чтобы не было отличия от синтеза. вот что было у ТС большую часть сигналов и настроек сделал через parameter, и модуль меняется. А сейчас появилось желание избавиться от части функционала, прям от нескольких входов - выходов, и блока их обработки. Оставить выход в воздухе - варнинг что выход не подключен, плюс часть функционала не оптимизируется и есть ресурсы. спсб за разьяснения про initial, оно мне как бе не надо это пусть ТС мучается :rolleyes: В этом случае при синтезе возможен варнинг о неиспользованном и неприсвоенном значении test_out_r. Вот на VHDL можно просто использовать continuous assigment на test_out, а как 100% правильно и переносимо сделать это на verilog, пока не понятно. Хотя нет, понятно: надо test_out_r декларировать только внутри generate, когда test_out используется, и в отдельном generate писать assign test_out = 1'b0;, когда test_out не используется. в первом исходнике что я дал нет никаких варнингов и синтезируется как надо. про VHDL не было речи, так что давайте без "а вот на VHDL..." Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба Вот на VHDL можно просто использовать continuous assigment на test_out, На верилог тоже можно и легко. assign test_out=0, но при этом его объявление как reg надо убрать внутрь условного блока, чтобы оно не включалось в компиляцию, когда не надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба ну то есть получается что внутри блока все хорошо, а вот прям модуль изменить (выкинуть порты, чтобы их вообще не было даже объявлено) можно только через ifdef, и тут мы (а вернее я, все остальные на нормальных средах) имеем легкое не понимание со стороны среды. Вот же блин! Ну да ладно, я не гордый, я закомментировал:). Не забыть бы раскомментировать потом все блоки, в одну то сторону оно легче идет:)... Кстати в качестве решения написать свой препроцессор, которому скармливать исходный текст и набор дефайнов, а он пусть выдает уже финальный файлик, где физически выкинуты ненужные куски. Но это как то сложно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба Зачем писать свой. Обычный С-шный чем не устраивает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба синтаксисом, хотелось бы сохранить все таки верилог верилогом, но в целом да, можно дописать только первые перевод # в ` #define <- `define Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба но в целом да, можно дописать только первые перевод # в ` Это тоже написали уже давно, стандартной утилитой sed делается одним движением левого мизинца. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба ну а где тогда место подвигу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба ну а где тогда место подвигу? Сменить среду разработки, которая поймет все дефайны сама (и заодно семейство ПЛИС) :) - вот это подвиг! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба разделение труда убережет меня от этого:)... максимум среду, но не думаю что для ксалинкса есть какая-то другая среда, которая без бубнов заработает разом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба что для ксалинкса есть какая-то другая среда, которая без бубнов заработает разом. Есть варианты. Можно, например, все делать в synplify, а ise только для place-route вызывать из него... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться