МАРСОХОД

Open Source Hardware Project

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА: Вопросы по языку Verilog

Вопросы по языку Verilog 3 года 4 мес. назад #6030

  • with
  • with аватар
  • Не в сети
  • Захожу иногда
  • Захожу иногда
  • Сообщений: 76
  • Спасибо получено: 3
umarsohod
Если позволите:

Next_C_State = Convert_State;

Такую конструкцию .. брал из какого то апнота ... по моему от альтеры по автомату Мура, позволяет остановить автомат на текущем состоянии до изменения условия, заместо :
else Next_C_State = same_state;
В своих программах вы подобное не используете ?

Leka
Я вас понял но как добавить еще один синхронный блок always так, чтоб не нарушать логику автомата Convert_State не вижу,
если не сложно - чирканите еще одну подсказку :unsure:

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Вопросы по языку Verilog 3 года 4 мес. назад #6031

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Проще всего все перенести в always@(posedge clk), хотя это отличается от стандартного стиля:
//===============================================================
reg [3:0] Convert_State;
reg [3:0] Next_C_State;

reg [15:0] dat_in = 0;
reg [15:0] Test_dat = 16'd202;
//===============================================================
always @(posedge clk) begin
	Convert_State <= Next_C_State;

//always @* begin

	Next_C_State = Convert_State;
	case(Convert_State)
		4'd0:begin
			dat_in = Test_dat;
			test_point = 1'b0;
			Next_C_State = 4'd1;
		end
		4'd1:begin
			if(dat_in > 16'd100) Next_C_State = 4'd2;
			else Next_C_State = 4'd3;
		end
		4'd2:begin
			dat_in = dat_in - 16'd100;
			test_point_2 = 1'b1;
			Next_C_State = 4'd1;
		end
		4'd3:begin
			dat_out_10 = dat_in;
			test_point = 1'b1;
			Next_C_State = 4'd0;
		end
		default: Next_C_State = 4'd0;
	endcase
end
Не проверял (занят).

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Вопросы по языку Verilog 3 года 4 мес. назад #6032

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54

with пишет: В конечном итоге мне надо поступившее значение преобразовать в код для четырехзначного семисегментника .. посчитав сколько в нем тысяч, сотен .. десяток и т.д.

Это надо не вычитаниями делать, а сначала преобразовать двоичный код в двоично-десятичный (логикой, без FSM), а уже потом двоично-десятичный в семисегментный. На форуме были примеры (кажется, в частотомере), надо поискать (сейчас нет времени).

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.
Время создания страницы: 0.168 секунд

ВКонтакте  facebook  GitHub  YouTube  Twitter