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

Subversion Repositories orsoc_graphics_accelerator

[/] [orsoc_graphics_accelerator/] [tags/] [version1.0/] [bench/] [verilog/] [gfx/] [gfx_bench.v] - Rev 5

Go to most recent revision | Compare with Previous | Blame | View Log

`include "../../../rtl/verilog/gfx/gfx_wbs.v"
`include "../../../rtl/verilog/gfx/gfx_wbm_write.v"
`include "../../../rtl/verilog/gfx/gfx_wbm_read.v"
`include "../../../rtl/verilog/gfx/gfx_vector_processor.v"
`include "../../../rtl/verilog/gfx/gfx_rasterizer.v"
`include "../../../rtl/verilog/gfx/gfx_fragment_processor.v"
`include "../../../rtl/verilog/gfx/gfx_blender.v"
`include "../../../rtl/verilog/gfx/gfx_renderer.v"
`include "../../../rtl/verilog/gfx/gfx_top.v"
`include "../../../rtl/verilog/gfx/basic_fifo.v"
`include "../../../rtl/verilog/gfx/gfx_color.v"
`include "../../../rtl/verilog/gfx/gfx_wbm_read_arbiter.v"
`include "../../../rtl/verilog/gfx/gfx_line.v"
 
module gfx_bench();
 
// Common wishbone signals
reg         wb_clk_i;    // master clock reg
reg         wb_rst_i;    // Asynchronous active high reset
wire        wb_inta_o;   // interrupt
 
// Wishbone master signals (write)
wire        wbm_write_cyc_o;    // cycle wire
wire        wbm_write_stb_o;    // strobe wire
wire [ 2:0] wbm_write_cti_o;    // cycle type id
wire [ 1:0] wbm_write_bte_o;    // burst type extension
wire        wbm_write_we_o;     // write enable wire
wire [31:0] wbm_write_adr_o;    // address wire
wire [ 3:0] wbm_write_sel_o;    // byte select wires (only 32bits accesses are supported)
reg         wbm_write_ack_i;    // wishbone cycle acknowledge
reg         wbm_write_err_i;    // wishbone cycle error
wire [31:0] wbm_write_dat_o;    // wishbone data out
 
// Wishbone master signals (read)
wire        wbm_read_cyc_o;    // cycle wire
wire        wbm_read_stb_o;    // strobe wire
wire [ 2:0] wbm_read_cti_o;    // cycle type id
wire [ 1:0] wbm_read_bte_o;    // burst type extension
wire        wbm_read_we_o;     // write enable wire
wire [31:0] wbm_read_adr_o;    // address wire
wire [ 3:0] wbm_read_sel_o;    // byte select wires (only 32bits accesses are supported)
reg         wbm_read_ack_i;    // wishbone cycle acknowledge
reg         wbm_read_err_i;    // wishbone cycle error
reg [31:0]  wbm_read_dat_i;    // wishbone data in
 
// Wishbone slave signals
reg         wbs_cyc_i;    // cycle reg
reg         wbs_stb_i;    // strobe reg
reg [ 2:0]  wbs_cti_i;    // cycle type id
reg [ 1:0]  wbs_bte_i;    // burst type extension
reg         wbs_we_i;     // write enable reg
reg [31:0]  wbs_adr_i;    // address reg
reg [ 3:0]  wbs_sel_i;    // byte select reg (only 32bits accesses are supported)
wire        wbs_ack_o;    // wishbone cycle acknowledge
wire        wbs_err_o;    // wishbone cycle error
reg  [31:0] wbs_dat_i;    // wishbone data in
wire [31:0] wbs_dat_o;    // wishbone data out
 
parameter GFX_VMEM        = 32'h00800000;
 
parameter GFX_CTRL        = 32'h000;
parameter GFX_STATUS      = 32'h004;
parameter GFX_SRC_PIXEL0  = 32'h008;
parameter GFX_SRC_PIXEL1  = 32'h00c;
parameter GFX_DEST_PIXEL0 = 32'h010;
parameter GFX_DEST_PIXEL1 = 32'h014;
parameter GFX_CLIP_PIXEL0 = 32'h018;
parameter GFX_CLIP_PIXEL1 = 32'h01c;
parameter GFX_COLOR       = 32'h020;
parameter GFX_TARGET_BASE = 32'h024;
parameter GFX_TARGET_SIZE = 32'h028;
parameter GFX_TEX0_BASE   = 32'h02c;
parameter GFX_TEX0_SIZE   = 32'h030;
parameter GFX_ALPHA       = 32'h034;
parameter GFX_COLORKEY    = 32'h038;
 
parameter GFX_CTRL_CD8        = 32'h00000000; /* Color Depth 8 */
parameter GFX_CTRL_CD16       = 32'h00000001; /* Color Depth 16 */
parameter GFX_CTRL_CD24       = 32'h00000002; /* Color Depth 24 */ // Not supported!
parameter GFX_CTRL_CD32       = 32'h00000003; /* Color Depth 32 */
parameter GFX_CTRL_CDMASK     = 32'h00000003; /* All color depth bits */
parameter GFX_TEXTURE_ENABLE  = 32'h00000004; /* Enable Texture Reads */
parameter GFX_BLEND_ENABLE    = 32'h00000008; /* Enable Alpha Blending */
parameter GFX_COLORKEY_ENABLE = 32'h00000010; /* Enable Colorkeying */
 
parameter GFX_CTRL_RECT       = 32'h00000100; /* Put rect  */
parameter GFX_CTRL_LINE       = 32'h00000200; /* Put line  */
 
 
initial begin
  $dumpfile("gfx.vcd");
  $dumpvars(0,gfx_bench);
 
// init values
  wb_clk_i = 0;
  wb_rst_i = 1;
  wbm_write_ack_i = 0;
  wbm_read_ack_i = 0;
  wbm_write_err_i = 0;
  wbm_read_err_i = 0;
  wbs_cyc_i = 0;
  wbs_cti_i = 0;
  wbs_bte_i = 0;
  wbs_adr_i = 0;
  wbs_sel_i = 4'b1111;
  wbs_dat_i = 0;
 
  // Can be high all the time
  wbs_we_i   = 1;
  wbs_stb_i  = 1;
 
//  wbm_read_dat_i = 32'hf18ff18f;
 
  // Set the texture read pixel
  wbm_read_dat_i = 32'h00000000;
 
  // Finish the reset of the component
  #2 wb_rst_i = 0;
 
 
  // Initialize color register
  #2 wbs_cyc_i  = 1;
  wbs_adr_i = GFX_COLOR;
  wbs_dat_i = 32'h12345671;
  #4 wbs_cyc_i  = 0;
 
  // Initialize traget base
  #2 wbs_cyc_i  = 1;
  wbs_dat_i  = GFX_VMEM;
  wbs_adr_i  = GFX_TARGET_BASE;
  #4 wbs_cyc_i = 0;
 
  // oc_gfx_set_videomode(640, 480, 16);
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h028001e0; // (640 << 16) | 480
  wbs_adr_i  = GFX_TEX0_SIZE;
  #4 wbs_cyc_i = 0;
 
  // Set 16 bit color depth
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = GFX_CTRL_CD16;
  wbs_adr_i  = GFX_CTRL;
  #4 wbs_cyc_i = 0;
 
// Enable colorkey
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h0000F18F; // pink color
  wbs_adr_i  = GFX_COLORKEY;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = GFX_COLORKEY_ENABLE | GFX_CTRL_CD16;
  wbs_adr_i  = GFX_CTRL;
  #4 wbs_cyc_i = 0;
 
  // set cliparea
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00000000; // (0 << 16) | 0
  wbs_adr_i  = GFX_CLIP_PIXEL0; // Clip Pixel 0
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h028001e0; // (640 << 16) | 480
  wbs_adr_i  = GFX_CLIP_PIXEL1; // Clip Pixel 1
  #4 wbs_cyc_i = 0;
 
// oc_gfx_enable_tex0(1)
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = GFX_TEXTURE_ENABLE | GFX_COLORKEY_ENABLE | GFX_CTRL_CD16;
  wbs_adr_i  = GFX_CTRL;
  #4 wbs_cyc_i = 0;
 
// oc_gfx_bind_tex0(0x01f00000, 10, 10)
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = GFX_VMEM;
  wbs_adr_i  = GFX_TEX0_BASE;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h000a000a; // (10 << 16) | 10
  wbs_adr_i  = GFX_TEX0_SIZE;
  #4 wbs_cyc_i = 0;
 
// oc_gfx_rect(110, 110, 115, 115, 0xf800f800);
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h006e006e; // (110 << 16) | 110
  wbs_adr_i  = GFX_DEST_PIXEL0;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00780073; // (115 << 16) | 115
  wbs_adr_i  = GFX_DEST_PIXEL1;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'hf800f800; // Red
  wbs_adr_i  = GFX_COLOR;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = GFX_CTRL_RECT | GFX_TEXTURE_ENABLE | GFX_COLORKEY_ENABLE | GFX_CTRL_CD16;
  wbs_adr_i  = GFX_CTRL;
  #4 wbs_cyc_i = 0;
 
  // After a while, set every pixel read to the color key (demonstrates that colorkeyed pixels are not written)
  #200 wbm_read_dat_i = 32'hf18ff18f;
 
  // TODO: Demonstrate alpha blending
 
/*
 
  wbm_read_dat_i = #40 32'hffffffff;
 
 
// oc_gfx_rect(110, 110, 115, 115, 0xf800f800);
  #200 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h006e006e; // (110 << 16) | 110
  wbs_adr_i  = GFX_DEST_PIXEL0;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00730073; // (115 << 16) | 115
  wbs_adr_i  = GFX_DEST_PIXEL1;
  #4 wbs_cyc_i = 0;
 
 
// set cliparea
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00700070; // (112 << 16) | 112
  wbs_adr_i  = GFX_CLIP_PIXEL0;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00720072; // (114 << 16) | 114
  wbs_adr_i  = GFX_CLIP_PIXEL1;
  #4 wbs_cyc_i = 0;
 
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = GFX_CTRL_RECT | GFX_TEXTURE_ENABLE | GFX_CTRL_CD16;
  wbs_adr_i  = GFX_CTRL;
  #4 wbs_cyc_i = 0;
 
*/
 
  // Draw a bunch of lines
 
  //draw line ############### 1
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00040004; // (110 << 16) | 110
  wbs_adr_i  = GFX_DEST_PIXEL0;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00080006; // (115 << 16) | 115
  wbs_adr_i  = GFX_DEST_PIXEL1;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = GFX_CTRL_LINE | GFX_CTRL_CD16;
  wbs_adr_i  = GFX_CTRL;
  #4 wbs_cyc_i = 0;
  //#########################
 
  //draw line ############### 2
  #10 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00040004; // (110 << 16) | 110
  wbs_adr_i  = GFX_DEST_PIXEL0;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00060008; // (115 << 16) | 115
  wbs_adr_i  = GFX_DEST_PIXEL1;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = GFX_CTRL_LINE | GFX_CTRL_CD16;
  wbs_adr_i  = GFX_CTRL;
  #4 wbs_cyc_i = 0;
  //#########################
 
  //draw line ############### 3
  #10 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00040004; // (110 << 16) | 110
  wbs_adr_i  = GFX_DEST_PIXEL0;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00020008; // (115 << 16) | 115
  wbs_adr_i  = GFX_DEST_PIXEL1;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = GFX_CTRL_LINE | GFX_CTRL_CD16;
  wbs_adr_i  = GFX_CTRL;
  #4 wbs_cyc_i = 0;
  //#########################
 
  //draw line ############### 4
  #10 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00040004; // (110 << 16) | 110
  wbs_adr_i  = GFX_DEST_PIXEL0;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00000006; // (115 << 16) | 115
  wbs_adr_i  = GFX_DEST_PIXEL1;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = GFX_CTRL_LINE | GFX_CTRL_CD16;
  wbs_adr_i  = GFX_CTRL;
  #4 wbs_cyc_i = 0;
  //#########################
 
  //draw line ############### 5
  #10 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00040004; // (110 << 16) | 110
  wbs_adr_i  = GFX_DEST_PIXEL0;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00000002; // (115 << 16) | 115
  wbs_adr_i  = GFX_DEST_PIXEL1;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = GFX_CTRL_LINE | GFX_CTRL_CD16;
  wbs_adr_i  = GFX_CTRL;
  #4 wbs_cyc_i = 0;
  //#########################
 
  //draw line ############### 6
  #10 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00040004; // (110 << 16) | 110
  wbs_adr_i  = GFX_DEST_PIXEL0;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00020000; // (115 << 16) | 115
  wbs_adr_i  = GFX_DEST_PIXEL1;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = GFX_CTRL_LINE | GFX_CTRL_CD16;
  wbs_adr_i  = GFX_CTRL;
  #4 wbs_cyc_i = 0;
  //#########################
 
  //draw line ############### 7
  #10 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00040004; // (110 << 16) | 110
  wbs_adr_i  = GFX_DEST_PIXEL0;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00060000; // (115 << 16) | 115
  wbs_adr_i  = GFX_DEST_PIXEL1;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = GFX_CTRL_LINE | GFX_CTRL_CD16;
  wbs_adr_i  = GFX_CTRL;
  #4 wbs_cyc_i = 0;
  //#########################
 
  //draw line ############### 8
  #10 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00040004; // (110 << 16) | 110
  wbs_adr_i  = GFX_DEST_PIXEL0;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = 32'h00080002; // (115 << 16) | 115
  wbs_adr_i  = GFX_DEST_PIXEL1;
  #4 wbs_cyc_i = 0;
 
  #2 wbs_cyc_i = 1;
  wbs_dat_i  = GFX_CTRL_LINE | GFX_CTRL_CD16;
  wbs_adr_i  = GFX_CTRL;
  #4 wbs_cyc_i = 0;
  //#########################
 
  #10000 $finish;
end
 
// Set up ack behaviour from memory circuits
always @(posedge wb_clk_i)
begin
  wbm_write_ack_i <= #1 wbm_write_cyc_o & !wbm_write_ack_i;
  wbm_read_ack_i  <= #1 wbm_read_cyc_o  & !wbm_read_ack_i;
end
 
// Set up clock
always begin
  #1 wb_clk_i = ~wb_clk_i;
end
 
// Instansiate module
gfx_top top(
.wb_clk_i (wb_clk_i),
.wb_rst_i (wb_rst_i),
.wb_inta_o (wb_inta_o),
// Wishbone master signals (interfaces with video memory)
.wbm_write_cyc_o (wbm_write_cyc_o),
.wbm_write_stb_o (wbm_write_stb_o),
.wbm_write_cti_o (wbm_write_cti_o),
.wbm_write_bte_o (wbm_write_bte_o),
.wbm_write_we_o (wbm_write_we_o),
.wbm_write_adr_o (wbm_write_adr_o),
.wbm_write_sel_o (wbm_write_sel_o),
.wbm_write_ack_i (wbm_write_ack_i),
.wbm_write_err_i (wbm_write_err_i),
.wbm_write_dat_o (wbm_write_dat_o),
// Wishbone master signals (interfaces with video memory)
.wbm_read_cyc_o (wbm_read_cyc_o),
.wbm_read_stb_o (wbm_read_stb_o),
.wbm_read_cti_o (wbm_read_cti_o),
.wbm_read_bte_o (wbm_read_bte_o),
.wbm_read_we_o (wbm_read_we_o),
.wbm_read_adr_o (wbm_read_adr_o),
.wbm_read_sel_o (wbm_read_sel_o),
.wbm_read_ack_i (wbm_read_ack_i),
.wbm_read_err_i (wbm_read_err_i),
.wbm_read_dat_i (wbm_read_dat_i),
// Wishbone slave signals (interfaces with main bus/CPU)
.wbs_cyc_i (wbs_cyc_i),
.wbs_stb_i (wbs_stb_i), 
.wbs_cti_i (wbs_cti_i), 
.wbs_bte_i (wbs_bte_i), 
.wbs_we_i (wbs_we_i), 
.wbs_adr_i (wbs_adr_i), 
.wbs_sel_i (wbs_sel_i), 
.wbs_ack_o (wbs_ack_o), 
.wbs_err_o (wbs_err_o), 
.wbs_dat_i (wbs_dat_i), 
.wbs_dat_o (wbs_dat_o)
);
 
endmodule
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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