Port mappning FPGA

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
CyberLeffe
Inlägg: 50
Blev medlem: 22 februari 2007, 01:15:26
Ort: Göteborg/Örebro

Port mappning FPGA

Inlägg av CyberLeffe »

Jag vill omvandla en femton bitars vektor till BCD där de lägsta 7 bitarna representerar decimaltal och de översta 8 heltals delen. Vilket medför att jag kan representera tal från 0 till 255 med en upplösning på 0.01. Detta har jag löst genom att skriva en binary-to-BCD converter enligt Double-Dabble algoritm.

I Double-Dabble omvandling använder man en 4 bitars adderare för att omvandla talen. Ju fler bitar man ska omvandla desto fler adderare använder man. Då dessa adderare är likadana skulle jag vilja port mappa till min fil där jag har definierat adderaren. Totalt använder jag 12 adderare i omvandlaren och jag tycker därför att det borde vara det bästa sättet. Men hur kan jag skriver jag för att port mappa samma entity flera gånger i en och samma arkitektur?

Som det är nu har jag 12 filer med adderare där den ända skillnaden mellan dom är att deras entity har olika namn. Detta gör att jag kan mappa in dom i min överliggande design. Men det måste ju finnas ett bättre sätt...


PDF om Double-Dabble
Användarvisningsbild
LHelge
Inlägg: 1772
Blev medlem: 2 september 2007, 18:25:31
Ort: Östergötland
Kontakt:

Re: Port mappning FPGA

Inlägg av LHelge »

Titta på senaste posten i tråden:
http://elektronikforumet.com/forum/view ... =7&t=33022

Där har jag skapat tre stycken instanser av tre olika entitys. Till exempel den som heter uart_rx1 av typen uart_rx, av dessa kan jag skapa så många jag vill.
AAVE
Inlägg: 67
Blev medlem: 1 april 2008, 11:57:24
Ort: Skåeuone

Re: Port mappning FPGA

Inlägg av AAVE »

jag förstår inte ditt problem, kan inte du vissa oss lite av koden?
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Port mappning FPGA

Inlägg av Andax »

Låter som om du skulle nyttja FOR-GENERATE i vhdl. Se t.ex. länk
CyberLeffe
Inlägg: 50
Blev medlem: 22 februari 2007, 01:15:26
Ort: Göteborg/Örebro

Re: Port mappning FPGA

Inlägg av CyberLeffe »

Jag fiskade efter det LHelge hänvisade till, att lägga till flera komponenter av samma typ. Här componenten C0 som jag lägger in flera gånger vid namn U0 och U1.

Här är min adderare.

Kod: Markera allt

entity C0 is
  port(
      a            :in  std_logic_vector(3 downto 0);
      s            :out std_logic_vector(3 downto 0)
      );
end C0;
------------------------------------------------------------------------------   
architecture arch_C0 of C0 is

  begin

 	s(3) <= a(3) OR (a(2) AND a(0)) OR (a(2) AND a(1));
	s(2) <= (a(3) AND a(0)) OR (a(2) AND NOT a(1) AND NOT a(0));
	s(1) <= (a(3) AND NOT a(0)) OR (NOT a(2) AND a(1)) OR (a(1) AND a(0));
	s(0) <= (a(3) AND NOT a(0)) OR (NOT a(3) AND NOT a(2) AND a(0)) OR (a(2) AND a(1) AND NOT a(0));


end arch_C0;
Jag har sedan koppla ihop en hel drös likadana adderare till en BCD decoder.

Kod: Markera allt

architecture arch_BCD of BCD is
component C0 is
  port(
      a              :in  std_logic_vector(3 downto 0);
      s              :out std_logic_vector(3 downto 0)
		);
end component;

begin
U0:component C0 
   port map(
		  a(0)  => d(1),
      a(1)  => C_1(0), 
      a(2)  => C_1(1),
		  a(3)  => C_1(2),
      s(0)  => Tth(1),
      s(1)  => Tth(2),
      s(2)  => Tth(3),
		  s(3)  => U(0)
      );	

U1:component C0 
   port map(
      a(0)  => d(2),
      a(1)  => C_2(0), 
      a(2)  => C_2(1),
      a(3)  => C_2(2),
      s(0)  => C_1(0),
      s(1)  => C_1(1),
      s(2)  => C_1(2),
      s(3)  => C_1(3)
      );


Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Port mappning FPGA

Inlägg av Andax »

Att lägga till flera av samma instans är just det man använder FOR-GENERATE till. Man för en for-loop och som instansierar en instans för varje varv i loopen. Och i loopen kan man koppla rätt in och utgångar.
AAVE
Inlägg: 67
Blev medlem: 1 april 2008, 11:57:24
Ort: Skåeuone

Re: Port mappning FPGA

Inlägg av AAVE »

behöver du VHDL komponenter överhuvudtaget?

Kod: Markera allt

if a < 5 then s := a;
elsif  a < 10 then s:= a + 3;
else s := (others => 'X');
CyberLeffe
Inlägg: 50
Blev medlem: 22 februari 2007, 01:15:26
Ort: Göteborg/Örebro

Re: Port mappning FPGA

Inlägg av CyberLeffe »

Anledningen till att jag använder komponenter är att det är 18 adderare totalt och jag tänkte att det blev enklare att göra på detta sätt. Men jag är öppen för förslag.

Så här är adderarna ihop kopplade.

Bild

H = hundratal
T = tiotal
U = ental
Tth = tiondel

Så den kan ge tal mellan 0 och 409.6 med upplösningen 0.1
AAVE
Inlägg: 67
Blev medlem: 1 april 2008, 11:57:24
Ort: Skåeuone

Re: Port mappning FPGA

Inlägg av AAVE »

Jag undrar om man kan få ISE att göra hela jobbet?

Kod: Markera allt

variable tmp, a, b : integer range 0 to 4095;
...
tmp := to_integer(tal);
for i in 0 to 3 loop
	a := tmp / 10;
	b := tmp - a * 10;
	dec(i) <= b;
	tmp := a;
end loop;
kan hända att man behöver trixa lite för att få ner storleken, men det ska nog gå...
Skriv svar