//=======================================================================
|
//=======================================================================
|
// Project Monophony
|
// Project Monophony
|
// Wire-Frame 3D Graphics Accelerator IP Core
|
// Wire-Frame 3D Graphics Accelerator IP Core
|
//
|
//
|
// File:
|
// File:
|
// simple_triangle.v
|
// simple_triangle.v
|
//
|
//
|
// Abstract:
|
// Abstract:
|
// simple cube rendering
|
// simple cube rendering
|
//
|
//
|
// Author:
|
// Author:
|
// Kenji Ishimaru (info.wf3d@gmail.com)
|
// Kenji Ishimaru (info.info.wf3d@gmail.com)
|
//
|
//
|
//======================================================================
|
//======================================================================
|
//
|
//
|
// Copyright (c) 2015, Kenji Ishimaru
|
// Copyright (c) 2015, Kenji Ishimaru
|
// All rights reserved.
|
// All rights reserved.
|
//
|
//
|
// Redistribution and use in source and binary forms, with or without
|
// Redistribution and use in source and binary forms, with or without
|
// modification, are permitted provided that the following conditions are met:
|
// modification, are permitted provided that the following conditions are met:
|
//
|
//
|
// -Redistributions of source code must retain the above copyright notice,
|
// -Redistributions of source code must retain the above copyright notice,
|
// this list of conditions and the following disclaimer.
|
// this list of conditions and the following disclaimer.
|
// -Redistributions in binary form must reproduce the above copyright notice,
|
// -Redistributions in binary form must reproduce the above copyright notice,
|
// this list of conditions and the following disclaimer in the documentation
|
// this list of conditions and the following disclaimer in the documentation
|
// and/or other materials provided with the distribution.
|
// and/or other materials provided with the distribution.
|
//
|
//
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
//
|
//
|
// Revision History
|
// Revision History
|
|
|
`timescale 1ns/1ns
|
`timescale 1ns/1ns
|
`include "fm_3d_define.v"
|
`include "fm_3d_define.v"
|
module top();
|
module top();
|
|
|
`define VERBOSE
|
`define VERBOSE
|
//`define WAVE_OUT
|
//`define WAVE_OUT
|
`ifdef D3D_WISHBONE
|
`ifdef D3D_WISHBONE
|
`include "tb_instance_wb.v"
|
`include "tb_instance_wb.v"
|
`else
|
`else
|
`include "tb_instance.v"
|
`include "tb_instance.v"
|
`endif
|
`endif
|
`include "tb_init.v"
|
`include "tb_init.v"
|
`include "tb_task.v"
|
`include "tb_task.v"
|
|
|
`define PP_BASE_ADDR 'h0
|
`define PP_BASE_ADDR 'h0
|
|
|
`ifdef WAVE_OUT
|
`ifdef WAVE_OUT
|
initial begin
|
initial begin
|
$dumpvars;
|
$dumpvars;
|
end
|
end
|
`endif
|
`endif
|
|
|
reg [31:0] rd;
|
reg [31:0] rd;
|
|
|
// VGA
|
// VGA
|
localparam P_SCREEN_WIDTH=640;
|
localparam P_SCREEN_WIDTH=640;
|
localparam P_SCREEN_HEIGHT=480;
|
localparam P_SCREEN_HEIGHT=480;
|
// SVGA
|
// SVGA
|
//localparam P_SCREEN_WIDTH=800;
|
//localparam P_SCREEN_WIDTH=800;
|
//localparam P_SCREEN_HEIGHT=600;
|
//localparam P_SCREEN_HEIGHT=600;
|
// XGA
|
// XGA
|
//localparam P_SCREEN_WIDTH=1024;
|
//localparam P_SCREEN_WIDTH=1024;
|
//localparam P_SCREEN_HEIGHT=768;
|
//localparam P_SCREEN_HEIGHT=768;
|
// SXGA
|
// SXGA
|
//localparam P_SCREEN_WIDTH=1280;
|
//localparam P_SCREEN_WIDTH=1280;
|
//localparam P_SCREEN_HEIGHT=1024;
|
//localparam P_SCREEN_HEIGHT=1024;
|
// UXGA
|
// UXGA
|
//localparam P_SCREEN_WIDTH=1600;
|
//localparam P_SCREEN_WIDTH=1600;
|
//localparam P_SCREEN_HEIGHT=1200;
|
//localparam P_SCREEN_HEIGHT=1200;
|
// QXGA
|
// QXGA
|
//localparam P_SCREEN_WIDTH=2048;
|
//localparam P_SCREEN_WIDTH=2048;
|
//localparam P_SCREEN_HEIGHT=1536;
|
//localparam P_SCREEN_HEIGHT=1536;
|
|
|
|
|
localparam P_FB_TOP_ADDR='h8_0000;
|
localparam P_FB_TOP_ADDR='h8_0000;
|
|
|
|
|
/***********************************************
|
/***********************************************
|
Main test routine
|
Main test routine
|
***********************************************/
|
***********************************************/
|
|
|
integer i,j;
|
integer i,j;
|
integer pm;
|
integer pm;
|
initial pm = 0;
|
initial pm = 0;
|
|
|
initial begin
|
initial begin
|
reset;
|
reset;
|
repeat (100) @(posedge clk_core);
|
repeat (100) @(posedge clk_core);
|
for (i=0;i<3;i=i+1) begin
|
for (i=0;i<3;i=i+1) begin
|
for (j=0;j<3;j=j+1) begin
|
for (j=0;j<3;j=j+1) begin
|
render_triangle(j,i);
|
render_triangle(j,i);
|
end
|
end
|
end
|
end
|
save_frame_buffer(P_FB_TOP_ADDR, P_SCREEN_WIDTH,P_SCREEN_HEIGHT,"frame_buffer.dat");
|
save_frame_buffer(P_FB_TOP_ADDR, P_SCREEN_WIDTH,P_SCREEN_HEIGHT,"frame_buffer.dat");
|
repeat (100) @(posedge clk_core);
|
repeat (100) @(posedge clk_core);
|
$finish;
|
$finish;
|
end
|
end
|
|
|
|
|
task reset;
|
task reset;
|
begin
|
begin
|
rst_x = 0;
|
rst_x = 0;
|
repeat (10) @(posedge clk_core);
|
repeat (10) @(posedge clk_core);
|
@(negedge clk_core);
|
@(negedge clk_core);
|
rst_x = 1;
|
rst_x = 1;
|
@(posedge clk_core);
|
@(posedge clk_core);
|
end
|
end
|
endtask
|
endtask
|
|
|
task render_triangle;
|
task render_triangle;
|
input [1:0] x_pos;
|
input [1:0] x_pos;
|
input [1:0] y_pos;
|
input [1:0] y_pos;
|
real x_bias;
|
real x_bias;
|
real y_bias;
|
real y_bias;
|
real z_bias;
|
real z_bias;
|
reg [31:0] r_32;
|
reg [31:0] r_32;
|
reg [21:0] r_22;
|
reg [21:0] r_22;
|
begin
|
begin
|
reg_write('h08,'hf,'h000_0000); // DMA top address
|
reg_write('h08,'hf,'h000_0000); // DMA top address
|
$to_float32(rd,2.79903817);
|
$to_float32(rd,2.79903817);
|
reg_write('h10,'hf,rd); // m00
|
reg_write('h10,'hf,rd); // m00
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
reg_write('h14,'hf,rd); // m01
|
reg_write('h14,'hf,rd); // m01
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
reg_write('h18,'hf,rd); // m02
|
reg_write('h18,'hf,rd); // m02
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
reg_write('h1c,'hf,rd); // m03
|
reg_write('h1c,'hf,rd); // m03
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
reg_write('h20,'hf,rd); // m10
|
reg_write('h20,'hf,rd); // m10
|
$to_float32(rd,3.73205090);
|
$to_float32(rd,3.73205090);
|
reg_write('h24,'hf,rd); // m11
|
reg_write('h24,'hf,rd); // m11
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
reg_write('h28,'hf,rd); // m12
|
reg_write('h28,'hf,rd); // m12
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
reg_write('h2c,'hf,rd); // m13
|
reg_write('h2c,'hf,rd); // m13
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
reg_write('h30,'hf,rd); // m20
|
reg_write('h30,'hf,rd); // m20
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
reg_write('h34,'hf,rd); // m21
|
reg_write('h34,'hf,rd); // m21
|
$to_float32(rd,-1.02020204);
|
$to_float32(rd,-1.02020204);
|
reg_write('h38,'hf,rd); // m22
|
reg_write('h38,'hf,rd); // m22
|
$to_float32(rd,1.04040408);
|
$to_float32(rd,1.04040408);
|
reg_write('h3c,'hf,rd); // m23
|
reg_write('h3c,'hf,rd); // m23
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
reg_write('h40,'hf,rd); // m30
|
reg_write('h40,'hf,rd); // m30
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
reg_write('h44,'hf,rd); // m31
|
reg_write('h44,'hf,rd); // m31
|
$to_float32(rd,-1.00000000);
|
$to_float32(rd,-1.00000000);
|
reg_write('h48,'hf,rd); // m32
|
reg_write('h48,'hf,rd); // m32
|
$to_float32(rd,3.0);
|
$to_float32(rd,3.0);
|
reg_write('h4c,'hf,rd); // m33
|
reg_write('h4c,'hf,rd); // m33
|
reg_write('h64,'hf,P_FB_TOP_ADDR); // Pixel top address
|
reg_write('h64,'hf,P_FB_TOP_ADDR); // Pixel top address
|
reg_write('h68,'hf,'hff); // Pixel color
|
reg_write('h68,'hf,'hff); // Pixel color
|
|
|
// screen width/height
|
// screen width/height
|
$to_float32(rd,P_SCREEN_WIDTH);
|
$to_float32(rd,P_SCREEN_WIDTH);
|
reg_write('h50,'hf,rd); // Screen Width (Floating point)
|
reg_write('h50,'hf,rd); // Screen Width (Floating point)
|
$to_float32(rd,P_SCREEN_HEIGHT);
|
$to_float32(rd,P_SCREEN_HEIGHT);
|
reg_write('h54,'hf,rd); // Screen Height (Floating point)
|
reg_write('h54,'hf,rd); // Screen Height (Floating point)
|
|
|
reg_write('h58,'hf,P_SCREEN_WIDTH-1); // Screen Width-1 (Integer)
|
reg_write('h58,'hf,P_SCREEN_WIDTH-1); // Screen Width-1 (Integer)
|
reg_write('h5c,'hf,P_SCREEN_HEIGHT-1); // Screen Width-1 (Integer)
|
reg_write('h5c,'hf,P_SCREEN_HEIGHT-1); // Screen Width-1 (Integer)
|
reg_write('h60,'hf,P_SCREEN_WIDTH); // Screen Width (Integer)
|
reg_write('h60,'hf,P_SCREEN_WIDTH); // Screen Width (Integer)
|
// simple test
|
// simple test
|
x_bias = 0.0;
|
x_bias = 0.0;
|
y_bias = 0.0;
|
y_bias = 0.0;
|
z_bias = 0.0;
|
z_bias = 0.0;
|
// bias
|
// bias
|
case (x_pos)
|
case (x_pos)
|
'd0: x_bias = -0.7;
|
'd0: x_bias = -0.7;
|
'd1: x_bias = 0.0;
|
'd1: x_bias = 0.0;
|
'd2: x_bias = 0.7;
|
'd2: x_bias = 0.7;
|
endcase
|
endcase
|
case (y_pos)
|
case (y_pos)
|
'd0: y_bias = -0.7;
|
'd0: y_bias = -0.7;
|
'd1: y_bias = 0.0;
|
'd1: y_bias = 0.0;
|
'd2: y_bias = 0.7;
|
'd2: y_bias = 0.7;
|
endcase
|
endcase
|
// pixel color RGB = 2:3:3
|
// pixel color RGB = 2:3:3
|
case (y_pos)
|
case (y_pos)
|
'd0: reg_write('h68,'hf,'h0c0); // R y-flip:bit8
|
'd0: reg_write('h68,'hf,'h0c0); // R y-flip:bit8
|
'd1: reg_write('h68,'hf,'h038); // G
|
'd1: reg_write('h68,'hf,'h038); // G
|
'd2: reg_write('h68,'hf,'h007); // B
|
'd2: reg_write('h68,'hf,'h007); // B
|
endcase
|
endcase
|
|
|
|
|
pm = 0;
|
pm = 0;
|
|
|
// triangle0
|
// triangle0
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
// triangle1
|
// triangle1
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
// triangle2
|
// triangle2
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
// triangle3
|
// triangle3
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
// triangle4
|
// triangle4
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
// triangle5
|
// triangle5
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
// triangle6
|
// triangle6
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
// triangle7
|
// triangle7
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
// triangle8
|
// triangle8
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
// triangle9
|
// triangle9
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25);
|
$to_float32(rd,0.25);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
// triangle10
|
// triangle10
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
// triangle11
|
// triangle11
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+y_bias);
|
$to_float32(rd,0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.25+x_bias);
|
$to_float32(rd,0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+x_bias);
|
$to_float32(rd,-0.25+x_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,-0.25+y_bias);
|
$to_float32(rd,-0.25+y_bias);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
$to_float32(rd,0.0);
|
$to_float32(rd,0.0);
|
$display("rd %h",rd);
|
$display("rd %h",rd);
|
u_sram_slave.u_memory.mem[pm] = rd;
|
u_sram_slave.u_memory.mem[pm] = rd;
|
pm = pm + 1;
|
pm = pm + 1;
|
reg_write('h0c,'hf,12*3*3); // DMA size 12triangle *3vertex*3
|
reg_write('h0c,'hf,12*3*3); // DMA size 12triangle *3vertex*3
|
reg_write('h04,'hf,'h10); // DMA mask
|
reg_write('h04,'hf,'h10); // DMA mask
|
reg_write('h01,'hf,1); // DMA start
|
reg_write('h01,'hf,1); // DMA start
|
while (!o_int)
|
while (!o_int)
|
@(posedge clk_core);
|
@(posedge clk_core);
|
reg_write('h04,'hf,0); // int clear
|
reg_write('h04,'hf,0); // int clear
|
end
|
end
|
endtask
|
endtask
|
|
|
|
|
task save_frame_buffer;
|
task save_frame_buffer;
|
input [25:0] adrs;
|
input [25:0] adrs;
|
input [15:0] width;
|
input [15:0] width;
|
input [15:0] height;
|
input [15:0] height;
|
input [64*8:1] file_name;
|
input [64*8:1] file_name;
|
integer x;
|
integer x;
|
integer y;
|
integer y;
|
integer fp;
|
integer fp;
|
reg [1:0] stat;
|
reg [1:0] stat;
|
reg hw_sel;
|
reg hw_sel;
|
reg [1:0] bank_sel;
|
reg [1:0] bank_sel;
|
reg [25:0] adr_pix;
|
reg [25:0] adr_pix;
|
|
|
reg [31:0] tmp_data32;
|
reg [31:0] tmp_data32;
|
reg [7:0] tmp_data;
|
reg [7:0] tmp_data;
|
reg [7:0] cr;
|
reg [7:0] cr;
|
reg [7:0] cg;
|
reg [7:0] cg;
|
reg [7:0] cb;
|
reg [7:0] cb;
|
reg [7:0] ca;
|
reg [7:0] ca;
|
begin
|
begin
|
$display("saving rendering result...");
|
$display("saving rendering result...");
|
fp = $fopen(file_name);
|
fp = $fopen(file_name);
|
for (y = 0; y < height; y = y + 1) begin
|
for (y = 0; y < height; y = y + 1) begin
|
for (x = 0; x < width; x = x + 1) begin
|
for (x = 0; x < width; x = x + 1) begin
|
adr_pix = adrs + width * y + x; // per 8bit (per pixel)
|
adr_pix = adrs + width * y + x; // per 8bit (per pixel)
|
|
|
tmp_data32 = top.u_sram_slave.u_memory.mem[adr_pix[25:2]];
|
tmp_data32 = top.u_sram_slave.u_memory.mem[adr_pix[25:2]];
|
case (adr_pix[1:0])
|
case (adr_pix[1:0])
|
2'b00:tmp_data = tmp_data32[7:0];
|
2'b00:tmp_data = tmp_data32[7:0];
|
2'b01:tmp_data = tmp_data32[15:8];
|
2'b01:tmp_data = tmp_data32[15:8];
|
2'b10:tmp_data = tmp_data32[23:16];
|
2'b10:tmp_data = tmp_data32[23:16];
|
2'b11:tmp_data = tmp_data32[31:24];
|
2'b11:tmp_data = tmp_data32[31:24];
|
endcase // case (adr_pix[1:0])
|
endcase // case (adr_pix[1:0])
|
//RGB = 2:3:3
|
//RGB = 2:3:3
|
cr = {4{tmp_data[7:6]}};
|
cr = {4{tmp_data[7:6]}};
|
cg = {tmp_data[5:3],tmp_data[5:3],tmp_data[5:2]};
|
cg = {tmp_data[5:3],tmp_data[5:3],tmp_data[5:2]};
|
cb = {tmp_data[2:0],tmp_data[2:0],tmp_data[2:1]};
|
cb = {tmp_data[2:0],tmp_data[2:0],tmp_data[2:1]};
|
ca = 8'hff;
|
ca = 8'hff;
|
$fwrite(fp,"%h\n", {ca,cb,cg,cr});
|
$fwrite(fp,"%h\n", {ca,cb,cg,cr});
|
end
|
end
|
end
|
end
|
$fclose(fp);
|
$fclose(fp);
|
end
|
end
|
endtask
|
endtask
|
endmodule
|
endmodule
|
|
|