VHDL: Was bedeutet STD_INPUT und STD_OUTPUT, die in std.textio erscheinen?

Das Paket enthält die folgenden Zeilen:

Datei INPUT: TEXT ist in „STD_INPUT“; Datei AUSGABE: TEXT ist aus „STD_OUTPUT“;

Aus irgendeinem Grund erinnern mich diese an die Standard-Input- und -Output-Streams aus meinem C-Sprachunterricht. Was bedeuten diese hier? Ist es wirklich möglich, den Standard-Eingabe-/Ausgabestrom mit diesem Paket zu lesen/schreiben? Wie?

Sie werden feststellen, dass Anbieter in der Nähe allgemein sagen: "STD_INPUT ist ein file_logical_name, der sich auf Zeichen bezieht, die interaktiv über die Tastatur eingegeben werden, und STD_OUTPUT bezieht sich auf Text, der auf dem Bildschirm angezeigt wird." Diese entsprechen stdin und stdout. Sie READ oder READLINE von INPUT (STD_INPUT) oder WRITE oder WRITELINE zu OUTPUT (STD_OUTPUT). Datei-E/A ist von der Implementierung des Hostsystems abhängig.
Nein, was ich fragen möchte, ist, dass es bei Standard-Eingabe- und Ausgabeströmen nicht um Datei-IO geht, bei dem wir ein "Handle" für eine Datei auf einem Medium erstellen und dann sequenziellen oder zufälligen Lese-/Schreibzugriff auf ihre Sektoren ausführen. Der Standardeingabestrom kommt von der Tastatur und besteht aus Zeichen. Der Standardausgabestrom ist der PC-Bildschirm. Ich glaube nicht, dass VHDL dies bedeutet, wenn es STD_INPUT und STD_OUTPUT sagt, oder verstehe ich etwas falsch?
Tatsächlich stammt der Zugriff auf Dateiinhalte in VHDL von UNIX/C. Sie haben jedoch nicht die Möglichkeit, zu suchen, ctermid, freopen usw. VHDL ist eine Hardwarebeschreibungssprache, keine Programmiersprache für allgemeine Zwecke.

Antworten (2)

Kurze Antwort: Ja :)

Leider unterstützt das nicht jeder Simulator.

Aktuell kenne ich nur GHDL und ModelSim / QuestaSim. Ich habe keine Informationen über iSim oder xSim.

Ich kenne kein Synthesetool, das STD_IN und STD_OUT unterstützt. Xilinx XST hat Datei-I/O-Unterstützung, aber ich denke, keine Unterstützung für STD_IN/STD_OUT.

Vivado hat keine Datei-I/O-Unterstützung und Quartus unterstützt std.textio nicht.

Dateioperationen sind abhängig von der Host-Implementierung und kein Textio wird für die Synthese unterstützt, während Datei-I/O für die Objektinitialisierung (Standardwerte) während der Ausarbeitung unterstützt werden kann, wobei einige Syntheseanbieter unterstützte Konstrukte (sowohl QuartusII als auch ISE) mit ihrem eigenen Initialisierungsregime überlagern. Die Unterstützung von textio während der Simulation ist für die Einhaltung des VHDL-Standards erforderlich.
Ich habe nur QuestaSim/ModelSim verwendet.

Minimalbeispiele getestet auf GHDL 0.33

Lesen Sie 4 Eingabezeilen von stdin und spucken Sie jede direkt zurück zu stdout:

library std;
use std.textio.all;
library ieee;
use ieee.std_logic_1164.all;

entity tmp_tb is
end;

architecture behav of tmp_tb is
begin
    process
        variable my_line : line;
    begin
        for i in 3 downto 0 loop
            readline(input, my_line);
            writeline(output, my_line);
        end loop;
        wait;
    end process;
end;

Lies 4 Ganzzahlen aus stdin und schreibe sie in ein Signal. Dies kann dann auf einer generierten Wave-Datei beobachtet werden. Verwendung: https://stackoverflow.com/questions/7271092/vhdl-convert-string-to-integer-best-way

architecture behav of tmp_tb is
    constant clk_period : time := 1 ns;
    signal my_integer : integer;
begin
    process
        variable my_line : line;
        variable my_integer_var : integer;
    begin
        for i in 3 downto 0 loop
            readline(input, my_line);
            read(my_line, my_integer_var);
            my_integer <= my_integer_var;
            wait for clk_period / 2;
        end loop;
        wait;
    end process;
end;

Eine Reihe von Standardschreibbeispielen auf GitHub: https://github.com/cirosantilli/vhdl-cheat/blob/3721d42a1f1a8d3de3462ac70f90374c910f176e/write_tb.vhdl

Ganzzahl als Hex auf stdout schreiben: https://stackoverflow.com/questions/37879954/how-to-write-an-integer-to-stdout-as-hexadecimal-in-vhdl