Skocz do zawartości

Kurs FPGA - #6 - rejestry przesuwne w VHDL


Komentator

Pomocna odpowiedź

Witam

Mam problem z rejestrem przesuwnym, ponieważ nie do końca rozumiem jak działa to przesunięcie bitów bo jest ten licznik itd. który odlicza czas do przesunięcia no i dalej jest problem z tym przesunięciem co mi uniemożliwia przesuwanie w drugą stronę bo tego nie rozumiem. Prosiłbym o dokładniejsze wytłumaczenie co się dzieje w tej linijce:

rej_przesuwny <= rej_przesuwny(0) & rej_przesuwny(7 downto 1);

Pozdrawiam

Link do komentarza
Share on other sites

30 minut temu, PanDer napisał:

Mam problem z rejestrem przesuwnym, ponieważ nie do końca rozumiem jak działa to przesunięcie bitów bo jest ten licznik itd. który odlicza czas do przesunięcia no i dalej jest problem z tym przesunięciem co mi uniemożliwia przesuwanie w drugą stronę bo tego nie rozumiem. Prosiłbym o dokładniejsze wytłumaczenie co się dzieje w tej linijce:


rej_przesuwny <= rej_przesuwny(0) & rej_przesuwny(7 downto 1);

Rozumiem, że komentarz jaki jest w kursie nad tą linijką nie pomaga?

             -- tutaj jest przeprowadzana esencja procesu przesuwania przeprowadzanego w rejestrze przesuwnym;
             -- nastepuje przeklejenie najmlodszego bitu na najstarsza pozycje.
             rej_przesuwny <= rej_przesuwny(0) & rej_przesuwny(7 downto 1);

W drugą stronę musisz przykleić najstarszy bit na najmłodszą pozycję.
 

rej_przesuwny <= rej_przesuwny(6 downto 0) & rej_przesuwny(7);

 

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

@PanDer dobrze się składa, przez ostatnie 2 dni nadrabiałem zaległości z VHDL. Tu masz kod, który służy do przełączania segmentów wyświetlacza na płytce z kursu. Możesz się posiłkować tym, ale sprowadza się to do tego co podał @pmochocki W jego rozwiązaniu zwróć szczególnie uwagę na indeksowanie.

shifter : process(reset, clk) begin
	if (reset = '1') then
		shift_reg <= (others => '1');
		shift_reg(0) <= '0';
		bcd_copy(3 downto 0) <= bcd(3 downto 0);
	elsif rising_edge(clk) then
		shift_reg <= shift_reg(N-2 downto 0) & shift_reg(N-1); --rejestr działający w drugą stronę
				
		if (shift_reg = "101") then
			bcd_copy(3 downto 0) <= bcd(3 downto 0);
		elsif (shift_reg = "011") then
			bcd_copy(3 downto 0) <= bcd(7 downto 4);
		elsif (shift_reg = "110") then
			bcd_copy(3 downto 0) <= bcd(11 downto 8);
		end if;

 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.