www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Mischung


Autor: Chindji (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte mit VHDL eine Multiplikation von ADC-Daten mit eine 
Sinus/Cosinus Paare programmieren für ein ADC/FPGA wer hat ein Idee .wie 
muss ich das programmieren?
Danke
CHINCO

Autor: Johnsn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leg dir am besten Lookup-Tables für Sinus/Cosinus an und verwende den 
Signed-Datentyp aus dem numeric_std Package für die Multiplikation.

Ansonsten würde ich vorschlagen, dein Vorhaben genauer zu spezifizieren 
(welches FPGA, Bitbreite der Daten, geforderte Geschwindigkeit ...), 
dann kann dir besser geholfen werden!

Autor: Chindji Auguste (feukam)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johnsn wrote:
> Leg dir am besten Lookup-Tables für Sinus/Cosinus an und verwende den
> Signed-Datentyp aus dem numeric_std Package für die Multiplikation.
>
> Ansonsten würde ich vorschlagen, dein Vorhaben genauer zu spezifizieren
> (welches FPGA, Bitbreite der Daten, geforderte Geschwindigkeit ...),
> dann kann dir besser geholfen werden!

Hallo Johnsn

wie kann ich eine Lookup-Tables für Sinus/Cosinus programmieren . ich 
habe schon eine synthese von Sinus/Cosinus mit der Cordic programmiert

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- synthesis translate_off
Library XilinxCoreLib;
-- synthesis translate_on
ENTITY cos_sin_core IS
  port (
  phase_in: IN std_logic_VECTOR(15 downto 0);
  x_out: OUT std_logic_VECTOR(15 downto 0);
  y_out: OUT std_logic_VECTOR(15 downto 0);
  rdy: OUT std_logic;
  clk: IN std_logic;
  ce: IN std_logic;
  aclr: IN std_logic;
  sclr: IN std_logic);
END cos_sin_core;

ARCHITECTURE cos_sin_core_a OF cos_sin_core IS
-- synthesis translate_off
component wrapped_cos_sin_core
  port (
  phase_in: IN std_logic_VECTOR(15 downto 0);
  x_out: OUT std_logic_VECTOR(15 downto 0);
  y_out: OUT std_logic_VECTOR(15 downto 0);
  rdy: OUT std_logic;
  clk: IN std_logic;
  ce: IN std_logic;
  aclr: IN std_logic;
  sclr: IN std_logic);
end component;

-- Configuration specification
  for all : wrapped_cos_sin_core use entity 
XilinxCoreLib.cordic_v3_0(behavioral)
    generic map(
      c_has_clk => 1,
      c_has_x_out => 1,
      c_has_y_in => 0,
      c_reg_inputs => 1,
      c_architecture => 2,
      c_input_width => 16,
      c_iterations => 3,
      c_precision => 16,
      c_has_rdy => 1,
      c_has_sclr => 1,
      c_has_nd => 0,
      c_scale_comp => 0,
      c_enable_rlocs => 1,
      c_has_phase_in => 1,
      c_has_rfd => 0,
      c_cordic_function => 2,
      c_has_ce => 1,
      c_mif_file_prefix => "cor1",
      c_round_mode => 3,
      c_has_aclr => 1,
      c_sync_enable => 1,
      c_has_y_out => 1,
      c_data_format => 0,
      c_reg_outputs => 1,
      c_coarse_rotate => 1,
      c_phase_format => 0,
      c_has_phase_out => 0,
      c_has_x_in => 0,
      c_pipeline_mode => -2,
      c_output_width => 16);
-- synthesis translate_on
BEGIN
-- synthesis translate_off
U0 : wrapped_cos_sin_core
    port map (
      phase_in => phase_in,
      x_out => x_out,
      y_out => y_out,
      rdy => rdy,
      clk => clk,
      ce => ce,
      aclr => aclr,
      sclr => sclr);
-- synthesis translate_on

END cos_sin_core_a;


Autor: Johnsn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst dir mit Matlab die Werte für Sinus ausgeben lassen in der 
Auflösung, die du halt gerne hättest. Mit diesen Werten erzeugst du dann 
ein VHDL-Array und dein Lookup-Table ist fertig.

So wie es aussieht verwendest du ein Xilinx FPGA, ich tippe mal stark 
auf Spartan 3 und ich glaube das ISE-Tool ist so intelligent, dass es 
aus dem Array mit Sinuswerten RAM-Blöcke instanziert.

Der Cordic-Core würde natürlich auch genausogut funktionieren, 
allerdings ist die Lösung sicher nicht so schnell, dafür bist du 
flexibler.

Autor: FPGA Spezialist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Xilinx Core Generator hat eine LUT drin, ausserdem geht das locker 
mit Excel.

Autor: Johnsn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Matlab kann man halt dann gleich ein Skript schreiben, welches ein 
fix-fertiges VHDL-Package als Datei erstellt. Somit tut man sich 
leichter, wenn man zB mit der Genauigkeit oder Bitbreite herumspielen 
will! Aber für den Anfang geht mit Excel natürlich auch.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.