www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Teiler in fpga 3a dsp 1800A


Autor: nguoi moi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen,


ich besitze stolzweise einen fpga spartan 3a dsp 1800A 
http://www.xilinx.com/products/devkits/HW-SD1800A-.... Ich 
hab paar frage.

1. in meinem process möchte ich eine division berechnen, geht das mit 
clk = 25Mhz?

process (clk)
begin
variable x,y : std_logic_vector (9 downto 0);
begin

 if clk'event and clk = '1' then
        x := x + 1;
  y := x/20;
 end if;
end process;


Damit möchte ich dem "y" nur den Ganzzahlanteil von (x/20) zuweisen, 
z.b. "x =  25" ---> y = 25/20 = 1

2. Gibts Tutorial für diesen Board? Der Name klingt dass man ihn als DSP 
benutzen kann, aber wie?

Vielen Dank im voraus!

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Divisionen durch andere Zahlen als 2^n werden von der Synthese nicht 
direkt unterstützt. Das musst du zu Fuß oder mit Hilfe der DSP48 Blöcke 
realisieren. Schau dir mal den Core Generator an, da gibts einen 
Dividierer. Allerdings braucht der meines Wissens auch soviele 
taktzyklen, wie dein Vektor Bits hat.
Siehe auch: 
http://www.mikrocontroller.net/articles/Rechnen_in...

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ nguoi moi:

Was sagt denn die Synthese zu Deinem Code? Hast Du eine Testbench?
Mein XST sagt:
line 23: Operator <INVALID OPERATOR> must have constant operands or first operand must be power of 2

Vielleicht kannst Du 32 als Teiler verwenden. Ich würde das dann so 
schreiben:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity division is
  port(
    clk: in  std_logic;
    x_i: in  std_logic_vector (9 downto 0);
    x_o: out std_logic_vector (9 downto 0);
    y_o: out std_logic_vector (9 downto 0)
  );
end division;

architecture rtl of division is

begin

  main: process
  begin
    wait until rising_edge(clk);
    x_o <= std_logic_vector(  unsigned(x_i) + 1      );
    y_o <= std_logic_vector( (unsigned(x_i) + 1) /32 );
  end process;

end rtl;

> 2. Gibts Tutorial für diesen Board? Der Name klingt dass man ihn als DSP
> benutzen kann, aber wie?
Es gibt sicher kein spezielles Tutorial, aber in ISE sind m.E. einige 
Examples (File -> Open Example) dabei.
Das DSP im Namen bezieht sich auf die höhere Anzahl von DSP48-Blöcken im 
FPGA. Das sind schnelle Multiplizierer mit angehängten Addierern. Damit 
lassen sich gut diverse Filter für die Signalverarbeitung generieren.

Duke

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nguoi moi,

du hast keine richtige Division, sondern nur eine Verstärkung mit einem 
Faktor < 1. In diesem Fall hilft es, deinen Verstärkungsfaktor mit einer 
2er-Potenz zu erweitern, damit multiplizierst du dein Signal und teilst 
dieses Ergebnis wieder mit der 2er-Potenz.

für dein Problem

1/20=0,5=0,5*1024/1024=51,2/1024

in VHDL

x1 <= x * 51;
y <= x1 / 1024;

Tom

Autor: nguoi moi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen dank für eure mühung und sehr hilfreiche Lösungen:-)

machs gut

ciao

Nguoi Moi

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.