std_ulogic_vector

Gast #1252880
Lesenswert?

du hast es richtig erkannt, wenn signal in ist, kannst du es
nur lesen.

Möchtest du die entity testen ob alles richtig ist?
1
entity add is
2
    port(x:in std_logic);
3
end;
4
architecture add_one of add is
5
begin
6
 ---
7
end;
8
architecture add_two of add is
9
begin
10
 ---
11
end;
12

13
entity add_tb is
14
end;
15

16
architecture add_tb of add_tb is
17
   signal a: std_logic;
18
begin
19

20
   dut: entity add(add_one) port map(x => a);
21
   
22
   stimuli: process
23
   begin
24
       a <= '0'; wait for 10 ns;
25
       a <= '1'; wait for 5 ns;
26
       -- und so weiter
27
       wait;
28
   end process;
29

30
end;

ich mach so, dass ich testbenches mit suffix _tb markiere.
hat den Vorteil, dass im Ordner im Dateisystem, die beiden
Dateien direkt untereinander stehen.
OP #1253794
Lesenswert?

danke daniel ,ich habe einfach das auch mit testbench gemacht und hat 
geklappt.
ich habe noch eine frage, ich will 6 bits in einem speicher kopieren 
aber es sollte nur die zweite bit kopiert werden zb:
ich habe "110010" ich will nur die zweite kopieren also nur 1,0,1 dh ein 
bit nicht ein bit ja bzw nur die geraden bits.
wie kann man nur die geraden bits speichern?
vielen dank.
Moderator (Firma: Titel) Persönliche Seite #1253892
Lesenswert?

Entweder machst du es komplett von Hand:
1
  signal invect   : std_logic_vector(7 downto 0);
2
  signal evenbits : std_logic_vector(3 downto 0);
3
  signal oddbits  : std_logic_vector(3 downto 0);
4
:
5
  evenbits <= ivec(6)&ivec(4)&ivec(2)&ivec(0);
6
  oddbits  <= ivec(7)&ivec(5)&ivec(3)&ivec(1);

Oder du machst es mit einer Schleife:
1
  signal invect   : std_logic_vector(7 downto 0);
2
  signal evenbits : std_logic_vector(3 downto 0);
3
  signal oddbits  : std_logic_vector(3 downto 0);
4
:
5
  process (invect) begin
6
    for i in 0 to invect'high/2 loop
7
       evenbits(i) <= invect(i*2);
8
       oddbits(i)  <= invect(i*2+1);
9
    end loop;
10
  end process;
OP #1254434
Lesenswert?

hallo Lothar,
danke für deine Hilfe ,das problem ich muss  die geraden Bits von 384 
bits speichern und nach jedem bits sollte eine warte zeit von 1 ms dazu 
machen dh:
.
.
Port (B in  std_ulogic_vector (383 DOWNTO 0);
.
.
architecture........

signal Daten : std_ulogic_vector (0 to 383)

daten<=B    hier sollte nur die geraden bits in Daten kopiert und dazu 
soll für jede gerade bit eine warte zeit von 1ms gemacht werden.

ich kann keine schleife hier benutzen !!
Moderator (Firma: Titel) Persönliche Seite #1254478
Lesenswert?

Jede ms sollen die geraden Bits von B nach daten übertragen werden?

Warum ist der Ausgangsvektor daten auch 384 Bits breit,
wenn nur die geraden Bits zurückgegeben werden sollen?

So würde ich das machen:
1
Port ( clk : in std_logic;  -- z.B. 50Mhz
2
       B   : in std_logic_vector (383 DOWNTO 0);
3
:
4
architecture........
5
:
6
signal Daten : std_logic_vector (191 downto 0);
7
signal cnt   : integer range 0 to 50000-1 := 0;
8
:
9
  process begin
10
    wait until rising_edge(clk);
11
    if(cnt=50000-1) then  cnt <= 0;      -- 1 ms vorbei, zuruecksetzen
12
    else                  cnt <= cnt+1;  -- sonst zaehlen
13
    end if;
14
  end process;
15
:   
16
  process begin
17
    wait until rising_edge(clk);
18
    if(cnt=0) then -- 1 ms vorbei? -> Daten uebernehmen
19
       for i in 0 to B'high/2 loop 
20
          Daten(i) <= B(i*2);
21
       end loop;
22
    end if;
23
  end process;
24
:

> ich kann keine schleife hier benutzen !!
Doch, genau das ist es, was du brauchst.
Sieh dir das VHDL-Thema for-loop nochmal genauer an.
Gast #1254489
Lesenswert?

soll das auch nur für die Testbench sein oder soll das durch dir
Synthese?

Warum kannst du keine Schleife nutzen?
Die Schleife verbraucht keine "Takte" der Clock, falls das dein
Problem mit der Schleife ist.

Grüsse
OP #1256346
Lesenswert?

ich danke euch sehr mit der schleife hat funktioniert aber die warte 
zeit habe ich nicht gewusst wie ich das machen soll weil jedes bit 
braucht 1ms dh nach jedes bit soll eine warte zeit von 1ms dauern bis 
das nächste bit kommt.
warum soll cnt bis 50000-1 zählen ich verstehe nicht!!!
signal cnt   : integer range 0 to 50000-1 := 0;

danke

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren