| 1 |
6 |
Orka |
/*
|
| 2 |
|
|
ORSoC GFX accelerator core
|
| 3 |
|
|
Copyright 2012, ORSoC, Per Lenander, Anton Fosselius.
|
| 4 |
|
|
|
| 5 |
|
|
TOP MODULE
|
| 6 |
|
|
|
| 7 |
|
|
This file is part of orgfx.
|
| 8 |
|
|
|
| 9 |
|
|
orgfx is free software: you can redistribute it and/or modify
|
| 10 |
|
|
it under the terms of the GNU Lesser General Public License as published by
|
| 11 |
|
|
the Free Software Foundation, either version 3 of the License, or
|
| 12 |
|
|
(at your option) any later version.
|
| 13 |
|
|
|
| 14 |
|
|
orgfx is distributed in the hope that it will be useful,
|
| 15 |
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 16 |
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 17 |
|
|
GNU Lesser General Public License for more details.
|
| 18 |
|
|
|
| 19 |
|
|
You should have received a copy of the GNU Lesser General Public License
|
| 20 |
|
|
along with orgfx. If not, see <http://www.gnu.org/licenses/>.
|
| 21 |
|
|
|
| 22 |
|
|
*/
|
| 23 |
|
|
|
| 24 |
|
|
module gfx_top (wb_clk_i, wb_rst_i, wb_inta_o,
|
| 25 |
|
|
// Wishbone master signals (interfaces with video memory, write)
|
| 26 |
|
|
wbm_write_cyc_o, wbm_write_stb_o, wbm_write_cti_o, wbm_write_bte_o, wbm_write_we_o, wbm_write_adr_o, wbm_write_sel_o, wbm_write_ack_i, wbm_write_err_i, wbm_write_dat_o,
|
| 27 |
|
|
// Wishbone master signals (interfaces with video memory, read)
|
| 28 |
|
|
wbm_read_cyc_o, wbm_read_stb_o, wbm_read_cti_o, wbm_read_bte_o, wbm_read_we_o, wbm_read_adr_o, wbm_read_sel_o, wbm_read_ack_i, wbm_read_err_i, wbm_read_dat_i,
|
| 29 |
|
|
// Wishbone slave signals (interfaces with main bus/CPU)
|
| 30 |
|
|
wbs_cyc_i, wbs_stb_i, wbs_cti_i, wbs_bte_i, wbs_we_i, wbs_adr_i, wbs_sel_i, wbs_ack_o, wbs_err_o, wbs_dat_i, wbs_dat_o
|
| 31 |
|
|
);
|
| 32 |
|
|
|
| 33 |
|
|
// Set default parameters
|
| 34 |
|
|
parameter point_width = 16;
|
| 35 |
|
|
parameter subpixel_width = 16;
|
| 36 |
|
|
parameter fifo_depth = 10;
|
| 37 |
|
|
|
| 38 |
|
|
parameter REG_ADR_HIBIT = 9;
|
| 39 |
|
|
|
| 40 |
|
|
// Common wishbone signals
|
| 41 |
|
|
input wb_clk_i; // master clock input
|
| 42 |
|
|
input wb_rst_i; // Asynchronous active high reset
|
| 43 |
|
|
output wb_inta_o; // interrupt
|
| 44 |
|
|
|
| 45 |
|
|
// Wishbone master signals (write)
|
| 46 |
|
|
output wbm_write_cyc_o; // cycle output
|
| 47 |
|
|
output wbm_write_stb_o; // strobe output
|
| 48 |
|
|
output [ 2:0] wbm_write_cti_o; // cycle type id
|
| 49 |
|
|
output [ 1:0] wbm_write_bte_o; // burst type extension
|
| 50 |
|
|
output wbm_write_we_o; // write enable output
|
| 51 |
|
|
output [31:0] wbm_write_adr_o; // address output
|
| 52 |
|
|
output [ 3:0] wbm_write_sel_o; // byte select outputs (only 32bits accesses are supported)
|
| 53 |
|
|
input wbm_write_ack_i; // wishbone cycle acknowledge
|
| 54 |
|
|
input wbm_write_err_i; // wishbone cycle error
|
| 55 |
|
|
output [31:0] wbm_write_dat_o; // wishbone data out
|
| 56 |
|
|
|
| 57 |
|
|
// Wishbone master signals (read)
|
| 58 |
|
|
output wbm_read_cyc_o; // cycle output
|
| 59 |
|
|
output wbm_read_stb_o; // strobe output
|
| 60 |
|
|
output [ 2:0] wbm_read_cti_o; // cycle type id
|
| 61 |
|
|
output [ 1:0] wbm_read_bte_o; // burst type extension
|
| 62 |
|
|
output wbm_read_we_o; // write enable output
|
| 63 |
|
|
output [31:0] wbm_read_adr_o; // address output
|
| 64 |
|
|
output [ 3:0] wbm_read_sel_o; // byte select outputs (only 32bits accesses are supported)
|
| 65 |
|
|
input wbm_read_ack_i; // wishbone cycle acknowledge
|
| 66 |
|
|
input wbm_read_err_i; // wishbone cycle error
|
| 67 |
|
|
input [31:0] wbm_read_dat_i; // wishbone data in
|
| 68 |
|
|
|
| 69 |
|
|
// Wishbone slave signals
|
| 70 |
|
|
input wbs_cyc_i; // cycle input
|
| 71 |
|
|
input wbs_stb_i; // strobe input
|
| 72 |
|
|
input [ 2:0] wbs_cti_i; // cycle type id
|
| 73 |
|
|
input [ 1:0] wbs_bte_i; // burst type extension
|
| 74 |
|
|
input wbs_we_i; // write enable input
|
| 75 |
|
|
input [31:0] wbs_adr_i; // address input
|
| 76 |
|
|
input [ 3:0] wbs_sel_i; // byte select input (only 32bits accesses are supported)
|
| 77 |
|
|
output wbs_ack_o; // wishbone cycle acknowledge
|
| 78 |
|
|
output wbs_err_o; // wishbone cycle error
|
| 79 |
|
|
input [31:0] wbs_dat_i; // wishbone data in
|
| 80 |
|
|
output [31:0] wbs_dat_o; // wishbone data out
|
| 81 |
|
|
|
| 82 |
|
|
// Wires and variables
|
| 83 |
|
|
|
| 84 |
|
|
wire wbmwriter_sint; // connect to slave interface
|
| 85 |
|
|
wire wbmreader_sint;
|
| 86 |
|
|
|
| 87 |
|
|
wire vector_wbs_ack;
|
| 88 |
|
|
wire transform_wbs_ack;
|
| 89 |
|
|
|
| 90 |
|
|
wire [31:2] target_base_reg;
|
| 91 |
|
|
wire [point_width-1:0] target_size_x_reg;
|
| 92 |
|
|
wire [point_width-1:0] target_size_y_reg;
|
| 93 |
|
|
|
| 94 |
|
|
wire [31:2] wbs_fragment_tex0_base;
|
| 95 |
|
|
wire [point_width-1:0] wbs_fragment_tex0_size_x;
|
| 96 |
|
|
wire [point_width-1:0] wbs_fragment_tex0_size_y;
|
| 97 |
|
|
|
| 98 |
|
|
wire [31:2] render_wbmwriter_addr;
|
| 99 |
|
|
wire [3:0] render_wbmwriter_sel;
|
| 100 |
|
|
wire [31:0] render_wbmwriter_dat;
|
| 101 |
|
|
|
| 102 |
|
|
wire [1:0] color_depth_reg;
|
| 103 |
|
|
|
| 104 |
|
|
wire render_wbmwriter_memory_pixel_write;
|
| 105 |
|
|
wire wbs_raster_rect_write;
|
| 106 |
|
|
wire wbs_raster_line_write;
|
| 107 |
|
|
wire wbs_raster_triangle_write;
|
| 108 |
|
|
wire wbs_raster_interpolate;
|
| 109 |
|
|
|
| 110 |
|
|
wire wbs_fragment_curve_write;
|
| 111 |
|
|
|
| 112 |
|
|
wire wbmwriter_render_ack;
|
| 113 |
|
|
|
| 114 |
|
|
// src pixel
|
| 115 |
|
|
wire [point_width-1:0] wbs_raster_src_pixel0_x;
|
| 116 |
|
|
wire [point_width-1:0] wbs_raster_src_pixel0_y;
|
| 117 |
|
|
wire [point_width-1:0] wbs_raster_src_pixel1_x;
|
| 118 |
|
|
wire [point_width-1:0] wbs_raster_src_pixel1_y;
|
| 119 |
|
|
|
| 120 |
|
|
// dest pixel
|
| 121 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_dest_pixel_x;
|
| 122 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_dest_pixel_y;
|
| 123 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_dest_pixel_z;
|
| 124 |
|
|
wire [1:0] wbs_transform_dest_pixel_id;
|
| 125 |
|
|
|
| 126 |
|
|
// transformation matrix
|
| 127 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_aa;
|
| 128 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_ab;
|
| 129 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_ac;
|
| 130 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_tx;
|
| 131 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_ba;
|
| 132 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_bb;
|
| 133 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_bc;
|
| 134 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_ty;
|
| 135 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_ca;
|
| 136 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_cb;
|
| 137 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_cc;
|
| 138 |
|
|
wire signed [point_width-1:-subpixel_width] wbs_transform_tz;
|
| 139 |
|
|
|
| 140 |
|
|
// clip pixel
|
| 141 |
|
|
wire [point_width-1:0] clip_pixel0_x_reg;
|
| 142 |
|
|
wire [point_width-1:0] clip_pixel0_y_reg;
|
| 143 |
|
|
wire [point_width-1:0] clip_pixel1_x_reg;
|
| 144 |
|
|
wire [point_width-1:0] clip_pixel1_y_reg;
|
| 145 |
|
|
|
| 146 |
|
|
wire [31:0] color0_reg;
|
| 147 |
|
|
wire [31:0] color1_reg;
|
| 148 |
|
|
wire [31:0] color2_reg;
|
| 149 |
|
|
|
| 150 |
|
|
wire [point_width-1:0] u0_reg;
|
| 151 |
|
|
wire [point_width-1:0] v0_reg;
|
| 152 |
|
|
wire [point_width-1:0] u1_reg;
|
| 153 |
|
|
wire [point_width-1:0] v1_reg;
|
| 154 |
|
|
wire [point_width-1:0] u2_reg;
|
| 155 |
|
|
wire [point_width-1:0] v2_reg;
|
| 156 |
|
|
|
| 157 |
|
|
wire [7:0] alpha0_reg;
|
| 158 |
|
|
wire [7:0] alpha1_reg;
|
| 159 |
|
|
wire [7:0] alpha2_reg;
|
| 160 |
|
|
|
| 161 |
|
|
wire texture_enable_reg;
|
| 162 |
|
|
|
| 163 |
|
|
wire blending_enable_reg;
|
| 164 |
|
|
wire [7:0] global_alpha_reg;
|
| 165 |
|
|
wire colorkey_enable_reg;
|
| 166 |
|
|
wire [31:0] colorkey_reg;
|
| 167 |
|
|
wire clipping_enable_reg;
|
| 168 |
|
|
wire inside_reg;
|
| 169 |
|
|
wire zbuffer_enable_reg;
|
| 170 |
|
|
wire [31:2] zbuffer_base_reg;
|
| 171 |
|
|
|
| 172 |
|
|
wire wbs_transform_transform;
|
| 173 |
|
|
wire wbs_transform_forward;
|
| 174 |
|
|
|
| 175 |
|
|
wire raster_wbs_ack;
|
| 176 |
|
|
|
| 177 |
|
|
// Slave wishbone interface. Reads wishbone bus and fills registers
|
| 178 |
|
|
gfx_wbs wb_databus(
|
| 179 |
|
|
.clk_i (wb_clk_i),
|
| 180 |
|
|
.rst_i (wb_rst_i),
|
| 181 |
|
|
.adr_i (wbs_adr_i[REG_ADR_HIBIT:0]),
|
| 182 |
|
|
.dat_i (wbs_dat_i),
|
| 183 |
|
|
.dat_o (wbs_dat_o),
|
| 184 |
|
|
.sel_i (wbs_sel_i),
|
| 185 |
|
|
.we_i (wbs_we_i),
|
| 186 |
|
|
.stb_i (wbs_stb_i),
|
| 187 |
|
|
.cyc_i (wbs_cyc_i),
|
| 188 |
|
|
.ack_o (wbs_ack_o),
|
| 189 |
|
|
.rty_o (),
|
| 190 |
|
|
.err_o (wbs_err_o),
|
| 191 |
|
|
.inta_o (wb_inta_o),
|
| 192 |
|
|
|
| 193 |
|
|
//source pixel
|
| 194 |
|
|
.src_pixel0_x_o (wbs_raster_src_pixel0_x),
|
| 195 |
|
|
.src_pixel0_y_o (wbs_raster_src_pixel0_y),
|
| 196 |
|
|
.src_pixel1_x_o (wbs_raster_src_pixel1_x),
|
| 197 |
|
|
.src_pixel1_y_o (wbs_raster_src_pixel1_y),
|
| 198 |
|
|
//destination pixel
|
| 199 |
|
|
.dest_pixel_x_o (wbs_transform_dest_pixel_x),
|
| 200 |
|
|
.dest_pixel_y_o (wbs_transform_dest_pixel_y),
|
| 201 |
|
|
.dest_pixel_z_o (wbs_transform_dest_pixel_z),
|
| 202 |
|
|
.dest_pixel_id_o (wbs_transform_dest_pixel_id),
|
| 203 |
|
|
//matrix
|
| 204 |
|
|
.aa_o (wbs_transform_aa),
|
| 205 |
|
|
.ab_o (wbs_transform_ab),
|
| 206 |
|
|
.ac_o (wbs_transform_ac),
|
| 207 |
|
|
.tx_o (wbs_transform_tx),
|
| 208 |
|
|
.ba_o (wbs_transform_ba),
|
| 209 |
|
|
.bb_o (wbs_transform_bb),
|
| 210 |
|
|
.bc_o (wbs_transform_bc),
|
| 211 |
|
|
.ty_o (wbs_transform_ty),
|
| 212 |
|
|
.ca_o (wbs_transform_ca),
|
| 213 |
|
|
.cb_o (wbs_transform_cb),
|
| 214 |
|
|
.cc_o (wbs_transform_cc),
|
| 215 |
|
|
.tz_o (wbs_transform_tz),
|
| 216 |
|
|
.transform_point_o (wbs_transform_transform),
|
| 217 |
|
|
.forward_point_o (wbs_transform_forward),
|
| 218 |
|
|
//clip pixel
|
| 219 |
|
|
.clip_pixel0_x_o (clip_pixel0_x_reg),
|
| 220 |
|
|
.clip_pixel0_y_o (clip_pixel0_y_reg),
|
| 221 |
|
|
.clip_pixel1_x_o (clip_pixel1_x_reg),
|
| 222 |
|
|
.clip_pixel1_y_o (clip_pixel1_y_reg),
|
| 223 |
|
|
|
| 224 |
|
|
.color0_o (color0_reg),
|
| 225 |
|
|
.color1_o (color1_reg),
|
| 226 |
|
|
.color2_o (color2_reg),
|
| 227 |
|
|
|
| 228 |
|
|
.u0_o (u0_reg),
|
| 229 |
|
|
.v0_o (v0_reg),
|
| 230 |
|
|
.u1_o (u1_reg),
|
| 231 |
|
|
.v1_o (v1_reg),
|
| 232 |
|
|
.u2_o (u2_reg),
|
| 233 |
|
|
.v2_o (v2_reg),
|
| 234 |
|
|
|
| 235 |
|
|
.a0_o (alpha0_reg),
|
| 236 |
|
|
.a1_o (alpha1_reg),
|
| 237 |
|
|
.a2_o (alpha2_reg),
|
| 238 |
|
|
.global_alpha_o (global_alpha_reg),
|
| 239 |
|
|
|
| 240 |
|
|
.target_base_o (target_base_reg),
|
| 241 |
|
|
.target_size_x_o (target_size_x_reg),
|
| 242 |
|
|
.target_size_y_o (target_size_y_reg),
|
| 243 |
|
|
.tex0_base_o (wbs_fragment_tex0_base),
|
| 244 |
|
|
.tex0_size_x_o (wbs_fragment_tex0_size_x),
|
| 245 |
|
|
.tex0_size_y_o (wbs_fragment_tex0_size_y),
|
| 246 |
|
|
|
| 247 |
|
|
.color_depth_o (color_depth_reg),
|
| 248 |
|
|
|
| 249 |
|
|
.rect_write_o (wbs_raster_rect_write),
|
| 250 |
|
|
.line_write_o (wbs_raster_line_write),
|
| 251 |
|
|
.triangle_write_o (wbs_raster_triangle_write),
|
| 252 |
|
|
.curve_write_o (wbs_fragment_curve_write),
|
| 253 |
|
|
.interpolate_o (wbs_raster_interpolate),
|
| 254 |
|
|
|
| 255 |
|
|
.writer_sint_i (wbmwriter_sint),
|
| 256 |
|
|
.reader_sint_i (wbmreader_sint),
|
| 257 |
|
|
|
| 258 |
|
|
.pipeline_ack_i (raster_wbs_ack),
|
| 259 |
|
|
.transform_ack_i (transform_wbs_ack),
|
| 260 |
|
|
|
| 261 |
|
|
.texture_enable_o (texture_enable_reg),
|
| 262 |
|
|
.blending_enable_o (blending_enable_reg),
|
| 263 |
|
|
.colorkey_enable_o (colorkey_enable_reg),
|
| 264 |
|
|
.colorkey_o (colorkey_reg),
|
| 265 |
|
|
.clipping_enable_o (clipping_enable_reg),
|
| 266 |
|
|
.inside_o (inside_reg),
|
| 267 |
|
|
.zbuffer_enable_o (zbuffer_enable_reg),
|
| 268 |
|
|
.zbuffer_base_o (zbuffer_base_reg)
|
| 269 |
|
|
);
|
| 270 |
|
|
|
| 271 |
|
|
defparam wb_databus.point_width = point_width;
|
| 272 |
|
|
defparam wb_databus.subpixel_width = subpixel_width;
|
| 273 |
|
|
defparam wb_databus.fifo_depth = fifo_depth;
|
| 274 |
|
|
defparam wb_databus.REG_ADR_HIBIT = REG_ADR_HIBIT;
|
| 275 |
|
|
|
| 276 |
|
|
wire signed [point_width-1:-subpixel_width] transform_raster_dest_pixel0_x;
|
| 277 |
|
|
wire signed [point_width-1:-subpixel_width] transform_raster_dest_pixel0_y;
|
| 278 |
|
|
wire signed [point_width-1:-subpixel_width] transform_raster_dest_pixel1_x;
|
| 279 |
|
|
wire signed [point_width-1:-subpixel_width] transform_raster_dest_pixel1_y;
|
| 280 |
|
|
wire signed [point_width-1:-subpixel_width] transform_raster_dest_pixel2_x;
|
| 281 |
|
|
wire signed [point_width-1:-subpixel_width] transform_raster_dest_pixel2_y;
|
| 282 |
|
|
|
| 283 |
|
|
wire signed [point_width-1:0] transform_cuvz_dest_pixel0_z;
|
| 284 |
|
|
wire signed [point_width-1:0] transform_cuvz_dest_pixel1_z;
|
| 285 |
|
|
wire signed [point_width-1:0] transform_cuvz_dest_pixel2_z;
|
| 286 |
|
|
|
| 287 |
|
|
// Apply transforms to points
|
| 288 |
|
|
gfx_transform transform(
|
| 289 |
|
|
.clk_i (wb_clk_i),
|
| 290 |
|
|
.rst_i (wb_rst_i),
|
| 291 |
|
|
.x_i (wbs_transform_dest_pixel_x),
|
| 292 |
|
|
.y_i (wbs_transform_dest_pixel_y),
|
| 293 |
|
|
.z_i (wbs_transform_dest_pixel_z),
|
| 294 |
|
|
.point_id_i (wbs_transform_dest_pixel_id),
|
| 295 |
|
|
// Matrix
|
| 296 |
|
|
.aa (wbs_transform_aa),
|
| 297 |
|
|
.ab (wbs_transform_ab),
|
| 298 |
|
|
.ac (wbs_transform_ac),
|
| 299 |
|
|
.tx (wbs_transform_tx),
|
| 300 |
|
|
.ba (wbs_transform_ba),
|
| 301 |
|
|
.bb (wbs_transform_bb),
|
| 302 |
|
|
.bc (wbs_transform_bc),
|
| 303 |
|
|
.ty (wbs_transform_ty),
|
| 304 |
|
|
.ca (wbs_transform_ca),
|
| 305 |
|
|
.cb (wbs_transform_cb),
|
| 306 |
|
|
.cc (wbs_transform_cc),
|
| 307 |
|
|
.tz (wbs_transform_tz),
|
| 308 |
|
|
// Output points
|
| 309 |
|
|
.p0_x_o (transform_raster_dest_pixel0_x),
|
| 310 |
|
|
.p0_y_o (transform_raster_dest_pixel0_y),
|
| 311 |
|
|
.p0_z_o (transform_cuvz_dest_pixel0_z),
|
| 312 |
|
|
.p1_x_o (transform_raster_dest_pixel1_x),
|
| 313 |
|
|
.p1_y_o (transform_raster_dest_pixel1_y),
|
| 314 |
|
|
.p1_z_o (transform_cuvz_dest_pixel1_z),
|
| 315 |
|
|
.p2_x_o (transform_raster_dest_pixel2_x),
|
| 316 |
|
|
.p2_y_o (transform_raster_dest_pixel2_y),
|
| 317 |
|
|
.p2_z_o (transform_cuvz_dest_pixel2_z),
|
| 318 |
|
|
.transform_i (wbs_transform_transform),
|
| 319 |
|
|
.forward_i (wbs_transform_forward),
|
| 320 |
|
|
.ack_o (transform_wbs_ack)
|
| 321 |
|
|
);
|
| 322 |
|
|
|
| 323 |
|
|
defparam transform.point_width = point_width;
|
| 324 |
|
|
defparam transform.subpixel_width = subpixel_width;
|
| 325 |
|
|
|
| 326 |
|
|
wire raster_clip_write;
|
| 327 |
|
|
wire [point_width-1:0] raster_x_pixel;
|
| 328 |
|
|
wire [point_width-1:0] raster_y_pixel;
|
| 329 |
|
|
wire clip_ack;
|
| 330 |
|
|
wire raster_interp_write;
|
| 331 |
|
|
wire interp_raster_ack;
|
| 332 |
|
|
wire [point_width-1:0] raster_clip_u;
|
| 333 |
|
|
wire [point_width-1:0] raster_clip_v;
|
| 334 |
|
|
|
| 335 |
|
|
wire [2*point_width-1:0] raster_interp_edge0;
|
| 336 |
|
|
wire [2*point_width-1:0] raster_interp_edge1;
|
| 337 |
|
|
wire [2*point_width-1:0] raster_interp_area;
|
| 338 |
|
|
|
| 339 |
|
|
// Rasterizer generates pixels to calculate
|
| 340 |
|
|
gfx_rasterizer rasterizer0 (
|
| 341 |
|
|
.clk_i (wb_clk_i),
|
| 342 |
|
|
.rst_i (wb_rst_i),
|
| 343 |
|
|
|
| 344 |
|
|
.clip_ack_i (clip_ack),
|
| 345 |
|
|
.interp_ack_i (interp_raster_ack),
|
| 346 |
|
|
.ack_o (raster_wbs_ack),
|
| 347 |
|
|
|
| 348 |
|
|
.rect_write_i (wbs_raster_rect_write),
|
| 349 |
|
|
.line_write_i (wbs_raster_line_write),
|
| 350 |
|
|
.triangle_write_i (wbs_raster_triangle_write),
|
| 351 |
|
|
.interpolate_i (wbs_raster_interpolate),
|
| 352 |
|
|
|
| 353 |
|
|
.texture_enable_i (texture_enable_reg),
|
| 354 |
|
|
// source pixel coordinates
|
| 355 |
|
|
.src_pixel0_x_i (wbs_raster_src_pixel0_x),
|
| 356 |
|
|
.src_pixel0_y_i (wbs_raster_src_pixel0_y),
|
| 357 |
|
|
.src_pixel1_x_i (wbs_raster_src_pixel1_x),
|
| 358 |
|
|
.src_pixel1_y_i (wbs_raster_src_pixel1_y),
|
| 359 |
|
|
|
| 360 |
|
|
// destination pixel coordinates
|
| 361 |
|
|
.dest_pixel0_x_i (transform_raster_dest_pixel0_x),
|
| 362 |
|
|
.dest_pixel0_y_i (transform_raster_dest_pixel0_y),
|
| 363 |
|
|
.dest_pixel1_x_i (transform_raster_dest_pixel1_x),
|
| 364 |
|
|
.dest_pixel1_y_i (transform_raster_dest_pixel1_y),
|
| 365 |
|
|
.dest_pixel2_x_i (transform_raster_dest_pixel2_x),
|
| 366 |
|
|
.dest_pixel2_y_i (transform_raster_dest_pixel2_y),
|
| 367 |
|
|
|
| 368 |
|
|
// clip pixel coordinates
|
| 369 |
|
|
.clipping_enable_i (clipping_enable_reg),
|
| 370 |
|
|
.clip_pixel0_x_i (clip_pixel0_x_reg),
|
| 371 |
|
|
.clip_pixel0_y_i (clip_pixel0_y_reg),
|
| 372 |
|
|
.clip_pixel1_x_i (clip_pixel1_x_reg),
|
| 373 |
|
|
.clip_pixel1_y_i (clip_pixel1_y_reg),
|
| 374 |
|
|
|
| 375 |
|
|
// Screen size
|
| 376 |
|
|
.target_size_x_i (target_size_x_reg),
|
| 377 |
|
|
.target_size_y_i (target_size_y_reg),
|
| 378 |
|
|
|
| 379 |
|
|
// Output pixel
|
| 380 |
|
|
.x_counter_o (raster_x_pixel),
|
| 381 |
|
|
.y_counter_o (raster_y_pixel),
|
| 382 |
|
|
.u_o (raster_clip_u),
|
| 383 |
|
|
.v_o (raster_clip_v),
|
| 384 |
|
|
.clip_write_o (raster_clip_write),
|
| 385 |
|
|
// To interp
|
| 386 |
|
|
.triangle_edge0_o (raster_interp_edge0),
|
| 387 |
|
|
.triangle_edge1_o (raster_interp_edge1),
|
| 388 |
|
|
.triangle_area_o (raster_interp_area),
|
| 389 |
|
|
.interp_write_o (raster_interp_write)
|
| 390 |
|
|
);
|
| 391 |
|
|
|
| 392 |
|
|
defparam rasterizer0.point_width = point_width;
|
| 393 |
|
|
defparam rasterizer0.subpixel_width = subpixel_width;
|
| 394 |
|
|
defparam rasterizer0.delay_width = 5; // log2(point_width+1)
|
| 395 |
|
|
|
| 396 |
|
|
wire [point_width-1:0] interp_cuvz_x;
|
| 397 |
|
|
wire [point_width-1:0] interp_cuvz_y;
|
| 398 |
|
|
|
| 399 |
|
|
wire [point_width-1:0] interp_cuvz_factor0;
|
| 400 |
|
|
wire [point_width-1:0] interp_cuvz_factor1;
|
| 401 |
|
|
|
| 402 |
|
|
wire interp_cuvz_write;
|
| 403 |
|
|
|
| 404 |
|
|
wire cuvz_interp_ack;
|
| 405 |
|
|
|
| 406 |
|
|
gfx_interp interp(
|
| 407 |
|
|
.clk_i (wb_clk_i),
|
| 408 |
|
|
.rst_i (wb_rst_i),
|
| 409 |
|
|
.ack_i (cuvz_interp_ack),
|
| 410 |
|
|
.ack_o (interp_raster_ack),
|
| 411 |
|
|
.write_i (raster_interp_write),
|
| 412 |
|
|
.edge0_i (raster_interp_edge0),
|
| 413 |
|
|
.edge1_i (raster_interp_edge1),
|
| 414 |
|
|
.area_i (raster_interp_area),
|
| 415 |
|
|
.x_i (raster_x_pixel),
|
| 416 |
|
|
.y_i (raster_y_pixel),
|
| 417 |
|
|
.x_o (interp_cuvz_x),
|
| 418 |
|
|
.y_o (interp_cuvz_y),
|
| 419 |
|
|
.factor0_o (interp_cuvz_factor0),
|
| 420 |
|
|
.factor1_o (interp_cuvz_factor1),
|
| 421 |
|
|
.write_o (interp_cuvz_write)
|
| 422 |
|
|
);
|
| 423 |
|
|
|
| 424 |
|
|
defparam interp.point_width = point_width;
|
| 425 |
|
|
defparam interp.delay_width = 5; // log2(point_width+1)
|
| 426 |
|
|
defparam interp.result_width = 4; // 16 pipeline slots
|
| 427 |
|
|
|
| 428 |
|
|
wire [point_width-1:0] cuvz_clip_x;
|
| 429 |
|
|
wire [point_width-1:0] cuvz_clip_y;
|
| 430 |
|
|
wire signed [point_width-1:0] cuvz_clip_z;
|
| 431 |
|
|
wire [point_width-1:0] cuvz_clip_u;
|
| 432 |
|
|
wire [point_width-1:0] cuvz_clip_v;
|
| 433 |
|
|
wire [7:0] cuvz_clip_alpha;
|
| 434 |
|
|
wire [point_width-1:0] cuvz_clip_bezier_factor0;
|
| 435 |
|
|
wire [point_width-1:0] cuvz_clip_bezier_factor1;
|
| 436 |
|
|
wire cuvz_clip_write;
|
| 437 |
|
|
|
| 438 |
|
|
wire [31:0] cuvz_clip_color;
|
| 439 |
|
|
|
| 440 |
|
|
gfx_cuvz cuvz(
|
| 441 |
|
|
.clk_i (wb_clk_i),
|
| 442 |
|
|
.rst_i (wb_rst_i),
|
| 443 |
|
|
.ack_i (clip_ack),
|
| 444 |
|
|
.ack_o (cuvz_interp_ack),
|
| 445 |
|
|
.write_i (interp_cuvz_write),
|
| 446 |
|
|
// Variables needed for interpolation
|
| 447 |
|
|
.factor0_i (interp_cuvz_factor0),
|
| 448 |
|
|
.factor1_i (interp_cuvz_factor1),
|
| 449 |
|
|
// Color
|
| 450 |
|
|
.color0_i (color0_reg),
|
| 451 |
|
|
.color1_i (color1_reg),
|
| 452 |
|
|
.color2_i (color2_reg),
|
| 453 |
|
|
.color_depth_i (color_depth_reg),
|
| 454 |
|
|
.color_o (cuvz_clip_color),
|
| 455 |
|
|
// Depth
|
| 456 |
|
|
.z0_i (transform_cuvz_dest_pixel0_z),
|
| 457 |
|
|
.z1_i (transform_cuvz_dest_pixel1_z),
|
| 458 |
|
|
.z2_i (transform_cuvz_dest_pixel2_z),
|
| 459 |
|
|
.z_o (cuvz_clip_z),
|
| 460 |
|
|
// Alpha
|
| 461 |
|
|
.a0_i (alpha0_reg),
|
| 462 |
|
|
.a1_i (alpha1_reg),
|
| 463 |
|
|
.a2_i (alpha2_reg),
|
| 464 |
|
|
.a_o (cuvz_clip_alpha),
|
| 465 |
|
|
// Texture coordinates
|
| 466 |
|
|
.u0_i (u0_reg),
|
| 467 |
|
|
.v0_i (v0_reg),
|
| 468 |
|
|
.u1_i (u1_reg),
|
| 469 |
|
|
.v1_i (v1_reg),
|
| 470 |
|
|
.u2_i (u2_reg),
|
| 471 |
|
|
.v2_i (v2_reg),
|
| 472 |
|
|
.u_o (cuvz_clip_u),
|
| 473 |
|
|
.v_o (cuvz_clip_v),
|
| 474 |
|
|
// Bezier calculations
|
| 475 |
|
|
.bezier_factor0_o (cuvz_clip_bezier_factor0),
|
| 476 |
|
|
.bezier_factor1_o (cuvz_clip_bezier_factor1),
|
| 477 |
|
|
// Raster position
|
| 478 |
|
|
.x_i (interp_cuvz_x),
|
| 479 |
|
|
.y_i (interp_cuvz_y),
|
| 480 |
|
|
.x_o (cuvz_clip_x),
|
| 481 |
|
|
.y_o (cuvz_clip_y),
|
| 482 |
|
|
|
| 483 |
|
|
.write_o (cuvz_clip_write)
|
| 484 |
|
|
);
|
| 485 |
|
|
|
| 486 |
|
|
defparam cuvz.point_width = point_width;
|
| 487 |
|
|
|
| 488 |
|
|
wire clip_fragment_write_enable;
|
| 489 |
|
|
wire [point_width-1:0] clip_fragment_x_pixel;
|
| 490 |
|
|
wire [point_width-1:0] clip_fragment_y_pixel;
|
| 491 |
|
|
wire signed [point_width-1:0] clip_fragment_z_pixel;
|
| 492 |
|
|
wire fragment_clip_ack;
|
| 493 |
|
|
wire [point_width-1:0] clip_fragment_u;
|
| 494 |
|
|
wire [point_width-1:0] clip_fragment_v;
|
| 495 |
|
|
wire [7:0] clip_fragment_a;
|
| 496 |
|
|
wire [point_width-1:0] clip_fragment_bezier_factor0;
|
| 497 |
|
|
wire [point_width-1:0] clip_fragment_bezier_factor1;
|
| 498 |
|
|
|
| 499 |
|
|
wire [31:0] clip_fragment_color;
|
| 500 |
|
|
|
| 501 |
|
|
wire wbmreader_busy;
|
| 502 |
|
|
|
| 503 |
|
|
// Connected through arbiter
|
| 504 |
|
|
wire wbmreader_clip_z_ack;
|
| 505 |
|
|
wire [31:2] clip_wbmreader_z_addr;
|
| 506 |
|
|
wire [31:0] wbmreader_clip_z_data;
|
| 507 |
|
|
wire [3:0] clip_wbmreader_z_sel;
|
| 508 |
|
|
wire clip_wbmreader_z_request;
|
| 509 |
|
|
|
| 510 |
|
|
// Apply clipping
|
| 511 |
|
|
gfx_clip clip(
|
| 512 |
|
|
.clk_i (wb_clk_i),
|
| 513 |
|
|
.rst_i (wb_rst_i),
|
| 514 |
|
|
.clipping_enable_i(clipping_enable_reg),
|
| 515 |
|
|
.zbuffer_enable_i (zbuffer_enable_reg),
|
| 516 |
|
|
.zbuffer_base_i (zbuffer_base_reg),
|
| 517 |
|
|
.target_size_x_i (target_size_x_reg),
|
| 518 |
|
|
.target_size_y_i (target_size_y_reg),
|
| 519 |
|
|
.clip_pixel0_x_i (clip_pixel0_x_reg),
|
| 520 |
|
|
.clip_pixel0_y_i (clip_pixel0_y_reg),
|
| 521 |
|
|
.clip_pixel1_x_i (clip_pixel1_x_reg),
|
| 522 |
|
|
.clip_pixel1_y_i (clip_pixel1_y_reg),
|
| 523 |
|
|
.raster_pixel_x_i (raster_x_pixel),
|
| 524 |
|
|
.raster_pixel_y_i (raster_y_pixel),
|
| 525 |
|
|
.raster_u_i (raster_clip_u),
|
| 526 |
|
|
.raster_v_i (raster_clip_v),
|
| 527 |
|
|
.flat_color_i (color0_reg),
|
| 528 |
|
|
.raster_write_i (raster_clip_write),
|
| 529 |
|
|
.cuvz_pixel_x_i (cuvz_clip_x),
|
| 530 |
|
|
.cuvz_pixel_y_i (cuvz_clip_y),
|
| 531 |
|
|
.cuvz_pixel_z_i (cuvz_clip_z),
|
| 532 |
|
|
.cuvz_u_i (cuvz_clip_u),
|
| 533 |
|
|
.cuvz_v_i (cuvz_clip_v),
|
| 534 |
|
|
.cuvz_a_i (cuvz_clip_alpha),
|
| 535 |
|
|
.cuvz_color_i (cuvz_clip_color),
|
| 536 |
|
|
.cuvz_write_i (cuvz_clip_write),
|
| 537 |
|
|
.ack_o (clip_ack),
|
| 538 |
|
|
.z_ack_i (wbmreader_clip_z_ack),
|
| 539 |
|
|
.z_addr_o (clip_wbmreader_z_addr),
|
| 540 |
|
|
.z_data_i (wbmreader_clip_z_data),
|
| 541 |
|
|
.z_sel_o (clip_wbmreader_z_sel),
|
| 542 |
|
|
.z_request_o (clip_wbmreader_z_request),
|
| 543 |
|
|
.wbm_busy_i (wbmreader_busy),
|
| 544 |
|
|
.pixel_x_o (clip_fragment_x_pixel),
|
| 545 |
|
|
.pixel_y_o (clip_fragment_y_pixel),
|
| 546 |
|
|
.pixel_z_o (clip_fragment_z_pixel),
|
| 547 |
|
|
.u_o (clip_fragment_u),
|
| 548 |
|
|
.v_o (clip_fragment_v),
|
| 549 |
|
|
.a_o (clip_fragment_a),
|
| 550 |
|
|
.bezier_factor0_i (cuvz_clip_bezier_factor0),
|
| 551 |
|
|
.bezier_factor1_i (cuvz_clip_bezier_factor1),
|
| 552 |
|
|
.bezier_factor0_o (clip_fragment_bezier_factor0),
|
| 553 |
|
|
.bezier_factor1_o (clip_fragment_bezier_factor1),
|
| 554 |
|
|
.color_o (clip_fragment_color),
|
| 555 |
|
|
.write_o (clip_fragment_write_enable),
|
| 556 |
|
|
.ack_i (fragment_clip_ack)
|
| 557 |
|
|
);
|
| 558 |
|
|
|
| 559 |
|
|
defparam clip.point_width = point_width;
|
| 560 |
|
|
|
| 561 |
|
|
wire fragment_blender_write_enable;
|
| 562 |
|
|
wire [point_width-1:0] fragment_blender_x_pixel;
|
| 563 |
|
|
wire [point_width-1:0] fragment_blender_y_pixel;
|
| 564 |
|
|
wire signed [point_width-1:0] fragment_blender_z_pixel;
|
| 565 |
|
|
wire blender_fragment_ack;
|
| 566 |
|
|
wire [31:0] fragment_blender_color;
|
| 567 |
|
|
wire [7:0] fragment_blender_alpha;
|
| 568 |
|
|
|
| 569 |
|
|
wire wbmreader_fragment_texture_ack;
|
| 570 |
|
|
wire [31:0] wbmreader_fragment_texture_data;
|
| 571 |
|
|
wire [31:2] fragment_wbmreader_texture_addr;
|
| 572 |
|
|
wire [3:0] fragment_wbmreader_texture_sel;
|
| 573 |
|
|
wire fragment_wbmreader_texture_request;
|
| 574 |
|
|
|
| 575 |
|
|
|
| 576 |
|
|
// Fragment processor generates color of pixel (requires RAM read for textures)
|
| 577 |
|
|
gfx_fragment_processor fp0 (
|
| 578 |
|
|
.clk_i (wb_clk_i),
|
| 579 |
|
|
.rst_i (wb_rst_i),
|
| 580 |
|
|
.pixel_alpha_i (clip_fragment_a),
|
| 581 |
|
|
.x_counter_i (clip_fragment_x_pixel),
|
| 582 |
|
|
.y_counter_i (clip_fragment_y_pixel),
|
| 583 |
|
|
.z_i (clip_fragment_z_pixel),
|
| 584 |
|
|
.u_i (clip_fragment_u),
|
| 585 |
|
|
.v_i (clip_fragment_v),
|
| 586 |
|
|
.bezier_factor0_i (clip_fragment_bezier_factor0),
|
| 587 |
|
|
.bezier_factor1_i (clip_fragment_bezier_factor1),
|
| 588 |
|
|
.bezier_inside_i (inside_reg),
|
| 589 |
|
|
.ack_i (blender_fragment_ack),
|
| 590 |
|
|
.write_i (clip_fragment_write_enable),
|
| 591 |
|
|
.curve_write_i (wbs_fragment_curve_write),
|
| 592 |
|
|
.pixel_x_o (fragment_blender_x_pixel),
|
| 593 |
|
|
.pixel_y_o (fragment_blender_y_pixel),
|
| 594 |
|
|
.pixel_z_o (fragment_blender_z_pixel),
|
| 595 |
|
|
.pixel_color_i (clip_fragment_color),
|
| 596 |
|
|
.pixel_color_o (fragment_blender_color),
|
| 597 |
|
|
.pixel_alpha_o (fragment_blender_alpha),
|
| 598 |
|
|
.write_o (fragment_blender_write_enable),
|
| 599 |
|
|
.ack_o (fragment_clip_ack),
|
| 600 |
|
|
.texture_ack_i (wbmreader_fragment_texture_ack),
|
| 601 |
|
|
.texture_data_i (wbmreader_fragment_texture_data),
|
| 602 |
|
|
.texture_addr_o (fragment_wbmreader_texture_addr),
|
| 603 |
|
|
.texture_sel_o (fragment_wbmreader_texture_sel),
|
| 604 |
|
|
.texture_request_o (fragment_wbmreader_texture_request),
|
| 605 |
|
|
.texture_enable_i (texture_enable_reg),
|
| 606 |
|
|
.tex0_base_i (wbs_fragment_tex0_base),
|
| 607 |
|
|
.tex0_size_x_i (wbs_fragment_tex0_size_x),
|
| 608 |
|
|
.tex0_size_y_i (wbs_fragment_tex0_size_y),
|
| 609 |
|
|
.color_depth_i (color_depth_reg),
|
| 610 |
|
|
.colorkey_enable_i (colorkey_enable_reg),
|
| 611 |
|
|
.colorkey_i (colorkey_reg)
|
| 612 |
|
|
);
|
| 613 |
|
|
|
| 614 |
|
|
defparam fp0.point_width = point_width;
|
| 615 |
|
|
|
| 616 |
|
|
wire blender_render_write_enable;
|
| 617 |
|
|
wire [point_width-1:0] blender_render_x_pixel;
|
| 618 |
|
|
wire [point_width-1:0] blender_render_y_pixel;
|
| 619 |
|
|
wire signed [point_width-1:0] blender_render_z_pixel;
|
| 620 |
|
|
wire render_blender_ack;
|
| 621 |
|
|
wire [31:0] blender_render_color;
|
| 622 |
|
|
|
| 623 |
|
|
// Connected through arbiter
|
| 624 |
|
|
wire wbmreader_blender_target_ack;
|
| 625 |
|
|
wire [31:2] blender_wbmreader_target_addr;
|
| 626 |
|
|
wire [31:0] wbmreader_blender_target_data;
|
| 627 |
|
|
wire [3:0] blender_wbmreader_target_sel;
|
| 628 |
|
|
wire blender_wbmreader_target_request;
|
| 629 |
|
|
|
| 630 |
|
|
// Applies alpha blending if enabled (requires RAM read to get target pixel color)
|
| 631 |
|
|
// Fragment processor generates color of pixel (requires RAM read for textures)
|
| 632 |
|
|
gfx_blender blender0 (
|
| 633 |
|
|
.clk_i (wb_clk_i),
|
| 634 |
|
|
.rst_i (wb_rst_i),
|
| 635 |
|
|
.blending_enable_i (blending_enable_reg),
|
| 636 |
|
|
// Render target information
|
| 637 |
|
|
.target_base_i (target_base_reg),
|
| 638 |
|
|
.target_size_x_i (target_size_x_reg),
|
| 639 |
|
|
.target_size_y_i (target_size_y_reg),
|
| 640 |
|
|
.color_depth_i (color_depth_reg),
|
| 641 |
|
|
.x_counter_i (fragment_blender_x_pixel),
|
| 642 |
|
|
.y_counter_i (fragment_blender_y_pixel),
|
| 643 |
|
|
.z_i (fragment_blender_z_pixel),
|
| 644 |
|
|
.alpha_i (fragment_blender_alpha),
|
| 645 |
|
|
.global_alpha_i (global_alpha_reg),
|
| 646 |
|
|
.ack_i (render_blender_ack),
|
| 647 |
|
|
.target_ack_i (wbmreader_blender_target_ack),
|
| 648 |
|
|
.target_addr_o (blender_wbmreader_target_addr),
|
| 649 |
|
|
.target_data_i (wbmreader_blender_target_data),
|
| 650 |
|
|
.target_sel_o (blender_wbmreader_target_sel),
|
| 651 |
|
|
.target_request_o (blender_wbmreader_target_request),
|
| 652 |
|
|
.wbm_busy_i (wbmreader_busy),
|
| 653 |
|
|
.write_i (fragment_blender_write_enable),
|
| 654 |
|
|
.pixel_x_o (blender_render_x_pixel),
|
| 655 |
|
|
.pixel_y_o (blender_render_y_pixel),
|
| 656 |
|
|
.pixel_z_o (blender_render_z_pixel),
|
| 657 |
|
|
.pixel_color_i (fragment_blender_color),
|
| 658 |
|
|
.pixel_color_o (blender_render_color),
|
| 659 |
|
|
.write_o (blender_render_write_enable),
|
| 660 |
|
|
.ack_o (blender_fragment_ack)
|
| 661 |
|
|
);
|
| 662 |
|
|
|
| 663 |
|
|
defparam blender0.point_width = point_width;
|
| 664 |
|
|
|
| 665 |
|
|
// Write pixel to target (check for out of bounds)
|
| 666 |
|
|
gfx_renderer renderer (
|
| 667 |
|
|
.clk_i (wb_clk_i),
|
| 668 |
|
|
.rst_i (wb_rst_i),
|
| 669 |
|
|
// Render target information
|
| 670 |
|
|
.target_base_i (target_base_reg),
|
| 671 |
|
|
.zbuffer_base_i (zbuffer_base_reg),
|
| 672 |
|
|
.target_size_x_i (target_size_x_reg),
|
| 673 |
|
|
.target_size_y_i (target_size_y_reg),
|
| 674 |
|
|
.color_depth_i (color_depth_reg),
|
| 675 |
|
|
// Input pixel
|
| 676 |
|
|
.pixel_x_i (blender_render_x_pixel),
|
| 677 |
|
|
.pixel_y_i (blender_render_y_pixel),
|
| 678 |
|
|
.pixel_z_i (blender_render_z_pixel),
|
| 679 |
|
|
.zbuffer_enable_i(zbuffer_enable_reg),
|
| 680 |
|
|
.color_i (blender_render_color),
|
| 681 |
|
|
|
| 682 |
|
|
.render_addr_o (render_wbmwriter_addr),
|
| 683 |
|
|
.render_sel_o (render_wbmwriter_sel),
|
| 684 |
|
|
.render_dat_o (render_wbmwriter_dat),
|
| 685 |
|
|
.ack_o (render_blender_ack),
|
| 686 |
|
|
.ack_i (wbmwriter_render_ack),
|
| 687 |
|
|
.write_i (blender_render_write_enable),
|
| 688 |
|
|
.write_o (render_wbmwriter_memory_pixel_write)
|
| 689 |
|
|
);
|
| 690 |
|
|
|
| 691 |
|
|
defparam renderer.point_width = point_width;
|
| 692 |
|
|
|
| 693 |
|
|
// Instansiate wishbone master interface (write only)
|
| 694 |
|
|
gfx_wbm_write wbm_writer (
|
| 695 |
|
|
.clk_i (wb_clk_i),
|
| 696 |
|
|
.rst_i (wb_rst_i),
|
| 697 |
|
|
.cyc_o (wbm_write_cyc_o),
|
| 698 |
|
|
.stb_o (wbm_write_stb_o),
|
| 699 |
|
|
.cti_o (wbm_write_cti_o),
|
| 700 |
|
|
.bte_o (wbm_write_bte_o),
|
| 701 |
|
|
.we_o (wbm_write_we_o),
|
| 702 |
|
|
.adr_o (wbm_write_adr_o),
|
| 703 |
|
|
.sel_o (wbm_write_sel_o),
|
| 704 |
|
|
.ack_i (wbm_write_ack_i),
|
| 705 |
|
|
.err_i (wbm_write_err_i),
|
| 706 |
|
|
.dat_o (wbm_write_dat_o),
|
| 707 |
|
|
.sint_o (wbmwriter_sint),
|
| 708 |
|
|
|
| 709 |
|
|
.write_i (render_wbmwriter_memory_pixel_write),
|
| 710 |
|
|
.ack_o (wbmwriter_render_ack),
|
| 711 |
|
|
|
| 712 |
|
|
// send ack to renderer when done writing to memory.
|
| 713 |
|
|
.render_addr_i (render_wbmwriter_addr),
|
| 714 |
|
|
.render_sel_i (render_wbmwriter_sel),
|
| 715 |
|
|
.render_dat_i (render_wbmwriter_dat)
|
| 716 |
|
|
);
|
| 717 |
|
|
|
| 718 |
|
|
wire wbmreader_arbiter_ack;
|
| 719 |
|
|
wire [31:2] arbiter_wbmreader_addr;
|
| 720 |
|
|
wire [31:0] wbmreader_arbiter_data;
|
| 721 |
|
|
wire [3:0] arbiter_wbmreader_sel;
|
| 722 |
|
|
wire arbiter_wbmreader_request;
|
| 723 |
|
|
|
| 724 |
|
|
// Instansiate wbm reader arbiter
|
| 725 |
|
|
gfx_wbm_read_arbiter wbm_arbiter (
|
| 726 |
|
|
.master_busy_o (wbmreader_busy),
|
| 727 |
|
|
// Interface against the wbm read module
|
| 728 |
|
|
.read_request_o (arbiter_wbmreader_request),
|
| 729 |
|
|
.addr_o (arbiter_wbmreader_addr),
|
| 730 |
|
|
.sel_o (arbiter_wbmreader_sel),
|
| 731 |
|
|
.dat_i (wbmreader_arbiter_data),
|
| 732 |
|
|
.ack_i (wbmreader_arbiter_ack),
|
| 733 |
|
|
// Interface against masters (clip)
|
| 734 |
|
|
.m0_read_request_i (clip_wbmreader_z_request),
|
| 735 |
|
|
.m0_addr_i (clip_wbmreader_z_addr),
|
| 736 |
|
|
.m0_sel_i (clip_wbmreader_z_sel),
|
| 737 |
|
|
.m0_dat_o (wbmreader_clip_z_data),
|
| 738 |
|
|
.m0_ack_o (wbmreader_clip_z_ack),
|
| 739 |
|
|
// Interface against masters (fragment processor)
|
| 740 |
|
|
.m1_read_request_i (fragment_wbmreader_texture_request),
|
| 741 |
|
|
.m1_addr_i (fragment_wbmreader_texture_addr),
|
| 742 |
|
|
.m1_sel_i (fragment_wbmreader_texture_sel),
|
| 743 |
|
|
.m1_dat_o (wbmreader_fragment_texture_data),
|
| 744 |
|
|
.m1_ack_o (wbmreader_fragment_texture_ack),
|
| 745 |
|
|
// Interface against masters (blender)
|
| 746 |
|
|
.m2_read_request_i (blender_wbmreader_target_request),
|
| 747 |
|
|
.m2_addr_i (blender_wbmreader_target_addr),
|
| 748 |
|
|
.m2_sel_i (blender_wbmreader_target_sel),
|
| 749 |
|
|
.m2_dat_o (wbmreader_blender_target_data),
|
| 750 |
|
|
.m2_ack_o (wbmreader_blender_target_ack)
|
| 751 |
|
|
);
|
| 752 |
|
|
|
| 753 |
|
|
// Instansiate wishbone master interface (read only for textures)
|
| 754 |
|
|
gfx_wbm_read wbm_reader (
|
| 755 |
|
|
.clk_i (wb_clk_i),
|
| 756 |
|
|
.rst_i (wb_rst_i),
|
| 757 |
|
|
.cyc_o (wbm_read_cyc_o),
|
| 758 |
|
|
.stb_o (wbm_read_stb_o),
|
| 759 |
|
|
.cti_o (wbm_read_cti_o),
|
| 760 |
|
|
.bte_o (wbm_read_bte_o),
|
| 761 |
|
|
.we_o (wbm_read_we_o),
|
| 762 |
|
|
.adr_o (wbm_read_adr_o),
|
| 763 |
|
|
.sel_o (wbm_read_sel_o),
|
| 764 |
|
|
.ack_i (wbm_read_ack_i),
|
| 765 |
|
|
.err_i (wbm_read_err_i),
|
| 766 |
|
|
.dat_i (wbm_read_dat_i),
|
| 767 |
|
|
.sint_o (wbmreader_sint),
|
| 768 |
|
|
|
| 769 |
|
|
// send ack to renderer when done writing to memory.
|
| 770 |
|
|
.read_request_i (arbiter_wbmreader_request),
|
| 771 |
|
|
.texture_addr_i (arbiter_wbmreader_addr),
|
| 772 |
|
|
.texture_sel_i (arbiter_wbmreader_sel),
|
| 773 |
|
|
.texture_dat_o (wbmreader_arbiter_data),
|
| 774 |
|
|
.texture_data_ack (wbmreader_arbiter_ack)
|
| 775 |
|
|
);
|
| 776 |
|
|
|
| 777 |
|
|
endmodule
|
| 778 |
|
|
|