Port mappning FPGA
-
- Inlägg: 50
- Blev medlem: 22 februari 2007, 01:15:26
- Ort: Göteborg/Örebro
Port mappning FPGA
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
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
Re: Port mappning FPGA
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.
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.
-
- Inlägg: 50
- Blev medlem: 22 februari 2007, 01:15:26
- Ort: Göteborg/Örebro
Re: Port mappning FPGA
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.
Jag har sedan koppla ihop en hel drös likadana adderare till en BCD decoder.
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;
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)
);
Re: Port mappning FPGA
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.
Re: Port mappning FPGA
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');
-
- Inlägg: 50
- Blev medlem: 22 februari 2007, 01:15:26
- Ort: Göteborg/Örebro
Re: Port mappning FPGA
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.

H = hundratal
T = tiotal
U = ental
Tth = tiondel
Så den kan ge tal mellan 0 och 409.6 med upplösningen 0.1
Så här är adderarna ihop kopplade.

H = hundratal
T = tiotal
U = ental
Tth = tiondel
Så den kan ge tal mellan 0 och 409.6 med upplösningen 0.1
Re: Port mappning FPGA
Jag undrar om man kan få ISE att göra hela jobbet?
kan hända att man behöver trixa lite för att få ner storleken, men det ska nog gå...
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;