【发布时间】:2017-04-19 09:27:18
【问题描述】:
我是 fpga 和 vhdl 新手..
我的开发环境如下。
FPGA :Spartan 6 XC6SLX9
编译器:ISE 14.04
模拟器:Isim
我正在做一个简单的计数器,但有些东西我看不懂。
以下代码是我写的。我的预期是w_count 增加时钟的每个下降沿,并在时钟上升沿期间w_count 达到N_data 时重置为 0。编译过程没有问题,仿真也和我预期的一样好。但是当应用于真正的 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;
我可以看到很多不推荐这些语句的反馈,但我不明白为什么这些语句会导致这个问题..
【问题讨论】:
-
我怀疑 w_proc 是启用输入?
-
是的。这是来自 fpga 外部的触发器。