Frage zu VHDL Code

Gast #642181
Lesenswert?

Hallo


Ich möchte in einem STD_LOGIC_VECTOR(37 downto 0) gezielt Bits setzen 
und rücksetzen.
Habe dafür folgendes gewählt:
if XA_4 = '1' then stat_reg(4)<='1'; else stat_reg(4)<='0'; end if;

Wenn ich mir die ganze Sache nun in Modelsim betrachte werden jedoch die 
Bit's nur in einen undefinierten Zustand gehoben (X) --> jedoch nicht 
'1'
Woran kann das liegen? Ist der Ausdruck stat_reg(4)<='1' falsch?

(Was auch möglich wäre, wäre das stat_reg mittels einer Maske logisch 
oder zu verknüpfen. So könnten die Bits auch gesetzt / rückgesetzt 
werden.)
Gast #642195
Lesenswert?

Das muss gehen. Es hört sich aber so an, als ob der Vektor noch woanders 
gesetzt wird und damit ein Kollision auftritt. Ist sichergestellt, daß 
es keine teizliche Überlappung der Zuweisungen gibt? Wird der Vektir 
irgendwo genullt ?
Gast #642608
Lesenswert?

if Konstrukt heisst üblicherweise process  heisst sensitivity list. Ist 
die unvollständig? sind die signale in der list gesetzt?

Also dein codeschnipsel ist OK, der Fehler liegt in den anderen zeilen.
1
process(clk_i,rst_i)  --sensetiivizy list (Takt, async. reset)
2
 if rst_i = '1'  then --synchroner reset
3
  stat_reg(4)<='0'
4
 elsif rising_edge(clk_i) then
5
 --dein code
6
  if XA_4 = '1' then 
7
   stat_reg(4)<='1'; 
8
  else 
9
   stat_reg(4)<='0'; 
10
  end if;
11
 --ende dein code
12
 end if;
13
end process;
Gast #643064
Lesenswert?

ok danke. hab gerade nicht die möglichkeit den fehler weiter zu suchen. 
aber ich denke auch, dass da ein kollision auftritt. benutze das signal 
in 2 prozessen...
ich schau mal, wenn es wieder möglich ist. 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