基于FPGA的图像比例缩放

哈哈哈

经过了一下午的钻研

终于可以得到缩放的图像了

这里的图像并不是高级的缩放

而是简单的隔比例的像素显示

在思考问题的时候我们往往正向思维,在我的正向思维怎么都不可得的时候看到了一篇文章,可以反向思维。

既我们事先选定缩放后的左边,然后通过计算得到原图像的左边,然后给地址在ROM中查找即可。

部分程序如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date:    14:43:19 08/12/2016 
// Design Name: 
// Module Name:    pic_display 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//
module pic_display
	#(parameter Column_Addr_Loc_L = 10'd64,
	parameter Row_Addr_Loc_L = 10'd64,
	parameter Pic_Size = 10'd32)
	(
	CLK,
	nRESET,
	Column_Addr_Sig, 
	Row_Addr_Sig,
	Red_Sig, 
	Ready_Sig,
	Rom_Data_red,
	Rom_Addr
//	Reduce_en
    );
	 
	input CLK;
	input nRESET;
	input [9:0]Column_Addr_Sig;
	input [9:0]Row_Addr_Sig;
	input Ready_Sig;
	input [7:0]Rom_Data_red;
	
//	input Reduce_en;
	
	output  [7:0]Red_Sig;
	output reg [11:0]Rom_Addr;
	 
	parameter Reduce_en = 1'd1;

	wire [9:0]Row_Addr_Loc_H;
	wire [9:0]Column_Addr_Loc_H;
	
	assign Column_Addr_Loc_H = Column_Addr_Loc_L + Pic_Size;
	assign Row_Addr_Loc_H = Row_Addr_Loc_L + Pic_Size;

	reg [7:0]data_red;
	
	always@(posedge CLK or negedge nRESET)
	begin
		if(!nRESET)
		begin
			data_red <= 8'd0;
		end
		
		else if (Column_Addr_Sig >= Column_Addr_Loc_L && Column_Addr_Sig <= Column_Addr_Loc_H && Row_Addr_Sig >= Row_Addr_Loc_L && Row_Addr_Sig <= Row_Addr_Loc_H)
		begin
			if( Column_Addr_Sig == Column_Addr_Loc_L && Row_Addr_Sig == Row_Addr_Loc_L)
			begin
				Rom_Addr <= 12'd0;
				data_red <= Rom_Data_red;
			end
			
			else
			begin
				if(Reduce_en)
				begin
					Rom_Addr <= (Row_Addr_Sig - Row_Addr_Loc_L)*2 + (Column_Addr_Sig - Column_Addr_Loc_L)* 2 * (Pic_Size *2);  
					data_red <= Rom_Data_red;
				end
				
				else
				begin
					Rom_Addr <= Rom_Addr;
				end
			end
		end
		
		else
		begin
			data_red <= 8'd0;
		end
	end
	
//	reg Display_zone;
//	reg [7:0]display_data;
//	
//	always@(posedge CLK or negedge nRESET)
//	begin
//		if(!nRESET)
//		begin
//			display_data <= 8'd0;
//		end
//		
//		else 
//		begin
//			if(Column_Addr_Sig > 10'd96 && Column_Addr_Sig < 10'd128 && Row_Addr_Sig > 10'd96 && Row_Addr_Sig < 10'd128)
//			begin
//				display_data <= data_red;
//			end
//			
//			else
//			begin
//				display_data <= 8'd0;
//			end
//		end
//	end
	
//	assign Red_Sig =  (Ready_Sig && Display_zone) ? data_red : 8'b1;
	assign Red_Sig =  (Ready_Sig) ? data_red : 8'b1;
	

endmodule

其余程序连接:http://blog.csdn.net/sinat_25326461/article/details/52188655

你可能感兴趣的:(FPGA,XILINX)