27 Treffer gefunden
|
Suchdauer: 0,01 Sekunden
|
|
Betreff |
Autor |
Datum |
|
Re: Zeiten in VHDL
270kHz -> Zeit pro Periode 1/270k = 3.7us
37us / 3.7us = 10 -> integer Wert delay_37
152us / 3.7us = 41.08 -> 42 integer Wert delay_152
Gruß
|
witteks |
08.04.07, 13:28 |
|
Re: Simulation pull-up an open collector inouts
Hallo Stefan,
ich weiß nicht, ob ich dir helfen kann, aber hast du schon probiert diesen pull-up selbst als kleinen Block zu beschreiben, über den du die anderen beiden Blöcke verbindest. Ich stecke jetzt leider nicht so richtig drin, aber du hast wahrscheinlich das Problem das du einen hochohmigen Zustand nicht auswerten kannst, richtig ?
Sind beide Ports wirklich funktionale Ein- und Ausgänge?
Sven
|
witteks |
06.10.05, 22:37 |
|
Re: PS2 Schnittstelle
Hallo,
das ist zwar jetzt nicht extra für dich geschrieben, aber vielleicht kannst du es etwas für dich abwandeln. Es nimmt das Startbit in einem D-FF auf und wertet den Inhalt an der nächsten Flanke des 25MHz Taktes aus. Da der interne Takt wesentlich höher ist, sollte die Auswertung der seriellen Schnittstelle kein Problem sein.
Sven
-- proc_start_int : Dieser Prozess erzeugt aus der steigenden Taktflanke
-- des externen Startbits ein internes taktsynchrones Signal
proc_start_int : PROCESS (ars , clk25)
BEGIN
IF ars = '1' THEN
start_int <= '0';
start_dead <= '0';
ELSIF clk25'EVENT AND clk25 = '1' THEN
IF start = '1' AND sync_start = '0' THEN
start_int <= '1';
start_dead <= '1';
ELSIF frame_count (4) = '1' THEN
start_dead <= '0';
ELSE
start_int <= '0';
END IF;
END IF;
END PROCESS proc_start_int;
|
witteks |
06.10.05, 22:24 |
|
Re: Fehler bei Signal Synthese
Hallo Christof,
habe gerade nicht so viel Zeit gehabt.
Ich bin aber noch interessiert an der Weiterentwicklung. Hast du die Auswertung der Daten schon abgeschlossen?
Ich habe noch nicht so viele Erfahrungen mit CPLDs gemacht, wobei ich allerdings schon einen PC84-Sockel für einen FPGA per Hand aufgelötet habe. Der Pinabstand war kein Problem.
Was für Packages gibt es denn für 160 Makrozellen?
Sven
|
witteks |
24.05.05, 23:41 |
|
Re: Fehler bei Signal Synthese
Hallo Christof,
habe mich jetzt mal einen Augenblick :D mit der Seite beschäftigt und versucht das ganze umzusetzen. Ich habe mich nicht so an das Flußdiagramm gehalten, hoffe aber, dass es trotzdem verständlich ist. Dazu habe ich auch eine MiniTestbench geschrieben.
Hast du denn schon den Decoder für das Auswerten des data_bit mit Hilfe von min_clk und bit_clk?
Gruß, Sven
|
witteks |
11.05.05, 23:26 |
|
Re: Fehler bei Signal Synthese
Hallo nochmal,
habe jetzt versucht zu verstehen, was die Schaltung machen soll und veränderte ein paar Sachen. Es ergibt sich eine Funktion, bei der ich mir aber nicht sicher bin, ob das so sein soll, weil die beiden Ausgänge min_clk und bit_clk HIGH werden, sobald der lokale Takt anliegt.
Schau es dir an und schreibe mir mal, ob du es so gebrauchen kannst.
Sven
|
witteks |
10.05.05, 22:21 |
|
Re: Fehler bei Signal Synthese
Hallo ChristofR,
das Problem beginnt ab der Zeile
elsif counter >= 130 then
Da sich das elsif auf die clk-Flanke bezieht, kommt es zu dem Fehler.
Die Abfrage von counter darf nur an Flanken erfolgen, ansonsten mußt du das außerhalb des Prozesses asynchron verarbeiten. Ich versuche noch hinter die Funktion zu kommen und kann vielleicht noch einen Lösungsvorschlag bringen.
Sven
|
witteks |
10.05.05, 21:51 |
|
Re: Impulsabstandsmessung
Hallo Sven,
hier ein Lösungsvorschlag mit Testbench (im Anhang ZIP-Datei).
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Uncomment the following lines to use the declarations that are
-- provided for instantiating Xilinx primitive components.
--library UNISIM;
--use UNISIM.VComponents.all;
entity Messung is
Port ( reset : in std_logic;
Zu_testendes_Signal : in std_logic;
clk_ref : in std_logic;
Impulsabstand : out std_logic_vector(15 downto 0);
Messung_fertig : out std_logic;
Ueberlauf : inout std_logic
);
end Messung;
architecture Behavioral of Messung is
signal halten : std_logic; -- zum Messen einer ganzen Periode des zu messenden Signales
signal Impulsabstand_zaehler : std_logic_vector(15 downto 0);
begin
process (reset, clk_ref)
begin
if reset = '1' then
Impulsabstand_zaehler <= X"0000";
Impulsabstand <= X"0000";
Messung_fertig <= '0';
Ueberlauf <= '0';
halten <= '0';
elsif rising_edge (clk_ref) then
if Impulsabstand_zaehler = X"FFFF" then
Impulsabstand_zaehler <= X"0000";
Ueberlauf <= '1';
else -- kein Überlauf
if Ueberlauf = '0' then
if Impulsabstand_zaehler = X"0000" then
if Zu_testendes_Signal = '1' then
Impulsabstand_zaehler <= Impulsabstand_zaehler + 1;
halten <= '1';
Messung_fertig <= '0';
end if;
else -- Impulsabstand_zaehler nicht 0
if halten = '1' then
if Zu_testendes_Signal = '1' then
Impulsabstand_zaehler <= Impulsabstand_zaehler + 1;
else
Impulsabstand_zaehler <= Impulsabstand_zaehler + 1;
halten <= '0';
end if;
else -- halten = '0'
if Zu_testendes_Signal = '0' then
Impulsabstand_zaehler <= Impulsabstand_zaehler + 1;
else
Impulsabstand_zaehler <= X"0000";
Messung_fertig <= '1';
Impulsabstand <= Impulsabstand_zaehler;
end if;
end if;
end if;
else -- Überlauf = 1
if Zu_testendes_Signal = '0' then
Impulsabstand_zaehler <= X"0000";
Ueberlauf <= '0';
halten <= '0';
end if;
end if;
end if;
end if;
end process;
end Behavioral;
|
witteks |
14.03.05, 21:07 |
|
Re: DCT mit parallel multiplier
Hallo Jens,
Was meinst du denn mit zwei verschiedenen Modi für die diskrete Cosinus Transformation (DCT). Erklär doch mal näher welche Schritte dabei durchgeführt werden und welche Operationen man benötigt. Ich glaube, nicht viele können was mit DCT anfangen, aber vielleicht kann man dir helfen, wenn man weiß, wie gerechnet wird.
Gruß Sven
|
witteks |
11.03.05, 13:38 |
|
Re: Lauflicht & Würfel ... bitte helft mir!
Hallo,
Habe mich mal ein paar Minuten hingesetzt.
Hier die Lösungsvorschläge:
Wahlweise kannst du auch die zip-Datei in dein Xilinx-Projektverzeichnis entpacken und danach auf die lauflicht.npl doppelklicken.
Lauflicht:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity LaufendeLED is
Port ( taster : in std_logic;
ars : in std_logic;
clk : in std_logic;
led : out std_logic_vector(7 downto 0));
end LaufendeLED;
architecture Behavioral of LaufendeLED is
signal led_intern : std_logic_vector (7 downto 0);
begin
process (clk, ars)
begin
if ars = '1' then
led_intern <= "00000001";
elsif rising_edge (clk) then
if taster = '1' then
if led_intern (7) = '1' then
led_intern (0) <= '1';
else
led_intern (0) <= '0';
end if;
led_intern (7 downto 1) <= led_intern (6 downto 0);
end if;
end if;
end process;
led <= led_intern; -- Übergabe an Ausgabe asynchron -> dadurch ist in der
-- Realität im CPLD led = led_intern
end Behavioral;
Würfel:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity wuerfel is
Port ( ars : in std_logic;
clk : in std_logic;
taster : in std_logic;
zahl : out std_logic_vector(6 downto 0));
end wuerfel;
architecture Behavioral of wuerfel is
signal zahl_intern : std_logic_vector (6 downto 0);
--
-- Würfeldarstellung LED-Anordnung (Bit 0 bis 6)
--
-- O O (0) (4)
--
-- O O O (1) (3) (5)
--
-- O O (2) (6)
--
begin
process (clk, ars)
begin
if ars = '1' then
zahl_intern <= "0001000"; -- eins
elsif rising_edge (clk) then
if taster = '1' then
case zahl_intern is
when "0001000" => -- eins
zahl_intern <= "0010100"; -- zwei
when "0010100" =>
zahl_intern <= "1001001"; -- drei
when "1001001" =>
zahl_intern <= "1010101"; -- vier
when "1010101" =>
zahl_intern <= "1011101"; -- fünf
when "1011101" =>
zahl_intern <= "1110111"; -- sechs
when others =>
zahl_intern <= "0001000"; -- eins
end case;
end if;
end if;
end process;
zahl <= zahl_intern; -- Übergabe an Ausgabe asynchron -> real: zahl = zahl_intern
end Behavioral;
|
witteks |
10.03.05, 16:42 |
|
Re: Lauflicht & Würfel ... bitte helft mir!
Hallo Katja,
mußt du dazu unbedingt VHDL benutzen? Solche Aufgaben lassen sich leichter über "Schematic Entry" lösen, weil die Aufgabenstellung nicht wirklich komplex ist.
Mit Schematic Entry bedienst du dich sozusagen aus einem Baukasten der Funktionen deines CPLDs und verdrahtest dann einfach. Dabei behältst du auf jeden Fall besser die Übersicht und kannst leichter verstehen, was du da überhaupt machst.
Arbeitest du schon länger mit CPLDs?
Sven
|
witteks |
01.03.05, 12:31 |
|
Re: Error: VHDL error ... can't determine definition of operator ""+"" -- found 0 possible definitions
Hallo Andreas,
vielleicht ist das '+' für die Addition dieser beiden Werte nicht definiert. Wahrscheinlich werden dabei unterschiedliche Typen miteinander verknüpft. Deshalb ist bestimmt erst eine Typkonvertierung von acvar.areg(ac_int) (auf welchen Typ zeigt das?) oder x"00000002" (ist das eine Konstante?) nötig.
Gruß, Sven
|
witteks |
18.02.05, 08:44 |
|
Re: Linear Feedback Shit Register
Hallo Mark10k!
Du hast sicher bestimmt schon herausbekommen, aber ich denke es liegt daran, dass du Variablen, Signale und Ports verschiedener Typen verwendet hast.
Port : data (Typ - std_logic)
Variable : feedback (Typ - bit)
Signal : LSFR (Typ - bit_vector)
Du darfst bei Zuweisungen untereinander nur gleiche Typen benutzen oder Konvertierungen vornehmen.
Ich empfehle dir generell nur std_logic einzusetzen, weil damit mehr Zustände eines Signals betrachtet werden können, als beim Typ bit (siehe Dokumentation).
Sven
|
witteks |
03.01.05, 09:57 |
|
Re: Einstellungen sepichern
Hallo,
du kannst, nachdem du die Testbench im Navigator verändert hast, im Hauptfenster des noch von der vorherigen Testbench offenen ModelSim mit der Pfeiltaste nach oben gehen, um durch die letzten Befehle zu gehen. Beim erneuten Ausführen ***Testbench***.do wird nur die Waveform neu berechnet. Andere Befehle können so sinnvoll wiederholt werden. Damit spart man unheimlich viel Zeit, weil ja auch nicht mehrere Instanzen vom ModelSim gestartet werden können.
Gruß, Sven
|
witteks |
04.11.04, 21:10 |
|
Re: Nah zur Realität Simulation!!
Hallo!
Wenn ich es richtig verstanden habe, benutzt du die Xilinx Edition.
In dieser Variante schreibst du einfach eine Testbench und klickst danach auf "Simulate Post-Place & Route VHDL-Model". Die Ergebnisse der Ausgänge entsprechen dann den Verzögerungen in der "Realität". Timing Simulationen sind aber für komplexe Schaltungen immer sehr rechenintensiv und sollten zur Überprüfung von Verletzungen der Setup- und Holdzeiten eingesetzt werden. Durch Bekanntmachung von Frequenzen in den Constraint-Dateien ist man dann aber schon ein Stück weiter. Im Normalfall, bei synchroner Programmierung von Prozessen, reicht der Einsatz der Behavioral Simulation, solange man sich nicht im Grenzbereich der Takte des FPGA befindet.
Gruß, Sven
|
witteks |
18.09.04, 13:20 |
|
Re: Frequenz Multiplizierer
Hallo Gaelforce!
Meines Wissens nach, ist es immer ein bisschen komplizierter eine Frequenz zu erhöhen, aber es gibt verschiedene Möglichkeiten.
Die erste ist die, dass du schon einen höheren Takt im System hast, von dem du die neue Frequenz, in Abhängigkeit eines bestimmten Faktors der zu multiplizierenden kleineren Frequenz, ableitest. Bei so geringen Frequenzen, wie in deinem Beispiel sollte das eigentlich kein Problem sein.
Die zweite Möglichkeit ist die Nutzung von bestimmten Einheiten, die dir im FPGA zur Verfügung gestellt werden. Bei Xilinx nennt sich das Digital Clock Management (DCM) und bei Altera gibt es das auch (Bezeichnung fällt mir jetzt nicht ein). Ich kann jetzt nur für Xilinx sprechen, aber dort kannst du nur Frequenzen verdoppeln (durch kaskadieren von mehreren DCMs sind jedoch auch andere Faktoren möglich). Mit der Verwendung von DCMs benötigst du keine externen höheren Frequenzen, weil die DCM intern mit festen Verzögerungsgliedern und Zählern arbeitet und dadurch selbst sehr hohe Takte erzeugen kann. Wenn mich nicht irrt, kann z.B. der Virtex II einen Eingangstakt von 150 MHz sogar noch verdoppeln.
Bei Altera solltest du ähnliche Funktionen vorfinden.
Gruß, Sven
|
witteks |
31.08.04, 10:31 |
|
Re: paralleles Singal seriell ausgeben
Hallo Steffen
1. Wie erfolgt die Übernahme eines Strings in einem digitalen System? :confused:
Ich denke, dass dazu zwischen zwei digitalen Systemen auch nur ein binärer serieller oder paralleler Datenstrom fließt. Es sei denn, dass der String innerhalb eines Systems übergeben wird. In diesem Fall wandelt das Synthesetool das automatisch im Hintergrund.
2. Erfolgt die Übernahme des Strings in einem Prozess?
Vielleicht wird der Prozess nicht aktiviert.
Sven
|
witteks |
19.08.04, 21:05 |
|
Re: paralleles Singal seriell ausgeben
Hallo Steffen!
Wenn du schon das ganze neu programmierst, dann versuche alles synchron von einem clk zu takten. Das wird eindeutig besser von den Synthesetools unterstützt und du handelst dir nicht so viele Probleme ein. Das Ganze gilt natürlich nicht, wenn du unbedingt asynchron arbeiten wolltest!
Was mich noch interessiert: Weil ich noch nicht so viel in deiner Funktion 'gekramt' habe, würde mich interessieren, was für ein Bitvektor dort abhängig vom Zeichen zurückgegeben wird. Kannst du das mit kurzen Worten erklären?
Sven
|
witteks |
17.08.04, 20:19 |
|
Re: paralleles Singal seriell ausgeben
Hallo code_HH!
Ich habe mal versucht in deinen Code hereinzukommen. Leider ist das sehr schwer in kurzer Zeit, weil überhaupt keine Kommentare vorhanden sind.
Soll das ganze mal in Realität umgesetzt werden?
Mit welchem Programm hast du das geschrieben, weil ich mit dem WebPack viele Syntaxfehler erhalte.
Sven
|
witteks |
13.08.04, 21:35 |
|
Re: paralleles Singal seriell ausgeben
[quote:Dr. Faustus]
Wenn man :
if (bit_zaehler = 0) then
bit_zaehler := 0;
else
bit_zaehler := bit_zaehler + 1;
schreibt wird weniger logik auf dem Chip produziert
[/quote]
Dann aber eher so:
if (bit_zaehler = 5) then
bit_zaehler := 0;
else
bit_zaehler := bit_zaehler + 1;
end if;
Gruß Sven
|
witteks |
04.08.04, 12:20 |
|
Re: paralleles Singal seriell ausgeben
Gib das Signal in einem mit Clock getakteten Prozess aus.
Sowas in der Art
signal : bit_vector (5 downto 0); --(vielleicht besser std_logic_vector)
signal : ausgang bit;
process (clk)
var bit_zaehler : integer;
begin
if rising_edge(clk) then
if bit_zaehler /= 5 then
bit_zaehler := bit_zaehler + 1;
else
bit_zaehler := 0;
end if;
end if
end process;
ausgang <= signal (bit_zaehler);
Ich hoffe das funktioniert so, leider habe ich jetzt nix zum Testen. Unter Templates im WebPack findest du übrigens auch Beispiele für solche Wandler.
Sven
|
witteks |
03.08.04, 21:01 |
|
Meinungen
Hallo,
Wer von euch hat dieses Buch schon gelesen?
Ich habe bis jetzt die Hälfte davon gelesen und finde es richtig gut, weil es viele Probleme bei der Synthetisierung aufgreift, erklärt und Lösungen anbietet.
Zum Beispiel bringt er Beispiele zu 'multi'process- und single'process' FSMs und erklärt dabei für mich gut verständlich die Anwendung von Variablen, die ich vorher immer versucht habe zu umgehen, weil ich den Unterschied nicht kapiert habe.
Gruß Sven
|
witteks |
08.07.04, 09:03 |
|
Umsetzung rising_edge(clk)
In einem Beitrag habe ich gelesen, dass man statt
if clk'event and clk = '1' then
besser
if rising_edge(clk) then
schreiben sollte. Welchen Grund hat das? Eigentlich sollten beide Varianten das gleiche Ergebnis in Hardware und Simulation haben, oder?
Ich benutze bisher nur Variante 1 in meinen synchronen Umgebungen.
Sven
|
witteks |
22.06.04, 14:27 |
|
Re: Unterschied zwischen net und pin im ucf file
Was möchtest du denn genau für constraints vergeben (Angaben zur Frequenz?)? Stell doch mal das ucf-file rein. Bei mir habe ich zum Beispiel nur net als Befehl. Sowohl für Taktangaben, als auch für Angaben der Pinbelegung.
Sven
|
witteks |
21.06.04, 13:09 |
|
Re: Bräuchte Hilfe !!!
Stell doch mal deinen Quelltext rein. Dann kann man vielleicht schon so helfen.
Auf welcher Hardware soll das realisiert werden?
Sven
|
witteks |
21.06.04, 12:57 |
|
Re: SRAM vs. BlockRAM
Ich habe schon mit BlockRAM im VirtexII gearbeitet. Hast du schon bestimmte Vorstellungen und Erfahrungen bei SRAM? Auf welcher Hardware soll das implementiert werden?
Sven
|
witteks |
21.06.04, 12:51 |
|
Re: Is ja noch nich so viel los hier...
Hallo
Ich bin noch Elekrotechnik-Student und habe einen Teil meiner Studienarbeit und meine komplette Diplomarbeit mit VHDL geschrieben.
Ich arbeite mit dem WebPack von Xilinx und dem ModelTechSimulator auf der VirtexII-Basis.
Ich habe jetzt Erfahrungen mit der Anwendung von BlockRAM und den DCMs in der Virtex-Baureihe. Ich hoffe wir können uns hier gegenseitig helfen.
Gruß, Sven
|
witteks |
21.06.04, 12:46 |
|
|
|
powered by carookee.com - eigenes profi-forum kostenlos
Design © trevorj
|