Forum: FPGA, VHDL & Co. Frage zu VHDL Code


von Martin (Gast)


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.)

von Martin (Gast)


Lesenswert?

Danke Euch!

von FPGA Spezialist (Gast)


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 ?

von Fpgakuechle K. (Gast)


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;

von Fpgakuechle K. (Gast)


Lesenswert?

ein kommantar ist falsch, der reset ist asnynchron :-(

von Martin (Gast)


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"!

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.