پاسخ : پردازش تصویر با استفاده از vhdl
دوستان این نوع کد هرگز رو سخت افزار سنتز نمیشه. فقط تو سیموله بهتون جواب میده. اگه رو سخت افزار کار نکرد اصلا تعجب نکنیدا
نوشته اصلی توسط پیمان کاظمی
سلام
برنامه برای خواندن ماتریس تصویر را تا جاهایی نوشتم
اما یک مشکل
در برنامه نوشته شده از دو آرایه استفاده شده یکی دوبعدی برای انتقال کامل ماتریس و یکی یک بعدی برای استخراج هر ستون
زیرا دستور
readline
خط به خط می خواند و ما باید هر خط که 512 المان در آن دارد را وارد آرایه دوبعدی کنیم برای همین هر خط را در یک آرایه یک بعدی ریختیم
اما پس از شبیه سازی آرایه یک بعدی المان های سطر را دریافت می کند اما خروجی دو بعدی کاملا صفر است!
و جالب این که من دربعدی را به متغییر زیر ریختم
outelement2<=pxmat(row,i)
و این متغییر خروجی دارد اما آرایه دوبعدی ما 0 نشان می دهد!!!
برنامه را در زیر گذاشتم
اگر راه حلی به ذهنتان می رسد ممنون می شوم راهنمایی فرمایید
سپاس
پ.ک
برنامه برای خواندن ماتریس تصویر را تا جاهایی نوشتم
اما یک مشکل
در برنامه نوشته شده از دو آرایه استفاده شده یکی دوبعدی برای انتقال کامل ماتریس و یکی یک بعدی برای استخراج هر ستون
زیرا دستور
readline
خط به خط می خواند و ما باید هر خط که 512 المان در آن دارد را وارد آرایه دوبعدی کنیم برای همین هر خط را در یک آرایه یک بعدی ریختیم
اما پس از شبیه سازی آرایه یک بعدی المان های سطر را دریافت می کند اما خروجی دو بعدی کاملا صفر است!
و جالب این که من دربعدی را به متغییر زیر ریختم
outelement2<=pxmat(row,i)
و این متغییر خروجی دارد اما آرایه دوبعدی ما 0 نشان می دهد!!!
برنامه را در زیر گذاشتم
اگر راه حلی به ذهنتان می رسد ممنون می شوم راهنمایی فرمایید
سپاس
پ.ک
library ieee;
use ieee.std_logic_1164.all;
use IEEE.std_logic_signed.all;
use std.textio.all;-----------need for use read
entity matrix1 is
port(clk:in std_logic;
outelement,outelement2:inout integer range 0 to 255);
end matrix1;
architecture mat_read of matrix1 is
type px is array(511 downto 0,511 downto 0)of integer range 0 to 255;------array for save matrix
type read_col is array(511 downto 0)of integer range 0 to 255;--------array for read column in each line
signal read_column:read_col;
signal pxmat:px;
signal row,col:integer range 0 to 511:=0;------------their show row and column
begin
process(clk)
file data_out: text;
variable fstatus: FILE_OPEN_STATUS;
variable count: integer range 0 to 511:= 0;
variable buf: LINE;---------- buffer between the program and file
begin
file_open(fstatus, data_out, "mat2.txt", read_mode);-----------open file and save it in data_out-------data_out and "mat" have same format
if( clk'event and clk='1' )then
readline(data_out,buf);--------read from data_out and write in buf
for i in 0 to 511 loop
read(buf,count);--------transfer into count
read_column(i)<=count;---------each element of read_column is one element of column
outelement<=read_column(i);------------for show output(just uses in simulating)
pxmat(row,i)<=read_column(i);------------transfer into array
outelement2<=pxmat(row,i);------------for show output(just uses in simulating)
end loop;
col<=col+1;-------for change column
if ((col=511)and(row<511))then----------for chek and change row
row<=row+1;
col<=0;
end if;
end if;
end process;
end mat_read;
use ieee.std_logic_1164.all;
use IEEE.std_logic_signed.all;
use std.textio.all;-----------need for use read
entity matrix1 is
port(clk:in std_logic;
outelement,outelement2:inout integer range 0 to 255);
end matrix1;
architecture mat_read of matrix1 is
type px is array(511 downto 0,511 downto 0)of integer range 0 to 255;------array for save matrix
type read_col is array(511 downto 0)of integer range 0 to 255;--------array for read column in each line
signal read_column:read_col;
signal pxmat:px;
signal row,col:integer range 0 to 511:=0;------------their show row and column
begin
process(clk)
file data_out: text;
variable fstatus: FILE_OPEN_STATUS;
variable count: integer range 0 to 511:= 0;
variable buf: LINE;---------- buffer between the program and file
begin
file_open(fstatus, data_out, "mat2.txt", read_mode);-----------open file and save it in data_out-------data_out and "mat" have same format
if( clk'event and clk='1' )then
readline(data_out,buf);--------read from data_out and write in buf
for i in 0 to 511 loop
read(buf,count);--------transfer into count
read_column(i)<=count;---------each element of read_column is one element of column
outelement<=read_column(i);------------for show output(just uses in simulating)
pxmat(row,i)<=read_column(i);------------transfer into array
outelement2<=pxmat(row,i);------------for show output(just uses in simulating)
end loop;
col<=col+1;-------for change column
if ((col=511)and(row<511))then----------for chek and change row
row<=row+1;
col<=0;
end if;
end if;
end process;
end mat_read;
دوستان این نوع کد هرگز رو سخت افزار سنتز نمیشه. فقط تو سیموله بهتون جواب میده. اگه رو سخت افزار کار نکرد اصلا تعجب نکنیدا
دیدگاه