-
subrealist
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 2
-
Спасибо получено: 0
-
-
|
Здравствуйте!
Начал изучать 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 вьювере, так же сильно меняется.
В чём может быть проблема и какие методы её решения кто может подсказать?
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Leka
-
-
Не в сети
-
Живу я здесь
-
-
Сообщений: 635
-
Спасибо получено: 54
-
-
|
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
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 2
-
Спасибо получено: 0
-
-
|
Leka, благодарю!
Пока не разобрался, по ссылке почитать не успел, сразу откомпилировал, прошил и заработало!
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
Время создания страницы: 0.106 секунд