2017-04-19 72 views
3

使用上升沿和下降沿的邊緣,我一個FPGA & VHDL新手..FPGA:在同一個進程

我的開發環境如下。

FPGA:斯巴達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; 

我看到了很多的反饋,不建議這些語句,但是我不明白爲什麼這些陳述導致此問題..

+0

我懷疑w_proc是否啓用輸入? – Staszek

+0

是的。這是來自fpga之外的觸發器。 –

回答

3

您的FPGA不具備雙數據(DDR)觸發器,這就是爲什麼不推薦 - 「按原樣」它不能實現所需的功能。

此外,您正在使用異步復位。儘管可能,但也不太推薦,因爲FPGA已經具有同步復位觸發器,因此它不需要任何額外的邏輯,與ASIC不同,並且即使沒有復位,您也可以獲知每個信號的值。異步復位會以某種方式爲您實現時序收斂帶來麻煩。

在你的例子中,無論如何真的不需要DDR FF。看起來具有行爲的原因是可以在時鐘週期之間清除w_count,以便w_count在增加時不會是N_data。爲什麼不把它比較小一點呢?

或者,你可以使用變量(非常小心!),以達到非常相似的行爲:

w_state_proc : process(r_clk) is 
    variable v_count : integer range 0 to N_data; 
    begin 
    if (rising_edge(r_clk)) then 
     v_count := w_count; 
     if(state = write_state and w_proc = '1') then 
     v_count := v_count + 1; 
     end if; 

     if(reset_n_clean = '0' or v_count = N_data) then 
     w_count <= 0; 
     else 
     w_count <= v_count; 
     end if; 

    end if; 
    end process w_state_proc; 

,如果您真的需要w_count有N_DATA的價值半個時鐘週期,你可以始終使時鐘快兩倍,並使用每隔一個時鐘週期有效的使能信號,並將其傳播到您的管線旁邊。這會讓你陷入很多其他(非常教育)的麻煩中,但是可以做到。

+0

謝謝!!!!!!!!! –

相關問題