Saya memiliki kode VHDL tempat saya mencoba mengalikan nilai piksel. Saya memiliki entitas berikut:
entity xGradient is
port(
clk : in std_logic;
x11, x12, x13, x21, x22, x23, x31, x32, x33 : in integer range 0 to 255;
gradientInX : out integer range 0 to 255
);
end xGradient;
Saya melakukan operasi berikut pada ini:
gradientInX <= x11 + 2*x21 + x31 - x13 - 2*x23 - x33;
Masalah yang mungkin Anda perhatikan adalah bahwa nilai yang diperoleh dari operasi melebihi kisaran nilai yang mungkin dari bilangan bulat keluaran saya. Simulasi saya macet ketika ini terjadi. Saya tidak tahu kata yang tepat untuk apa yang saya coba lakukan dan oleh karena itu sepertinya saya tidak tahu cara memperbaiki masalah ini dan ini membuat saya gila. Saya pada dasarnya hanya ingin memotong, atau mengurangi ukuran keluaran untuk memastikannya cocok dengan port keluaran gradienInX. Saya mencoba menggunakan blok proses seperti ini:
-- declared signals
signal gradientMem: integer;
--beginning of my architecture
begin
SobelOperator : process(gradientMem)
begin
gradientMem <= x11 + 2*x21 + x31 - x13 - 2*x23 - x33;
if (gradientMem > 255) then
gradientMem <= 255;
elsif (gradientMem < 0) then
gradientMem <= 0;
end if;
end process SobelOperator;
lalu menugaskan gradienMem ke gradienInX tetapi tidak berhasil karena beberapa alasan. Bantuan apapun akan sangat dihargai. Catatan: Saya belum memasukkan semua kode VHDL karena saya pikir kodenya akan terlalu panjang. Pesan kesalahan yang saya dapatkan adalah sinyal yang dihasilkan nilai operasinya berada di luar jangkauan (karena nilai yang dihasilkan negatif dan keluarannya hanya berkisar 0 hingga 255).
Matius
gradientMen
dan 2) pesan kesalahan. VHDL memeriksa batas jangkauan pada tugas. Anda ingin membuat aritmatika saturasi. Jadi tentukangradientMem
dengan rentang yang lebih besar. - person Paebbels   schedule 09.04.2017