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 schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|