Я новичок в fpga и vhdl..
Моя среда разработки выглядит следующим образом.
ПЛИС: Спартанский 6 XC6SLX9
Компилятор: ИСЕ 14.04
Симулятор: Изим
Я делаю простой счетчик, но есть некоторые вещи, которые я не могу понять.
Следующий код - это то, что я написал. Я ожидал, что w_count
будет увеличиваться при каждом спадающем фронте тактового сигнала и сбрасываться на 0, когда w_count
достигает N_data
во время нарастающего фронта тактового сигнала. В процессе компиляции проблем не возникло, и симуляция тоже работает хорошо, как я и ожидал. Но применительно к реальной fpga w_count
увеличивалось для каждого триггера, но не обнулялось при достижении N_data
..
w_state_proc : process(r_clk, reset_n_clean)
begin
if(reset_n_clean = '0') then
w_count <= 0;
elsif(r_clk'event and r_clk = '0') then
if(state = write_state and w_proc = '1') then
w_count <= w_count + 1;
end if;
elsif(r_clk'event and r_clk = '1') then
if(w_count = N_data) then
w_count <= 0;
end if;
end if;
end process w_state_proc;
Когда я изменил положение двух утверждений elsif
, w_count
вообще не увеличилось..
w_state_proc : process(r_clk, reset_n_clean)
begin
if(reset_n_clean = '0') then
w_count <= 0;
elsif(r_clk'event and r_clk = '1') then
if(w_count = N_data) then
w_count <= 0;
end if;
elsif(r_clk'event and r_clk = '0') then
if(state = write_state and w_proc = '1') then
w_count <= w_count + 1;
end if;
end if;
end process w_state_proc;
Я видел много отзывов о том, что эти утверждения не рекомендуются, но я не понимаю, почему эти утверждения вызывают проблемы.