Gast
#563760
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
|
Anzeige
|
Mischung
Gast
#563760
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
Gast
#563773
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! 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
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
#564412
Der Xilinx Core Generator hat eine LUT drin, ausserdem geht das locker mit Excel.
Gast
#565544
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 |
Anzeige
|