我是 fpga 和 vhdl 新手..
我的开发环境如下。
FPGA:斯巴达6 XC6SLX9
编译器:ISE 14.04
模拟器:Isim
我正在做一个简单的计数器,但有些东西我无法理解。
下面的代码是我写的。我期望的是w_count
在时钟的每个下降沿增加,并在时钟上升沿w_count
达到时重置为 0。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;
我可以看到很多不推荐这些语句的反馈,但我不明白为什么这些语句会导致这个问题..