Jump to content

    
Sign in to follow this  
flammmable

Тернарный оператор VS конструкция if-else

Recommended Posts

Приветствую!

Экономия получается на отладке в Modelsim...., которая занимает ~80% времени.
На чем именно экономия?

Ведь отлаживать Вы будете генерацию сигналов управления в FSM точно так же. А кода при этом как минимум в 2 раза больше.

Удачи! Rob.

 

Share this post


Link to post
Share on other sites
....

При раздельном описании

9 линий кода для инстацирования модуля счетчика,

5 линии кода для описания сигналов управления, и собственно счетчика

4 линии для сигналов управления в начале FSM (default value)

2 (в среднем) линии для сигналов управления в каждой ветви где счетчиком надо управлять.

....

Приветствую!

На чем именно экономия?

Ведь отлаживать Вы будете генерацию сигналов управления в FSM точно так же. А кода при этом как минимум в 2 раза больше.

Удачи! Rob.

Вот только мы экономим не строчки кода, а время.

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

Если взять счетчик с сигналом разрешения работы, и синхронной загрузкой мы в FSM формируем только эти сигналы, ну возможно ещё данные, которые загружаем в счетчик, соответственно и проверяем только их. Остальное мы отладили раньше.

А если в счетчике есть параметр вывода его значения на консоль - то мы можем вообще смотреть в консоли то что выдает счетчик. Или вообще писать все это добро в файл. И включать этот режим очень быстро и просто - в настройках модуля.

А вообще спор ни о чем. Каждый делает так, как считает правильным . Ибо так как правильно зависит от личного опыта, и субъективного взгляда на организацию HDL проектов. :beer:

Share this post


Link to post
Share on other sites

Переделал модуль. Теперь счетчик, вынесенный из автомата, описывается в комбинационной части. Да, если так, то писанины стало меньше. С точки зрения реализации же, по-моему, оба счетчика абсолютно одинаковы.

Но теперь читается хуже. Счетчик, который в автомате, сразу виден в одном месте. А вот работа второго счетчика не так очевидна. Для этого надо смотреть на сам автомат, а также на логику, которая управляет счетчом. Причем каждый сигнал описывается отдельно.

module cnt_test
(
//Global
input 					CLK_i			,
input 					nRESET_i		,

//Input
input 					IN_PULSE_i		,	

//Control
input					ENA_CNT_i		,	
input					CLR_CNT_i		,

//Output of counter
output [31:0]			OUT_CNT0_o32	,
output [31:0]			OUT_CNT1_o32
);

reg [31:0] out_cnt0_o32;
reg [31:0] out_cnt1_o32;
assign OUT_CNT0_o32 = out_cnt0_o32;
assign OUT_CNT1_o32 = out_cnt1_o32;

reg [7:0] state;	//FSM
localparam integer	sIDLE		= 0,
				sCOUNT 		= 1,
				sSTOP		= 2;

wire cnt_1_en = (state == sCOUNT) & ENA_CNT_i & IN_PULSE_i;
wire cnt_1_clr = (state == sSTOP) & CLR_CNT_i;

always @(posedge CLK_i or negedge nRESET_i)
begin
	if(~nRESET_i)
		begin
			out_cnt0_o32 <= 0;				
			state <= sIDLE;
		end
	else
		begin
			case(state)

			sIDLE:
				begin						
					if(ENA_CNT_i)
						state <= sCOUNT;
				end

			sCOUNT:
				begin
					if(ENA_CNT_i)
						begin
							if(IN_PULSE_i)
								begin
									out_cnt0_o32 <= out_cnt0_o32 + 1'b1;										
								end
						end
					else
						begin								
							state <= sSTOP;
						end
				end

			sSTOP:
				begin
					state <= sIDLE;
					if(CLR_CNT_i)
						begin
							out_cnt0_o32 <= 0;								
						end
				end

			endcase
		end

end

always @(posedge CLK_i or negedge nRESET_i)
begin
	if(~nRESET_i)
		begin				
			out_cnt1_o32 <= 0;				
		end
	else
		begin
			if(cnt_1_en)
				out_cnt1_o32 <= out_cnt1_o32 + 1'b1;
			else if(cnt_1_clr)
				out_cnt1_o32 <= 0;
		end
end

endmodule

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

Share this post


Link to post
Share on other sites
Если Вы знаете, что такое "автомат", то попробуйте представить себе набор автоматов - мастер-слэйв-слэйв.

Отличный паттерн разработки! Спасибо! А не подскажите ли, как лучше по вашему опыту: все автоматы делать в одном блоке always - в разных case (я сейчас так сделал) или "один автомат - один модуль"?

 

Share this post


Link to post
Share on other sites
как лучше по вашему опыту: все автоматы делать в одном блоке always - в разных case (я сейчас так сделал) или "один автомат - один модуль"?

Я Ваш вопрос не понял. А что касается мастер-слэйв, то об этом можно прочитать в "Кратком Курсе", раздел "дополнительный об автоматах"...

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this