资源描述:
《Verilog图像翻转源代码.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Verilog图像翻转源代码组内成员邹述铭3014204055李林楠3014204035丁皓南3014204031买地努尔3014204040一、将BMP图片转化为二进制数据,存入TXT`timescale1ns/100psmodulePic;parametersize=65554;//定义memory存储器大小,前18个存BMP文件信息头,后65536个存数据reg[23:0]ram[size-1:0],headdata,data;//单个寄存器24位(包括红绿蓝3个字节(一个字节8位)的颜色)共65536=256*256个像素点re
2、gclk;//定义时钟integerfile_id,txt_id;//定义BMP图片和txt文本的整型句柄integerm,i,j,x;initialbeginfile_id=$fopen("C:/Users/HP/Desktop/Pic.bmp","rb");//以二进制方式读取图片,将句柄存入file_id$fread(ram,file_id);//存图片的二进制数据到ram存储器中(ram中的每个单元24位)$fclose(file_id);endinitial//为整型变量赋初值beginclk=0;i=0;j=0;x=0;en
3、dalways#5clk=~clk;//定义时钟信号周期为10nsinitialbegintxt_id=$fopen("C:/Users/HP/Desktop/Pic_bin.txt");//打开建立的空白txt文档,用来存储图片的十六进制数据for(m=0;m<=17;m=m+1)beginheaddata=ram[m];//把ram中的二进制数据按顺序存入信息头寄存器headdata(17*24个位)中$fwrite(txt_id,"%b",headdata);//把每个ram中的值转换为二进制endendalways@(posed
4、geclk)//在每个clk时钟上升沿,输入单行像素的信息if(i<=255)//按行顺序读取单个像素信息(一行256个像素)beginfor(j=0;j<=255;j=j+1)//使用for循环顺序输入单个像素(24位)的信息,至data寄存器beginx=18+256*i+j;data=ram[x];$fwrite(txt_id,"%b",data);//将data寄存器中的数据以二进制方式存入Pic_hex.txt文本endi=i+1;//每输入完一行后,行数自加一,进行下一行的数据输入endelse//待行数大于256时,跳出循
5、环$fclose(txt_id);endmodule二、VERILOG图像旋转`timescale1ns/100psmodulePic_Turn;parametersize=65554;reg[23:0]ram_turn[size-1:0],datamove,headdata;//datamove用于替换位图单像素数据,headdata用于替换信息头数据regclk;//定义clk为时钟信号integertxtid1,txtid,p,i,j,n;initialbeginclk=0;i=0;j=0;n=0;endalways#5clk=~
6、clk;//设置clk时钟频率initialbegintxtid1=$fopen("C:/Users/HP/Desktop/Pic_bin.txt","rb");$fread(ram_turn,txtid1);$fclose(txtid1);txtid=$fopen("C:/Users/HP/Desktop/Pic_turn.txt");for(p=0;p<=17;p=p+1)beginheaddata=ram_turn[p];$fwrite(txtid,"%b",headdata);//将信息头数据以十六进制输入至txt文件enden
7、dalways@(posedgeclk)//在每个clk上升沿时,输入单个像素的信息(256位)if(i<=255)beginfor(j=0;j<=255;j=j+1)beginn=18+256*j+255-i;datamove=ram_turn[n];$fwrite(txtid,"%b",datamove);endi=i+1;endelse$fclose(txtid);endmodule三、旋转后的数据文件处理成BMP位图将位图旋转后的数据转成十六进制,程序如下:`timescale1ns/100psmodulePic_Turn;pa
8、rametersize=65554;reg[23:0]ram_turn[size-1:0],datamove,headdata;//datamove用于替换位图单像素数据,headdata用于替换信息头数据