Страница 1 из 1

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

Добавлено: Сб май 19, 2018 16:55:41
pirotehnick
Я б...ть чувствую что скоро буду схемы рисовать сам, а не верилог использовать.
Есть такая проблема, вот первое исполнение кода:

Код: Выделить всё

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

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

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

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

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

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

Добавлено: Пн окт 01, 2018 16:17:18
FPGAlover
ощущение такое, что симулятор в начале фронт генерит.

я такую конструкцию (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

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