Forum: FPGA, VHDL & Co. Vhdl zu Schematic konvertieren


von VHDL (Gast)


Lesenswert?

Hallo Leute,

ich bin recht unerfahren mit VHDL und CPLD's.

Gibt es die möglichkeit aus bestehenden VHDL Code ein Schematic zu 
erzeugen?
Der angehangene Code ist nicht von mir
Damit ich ihn verstehen kann bräuchte ich ein Schematic

Ich bedanke mich schon mal für die mühen.
1
Library IEEE;
2
   use IEEE.std_logic_1164.all;
3
   use IEEE.std_logic_arith.all;
4
entity Zbuscon is
5
   Port (
6
      CLK, IOR, IOW, RSTDRV, CSZ: in std_logic;
7
      RD, WR, CNT, COUNT2, COUNT1, COUNT0: buffer std_logic
8
   );
9
end Zbuscon;
10
11
12
architecture Zbuscon_behav of Zbuscon is
13
   signal COUNT0_CLK_ctrl, COUNT0_ACLR_ctrl, RD_bar, WR_bar, CNT_D, CE_D,
14
   CNTCLR_D, COUNT2_D, COUNT1_D, COUNT0_D, CNT_CLK, CNTCLR_ACLR,
15
   CNTCLR_CLK, CE_ACLR, CE_CLK, CNTCLR, CE: std_logic;
16
   signal CNT_FB, CE_FB, CNTCLR_FB, COUNT2_FB, COUNT1_FB, COUNT0_FB: std_logic
17
   -- :='0'
18
   ;
19
20
   Function to_std_logic(X: in Boolean) return Std_Logic is
21
   variable ret : std_logic;
22
   begin
23
   if x then ret := '1';  else ret := '0'; end if;
24
   return ret;
25
   end to_std_logic;
26
27
begin
28
29
-- Register Section
30
31
   CNT <= CNT_FB;
32
   process (CNT_CLK) begin
33
      if CNT_CLK'event and CNT_CLK='1' then
34
   CNT_FB <= CNT_D;
35
      end if;
36
   end process;
37
38
   CE <= CE_FB;
39
   process (CE_CLK, CE_ACLR) begin
40
      if CE_ACLR='1' then
41
   CE_FB <= '0';
42
      elsif CE_CLK'event and CE_CLK='1' then
43
   CE_FB <= CE_D;
44
      end if;
45
   end process;
46
47
   CNTCLR <= CNTCLR_FB;
48
   process (CNTCLR_CLK, CNTCLR_ACLR) begin
49
      if CNTCLR_ACLR='1' then
50
   CNTCLR_FB <= '0';
51
      elsif CNTCLR_CLK'event and CNTCLR_CLK='1' then
52
   CNTCLR_FB <= CNTCLR_D;
53
      end if;
54
   end process;
55
56
   (COUNT2, COUNT1, COUNT0) <= std_logic_vector'(COUNT2_FB & COUNT1_FB &
57
   COUNT0_FB);
58
   process (COUNT0_CLK_ctrl, COUNT0_ACLR_ctrl) begin
59
      if COUNT0_ACLR_ctrl='1' then
60
   (COUNT2_FB, COUNT1_FB, COUNT0_FB) <= std_logic_vector'("000");
61
      elsif COUNT0_CLK_ctrl'event and COUNT0_CLK_ctrl='1' then
62
   (COUNT2_FB, COUNT1_FB, COUNT0_FB) <= std_logic_vector'(COUNT2_D &
63
         COUNT1_D & COUNT0_D);
64
      end if;
65
   end process;
66
67
-- Start of original equations
68
   COUNT0_CLK_ctrl <= CLK;
69
   COUNT0_ACLR_ctrl <= RSTDRV;
70
   CE_D <= CSZ;
71
   CE_CLK <= (IOR) and (IOW);
72
   CE_ACLR <= CNTCLR;
73
   CNTCLR_D <= to_std_logic(std_logic_vector'(COUNT2 & COUNT1 & COUNT0) =
74
   "111");
75
   CNTCLR_CLK <= CLK;
76
   CNTCLR_ACLR <= RSTDRV;
77
78
79
   process (CE, COUNT0, COUNT1, COUNT2)
80
   begin
81
      (COUNT2_D, COUNT1_D, COUNT0_D) <= std_logic_vector'("000");
82
      if (not CE)='1' then
83
   (COUNT2_D, COUNT1_D, COUNT0_D) <= std_logic_vector'(COUNT2 & COUNT1 &
84
         COUNT0);
85
      else
86
   (COUNT2_D, COUNT1_D, COUNT0_D) <=
87
         std_logic_vector'(unsigned(std_logic_vector'(COUNT2 & COUNT1 &
88
         COUNT0)) + unsigned'("001"));
89
      end if;
90
   end process;
91
   RD_bar <= RSTDRV or (not IOR and CNT);
92
   WR_bar <= RSTDRV or (not IOW and CNT);
93
   CNT_D <= to_std_logic(std_logic_vector'(COUNT2 & COUNT1 & COUNT0) = "000" or
94
   std_logic_vector'(COUNT2 & COUNT1 & COUNT0) = "111");
95
   CNT_CLK <= CLK;
96
97
98
-- Assignments added to explicitly combine the effects of 
99
-- multiple drivers and negative assignments in the source
100
   WR <= not WR_bar;
101
   RD <= not RD_bar;
102
end Zbuscon_behav;

von VHDL (Gast)


Lesenswert?

Hab auch einen ABEL Code,

den VHDL Code hab ich durch den Converter von Xilinxs gejagt.
1
Declarations
2
3
CLK PIN;
4
!IOR PIN;
5
!IOW PIN;
6
RSTDRV PIN;
7
CSZ PIN;
8
!RD PIN;
9
!WR PIN;
10
CNT PIN istype 'reg';
11
CE NODE istype 'reg';
12
CNTCLR NODE istype 'reg';
13
COUNT2..COUNT0 pin istype 'reg';
14
COUNT = [COUNT2..COUNT0];
15
16
17
Equations
18
19
20
COUNT.CLK = CLK;
21
COUNT.ACLR = RSTDRV;
22
23
CE    :=   CSZ;
24
CE.CLK    =  !IOR & !IOW;
25
CE.ACLR    =  CNTCLR;  
26
CNTCLR    :=  COUNT == '7';
27
CNTCLR.CLK    =  CLK;
28
CNTCLR.ACLR  =  RSTDRV;
29
30
when !CE then COUNT := COUNT;      " Counter for recover time 
31
     else COUNT := COUNT + 1;
32
33
RD   =   RSTDRV # ( IOR & CNT );    " RESET Z8536 => RD ana WR active
34
WR   =   RSTDRV # ( IOW & CNT );
35
36
CNT  :=  (COUNT == 0) # (COUNT == '7');
37
CNT.CLK  =  CLK;
38
39
end Zbuscon

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Die Software bietet meistens eine Ausgabe als unübersichtliches 
Schaltbild, Stichwort RTL register transfer level:
https://de.wikipedia.org/wiki/Registertransferebene

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

VHDL schrieb im Beitrag #4302693:
> Gibt es die möglichkeit aus bestehenden VHDL Code ein Schematic zu
> erzeugen?

Ja, die üblichen Werkzeuge wie z.B. Xilinx ISE/Vivado bieten solche 
Darstellungen. Allerdings sind die erzeugten Schaltpläne nicht wirklich 
übersichtlich, so dass man sie eigentlich nur verwendet, um sich das 
Syntheseergebnis einiger Details anzuschauen, z.B. in Hinblick auf 
wegoptimierte Gatter. Sie eignen sich nicht allzu sehr, um einen groben 
Überblick zu erhalten.

> Der angehangene Code ist nicht von mir

Liegt denn die ausdrückliche Erlaubnis der Urhebers vor, diesen 
Quellcode hier zu veröffentlichen? Oder hast Du etwa einen 
Urheberrechtsverstoß begangen?

> Damit ich ihn verstehen kann bräuchte ich ein Schematic

Dann solltest Du Dir ein Projekt in der Entwicklungsumgebung Deiner Wahl 
anlegen und den Code dort synthetisieren.

von VHDL (Gast)


Lesenswert?

den Code darf ich verwenden.

könnte jemand vielleicht eine schnelle skizze zeichnen...

wäre echt klasse.

von VHDL (Gast)


Lesenswert?

mit dem rtl komme ich nicht weiter.

von VHDL (Gast)


Lesenswert?

Warum ist der ABEL Code eifentlich wesentlich kürzer als der 
Konvertierte VHDl Code

von Klartexter (Gast)


Lesenswert?

6 D-FF und ein 3bit counter das ist nun wirklich nicht schwierig.

Einfach die 7 Baueklemente hinmalen, deren Ports beschriften und über 
die Kombinatorik verdrahten -> fertig!

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

VHDL schrieb im Beitrag #4302755:
> den Code darf ich verwenden.

Verwenden != veröffentlichen...

> könnte jemand vielleicht eine schnelle skizze zeichnen...

Ja, Du selbst. Warum sollte jemand von uns Deine Hausaufgaben oder 
Arbeit machen? Ist außerdem Google kaputt? Die Suchbegriffskombination 
"vhdl schematic" liefert Unmengen an Treffern, die sich auf die 
unterschiedlichsten Werkzeuge beziehen.

von Lattice User (Gast)


Lesenswert?

VHDL schrieb im Beitrag #4302764:
> Warum ist der ABEL Code eifentlich wesentlich kürzer als der
> Konvertierte VHDl Code

Weil der Konverter nicht mit dem Ziel geschrieben worden ist lesbaren 
VHDL Code zu erzeugen.
Es fängt schon damit an, dass er den Counter nicht als Vector 
declariert, und dann noch IEEE.std_logic_arith.all verwendet, d.h. 
veraltet ist.

Von Hand konvertiert wäre nur wenig (wenn überhaut) umfangreicher.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

VHDL schrieb im Beitrag #4302693:
> Gibt es die möglichkeit aus bestehenden VHDL Code ein Schematic zu
> erzeugen?
Du kannst eine RTL-Schematic draus machen lassen.

VHDL schrieb im Beitrag #4302764:
> Warum ist der ABEL Code eifentlich wesentlich kürzer als der
> Konvertierte VHDl Code
Weil der automatisch generierte VHDL unheimlich geschwätzig ist. Dort 
wurde z.B. der Zählervektor in einzelne Bits aufgedröselt. Das ist 
umständlich und bringt viel Text mit sich.

Ich würde dieses Design übrigens eher händisch vomABEL Code in VHDL 
übersetzen. Und es zudem synchron machen, damit so ein Gemurkse wie mit 
dem taktsynchronen CNTCLR, der aber auf den asynchronen Reset geht, 
nicht nötig ist.

von Karl_Daller (Gast)


Lesenswert?

Du koenntest auch eine Testbench dazuschreiben und
die ganzen Signale z. B. in Modelsim anschauen.

Karl

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

VHDL schrieb im Beitrag #4302693:
> Gibt es die möglichkeit aus bestehenden VHDL Code ein Schematic zu
> erzeugen?
Ja, siehe Anhang.

Ich bezweifele aber, das das beim Verständnis wirklich hilfreich ist.

Duke

von Michael W. (Gast)


Lesenswert?

Diese Art ist es sicher nicht. Eher kontraproduktiv. Aber eigentlich 
sollte es doch möglich sein, sowas hinzubekommen.

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.