|
在验证或调整算法的参数时, 最好的方法就是可以直接利用接口来操作, 而不需要每次去修改参数, 一再重复耗时的 compile 动作, 这边分享一个 programming code, 可以大大的降低算法开发的时间…
简单的介绍
module tvpat_reg (
resetn_i, //system reset
tvclk_i, //system clock
vsynclast_i, //the programming is better to act at the vsync-time for video
data_i, //high 8-bit for address, low 8-bit for programming data
set_i, //trigger (ex. push button ..)
tvpaten_o, //below is programming(register setting)
tvtype_o,
tvpatsel_o,
tvmixen_o,
tvmixsel_o,
tvamp75p_o,
hueadjust_o,
saturate_o,
lrmpincr_o,
lrmpstep_o,
crmpincr_o,
crmpstep_o,
crmpsel_o,
graysel_o,
purisel_o,
lumagain_o,
chromagain_o,
dischroma_o
);
//========================================================
input resetn_i;
input tvclk_i;
input vsynclast_i;
input [15:0] data_i;
input set_i;
output [ 1:0] tvtype_o;
output tvpaten_o;
output [ 3:0] tvpatsel_o;
output tvmixen_o;
output [ 3:0] tvmixsel_o;
output tvamp75p_o;
output [ 7:0] hueadjust_o;
output [ 7:0] saturate_o;
output [ 7:0] lrmpincr_o;
output [ 7:0] lrmpstep_o;
output [ 7:0] crmpincr_o;
output [ 7:0] crmpstep_o;
output [ 1:0] crmpsel_o;
output graysel_o;
output [ 2:0] purisel_o;
output [ 1:0] lumagain_o;
output [ 1:0] chromagain_o;
output dischroma_o;
//===========================================
reg reg_tvpaten;
reg [1:0] reg_tvtype;
reg [3:0] reg_tvpatsel;
reg reg_tvmixen;
reg [3:0] reg_tvmixsel;
reg reg_tvamp75p;
reg [7:0] reg_hueadjust;
reg [7:0] reg_saturate;
reg [7:0] reg_lrmpincr;
reg [7:0] reg_lrmpstep;
reg [7:0] reg_crmpincr;
reg [7:0] reg_crmpstep;
reg [1:0] reg_crmpsel;
reg reg_graysel;
reg [2:0] reg_purisel;
reg [1:0] reg_lumagain;
reg [1:0] reg_chromagain;
reg reg_dischroma;
reg tvpaten_o;
reg [ 1:0] tvtype_o;
reg [ 3:0] tvpatsel_o;
reg tvmixen_o;
reg [ 3:0] tvmixsel_o;
reg tvamp75p_o;
reg [ 7:0] hueadjust_o;
reg [ 7:0] saturate_o;
reg [ 7:0] lrmpincr_o;
reg [ 7:0] lrmpstep_o;
reg [ 7:0] crmpincr_o;
reg [ 7:0] crmpstep_o;
reg [ 1:0] crmpsel_o;
reg graysel_o;
reg [ 2:0] purisel_o;
reg [ 1:0] lumagain_o;
reg [ 1:0] chromagain_o;
reg dischroma_o;
//latch the programming data
always@(posedge tvclk_i or negedge resetn_i)
begin
if(!resetn_i) begin
reg_tvpaten <= 1'b1;
reg_tvtype[1:0] <= 2'h0;
reg_tvpatsel[3:0] <= 4'h0;
reg_tvmixen <= 1'b0;
reg_tvmixsel[3:0] <= 4'h0;
reg_tvamp75p <= 1'b1;
reg_hueadjust[7:0] <= 8'h0;
reg_saturate[7:0] <= 8'h70;
reg_lrmpincr[7:0] <= 8'h1;
reg_lrmpstep[7:0] <= 8'h5;
reg_crmpincr[7:0] <= 8'h1;
reg_crmpstep[7:0] <= 8'h5;
reg_crmpsel[1:0] <= 2'h0;
reg_graysel <= 1'b0;
reg_purisel[2:0] <= 3'h0;
reg_lumagain[1:0] <= 2'h0;
reg_chromagain[1:0] <= 2'h0;
reg_dischroma <= 1'b0;
end
else if(set_i) begin
if(data_i[15:8] == 8'h00)
reg_tvpaten <= data_i[0];
if(data_i[15:8] == 8'h01)
reg_tvtype[1:0] <= data_i[1:0];
if(data_i[15:8] == 8'h02)
reg_tvpatsel[3:0] <= data_i[3:0];
if(data_i[15:8] == 8'h03)
reg_tvmixen <= data_i[0];
if(data_i[15:8] == 8'h04)
reg_tvmixsel[3:0] <= data_i[3:0];
if(data_i[15:8] == 8'h05)
reg_tvamp75p <= data_i[0];
if(data_i[15:8] == 8'h06)
reg_hueadjust[7:0] <= data_i[7:0];
if(data_i[15:8] == 8'h07)
reg_saturate[7:0] <= data_i[7:0];
if(data_i[15:8] == 8'h08)
reg_lrmpincr[7:0] <= data_i[7:0];
if(data_i[15:8] == 8'h09)
reg_lrmpstep[7:0] <= data_i[7:0];
if(data_i[15:8] == 8'h0A)
reg_crmpincr[7:0] <= data_i[7:0];
if(data_i[15:8] == 8'h0B)
reg_crmpstep[7:0] <= data_i[7:0];
if(data_i[15:8] == 8'h0C)
reg_crmpsel[1:0] <= data_i[1:0];
if(data_i[15:8] == 8'h0D)
reg_graysel <= data_i[0];
if(data_i[15:8] == 8'h0E)
reg_purisel[2:0] <= data_i[2:0];
if(data_i[15:8] == 8'h0F)
reg_lumagain[1:0] <= data_i[1:0];
if(data_i[15:8] == 8'h10)
reg_chromagain[1:0] <= data_i[1:0];
if(data_i[15:8] == 8'h11)
reg_dischroma <= data_i[0];
end
end
//really act during the vsync duration
//it will not make the wrong picture
always@(posedge tvclk_i or negedge resetn_i)
begin
if(!resetn_i) begin
tvpaten_o <= 1'b1;
tvtype_o[1:0] <= 2'h0;
tvpatsel_o[3:0] <= 4'h0;
tvmixen_o <= 1'b0;
tvmixsel_o[3:0] <= 4'h0;
tvamp75p_o <= 1'b1;
hueadjust_o[7:0] <= 8'h0;
saturate_o[7:0] <= 8'h70;
lrmpincr_o[7:0] <= 8'h1;
lrmpstep_o[7:0] <= 8'h5;
crmpincr_o[7:0] <= 8'h1;
crmpstep_o[7:0] <= 8'h5;
crmpsel_o[1:0] <= 2'h0;
graysel_o <= 1'b0;
purisel_o[2:0] <= 3'h0;
lumagain_o[1:0] <= 2'h0;
chromagain_o[1:0] <= 2'h0;
dischroma_o <= 1'b0;
end
else if(vsynclast_i) begin
tvpaten_o <= reg_tvpaten;
tvtype_o[1:0] <= reg_tvtype[1:0];
tvpatsel_o[3:0] <= reg_tvpatsel[3:0];
tvmixen_o <= reg_tvmixen;
tvmixsel_o[3:0] <= reg_tvmixsel[3:0];
tvamp75p_o <= reg_tvamp75p;
hueadjust_o[7:0] <= reg_hueadjust[7:0];
saturate_o[7:0] <= reg_saturate[7:0];
lrmpincr_o[7:0] <= reg_lrmpincr[7:0];
lrmpstep_o[7:0] <= reg_lrmpstep[7:0];
crmpincr_o[7:0] <= reg_crmpincr[7:0];
crmpstep_o[7:0] <= reg_crmpstep[7:0];
crmpsel_o[1:0] <= reg_crmpsel[1:0];
graysel_o <= reg_graysel;
purisel_o[2:0] <= reg_purisel[2:0];
lumagain_o[1:0] <= reg_lumagain[1:0];
chromagain_o[1:0] <= reg_chromagain[1:0];
dischroma_o <= reg_dischroma;
end
end
endmodule
希望对大家在算法的开发上有很大的帮助 |
|