Программируемая логика - это не так уж и сложно. Разберемся вместе.
Ответить

е..нутый компилятор в Quartus

Сб май 19, 2018 16:55:41

Я б...ть чувствую что скоро буду схемы рисовать сам, а не верилог использовать.
Есть такая проблема, вот первое исполнение кода:
Код:
module TEST_COUNTER(
       input wire test_signal_0,
       output reg [7:0] time_count_1 = 0
);
   
   always @ (posedge test_signal_0)
   begin
     time_count_1 <= 123;
   end

endmodule

Здесь хочется, что бы при подаче положительного фронта сигнала test_signal_0 установилось значение на массиве выходных пинов = 123, при этом задаю начальное значение регистра time_count_1 = 0.
В итоге получается такая х...ня:

Изображение

Как видно из кода, результат должен быть: начальное значение регистра time_count_1 = 0 и должно безвозвратно устанавливаться в 123 по положительному фронту сигнала test_signal_0. Но видимо синтезатор решил забить на желания пользователя и сгенерировать х..ню.

Второй вариант кода:

Код:
module TEST_COUNTER(
       input wire test_signal_0,
       output reg [7:0] time_count_1 = 0
);
   
   always @ (posedge test_signal_0)
   begin
     time_count_1 <= time_count_1 + 123;
   end

endmodule

Изображение

А здесь всё чётко! Но также должно работать и в первом варианте.
В чём может быть проблема???

Re: е..нутый компилятор в Quartus

Сб май 19, 2018 17:53:18

Компилятор увидел, что значение остаётся постоянным, и соптимизировал его, не учтя, что изначально там было установлено другое значение. Ну а второй раз Вы определили счётчик, чьё значение будет изменяться с каждым импульсом, посему компилятор и сделал, что от него хотели. Но, вероятно, это ошибка в компиляторе (я Верилог не использую, поэтому не могу с определённостью сказать, что его стандарт говорит по сему поводу, но вряд ли он допускает подобную оптимизацию).

Re: е..нутый компилятор в Quartus

Сб май 19, 2018 18:50:33

Может добавить в модуль сигнал reset и по нему устанавливать начальные значения регистров (да вроде это является правилом хорошего тона).
На различных форумах довольно много обсуждают начальную инициализацию регистров, почитайте. Данная процедура сильно зависит от производителя (altera, xilinx, actel).

Re: е..нутый компилятор в Quartus

Пт май 25, 2018 19:08:20

Всегда используйте сигнал сброса в схемах! Далее используйте констркцию "if ... else".
Совет на будущее: в список чувствительности вносите ТОЛЬКО тактовый сигнал (clk) и сингал сброса (если таковой используется асинхронно).

Re: е..нутый компилятор в Quartus

Пн окт 01, 2018 16:17:18

ощущение такое, что симулятор в начале фронт генерит.

я такую конструкцию (output reg [7:0] time_count_1) не использую.

вот так работает:
module TEST_COUNTER(
input wire test_signal_0,
output reg [7:0] time_count_1
);
initial time_count_1=0;
always @ (posedge test_signal_0)
begin
time_count_1 <= 123;
end

endmodule

а вообще инициализировать по ресету желательно
Ответить