МАРСОХОД

Open Source Hardware Project

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

ТЕМА: Проблема с 'case statement'

Проблема с 'case statement' 3 года 1 нед. назад #4793

Здравствуйте!

Начал изучать Verilog HDL, основываясь на примерах решил написать управление светодиодами на плате Марсоход2 по уарт. И возникла проблема с case options.

Вот код модуля, используются ещё другие модули, но проблема именно с конструкцией case:
module uart(
	input wire RX,
	input wire TX,
	input wire CLK100MHZ,	
	output wire LED0,
	output wire LED1,
	output wire LED2,
	output wire [7:0] data,
	output wire data_ready
);
	wire clk;
	reg   [3:0] led = 4'b0;
	reg	[7:0] rx_queue[0:7];
	reg	[3:0]	 rx_queue_rp = 0;
	
	divider freq_div(.clk_in (CLK100MHZ), .clk_out (clk));
	uart_rx rx_(.rx (RX), .clk (clk), .data (data), .data_ready (data_ready));
	
	always @(posedge data_ready)
		begin
			rx_queue[rx_queue_rp] <= data;
			rx_queue_rp <= rx_queue_rp + 1'b1;
			case(data)
				"\r": 
					begin
						led[0] = 1;
					end
				"2":
					begin
						led[1] = 1;
					end
				"1":
					begin
						led[2] = 1;
					end
				"0":	
					begin
						led[0] = 0;
						led[1] = 0;
						led[2] = 0;
					end				
			endcase			
		end
			
	assign LED0 = led[0];
	assign LED1 = led[1];
	assign LED2 = led[2];
	
endmodule

Получается так, что когда в case:
		case(data)
				"\r": 
					begin
						led[0] = 1;
					end
				"2":
					begin
						led[1] = 1;
					end
				//"1":
					//begin
						//led[2] = 1;
					//end
				"0":	
					begin
						led[0] = 0;
						led[1] = 0;
						led[2] = 0;
					end				
			endcase			
		end
разрешены три опции, как во фрагменте выше, без разницы какие, работает как и ожидалось, например, по нажатиям на <Enter>, <1> загораются соответствующие светодиоды, по нажатию на <0> гаснут. Но стоит добавить четвёртую опцию, как в полном коде модуля, как работать это перестаёт, плата не реагирует светодиоды не загораются, и код отображаемый в netlist вьювере, так же сильно меняется.

В чём может быть проблема и какие методы её решения кто может подсказать?

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

Проблема с 'case statement' 3 года 1 нед. назад #4794

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 631
  • Спасибо получено: 51
marsohod.org/11-blog/299-nonstable-fpga

always @(posedge data_ready) - так нельзя !!!

Из data_ready нужно получить строб data_ready_strobe длительностью в один такт clk,
и использовать его в качестве разрешающего сигнала:
always @(posedge clk) if(data_ready_strobe)
...
Спасибо сказали: subrealist

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

Проблема с 'case statement' 3 года 1 нед. назад #4795

Leka, благодарю!

Пока не разобрался, по ссылке почитать не успел, сразу откомпилировал, прошил и заработало!

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

  • Страница:
  • 1
Время создания страницы: 0.132 секунд

facebook  GitHub  YouTube  Twitter