哈哈哈
經過了一下午的鑽研
終於可以得到縮放的圖像了
這裏的圖像並不是高級的縮放
而是簡單的隔比例的像素顯示
在思考問題的時候我們往往正向思維,在我的正向思維怎麼都不可得的時候看到了一篇文章,可以反向思維。
既我們事先選定縮放後的左邊,然後通過計算得到原圖像的左邊,然後給地址在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