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

Программируемая логика - это не так уж и сложно. Разберемся вместе.
Ответить
pirotehnick
Потрогал лапой паяльник
Сообщения: 327
Зарегистрирован: Пт фев 08, 2008 13:46:03
Откуда: Воронеж
Контактная информация:

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

Сообщение 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

Изображение

А здесь всё чётко! Но также должно работать и в первом варианте.
В чём может быть проблема???
Реклама
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

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

Сообщение SII »

Компилятор увидел, что значение остаётся постоянным, и соптимизировал его, не учтя, что изначально там было установлено другое значение. Ну а второй раз Вы определили счётчик, чьё значение будет изменяться с каждым импульсом, посему компилятор и сделал, что от него хотели. Но, вероятно, это ошибка в компиляторе (я Верилог не использую, поэтому не могу с определённостью сказать, что его стандарт говорит по сему поводу, но вряд ли он допускает подобную оптимизацию).
Реклама
technik-1017
Открыл глаза
Сообщения: 42
Зарегистрирован: Вс сен 03, 2017 19:43:57
Контактная информация:

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

Сообщение technik-1017 »

Может добавить в модуль сигнал reset и по нему устанавливать начальные значения регистров (да вроде это является правилом хорошего тона).
На различных форумах довольно много обсуждают начальную инициализацию регистров, почитайте. Данная процедура сильно зависит от производителя (altera, xilinx, actel).
TommyVersace
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Сб окт 01, 2016 13:03:46

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

Сообщение TommyVersace »

Всегда используйте сигнал сброса в схемах! Далее используйте констркцию "if ... else".
Совет на будущее: в список чувствительности вносите ТОЛЬКО тактовый сигнал (clk) и сингал сброса (если таковой используется асинхронно).
Реклама
Эиком - электронные компоненты и радиодетали
FPGAlover
Прорезались зубы
Сообщения: 210
Зарегистрирован: Пн окт 21, 2013 07:33:45

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

Сообщение 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

а вообще инициализировать по ресету желательно
Шоб я польку танцевал..
Реклама
Ответить

Вернуться в «ПЛИС»