Перейти к содержанию
    

Multiple constant drivers - помогите разрешить

Собственно, в этом коде Quartus выадет ошибку 10028 (а именно, во втором блоке "always @"):

 

// decrement number (ram), recieved from shift_register
// and synchronously  increment binary counters "units", "tens", "hundreds", "thousands".
// then unite them into BCD number.
// when ram == 0, send signal (cs_down) to the shift_register to collect new data

module converter
(
input [11:0] data_in,							// data from shift_register ([11:0] sr)
input clk, ready,							// "ready" signal from the shift_register.v
output reg [14:0] disp_BCD,						// display memory, binary-coded decimal
							//([14:12] - thousands, [11:8] - hundreds, [7:4] - tens, [3:0] - units)
output reg cs_down							// to the shift_register.v
);

reg [3:0] units = 4'hx; 						// units counter 
reg [3:0] tens = 4'hx; 							// tens counter 
reg [3:0] hundreds = 4'hx; 						// hundreds counter
reg [2:0] thousands = 3'hx;						// thousands counter 
reg [11:0] ram;								// declare RAM, dercement counter

wire units_over = (units [3:0] == 4'h0);
wire tens_over = (tens [3:0] == 4'h0) & units_over;
wire hundreds_over = (hundreds [3:0] == 4'h0) & tens_over;

always @ (negedge clk)
	if (ready) 
	begin
		ram <= data_in; 					// Write data to memory
		units <= 4'bx;						// and clear counters
		tens <= 4'bx;						// 4'bx used to avoid unexpected increments
		hundreds <= 4'bx;
		thousands <= 3'bx;
	end
	else;

always @ (posedge clk)
	if (ram == 12'b0)
		cs_down <= 1'b1;
	else 
	begin
		ram <= ram - 1'b1;
		cs_down <= 1'b0;

		if (units == 4'b1011)
		units <= 4'b0000;
		else
		units <= units + 1'b1;
	end

always @ (posedge units_over)
	if (tens == 4'b1011)
	tens <= 4'b0000;
	else
	tens <= tens + 1'b1;
always @ (posedge tens_over)
	if (hundreds == 4'b1011) 
	hundreds <= 4'b0000;
	else
	hundreds <= hundreds + 1'b1;
always @ (posedge hundreds_over)
	if (thousands == 3'b100)
	thousands <= 3'b000;
	else
	thousands <= thousands + 1'b1;

always @ (negedge cs_down)
disp_BCD <= {thousands, hundreds, tens, units};

endmodule 

 

Что ожидается от схемы:

post-58719-1301315537_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не нравится то, что пытаетесь работать с триггером и по фронту и посрезу одновременно или вообще по нескольким тактовым одновременно. Таких триггеров в ПЛИС нет.

Пользуйтесь одной тактовой частотой и разрешающими сигналами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здесь ошибка не столько, что по срезу и по фронту, а что переменная изменяется в нескольких блоках. Должно быть все в одном.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо, буду в следующий раз избегать этого :)

тогда еще вопрос: можно ли внутри ПЛИС использовать значения "хххх" вместо чисел? Квартус как бы предупреждает

и еще выдал вот что:

Warning: Circuit may not operate. Detected 19 non-operational path(s) clocked by clock "clk" with clock skew larger than data delay. See Compilation Report for details.

Type: Clock Hold: 'clk'

Slack: Not operational: Clock Skew > Data Delay

Required Time: None

Actual Time : N/A

From: thousands[1] //тут стоят все биты регистров "units", "tens", "hundreds", "thousands"

To: thousands[1] //тут стоят все биты регистров "units", "tens", "hundreds", "thousands"

From clock: clk

To clock: clk

Failed Paths: 19

тут имеется в виду то, что при тактировании схемы сигналом с высокой частотой регистры не смогут вовремя переключиться? Или при любой частоте тактирования регистры не будут успевать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...