Forum: FPGA, VHDL & Co. [VHDL] Internen Oszilator von Lattice FPGAs aktivieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Patrick M. (edge540)


Bewertung
0 lesenswert
nicht lesenswert
Moin,

ich hab hier das TinyFPGA A2 Board mit einem Lattice XO2-1200HC FPGA 
drauf, nettes Board, schön kompakt^^

Hab es mit folgender Anleitung in Betrieb genommen: 
http://tinyfpga.com/a-series-guide.html

Den interne erzeugten Takt hab ich dann auf einen Pin gelegt und konnte 
den auch mit dem Oszi messen. Nur ist diese Beispiel in Verilog...

Also ins Datenblatt und User Guide geschaut 
http://www.latticesemi.com/en/Support/AnswerDatabase/1/4/8/~/media/5DEC3E3B3413491EADEF326C92BA8078.ashx 
(Seite 29) und das VHDL Besipiel ausprobiert, Clock wieder auf einen Pin 
geführt und... nix :/

Ich pack den VHDL Code mal rein, vielleicht ist da ja ein dusseliger 
Fehler drin ;)
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
library machxo2;
5
use machxo2.all;
6
7
8
ENTITY ENT IS
9
10
  PORT(
11
    pin1    : OUT  STD_LOGIC;  
12
    pin2    : OUT  STD_LOGIC;  
13
    pin3_sn    : OUT  STD_LOGIC;  
14
    pin4_mosi  : OUT  STD_LOGIC;  
15
    pin5    : OUT  STD_LOGIC;  
16
    pin6    : OUT  STD_LOGIC;  
17
    pin7_done  : OUT  STD_LOGIC;  
18
    pin8_pgmn  : OUT  STD_LOGIC;   
19
    pin9_jtgnb  : OUT  STD_LOGIC;  
20
    pin10_sda  : IN  STD_LOGIC;  
21
    pin11_scl  : OUT  STD_LOGIC;  
22
    pin16    : OUT  STD_LOGIC;  
23
    pin17    : OUT  STD_LOGIC;  
24
    pin18_cs  : OUT  STD_LOGIC;  
25
    pin19_sclk  : OUT  STD_LOGIC;  
26
    pin20_miso  : OUT  STD_LOGIC;  
27
    pin21    : IN  STD_LOGIC;  
28
    pin22    : IN  STD_LOGIC  
29
  );
30
END ENT;
31
32
ARCHITECTURE RTL of ENT is
33
34
  
35
  COMPONENT OSCH
36
  -- synthesis translate_off
37
    GENERIC (NOM_FREQ: string := "133.00");--133MHz
38
    -- synthesis translate_on
39
    PORT (
40
      STDBY:    IN std_logic;
41
      OSC:    OUT std_logic;
42
      SEDSTDBY:  OUT std_logic);
43
  END COMPONENT; 
44
  
45
  attribute NOM_FREQ : string;
46
  attribute NOM_FREQ of OSCinst0 : label is "133.00";--133MHz
47
48
  SIGNAL  clk    : STD_LOGIC := '0';              
49
  SIGNAL  sed  : STD_LOGIC := '0';
50
51
BEGIN
52
53
  OSCInst0: OSCH
54
  -- synthesis translate_off
55
  GENERIC MAP( NOM_FREQ => "133.00" )
56
  -- synthesis translate_on
57
  PORT MAP (
58
    STDBY=> '0',
59
    OSC => clk,
60
    SEDSTDBY => sed
61
  );
62
 
63
  SYNC: process(clk) 
64
  begin
65
    if clk = '1' and clk'event then
66
      
67
    end if;
68
  end process SYNC;  
69
    
70
  pin6 <= clk;--Diese Zuweisung klappt in Verilog wunderbar
71
  
72
73
END ARCHITECTURE RTL;

Falls jemand eine Idee Hat würde ich mich sehr freuen :)

vielen Dank
Patrick

von bitwurschtler (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Patrick M. schrieb:
> Falls jemand eine Idee Hat würde ich mich sehr freuen :)

poste mal die Synthese-/Map- und Placer-logfiles.
Deklariere SEDSTDBY  als open.

von Duke Scarring (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Bei mir funktioniert folgende Instanziierung:
1
library machxo2;
2
use machxo2.components.osch;
3
4
...
5
6
    osch_i0 : OSCH
7
    generic map 
8
    (
9
        NOM_FREQ => "2.08"
10
    )
11
    port map 
12
    (
13
  STDBY    => '0',
14
        OSC      => clock,
15
        SEDSTDBY => open
16
    );

Duke

von Patrick M. (edge540)


Bewertung
0 lesenswert
nicht lesenswert
Moin,

@bitwurschtler
Das SEDSTDBY   als open zu deklarieren hat leider nichts gebracht.

@Duke Scarring
Wenn ich das mache kommt immer folgende Warnmeldung:

ERROR : formal nom_freq is not declared. VHDL-1084

Der Code sieht dabei so aus:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
library machxo2;
5
use machxo2.all;
6
use machxo2.components.osch;
7
8
ENTITY ENT IS
9
10
  PORT(
11
    pin1    : OUT  STD_LOGIC;  
12
    pin2    : OUT  STD_LOGIC;  
13
    pin3_sn    : OUT  STD_LOGIC;  
14
    pin4_mosi  : OUT  STD_LOGIC;  
15
    pin5    : OUT  STD_LOGIC;  
16
    pin6    : OUT  STD_LOGIC;  
17
    pin7_done  : OUT  STD_LOGIC;  
18
    pin8_pgmn  : OUT  STD_LOGIC;   
19
    pin9_jtgnb  : OUT  STD_LOGIC;  
20
    pin10_sda  : IN  STD_LOGIC;  
21
    pin11_scl  : OUT  STD_LOGIC;  
22
    pin16    : OUT  STD_LOGIC;  
23
    pin17    : OUT  STD_LOGIC;  
24
    pin18_cs  : OUT  STD_LOGIC;  
25
    pin19_sclk  : OUT  STD_LOGIC;  
26
    pin20_miso  : OUT  STD_LOGIC;  
27
    pin21    : IN  STD_LOGIC;  
28
    pin22    : IN  STD_LOGIC  
29
  );
30
END ENT;
31
32
ARCHITECTURE RTL of ENT is
33
34
  
35
  COMPONENT OSCH
36
  -- synthesis translate_off
37
    GENERIC (NOM_FREQ: string := "2.08");--133MHz
38
    -- synthesis translate_on
39
    PORT (
40
      STDBY:    IN std_logic;
41
      OSC:    OUT std_logic;
42
      SEDSTDBY:  OUT std_logic);
43
  END COMPONENT; 
44
  
45
  attribute NOM_FREQ : string;
46
  attribute NOM_FREQ of OSCinst0 : label is "2.08";--133MHz
47
48
  SIGNAL  clk    : STD_LOGIC := '0';              
49
  SIGNAL  sed  : STD_LOGIC := '0';
50
51
BEGIN
52
53
  osch_i0 : OSCH
54
    generic map 
55
    (
56
        NOM_FREQ => "2.08"
57
    )
58
    port map 
59
    (
60
  STDBY    => '0',
61
        OSC      => clock,
62
        SEDSTDBY => open
63
    );
64
  
65
  SYNC: process(clk) 
66
  begin
67
    if clk = '1' and clk'event then
68
      
69
    end if;
70
  end process SYNC;  
71
    
72
  pin6 <= clk;--Diese Zuweisung klappt in Verilog wunderbar
73
  
74
75
END ARCHITECTURE RTL;

Vielen Dank

von Bürovorsteher (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Warum setzt du das generic mit der Frequenz gleich dreimal ein?

Ich habe es in meinen Anwendungen nur ein einziges Mal getan, kann aber 
im Moment nicht sagen, wo konkret, da ich vor dem falschen Rechner 
sitze.

von bitwurschtler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Verkürz mal die Bibliotheksinstanziierung zu:

library machxo2;
use machxo2.all;

Such dir im Internet das PDF: TN1199 - MachXO2 sysCLOCK PLL Design and 
Usage Guide

da findet sich VHDL-Code der es tun sollte.

von bitwurschtler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Der Instanzname ist nicht einheitlich:
1
  attribute NOM_FREQ of OSCinst0 : label is "2.08";--133MHz
2
                        ^^^^^^^^
3
4
5
BEGIN
6
7
  osch_i0 : OSCH
8
  ^^^^^^^^

: Bearbeitet durch Moderator
von Patrick M. (edge540)


Bewertung
0 lesenswert
nicht lesenswert
Moin,

vielen Dank für die Tipps :D
Ich hatte das TN1199 schon benutzt, habs ja auch verlinkt,
allerdings hab ich wohl ein Fehler gemacht...
Also nochmal neuen Code geschrieben und... ging wieder nicht :(
Und dann hab ich gemerkt, dass man ja dem Signal auch einen physischen 
Pin zuweisen sollte -> Kopf-Tisch
Danach ging es dann^^

Das ist der Code, der letztendlich auch funktioniert:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
library machxo2;
5
use machxo2.all;
6
7
ENTITY ENT IS
8
9
  PORT(
10
    pin1    : OUT  STD_LOGIC;  
11
    pin2    : OUT  STD_LOGIC;  
12
    pin3_sn    : OUT  STD_LOGIC;  
13
    pin4_mosi  : OUT  STD_LOGIC;  
14
    pin5    : OUT  STD_LOGIC;  
15
    pin6    : OUT  STD_LOGIC;  
16
    pin7_done  : OUT  STD_LOGIC;  
17
    pin8_pgmn  : OUT  STD_LOGIC;   
18
    pin9_jtgnb  : OUT  STD_LOGIC;  
19
    pin10_sda  : IN  STD_LOGIC;  
20
    pin11_scl  : OUT  STD_LOGIC;  
21
    pin16    : OUT  STD_LOGIC;  
22
    pin17    : OUT  STD_LOGIC;  
23
    pin18_cs  : OUT  STD_LOGIC;  
24
    pin19_sclk  : OUT  STD_LOGIC;  
25
    pin20_miso  : OUT  STD_LOGIC;  
26
    pin21    : IN  STD_LOGIC;  
27
    pin22    : IN  STD_LOGIC  
28
  );
29
END ENT;
30
31
ARCHITECTURE RTL of ENT is
32
33
34
35
 
36
  signal CLK: STD_LOGIC := '0';
37
  signal STDBY_INT: STD_LOGIC := '0';
38
  signal SEDSTDBY_INT: STD_LOGIC := '0';
39
  signal COUNTER: unsigned(7 downto 0) := (others => '0');
40
  
41
  COMPONENT OSCH
42
  -- synthesis translate_off
43
  GENERIC (NOM_FREQ: string := "44.33");--44.33MHz
44
  -- synthesis translate_on
45
  PORT (
46
    STDBY:IN std_logic;
47
    OSC:OUT std_logic;  
48
    SEDSTDBY:OUT std_logic);
49
  END COMPONENT;
50
  attribute NOM_FREQ : string;
51
  attribute NOM_FREQ of OSCinst0 : label is "44.33";
52
  
53
begin
54
55
  OSCInst0: OSCH
56
  -- synthesis translate_off
57
  GENERIC MAP( NOM_FREQ => "44.33" )
58
  -- synthesis translate_on
59
  PORT MAP (
60
    STDBY=> STDBY_INT,
61
    OSC => clk,
62
    SEDSTDBY => SEDSTDBY_INT
63
  );
64
 
65
 
66
  SYNC: process(clk) 
67
  begin
68
    if clk = '1' and clk'event then
69
    if COUNTER = "11111111" then
70
      COUNTER <= "00000000";
71
    else
72
      COUNTER <= COUNTER + 1;
73
    end if;
74
    
75
    end if;
76
  end process SYNC;  
77
    
78
  pin6 <= clk;
79
  pin5 <= COUNTER(7);--255 mal geteilter Takt
80
  
81
82
END ARCHITECTURE RTL;

Vielen Dank an alle, die mir geholfen haben,

Patrick

von bitwurschtler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Patrick M. schrieb:
> Und dann hab ich gemerkt, dass man ja dem Signal auch einen physischen
> Pin zuweisen sollte -> Kopf-Tisch

Warum hat dann das Verilog-file funktioniert?

Nichtzugewiesene pins sollten auch im par-log erkennbar sein, deshalb 
die gestrige Bitte diese dem Post anzuhängen.

von Patrick M. (edge540)


Bewertung
0 lesenswert
nicht lesenswert
Das Verilog File war Teil des Beispiel Projektes vom TinyFPGA Board:
https://github.com/tinyfpga/TinyFPGA-A-Series/tree/master/template_a2

Da das ein komplettes Lattice Projekt ist, war da wahrscheinlich die 
Zuweisung schon vorhanden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.