基于FPGA的图像比例缩放

来源:互联网 发布:linux可以做什么 编辑:程序博客网 时间:2024/05/19 13:24

哈哈哈

经过了一下午的钻研

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

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

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

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

既我们事先选定缩放后的左边,然后通过计算得到原图像的左边,然后给地址在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)beginif(!nRESET)begindata_red <= 8'd0;endelse 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)beginif( Column_Addr_Sig == Column_Addr_Loc_L && Row_Addr_Sig == Row_Addr_Loc_L)beginRom_Addr <= 12'd0;data_red <= Rom_Data_red;endelsebeginif(Reduce_en)beginRom_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;endelsebeginRom_Addr <= Rom_Addr;endendendelsebegindata_red <= 8'd0;endend//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

0 0
原创粉丝点击