İmgede Konvulüsyon İşleminin FPGA Tabanlı Gerçeklenmesi

Bu yazıda, VHDL ile Sayısal Tasarım ve FPGA Uygulamaları kitabında benzetim uygulamalarında anlatılan 9.15 örneğindeki İmgede Konvolüsyon uygulamasının FPGA tabanlı gerçeklenmesi tanıtılmıştır. Uygulama MATLAB ile UART haberleşme vasıtasyıla görüntü dosyasının aktarılması ve FPGA tabanlı gerçeklenen konvolusyon işleminin FPGA’da gerçeklenmesinin sonucunda elde edilen yeni imge yine UART haberleşme ile MATLAB’a aktarılmaktadır. Aşağıda bu işlemlerin yapıldığı entity mimarisi gösterilmiştir.

  1. Port (
  2. in_clk : in std_logic;
  3. in_rst : in std_logic;
  4. in_basla : in std_logic;
  5. in_rx : in std_logic;
  6. out_tx : out std_logic
  7. );

Konvolüsyon işleminin yapılmasında kullanılan alt devrelerin çağrılma işlemine ilişkin kodlar aşağıda verilmiştir. konvolusyon_imge alt modülü , VHDL ile Sayısal Tasarım ve FPGA Uygulamaları kitabının Bölüm 9.15’inde, UART_rx ve UART_tx alt modülleri ise Bölüm 10.5’inde verilmiştir. Konvolüsyon işlemi olarak yatay sobel seçilmiştir.

  1. var quads_screen_width = document.body.clientWidth;
  2. if ( quads_screen_width >= 1140 ) {
  3. /* desktop monitors */
  4. document.write('');
  5. (adsbygoogle = window.adsbygoogle || []).push({});
  6. }if ( quads_screen_width >= 1024 && quads_screen_width < 1140 ) {
  7. /* tablet landscape */
  8. document.write('');
  9. (adsbygoogle = window.adsbygoogle || []).push({});
  10. }if ( quads_screen_width >= 768 && quads_screen_width < 1024 ) {
  11. /* tablet portrait */
  12. document.write('');
  13. (adsbygoogle = window.adsbygoogle || []).push({});
  14. }if ( quads_screen_width < 768 ) {
  15. /* phone */
  16. document.write('');
  17. (adsbygoogle = window.adsbygoogle || []).push({});
  18. }
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25. UART_rx_map : UART_rx
  26. Generic map(
  27. CLK_FREKANS => 100000000, --100 MHz
  28. BAUDRATE => 115200
  29. )
  30. Port map(
  31. in_clk => in_clk,
  32. in_rst => in_rst,
  33. in_rx => in_rx,
  34. out_rx_data => r_rx_data,
  35. out_rx_tamam => r_rx_tamam
  36. );
  37.  
  38. UART_tx_map : UART_tx
  39. Generic map(
  40. CLK_FREKANS => 100000000, --100 MHz
  41. BAUDRATE => 115200
  42. )
  43. Port map(
  44. in_clk => in_clk,
  45. in_rst => in_rst,
  46. in_tx_basla => r_tx_basla,
  47. in_tx_data => r_tx_data,
  48. out_tx => out_tx,
  49. out_tx_tamam => r_tx_tamam
  50. );
  51.  
  52. konvolusyon_imge_map : konvolusyon_imge
  53. port map(
  54. in_clk => in_clk,
  55. in_rst => in_rst,
  56. in_en => '1',
  57. in_basla => in_basla,
  58. in_data => r_rx_data,
  59. in_data_vld => r_rx_tamam,
  60. in_kernel => YATAY_SOBEL,
  61. out_addr => open,
  62. out_addr_vld => open,
  63. out_data => r_tx_data,
  64. out_data_vld => r_tx_basla,
  65. out_tamam => open
  66. );

Uygulamanın gerçeklenmesini sağlayan MATLAB kodu aşağıda gösterilmiştir.

  1.  
  2. Serial_Port = serial('COM6');
  3. set(Serial_Port, ...
  4. 'BaudRate', 115200, ...
  5. 'Parity', 'none', ...
  6. 'Timeout', 1, ...
  7. 'InputBufferSize', 1, ...
  8. 'FlowControl', 'none', ...
  9. 'StopBits', 1);
  10. fopen(Serial_Port);
  11.  
  12. imge = imread('cameraman.tif');
  13. imge = imresize(imge, 0.25);
  14. figure, imshow((imge))
  15. [satir sutun] = size(imge);
  16. out = zeros(satir - 2, sutun - 2);
  17. imshow(out)
  18.  
  19. n_t = 0;
  20. for n_i = 1 : satir - 2
  21. for n_j = 1 : sutun
  22. for n_k = 0 : 2
  23. % fwrite(Serial_Port, imge(n_i, n_j));
  24. % out(n_i, n_j) = fread(Serial_Port);
  25. n_t = n_t + 1;
  26. fwrite(Serial_Port, imge(n_i + n_k, n_j));
  27.  
  28. end
  29. if n_j > 2
  30. out(n_i, n_j - 2) = fread(Serial_Port);
  31. end
  32.  
  33. end
  34. end
  35. figure, imshow(uint8(out))
  36. fclose(Serial_Port)
  37. delete(Serial_Port)
  38. clear Serial_Port

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir