[FPGA] Tips & Tricks

Podstawy FPGA, a może nie tylko podstawy?
Awatar użytkownika
dambo
Expert
Expert
Posty: 645
Rejestracja: czwartek 17 mar 2016, 17:12

[FPGA] Tips & Tricks

Postautor: dambo » niedziela 10 kwie 2016, 01:13

to może tu napiszę jak łatwo zrobić w VHDLu przesuwanie o 1 pozycję za pomocą jednej linijki:
Gdy mamy zmienną o nazwie werktor typu std_logic_vector( 7 downto 0 ) i chcemy ją przesunąć w lewo robimy to tak:

Kod: Zaznacz cały

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


Sam wcześniej kombinowałem trochę inaczej, więc pomyślałem, że to wstawię. A może jakiś wątek z takimi "kilkulinijkowymi" poradami?
Nowy blog o tematyce embedded -> https://www.embedownik.pl/

adi
Posty: 20
Rejestracja: sobota 02 kwie 2016, 17:47

Re: [FPGA] MAXIMATOR rejestr przesuwny

Postautor: adi » niedziela 10 kwie 2016, 08:19

Dobre, dziękuję,

Wygląda na to że tą metodą można dowolnie sobie przemieszać wektor, np z 76543210 na 06243517.
Załóż może temat, coś w stylu VHDL Hacks, pierwszy wpis już mamy :)

SuperGość
Uber Geek
Uber Geek
Posty: 2346
Rejestracja: piątek 04 wrz 2015, 09:03

Re: [FPGA] Tips & Tricks

Postautor: SuperGość » niedziela 10 kwie 2016, 08:27

Do dzieła, tu możecie wrzucać różne "sprytne" pomysły.

WMKN2205
Posty: 24
Rejestracja: wtorek 10 maja 2016, 21:48

Re: [FPGA] Tips & Tricks

Postautor: WMKN2205 » czwartek 26 maja 2016, 11:20

"Hyper Terminal"
Mój pierwszy "IP_core" ;)
Jest to zaledwie szkic wersja alfa automatu wysyłającego znaki i komendy do wyświetlacza.

Kod: Zaznacz cały

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity FutabaM202 is   -- interfejs I/O
   port(
      clear      : in  std_logic;                     --
      output   : out std_logic_vector(7 downto 0);   -- USART data
      clk_in   : in  std_logic
   );
end entity FutabaM202;

architecture logic of FutabaM202 is
   signal counter   : integer range 1 to 44;   -char/cmd
   begin
   process(clear, clk_in)
   constant row_1      : string (1 to 20) := "abcdefghijklmnoprstu"; --eg. text
   constant row_2      : string (1 to 20) := "ABCDEFGHIJKLMNOPRSTU"; --eg. text
      begin

      if clear = '1' then
         output <= std_logic_vector(to_unsigned(16#0D#,8));   --clear cmd 0D Hex
      elsif rising_edge(clk_in) then
   
         case counter is
            when 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20
               => output <= std_logic_vector(to_signed(character'pos(row_1(counter)),8));   --ascii to std_logic_vector
            when 21|43
               => output <= std_logic_vector(to_unsigned(16#10#,8));   --cmd display position 10 Hex
            when 22
               => output <= std_logic_vector(to_unsigned(16#14#,8));   --row = second; col = first
            when 23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42
               => output <= std_logic_vector(to_signed(character'pos(row_2(counter-22)),8));   --ascii to std_logic_vector
            when 44
               => output <= std_logic_vector(to_unsigned(16#00#,8)); --row = first; col = first
            when others =>
               output <= std_logic_vector(to_signed(character'pos(' '),8));
               --counter <= 1;
         end case;
         counter <= counter + 1;
      end if;
   end process;
end architecture;
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.


Wróć do „FPGA - ogólnie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości