Hallo,
ich Versuche gerade verzweifelt die Warnungen der Synthese für das
Trimmen von Optimieren von FF/Latches weg zu bekommen. Vorab die Signale
verändern sich und in der Simulation mit ISim erhalte ich auch das
gewünschte Ergebnis.
Kurze Erklärung zum Verhalten: Ich verwende zwei Puffer (rd, wr) die von
einem A/D-Bus Daten erhalten bzw. bereit stellen. Mit einem zusätzlichen
Signal wird ein Datenaustausch zwischen den Puffern und einem
nachgeschalteten Element ebenfalls über einen A/D-Bus angeregt. Die
Signalerzeugung hierfür wird durch eine FSM vorgenommen.
Die Pufferschaltung und das nachgeschaltete Element sollen vervielfacht
werden, so dass mit einem Signal ein zeitgleicher Datenaustausch der
vorgehaltenen Daten durchgeführt werden kann.
1 | architecture rtl of bufqd is
|
2 | --data buffer
|
3 | type dbuffer is array (0 to DATASET_SIZE-1) of std_logic_vector(BUF_D_SIZE-1 downto 0);
|
4 | signal buf_rd, buf_wr : dbuffer;
|
5 | .
|
6 | .
|
7 | .
|
8 | begin
|
9 | buffer_wr_proc: process
|
10 | begin
|
11 | wait until rising_edge(clk_i);
|
12 | if (rst_i = '1') then
|
13 | buf_wr <= (others => (others => '0'));
|
14 | buf_rd <= (others => (others => '0'));
|
15 | elsif (en_i = '1') then
|
16 | if ((To_integer(unsigned(buf_addr_i(15 downto 8))) = BUF_A_BASE) and (buf_we_i = '1')) then
|
17 | buf_wr(To_integer(unsigned(buf_addr_i(1 downto 0)))) <= buf_di_i;
|
18 | end if;
|
19 |
|
20 | if ((quad_oe = '1') and (quad_addr = '0')) then
|
21 | buf_rd(0) <= qd_di_i(15 downto 0);
|
22 | buf_rd(1) <= qd_di_i(31 downto 16);
|
23 | elsif ((quad_oe = '1') and (quad_addr = '1')) then
|
24 | buf_rd(0) <= qd_di_i(15 downto 0);
|
25 | buf_rd(1) <= qd_di_i(31 downto 16);
|
26 | end if;
|
27 | end if;
|
28 | end process buffer_wr_proc;
|
29 | .
|
30 | .
|
31 | .
|
32 | end rtl;
|
Synthetisiere ich das Projekt alleine, gibt es keine entsprechenden
Warnings. Baue ich die gesamte Schaltung zusammen erhalte ich die
folgenden Warnings (kurzer Auszug, gilt natürlich für alle Elemente von
Buf_wr und buf_rd):
1 | WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <C_BUFQD_QD/C_BUFQD/buf_wr_2_12> (without init value) has a constant value of 0 in block <rt_sense_v3_min>. This FF/Latch will be trimmed during the optimization process.
|
2 | WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <C_BUFQD_QD/C_BUFQD/buf_wr_2_11> (without init value) has a constant value of 0 in block <rt_sense_v3_min>. This FF/Latch will be trimmed during the optimization process.
|
3 |
|
4 | WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <buf_rd_3_14> (without init value) has a constant value of 0 in block <bufqd>. This FF/Latch will be trimmed during the optimization process.
|
5 | WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <buf_rd_3_13> (without init value) has a constant value of 0 in block <bufqd>. This FF/Latch will be trimmed during the optimization process.
|
Ich würde mich über einen Tipp sehr, denn mir erschließt es sich im
Moment nicht.
Grüße,
Klaus
PS: rst_i ist angeschlossen und auch nicht dauerhaft auf '1' gehängt.