Forum: FPGA, VHDL & Co. Abgreifen von Signalen


von Torben (Gast)


Lesenswert?

Hallo Leute,
Ich hab eine wirklich basic Frage, aber wie es halt so ist, findet man 
im gr. I-Net nicht unbedingt auf alles eine Antwort.
Ich hab ein Input Stream der eine Breite von 56 Bits hat, von diesen 56 
Bits möchte ich nun 48 Bits abgreifen.
Folgendes hab ich mir überlegt, bloß ISE meckert hier rum (ModelSim 
hingegen nicht).
1
time_out_tmp(47 downto 0) <= input_stream(55 downto 8);

Die Zuweisung geschieht in einer IF Abfrage diese wiederrum in einer 
Prozedur steht.

Ich wäre für jede Hilfe dankbar.

von Falk B. (falk)


Lesenswert?

@ Torben (Gast)

>Folgendes hab ich mir überlegt, bloß ISE meckert hier rum (ModelSim
>hingegen nicht).

Was sagt ISE denn?
Die Zuweisung sieht erstmal OK aus.

MfG
Falk

von Torben (Gast)


Lesenswert?

@ Falk Brunner

Folgendes Sag ISE:
Xst:827 line 28: Signal time_out_tmp cannot be synthesized, bad 
synchronous description.

von FPGAküchle (Gast)


Lesenswert?

Dann schick uns mal den gesamten Code, mit dem IF drumherum. 
Wahrscheinlich ist der Takt falsch beschreiben.

von Torben (Gast)


Lesenswert?

1
library ieee ;
2
use ieee.std_logic_1164.all;
3
4
ENTITY register_rtc IS
5
    generic(n: natural :=56);
6
    PORT( clk, reset: in std_logic;
7
        input_stream: in std_logic_vector(n-1 downto 0);
8
        output_stream: out std_logic_vector(n-9 downto 0));
9
end register_rtc;
10
11
architecture behv of register_rtc is
12
13
   signal set_time: std_logic; --Kontrollbit, fuer die Zeit
14
   signal time_out_tmp: std_logic_vector(47 downto 0); --Hilfssignal
15
   signal ctime: std_logic_vector(31 downto 0); --CTime
16
   signal ftime: std_logic_vector(15 downto 0); --FTime
17
18
begin
19
20
    set_time <= input_stream(0);
21
    ctime <= input_stream(55 downto 24);
22
    ftime <= input_stream(23 downto 8);
23
   
24
    reg: process(input_stream, clk, reset)
25
    begin
26
        
27
   
28
  if (reset = '1') then
29
      time_out_tmp <= (time_out_tmp'range => '0');
30
  elsif (set_time = '1' and clk='1' and clk'event) then
31
     time_out_tmp(47 downto 0) <= input_stream(55 downto 8); --Setzen der Uhrzeit (extern)
32
  elsif (clk='1' and clk'event) then
33
      -- TODO: setzen vom neuen time_out_tmp
34
  end if;
35
36
   end process reg;
37
   
38
   -- CTime: process(input_stream, clk, reset)
39
   -- end process:CTime;
40
   
41
   -- FTime: process(input_stream, clk, reset)
42
   -- end process:FTime;
43
   
44
   output_stream <= time_out_tmp;
45
46
end behv;

von FPGAküchle (Gast)


Lesenswert?

So sollte es sein:
1
if (reset = '1') then
2
      time_out_tmp <= (time_out_tmp'range => '0');
3
elsif (clk='1' and clk'event) then
4
   if set_time = '1' then
5
     time_out_tmp(47 downto 0) <= input_stream(55 downto 8); --Setzen der Uhrzeit (extern)
6
   end if;
7
end if;

dann wird dann auch ein FF gebaut.

von synchron (Gast)


Lesenswert?

Und input_stream aus der sensitivity list raus. Ein synchroner Prozess 
reagiert nur auf clk (und wenn notwendig reset). Gilt auch bei den 
weiteren synchronen Prozessen.

von Torben (Gast)


Lesenswert?

Danke für die Hilfe, werde nun erstmal zu Tisch gehen und anschließend 
die Modifikationen durchführen.

Guten Appetit

von Torben (Gast)


Lesenswert?

Hat wunderbar geklappt, danke vielmals

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.