Saya bekerja dengan VGA di Basys3 FPGA saya, dan saat ini saya ingin menggambar pelat zona, yang persamaannya adalah (1 + cos(k*r^2)) / 2, di mana r adalah jarak dari pusat pelat, dan k=2*pi/lambda adalah bilangan gelombang, yang menentukan skala pelat. Saya kira tindakan terbaik adalah menggunakan LUT kosinus, tapi saya benar-benar tidak tahu cara membuatnya. Saya agak memahami ide di baliknya, tapi saya tidak tahu bagaimana cara menulisnya dan nilai apa yang harus dikandungnya.
Ini adalah kode yang saya coba uji:
Satu-satunya masalah dengan ini sekarang adalah saya tidak tahu nilai apa yang harus diisi memory_type :=()
, sehingga sama dengan k*r^2 dari rumus.
architecture Behavioral of VGAdraw is
signal i : integer range 0 to 29:=0;
signal r : integer :=2;
type memory_type is array (0 to 29) of integer range -128 to 127;
signal cosine : memory_type :=();
begin
process(CLK)
begin
if (CLK'EVENT and CLK = '1') then
if (cntHor >= 0) AND (cntHor <= cstHorAL - 1) then
RED <= conv_std_logic_vector ((1 - cosine (i)) / 2, 8) (7 downto 4);
GREEN <= conv_std_logic_vector ((1 - cosine (i)) / 2, 8) (7 downto 4);
BLUE <= conv_std_logic_vector ((1 - cosine (i)) / 2, 8) (7 downto 4);
i <= i + 1;
else
RED <= "0000";
GREEN <= "0000";
BLUE <= "0000";
end if;
end if;
end process;
end Behavioral;
cntHor - penghitung horizontal
cstHorAL - jumlah piksel pada saluran aktif
Saya tidak dapat memposting gambar itu sendiri karena kurangnya reputasi, namun seperti inilah tampilannya: http://handforgedvideo.com/wp-content/uploads/2013/02/1920x1080p24_Luma_Zone_Plate_Main.png
Bantuan apa pun dihargai. Terima kasih!