How to describe a process with asynchronous reset in VHDL for the ARRIA 10 FPGA
Hello,
i have some trouble with the reset signal. I use VHDL to describe my logic. The target FPGA is an ARRIA 10.
I have realized that the reset signal is connected as a global enable signal (ENA) to registers which aren't in the reset case. Here is an example process:
process(arst_n, clk)
begin
if arst_n = '0' then -- reset case
s_valid <= '0';
elsif rising_edge(clk) then -- normal case
s_valid <= valid;
s_data <= data; --[511:0] -- no reset
end if;
end process:<s_data> is only valid if <s_valid> is high. Therefore <s_data> doesn't need a reset. In reset state <s_data> can be random.
Problem:
Quartus connects <arst_n> with <s_data>. This is the reason why I have a high fan-out on the reset signal and my timing is bad.
Here a part of the Quartus report
Total registers 513
Number of registers using Synchronous Clear 0
Number of registers using Synchronous Load 0
Number of registers using Asynchronous Clear 1
Number of registers using Asynchronous Load 0
Number of registers using Clock Enable 512 <----- problem
Number of registers using Preset 0
Maximum fan-out 513 <----- problem
Question:
How can I describe the given logic in VHDL without the global enable signals being generated by Quartus?
I want this (only one async clear):
Total registers 513
Number of registers using Synchronous Clear 0
Number of registers using Synchronous Load 0
Number of registers using Asynchronous Clear 1
Number of registers using Asynchronous Load 0
Number of registers using Clock Enable 0
Number of registers using Preset 0
Hi,
If you put s_data <= data; in the if-else condition, the data will be controlled by arst_n = '0'.
Thanks.