Forum: FPGA, VHDL & Co. Internen Oszillator aktivieren


von Michael H. (h_m)


Lesenswert?

Guten tag,

ich versuche gerade ein Tutorial nach zumachen um mich mal mit Fpgas zu 
beschäftigen.

es geht darum ein paar LEDs leuchten zu lassen. dazu ist ein Modul mit 
allen verfügbaren pins für schon vorgegeben.

anschließend soll der interne oszillator noch aktiviert werden. 
allerdings ist das jetzt für einen Anfänger sehr schlecht beschrieben wo 
genau die Codezeilen hin gehören. oben oder Unten.

auf jedenfall bekomme ich keine synthese hin. vielleicht könnte mir ja 
jemand sagen ob ich das so richtig eingefügt habe.

Das hier macht mir Probleme wie ich das richtig im Code Einfüge:
1
wire clk;
2
  
3
  OSCH #(
4
    .NOM_FREQ("2.08")
5
  ) internal_oscillator_inst (
6
    .STDBY(1'b0), 
7
    .OSC(clk)
8
  ); 
9
  reg [23:0] led_timer;
10
  
11
  always @(posedge clk) begin
12
    led_timer <= led_timer + 1; 
13
  end


hier der ganze Code:
1
wire clk;
2
  
3
  OSCH #(
4
    .NOM_FREQ("2.08")
5
  ) internal_oscillator_inst (
6
    .STDBY(1'b0), 
7
    .OSC(clk)
8
  ); 
9
  reg [23:0] led_timer;
10
  
11
  always @(posedge clk) begin
12
    led_timer <= led_timer + 1; 
13
  end
14
  
15
module TinyFPGA_A1 (
16
  inout pin1,
17
  inout pin2,
18
  inout pin3_sn,
19
  inout pin4_mosi,
20
  inout pin5,
21
  inout pin6,
22
  inout pin7_done,
23
  inout pin8_pgmn,
24
  inout pin9_jtgnb,
25
  inout pin10_sda,
26
  inout pin11_scl,
27
  //inout pin12_tdo,
28
  //inout pin13_tdi,
29
  //inout pin14_tck,
30
  //inout pin15_tms,
31
  inout pin16,
32
  inout pin17,
33
  inout pin18_cs,
34
  inout pin19_sclk,
35
  inout pin20_miso,
36
  inout pin21,
37
  inout pin22
38
);
39
40
41
  // left side of board
42
  assign pin1 = 1'bz;
43
  assign pin2 = 1'bz;
44
  assign pin3_sn = 1'bz;
45
  assign pin4_mosi = 1'bz;
46
  assign pin5 = 1'bz;
47
  assign pin6 = 1'bz;
48
  assign pin7_done = 1'bz;
49
  assign pin8_pgmn = 1'bz;
50
  assign pin9_jtgnb = 1'bz;
51
  assign pin10_sda = 1'bz;
52
  assign pin11_scl = 1'bz;
53
  
54
  // right side of board
55
  //assign pin12_tdo = 1'bz;
56
  //assign pin13_tdi = 1'bz;
57
  //assign pin14_tck = 1'bz;
58
  //assign pin15_tms = 1'bz;
59
  assign pin16 = 1'bz;
60
  assign pin17 = 1'bz;
61
  assign pin18_cs = 1'bz;
62
  assign pin19_sclk = 1'bz;
63
  assign pin20_miso = 1'bz;
64
  assign pin21 = 1'bz;
65
  assign pin22 = 1'bz;
66
67
endmodule

von Duke Scarring (Gast)


Lesenswert?

Michael H. schrieb:
> auf jedenfall bekomme ich keine synthese hin
Wie lautet denn die konkrete Fehlermeldung?

Außerdem wäre eine Angabe, welches Board bzw. welcher FPGA und welche 
Toolchain verwendet wird sehr hilfreich.

Du willst einen OSCH verwenden, was auf einen aktuelleren Lattice-FPGA 
hinweist.

Duke

von Fpgakuechle K. (Gast)


Lesenswert?

Welcher FPGA hat denn einen internen Oscillator?!

von Fpgakuechle K. (Gast)


Lesenswert?

Duke Scarring schrieb:
> Michael H. schrieb:
>> auf jedenfall bekomme ich keine synthese hin
> Wie lautet denn die konkrete Fehlermeldung?
>
> Außerdem wäre eine Angabe, welches Board bzw. welcher FPGA und welche
> Toolchain verwendet wird sehr hilfreich.


Ich vermute den da:
https://tinyfpga.com/

von Cyblord -. (cyblord)


Lesenswert?

Fpgakuechle K. schrieb:
> Welcher FPGA hat denn einen internen Oscillator?!

Die MachXO2 Reihe von Lattice z.B.

Die nutzt der TE auch. Das sind schnuckelige FPGAS mit allem an Bord. 
Laufen ohne weitere externe Beschaltung, ohne EEPROM usw. Sind wirklich 
super für den Einstieg.
Dafür werden auch Kits unter TinyFPGA angeboten.

von Fpgakuechle K. (Gast)


Lesenswert?

Duke Scarring schrieb:

> Außerdem wäre eine Angabe, welches Board bzw. welcher FPGA

Ich vermute den da:
https://tinyfpga.com/

https://www.eeweb.com/a-look-at-tinyfpga-boards/

Also: TinyFPGA A1 offers an XO2-256 containing 256 logic cells

von Michael H. (h_m)


Lesenswert?

Hatte ich nicht hingeschrieben.  Ja tiny fpga tutorial mit dem a1 auf 
der Seite tinyfpga.com.

von Cyblord -. (cyblord)


Lesenswert?

Allerdings finden sich auf tinyfpga doch genug Tutorials. Es gibt auch 
ein StepByStep.

Hier z.B: https://tinyfpga.com/a-series-guide.html

Du solltest schon mal darlegen was bei dir nicht geht, was aber in 
diesem Tutorial geht.
Ich habe die FPGAs auch und das klappt mit Lattice Diamond ohne große 
Probleme.

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Michael H. schrieb:
> Hatte ich nicht hingeschrieben.  Ja tiny fpga tutorial mit dem a1 auf
> der Seite tinyfpga.com.

Dann poste doch jetzt mal die Fehlermeldungen der Synthese. Herrgott 
aber auch.

von Michael H. (h_m)


Lesenswert?

Das ist das einzige rote bei der synthese, das ganze wäre zu lange oder 
?

ERROR - c:/users/user/documents/fpga 
tiny/tinyfpga-a-series-master/template_a1/tinyfpga_a1.v(1): syntax error 
near -. VERI-1137
Done: error code 2

von Michael H. (h_m)


Lesenswert?

Starting: "prj_run Synthesis -impl impl"


************************************************************
**  Lattice Synthesis Engine                              **
************************************************************

synthesis -f "template_a1_impl_lattice.synproj"
synthesis:  version Diamond (64-bit) 3.12.0.240.2

Copyright (c) 1991-1994 by NeoCAD Inc. All rights reserved.
Copyright (c) 1995 AT&T Corp.   All rights reserved.
Copyright (c) 1995-2001 Lucent Technologies Inc.  All rights reserved.
Copyright (c) 2001 Agere Systems   All rights reserved.
Copyright (c) 2002-2020 Lattice Semiconductor Corporation,  All rights 
reserved.
Thu Apr 15 17:20:43 2021


Command Line:  synthesis -f template_a1_impl_lattice.synproj -gui

INFO - Lattice Synthesis Engine Launched.
Synthesis options:
The -a option is MachXO2.
The -s option is 4.
The -t option is QFN32.
The -d option is LCMXO2-256HC.
Using package QFN32.
Using performance grade 4.


##########################################################

### Lattice Family : MachXO2

### Device  : LCMXO2-256HC

### Package : QFN32

### Speed   : 4

##########################################################



INFO - User-Selected Strategy Settings
Optimization goal = Balanced
The -top option is not used.
Target frequency = 200.000000 MHz.
Maximum fanout = 1000.
Timing path count = 3
BRAM utilization = 100.000000 %
DSP usage = true
DSP utilization = 100.000000 %
fsm_encoding_style = auto
resolve_mixed_drivers = 0
fix_gated_clocks = 1

Mux style = Auto
Use Carry Chain = true
carry_chain_length = 0
Loop Limit = 1950.
Use IO Insertion = TRUE
Use IO Reg = AUTO

Resource Sharing = TRUE
Propagate Constants = TRUE
Remove Duplicate Registers = TRUE
force_gsr = auto
ROM style = auto
RAM style = auto
The -comp option is FALSE.
The -syn option is FALSE.
-p C:/Users/USER/Documents/Fpga 
Tiny/TinyFPGA-A-Series-master/template_a1 (searchpath added)
-p C:/lscc/diamond/3.12/ispfpga/xo2c00/data (searchpath added)
-p C:/Users/USER/Documents/Fpga 
Tiny/TinyFPGA-A-Series-master/template_a1/impl (searchpath added)
-p C:/Users/USER/Documents/Fpga 
Tiny/TinyFPGA-A-Series-master/template_a1 (searchpath added)
Verilog design file = C:/Users/USER/Documents/Fpga 
Tiny/TinyFPGA-A-Series-master/template_a1/TinyFPGA_A1.v
NGD file = template_a1_impl.ngd
-sdc option: SDC file input not used.
-lpf option: Output file option is ON.
Hardtimer checking is enabled (default). The -dt option is not used.
The -r option is OFF. [ Remove LOC Properties is OFF. ]
ERROR - c:/users/user/documents/fpga 
tiny/tinyfpga-a-series-master/template_a1/tinyfpga_a1.v(1): syntax error 
near wire. VERI-1137
Done: error code 2

von Michael H. (h_m)


Lesenswert?

Cyblord -. schrieb:
> Allerdings finden sich auf tinyfpga doch genug Tutorials. Es gibt auch
> ein StepByStep.
>
> Hier z.B: https://tinyfpga.com/a-series-guide.html
>
> Du solltest schon mal darlegen was bei dir nicht geht, was aber in
> diesem Tutorial geht.
> Ich habe die FPGAs auch und das klappt mit Lattice Diamond ohne große
> Probleme.

Genau das tutorial versuche ich gerade zu machen.

Was geht ist das tmpl.1 Beispiel aufzurufen und eine Synthese zu machen.

Was nicht geht ist anschließend in dem tutorial vorgegebene vhdl in 
diamond über das Modul hinein zu kopieren um den internen oszilator zu 
aktivieren. Sobald ich das wie oben beschrieben mache kann ich es nicht 
mehr synthesieren.

: Bearbeitet durch User
von Andi (Gast)


Lesenswert?

Michael H. schrieb:
> ...
> Das hier macht mir Probleme wie ich das richtig im Code Einfüge:
> wire clk;
>
>   OSCH #(
>     .NOM_FREQ("2.08")
>   ) internal_oscillator_inst (
>     .STDBY(1'b0),
>     .OSC(clk)
>   );
>   reg [23:0] led_timer;
>
>   always @(posedge clk) begin
>     led_timer <= led_timer + 1;
>   end

Das musst du innerhalb des modules einfügen. Am besten nach den vielen 
*assign*s und vor dem endmodule.
In Verilog ist alles in Modulen organisiert, ausserhalb gibt es 
eigentlich nur Kommentare und Preprozessor Anweisungen.

Andi

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


Lesenswert?

Michael H. schrieb:
> in dem tutorial vorgegebene vhdl
Aua!

Dort steht übrigens:
1
If you are not at all familiar with Verilog you should pay close attention 
2
and take a look at the additional resources at the end of this tutorial.
Hast du das getan? Und dort dann das Manual zum Taktgenerator gefunden? 
Und dort die Seiten 27 bis 30 zum Internal Oscillator (OSCH) gesehen?

Michael H. schrieb:
> ERROR - c:/users/user/documents/fpga
> tiny/tinyfpga-a-series-master/template_a1/tinyfpga_a1.v(1): syntax error
> near wire. VERI-1137
Der Synthesizer hat also schon mit der Zeile 1 deines Codes ein Problem.
Nimm jetzt mal Brain1.0 in Betrieb: Was ist da falsch? Oder was ist da 
an der falschen Stelle? Oder wie machen es alle Anderen?

: Bearbeitet durch Moderator
von Michael H. (h_m)


Lesenswert?

Also Danke, das hat jetzt funktioniert.

jetzt müsst ihr mir meine nächste Frage verzeihen, aber ich bin blutiger 
Anfänger. könnte mir vielleicht jemand zeigen wie man jetzt den Takt von 
dem internen Oszillator für ein D flip flop verwenden kann, also wie man 
das schreibt im CODE das das DFF funktioniert.

denn normalerweise hätte ich jetzt einen externen Takt an Pin 13
LOCATE COMP "clk" SITE "13" ;

ich kann mir jetzt einfach nicht vorstellen wie ich das mit dem internen 
Oszillator schreiben soll.

vielleicht würde mir bitte das jemand hier direkt am Beispiel zeigen ?
1
entity D_FF is
2
port (d,clk in bit; 
3
      q_led,q_quer_led: out bit);
4
    end D_ff;
5
6
architecture synchron of d_ff is
7
8
signal q, q_quer: bit;
9
begin
10
11
process (clock)
12
begin
13
if (clock'event and clock = '1') then
14
q <= d;
15
q_quer <= not d;
16
end if;
17
end process;
18
19
q_led <= not q;           --negieren fuer die LED
20
q_quer_led <= not q_quer;  --negieren fuer die LED
21
end synchron;
22
23
wire clk;
24
  
25
  OSCH #(                      -- ich weiß es steht jetzt wieder ausserhalb
26
    .NOM_FREQ("2.08")          -- aber ich weiß nicht wie ich ihn jetzt zuweisen soll
27
  ) internal_oscillator_inst (
28
    .STDBY(1'b0), 
29
    .OSC(clk)
30
  );

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


Lesenswert?

Deine Zeilen 24-30 sind nicht nur außerhalb eines geeigneten Blocks, 
z.B. einer VHDL-Architecture, sondern auch noch in einer gänzlich 
anderen Sprache geschrieben, nämlich Verilog. Du solltest Dich zunächst 
einmal entscheiden, welche Sprache Du nutzen willst, d.h. VHDL oder 
Verilog, und nicht beide gleichzeitig. Letzteres ist zwar auch möglich, 
aber ein sehr, sehr fortgeschrittenes Thema, für das man sehr, sehr 
weitreichende Kenntnisse der verwendeten Toolchain besitzen muss.

Und dann solltest Du unbedingt ein Lehrbuch über die 
Beschreibungssprache Deiner Wahl durchlesen. Tutorials sind zwar auch 
sehr nützlich, aber es fehlen da natürlich die Grundlagen der Sprache.

Und dann musst Du Dich noch in die Grundlagen der synchronen 
Hardwarebeschreibung einarbeiten. Zwar kann man bei manchen einfachen 
Bausteinen (PLD, CPLD) durchaus auch "asynchrone" Logik ohne ordentliche 
Taktverteilung realisieren, aber spätestens bei FPGAs darf man nicht 
mehr einfach so Flip-Flops als Taktteiler einsetzen, ohne genau zu 
wissen, was man da tut.

von Michael H. (h_m)


Lesenswert?

Ja stimmt ich brauche unbedingt ein Buch.

Das flipflop war als Beispiel gedacht. Wenn ich jetzt zb . Ein 
schieberegister als Ic nehmen würde, dann würde  man einen externen Takt 
erzeugen und diesen dann an den clk Eingang des Registers geben.

Oder mit dem fpga hier extern zb. An pin 13 . Und dann zuweisen
13 LOCATE COMP "clk" SITE "13" ;
Somit hätte ich jetzt den externen Takt nach clk in der entity 
zugewiesen.

Wie weise ich jetzt aber den internen Takt clk zu, also für das clk in 
der entity?

Oder habe ich das mit wire clk schon gemacht?

Und in welchen Block müsste ich das ganze dann setzen?

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


Lesenswert?

Michael H. schrieb:
> Somit hätte ich jetzt den externen Takt nach clk in der entity
> zugewiesen.

Damit hättest Du ein Signal zugewiesen, das Du für einen Takt hältst. 
Ob die Toolchain Deiner Meinung ist, ist noch nicht klar.

> Oder habe ich das mit wire clk schon gemacht?

Nein, "wire clk" ist kein gültige VHDL-Anweisung.

von Andi (Gast)


Lesenswert?

Michael H. schrieb:
> ...
> Oder habe ich das mit wire clk schon gemacht?
>
> Und in welchen Block müsste ich das ganze dann setzen?

Wenn du den internen Oscillator Ausgang mit dem 'clk' wire verknüpfst 
(wie im ersten Beitrag) hast du einen benutzbaren clock.

Im LED-Blinker Beispiel im ersten Beitrag hast du einen mit clk 
getakteten 24 Bit Zähler, namens led_timer. Da siehst du, wie in Verilog 
ein getakteter Ausdruck aussieht.

Im Falle eines D-Flipflop würdest du schreiben:
1
  always @(posedge clk)
2
    q <= d;
also bei jeder positiven Flanke wird d in q übernommen. Du beschreibst 
also nur was ein D-FF tut, das Einfügen des Flipflops und das 
"Verdrahten" übernimmt das Synthese-Tool.
Natürlich musst du zuvor ein Register q und einen Eingang d definieren, 
und diese eventuell mit Pins verbinden wenn du die Signale von aussen 
zugänglich haben willst.

All das ist Verilog, was in meinen Augen viel einfacher zu verstehen ist 
als VHDL. Wie andere schon sagten, du musst dich für eine der beiden 
Sprachen entscheiden, das Mischen der beiden führt unweigerlich zu 
Syntax Fehlern.

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


Lesenswert?

Michael H. schrieb:
> Ja stimmt ich brauche unbedingt ein Buch.
Du musst erst mal wissen, dass es vorrangig 2 
Hardwarebeschreibungssprachen gibt: VHDL und Verilog. Und dich auf 1 
einzige davon festlegen.

von Michael H. (h_m)


Lesenswert?

Ich möchte das gerne in vhdl machen.
Denn ein Buch habe ich, von elektor. Digitale Systeme entwickeln mit 
fpga.
Von dort habe ich auch das Gatter und ich dachte das wäre vhdl , denn 
dort steht ..........wird im zweiten Teil VHDL als Sprache zur 
Beschreibung digitaler Grundfunktionen (z. B. Gatter und Flip-Flops) 
kennenlernen.........dazu habe ich auch die Original platine und dort 
ist der externe taktgeber alles drauf, weil der dort verwendete fpga 
keinen internen oszilator hat.

Dann ist jetzt quasi das tutorial von tiny fpga in verilog und mein 
gatter in vhdl richtig ?

von Michael H. (h_m)


Lesenswert?

Mein Ziel (warum ich das ganze hier frage) mit dem Internen Oszillator 
wäre diesen Code irgendwann damit betreiben zu können, wenn ich einen 
externen Takt dazu gebe funtioniert das einwandfrei. Aber ich würde 
gerne mal den internen Takt für den clk (--Systemtakt) verwenden.

würde mir das Bitte jemand zeigen ob und wie das genau zu diesem Code 
funktioniert.
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
entity incremental_encoder is
5
    Port ( clk      : in std_logic;         -- Systemtakt
6
           A        : in std_logic;         -- Spur A
7
           B        : in std_logic;         -- Spur B
8
           up_down  : out std_logic;        -- Zaehlrichtung
9
           ce       : out std_logic;        -- Clock Enable
10
           error    : out std_logic);       
11
end incremental_encoder;
12
13
architecture Behavioral of incremental_encoder is
14
15
signal a_in, b_in, a_old, b_old: std_logic;
16
17
begin
18
19
20
21
process(clk)
22
begin
23
  if rising_edge(clk) then
24
    a_old <= a_in;
25
    a_in  <= A;
26
    b_old <= b_in;
27
    b_in  <= B;
28
  end if;
29
end process;
30
31
-- Dekodierung der Ausgaenge
32
33
process(a_in, b_in, a_old, b_old)
34
variable state: std_logic_vector(3 downto 0);
35
begin
36
  state := a_in & b_in & a_old & b_old;
37
  case state is
38
    when "0000" => up_down <= '0'; ce <= '0'; error <= '0';
39
    when "0001" => up_down <= '1'; ce <= '1'; error <= '0';
40
    when "0010" => up_down <= '0'; ce <= '1'; error <= '0';
41
    when "0011" => up_down <= '0'; ce <= '0'; error <= '1';
42
    when "0100" => up_down <= '0'; ce <= '1'; error <= '0';
43
    when "0101" => up_down <= '0'; ce <= '0'; error <= '0';
44
    when "0110" => up_down <= '0'; ce <= '0'; error <= '1';
45
    when "0111" => up_down <= '1'; ce <= '1'; error <= '0';
46
    when "1000" => up_down <= '1'; ce <= '1'; error <= '0';
47
    when "1001" => up_down <= '0'; ce <= '0'; error <= '1';
48
    when "1010" => up_down <= '0'; ce <= '0'; error <= '0';
49
    when "1011" => up_down <= '0'; ce <= '1'; error <= '0';
50
    when "1100" => up_down <= '0'; ce <= '0'; error <= '1';
51
    when "1101" => up_down <= '0'; ce <= '1'; error <= '0';
52
    when "1110" => up_down <= '1'; ce <= '1'; error <= '0';
53
    when "1111" => up_down <= '0'; ce <= '0'; error <= '0';
54
    when others => null;
55
  end case;
56
end process;
57
58
end Behavioral;

von Duke Scarring (Gast)


Lesenswert?

In meinem aktuelle Projekt habe ich den OSCH so eingebunden:
1
library machxo2;
2
use machxo2.components.osch;
3
4
.
5
.
6
.
7
8
    signal clk_osch : std_logic;
9
10
.
11
.
12
.
13
14
    osch_i0 : OSCH
15
    generic map 
16
    (
17
        NOM_FREQ => "19.00"
18
    )
19
    port map
20
    (
21
        STDBY    => '0',
22
        OSC      => clk_osch,
23
        SEDSTDBY => open
24
    );

Bei der Synthese taucht der OSCH dann in diversen Reports auf:
1
################### Begin Area Report (top)######################
2
Number of register bits => 23 of 2352 (0 % )
3
CCU2D => 12
4
FD1S3AX => 23
5
GSR => 1
6
IB => 3
7
OB => 15
8
OBZ => 15
9
OSCH => 1 <<<<----<<<<-----<<<<----<<<----<<<---<--<-<-<-<-<
10
################### End Area Report ##################
1
Design Summary:
2
   Number of registers:     23 out of  2352 (1%)
3
      PFU registers:           23 out of  2112 (1%)
4
      PIO registers:            0 out of   240 (0%)
5
   Number of SLICEs:        14 out of  1056 (1%)
6
      SLICEs as Logic/ROM:     14 out of  1056 (1%)
7
      SLICEs as RAM:            0 out of   792 (0%)
8
      SLICEs as Carry:         12 out of  1056 (1%)
9
   Number of LUT4s:         26 out of  2112 (1%)
10
      Number used as logic LUTs:          2
11
      Number used as distributed RAM:     0
12
      Number used as ripple logic:       24
13
      Number used as shift registers:     0
14
   Number of PIO sites used: 33 + 4(JTAG) out of 80 (46%)
15
   Number of block RAMs:  0 out of 8 (0%)
16
   Number of GSRs:        0 out of 1 (0%)
17
   EFB used :        No
18
   JTAG used :       No
19
   Readback used :   No
20
   Oscillator used : Yes <<<<----<<<<-----<<<<----<<<----<<<---<--<-<-<-<-<
21
   Startup used :    No
22
   POR :             On
23
   Bandgap :         On
24
   Number of Power Controller:  0 out of 1 (0%)
25
   Number of Dynamic Bank Controller (BCINRD):  0 out of 6 (0%)
26
   Number of Dynamic Bank Controller (BCLVDSO):  0 out of 1 (0%)
27
   Number of DCCA:  0 out of 8 (0%)
28
   Number of DCMA:  0 out of 2 (0%)
29
   Number of PLLs:  0 out of 1 (0%)
30
   Number of DQSDLLs:  0 out of 2 (0%)
31
   Number of CLKDIVC:  0 out of 4 (0%)
32
   Number of ECLKSYNCA:  0 out of 4 (0%)
33
   Number of ECLKBRIDGECS:  0 out of 2 (0%)

Damit hat man eine Kontrolle, ob der Taktgenerator richtig erkannt und 
verwendet wird.

Duke

von Michael H. (h_m)


Lesenswert?

das heißt jetzt Quasi bei mir, ich kann das Signal clk_osch in clk 
ändern :
1
signal clk : std_logic;
2
.
3
.
4
.
5
    osch_i0 : OSCH
6
    generic map 
7
    (
8
        NOM_FREQ => "19.00"
9
    )
10
    port map
11
    (
12
        STDBY    => '0',
13
        OSC      => clk,
14
        SEDSTDBY => open
15
    );

 Dann zeile 5 entfernen......
1
clk      : in std_logic;         -- Systemtakt

Und zeile 15
1
signal a_in, b_in, a_old, b_old: std_logic;
Um das Signal clk erweitern
1
signal clk, a_in, b_in, a_old, b_old: std_logic;

und die initialisierung des internen Oszillators:
1
 osch_i0 : OSCH
2
    generic map 
3
    (
4
        NOM_FREQ => "19.00"
5
    )
6
    port map
7
    (
8
        STDBY    => '0',
9
        OSC      => clk,
10
        SEDSTDBY => open
11
    );

direkt über das end Behavioral; in der architecture setzen
1
osch_i0 : OSCH
2
    generic map 
3
    (
4
        NOM_FREQ => "19.00"
5
    )
6
    port map
7
    (
8
        STDBY    => '0',
9
        OSC      => clk,
10
        SEDSTDBY => open
11
    );
12
    end Behavioral;

Synthese ging jetzt schon einmal so wäre ich jetzt auf den richtigen 
weg? wenn ich das wie oben einfüge.

von Duke Scarring (Gast)


Lesenswert?

Michael H. schrieb:
> das heißt jetzt Quasi bei mir, ich kann das Signal clk_osch in clk
> ändern :
Ja.


> Und zeile 15
> signal a_in, b_in, a_old, b_old: std_logic;
> Um das Signal clk erweitern
> signal clk, a_in, b_in, a_old, b_old: std_logic;
Ich schreibe i.d.R. ein Signal pro Zeile. Das ist übersichtlicher und 
einfacher, wenn mal nur bei einem Signal der Typ geändert werden soll.


> direkt über das end Behavioral; in der architecture setzen
Nein, das OSCH-Modul muss mit in die architecture. Ob es innerhalb des 
architecture-Blockes dann oben, in der Mitte oder unten steht ist 
prinzipiell egal.

Duke

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


Lesenswert?

Duke Scarring schrieb:
> Das ist übersichtlicher und einfacher,
> wenn mal nur bei einem Signal der Typ geändert werden soll.
Und man kann einfacher einem einzelnen Signal einen Initialwert 
zuweisen.

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.