Mischung

Gast #563773
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!
#563795
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;

Gast #564314
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.
Gast #565544
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

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.

Formatierung
  • [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 einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.