OpenCores
URL https://opencores.org/ocsvn/vga_lcd/vga_lcd/trunk

Subversion Repositories vga_lcd

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 53 to Rev 54
    Reverse comparison

Rev 53 → Rev 54

/trunk/bench/verilog/test_bench_top.v
37,10 → 37,10
 
// CVS Log
//
// $Id: test_bench_top.v,v 1.7 2003-05-07 09:45:28 rherveille Exp $
// $Id: test_bench_top.v,v 1.8 2003-05-07 14:39:19 rherveille Exp $
//
// $Date: 2003-05-07 09:45:28 $
// $Revision: 1.7 $
// $Date: 2003-05-07 14:39:19 $
// $Revision: 1.8 $
// $Author: rherveille $
// $Locker: $
// $State: Exp $
47,6 → 47,9
//
// Change History:
// $Log: not supported by cvs2svn $
// Revision 1.7 2003/05/07 09:45:28 rherveille
// Numerous updates and added checks
//
// Revision 1.6 2003/03/19 17:22:19 rherveille
// Added WISHBONE revB.3 sanity checks
//
204,8 → 207,12
// reg_test;
// tim_test;
 
pd1_test;
pd2_test;
// pd1_test;
// pd2_test;
`ifdef VGA_12BIT_DVI
dvi_pd_test;
`endif
 
// ur_test;
end
/trunk/bench/verilog/tests.v
37,10 → 37,10
 
// CVS Log
//
// $Id: tests.v,v 1.7 2003-05-07 09:45:28 rherveille Exp $
// $Id: tests.v,v 1.8 2003-05-07 14:39:19 rherveille Exp $
//
// $Date: 2003-05-07 09:45:28 $
// $Revision: 1.7 $
// $Date: 2003-05-07 14:39:19 $
// $Revision: 1.8 $
// $Author: rherveille $
// $Locker: $
// $State: Exp $
47,6 → 47,9
//
// Change History:
// $Log: not supported by cvs2svn $
// Revision 1.7 2003/05/07 09:45:28 rherveille
// Numerous updates and added checks
//
// Revision 1.6 2003/03/19 12:20:53 rherveille
// Changed timing section in VGA core, changed testbench accordingly.
// Fixed bug in 'timing check' test.
1056,26 → 1059,6
 
cbar = 32'h0000_0800;
 
thsync = 0;
thgdel = 0;
thgate = 340;
thlen = 345;
 
tvsync = 0;
tvgdel = 0;
tvgate = 240;
tvlen = 245;
 
thsync = 39;
thgdel = 124;
thgate = 646;
thlen = 832;
 
tvsync = 2;
tvgdel = 25;
tvgate = 484;
tvlen = 520;
 
thsync = 6;
thgdel = 20;
thgate = 319;
1086,29 → 1069,6
tvgate = 239;
tvlen = 280;
 
/*
thsync = 0;
thgdel = 0;
thgate = 63;
thlen = 70;
 
tvsync = 0;
tvgdel = 0;
tvgate = 32;
tvlen = 36;
 
thsync = 119;
thgdel = 61;
thgate = 805;
thlen = 1038;
 
tvsync = 5;
tvgdel = 20;
tvgate = 600;
tvlen = 665;
 
*/
 
hpol = 0;
vpol = 0;
cpol = 0;
1202,108 → 1162,367
endtask
 
 
//////////////////////////////////////
//
// DVI test section
//
 
 
task dvi_pd_test;
 
integer mode;
integer n, p, l;
reg [ 2:0] dvi_odf;
reg [31:0] pn;
reg [31:0] pra, paa, tmp;
reg [23:0] pd;
reg [11:0] pda, pdb;
reg [ 1:0] cd;
reg pc;
reg [31:0] data;
reg [31:0] cbar;
reg [ 7:0] vbl;
reg [ 5:0] delay;
 
begin
 
$display("\n\n");
$display("*****************************************************");
$display("*** DVI Pixel Data Test ***");
$display("*****************************************************\n");
 
m0.wb_wr1( `VBARA, 4'hf, 0 );
m0.wb_wr1( `VBARB, 4'hf, 123456 );
 
cbar = 32'h0000_0800;
 
thsync = 0;
thgdel = 0;
thgate = 320;
thlen = 345;
 
tvsync = 0;
tvgdel = 0;
tvgate = 240;
tvlen = 245;
 
thsync = 39;
thgdel = 124;
thgate = 646;
thlen = 832;
 
tvsync = 2;
tvgdel = 25;
tvgate = 484;
tvlen = 520;
 
thsync = 6;
thgdel = 20;
thgate = 319;
thlen = 390;
 
tvsync = 1;
tvgdel = 8;
tvgate = 239;
tvlen = 280;
 
hpol = 0;
vpol = 0;
cpol = 0;
bpol = 0;
 
m0.wb_wr1( `HTIM, 4'hf, {thsync, thgdel, thgate} );
m0.wb_wr1( `VTIM, 4'hf, {tvsync, tvgdel, tvgate} );
m0.wb_wr1( `HVLEN, 4'hf, {thlen, tvlen} );
 
// Choose mode, vbl, and delay
// These should have been tested & verified by previous tests
mode = 3;
vbl = 4;
delay = 0;
s0.set_delay(delay);
 
for(dvi_odf=0; dvi_odf<4;dvi_odf=dvi_odf +1)
begin
// -------------------------------
// Turn Off VGA before Mode Change
 
m0.wb_wr1( `CTRL, 4'hf, {
2'h0, // Reserved
dvi_odf[1:0],
12'h0, // Reserved
bpol,
cpol,
vpol,
hpol,
pc, // PC
cd, // CD
2'h0, // VBL
1'b0, // CBSWE
1'b0, // VBSWE
1'b0, // CBSIE
1'b0, // VBSIE
1'b0, // HIE
1'b0, // VIE
1'b0 // Video Enable
});
 
s0.fill_mem(1);
 
`ifdef USE_VC
// Fill internal Color Lookup Table
repeat(10) @(posedge clk);
for(n=0;n<512;n=n+1)
begin
//m0.wb_rd1( 32'h0002_0000 + (n*4), 4'hf, data );
data = s0.mem[ cbar[31:2] + n];
m0.wb_wr1( 32'h0000_0800 + (n*4), 4'hf, data );
end
repeat(10) @(posedge clk);
`endif
 
case(mode)
0:
begin
cd = 2'h2;
pc = 1'b0;
end
1:
begin
cd = 2'h0;
pc = 1'b0;
end
2:
begin
cd = 2'h0;
pc = 1'b1;
end
3:
begin
cd = 2'h1;
pc = 1'b0;
end
endcase
 
//repeat(50) @(posedge clk);
 
// -------------------------------
// Turn VGA back On ...
m0.wb_wr1( `CTRL, 4'hf, {
2'h0, // Reserved
dvi_odf[1:0],
12'h0, // Reserved
bpol,
cpol,
vpol,
hpol,
pc, // PC
cd, // CD
2'h0, // VBL
1'b0, // CBSWE
1'b0, // VBSWE
1'b0, // CBSIE
1'b0, // VBSIE
1'b0, // HIE
1'b0, // VIE
1'b1 // Video Enable
});
 
$display("DVI output data format: %0h", dvi_odf);
repeat(2) @(posedge vsync);
 
// For Each Line
for(l=0;l<tvgate;l=l+1)
// For each Pixel
for(p=0;p<thgate+1;p=p+1)
begin
while(~dvi_de_o) @(pclk); // wait for viewable data
 
//$display("pixel=%0d, line=%0d, (%0t)",p,l,$time);
 
// Depending on Mode, determine pixel data
// pixel number = line * (thgate + 1) + p
pn = l * (thgate + 1) + p;
 
//
// Get the correct pixel data
case(mode)
0: // 24 bit/pixel mode
begin
pra = pn[31:2] * 3; // Pixel relative Address
paa = pra + 0; // Pixel Absolute Address
 
// Pixel Data
case(pn[1:0])
0:
begin
tmp = s0.mem[paa];
pd = tmp[31:8];
end
1:
begin
tmp = s0.mem[paa];
pd[23:16] = tmp[7:0];
tmp = s0.mem[paa+1];
pd[15:0] = tmp[31:16];
end
2:
begin
tmp = s0.mem[paa+1];
pd[23:8] = tmp[15:0];
tmp = s0.mem[paa+2];
pd[7:0] = tmp[31:24];
end
3:
begin
tmp = s0.mem[paa+2];
pd = tmp[23:0];
end
endcase
end
 
1: // 8 bit/pixel grayscale mode
begin
pra = pn[31:2]; // Pixel relative Address
paa = pra + 0; // Pixel Absolute Address
case(pn[1:0])
0:
begin
tmp = s0.mem[paa];
pd = { tmp[31:24], tmp[31:24], tmp[31:24] };
end
1:
begin
tmp = s0.mem[paa];
pd = { tmp[23:16], tmp[23:16], tmp[23:16] };
end
2:
begin
tmp = s0.mem[paa];
pd = { tmp[15:8], tmp[15:8], tmp[15:8] };
end
3:
begin
tmp = s0.mem[paa];
pd = { tmp[7:0], tmp[7:0], tmp[7:0] };
end
endcase
end
 
2: // 8 bit/pixel Pseudo Color mode
begin
pra = pn[31:2]; // Pixel relative Address
paa = pra + 0; // Pixel Absolute Address
case(pn[1:0])
0:
begin
tmp = s0.mem[paa];
tmp = s0.mem[cbar[31:2] + tmp[31:24]];
pd = tmp[23:0];
end
1:
begin
tmp = s0.mem[paa];
tmp = s0.mem[cbar[31:2] + tmp[23:16]];
pd = tmp[23:0];
end
2:
begin
tmp = s0.mem[paa];
tmp = s0.mem[cbar[31:2] + tmp[15:8]];
pd = tmp[23:0];
end
3:
begin
tmp = s0.mem[paa];
tmp = s0.mem[cbar[31:2] + tmp[7:0]];
pd = tmp[23:0];
end
endcase
end
 
3: // 16 bit/pixel mode
begin
pra = pn[31:1]; // Pixel relative Address
paa = pra + 0; // Pixel Absolute Address
case(pn[0])
0:
begin
tmp = s0.mem[paa];
tmp[15:0] = tmp[31:16];
pd = {tmp[15:11], 3'h0, tmp[10:5], 2'h0, tmp[4:0], 3'h0};
end
1:
begin
tmp = s0.mem[paa];
pd = {tmp[15:11], 3'h0, tmp[10:5], 2'h0, tmp[4:0], 3'h0};
end
endcase
end
 
endcase
 
//
// convert pixel data in DVI output format
case (dvi_odf)
2'b00:
begin
pda = pd[11:0];
pdb = pd[23:12];
end
 
2'b01:
begin
pda = {pd[12:10],pd[7:3],pd[8],pd[2:0]};
pdb = {pd[23:19],pd[15:13],pd[18:16],pd[9]};
end
 
2'b10:
begin
pda = {pd[12:10],pd[7:3],4'h0};
pdb = {pd[23:19],pd[15:13],4'h0};
end
 
2'b11:
begin
pda = {pd[13:11],pd[7:3],4'h0};
pdb = {1'b0,pd[23:19],pd[15:14],4'h0};
end
endcase
 
//
// verify pixel data
 
// rising edge data
if (pda !== dvi_d_o)
begin
$display("ERROR: Pixel Data Mismatch: Expected: %h, Got: %h",
pda, dvi_d_o);
$display(" pixel=%0d, line=%0d, (%0t)",p,l,$time);
error_cnt = error_cnt + 1;
if(error_cnt > 10) $stop;
end
 
@(dvi_pclk_p_o);
 
// falling edge data
if (pdb !== dvi_d_o)
begin
$display("ERROR: Pixel Data Mismatch: Expected: %h, Got: %h",
pdb, dvi_d_o);
$display(" pixel=%0d, line=%0d, (%0t)",p,l,$time);
error_cnt = error_cnt + 1;
if(error_cnt > 10) $stop;
end
 
@(dvi_pclk_p_o);
end
end
 
show_errors;
$display("*****************************************************");
$display("*** Test DONE ... ***");
$display("*****************************************************\n\n");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
end
endtask

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.