minor update
This commit is contained in:
21
hw/rtl/libs/VX_sat_fx.v
Normal file
21
hw/rtl/libs/VX_sat_fx.v
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
`include "VX_platform.vh"
|
||||||
|
|
||||||
|
module VX_sat_fx #(
|
||||||
|
parameter IN_W = 1,
|
||||||
|
parameter OUT_W = 1,
|
||||||
|
parameter MODEL = 1
|
||||||
|
) (
|
||||||
|
input wire [IN_W-1:0] data_in,
|
||||||
|
output wire [OUT_W-1:0] data_out
|
||||||
|
);
|
||||||
|
`STATIC_ASSERT(((OUT_W+1) < IN_W), ("invalid parameter"))
|
||||||
|
|
||||||
|
if (MODEL == 1) begin
|
||||||
|
assign data_out = data_in[IN_W-1] ? OUT_W'(0) : ((data_in > {OUT_W{1'b1}}) ? {OUT_W{1'b1}} : OUT_W'(data_in));
|
||||||
|
end else begin
|
||||||
|
wire [OUT_W-1:0] underflow_mask = {OUT_W{~data_in[IN_W-1]}};
|
||||||
|
wire [OUT_W-1:0] overflow_mask = {OUT_W{(| data_in[IN_W-2:OUT_W])}};
|
||||||
|
assign data_out = (data_in[OUT_W-1:0] | overflow_mask) & underflow_mask;
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
@@ -9,8 +9,6 @@
|
|||||||
`define FIXED_HALF (`FIXED_ONE >> 1)
|
`define FIXED_HALF (`FIXED_ONE >> 1)
|
||||||
`define FIXED_MASK (`FIXED_ONE - 1)
|
`define FIXED_MASK (`FIXED_ONE - 1)
|
||||||
|
|
||||||
`define CLAMP(x,lo,hi) (($signed(x) < $signed(lo)) ? lo : ((x > hi) ? hi : x))
|
|
||||||
|
|
||||||
`define TEX_ADDR_BITS 32
|
`define TEX_ADDR_BITS 32
|
||||||
`define TEX_FORMAT_BITS 3
|
`define TEX_FORMAT_BITS 3
|
||||||
`define TEX_WRAP_BITS 2
|
`define TEX_WRAP_BITS 2
|
||||||
|
|||||||
@@ -12,14 +12,20 @@ module VX_tex_wrap #(
|
|||||||
|
|
||||||
reg [`FIXED_FRAC-1:0] coord_r;
|
reg [`FIXED_FRAC-1:0] coord_r;
|
||||||
|
|
||||||
wire [31:0] clamp = `CLAMP(coord_i, 0, `FIXED_MASK);
|
wire [`FIXED_FRAC-1:0] clamp;
|
||||||
|
|
||||||
`UNUSED_VAR (clamp)
|
VX_sat_fx #(
|
||||||
|
.IN_W (32),
|
||||||
|
.OUT_W (`FIXED_FRAC)
|
||||||
|
) sat_fx (
|
||||||
|
.data_in (coord_i),
|
||||||
|
.data_out (clamp)
|
||||||
|
);
|
||||||
|
|
||||||
always @(*) begin
|
always @(*) begin
|
||||||
case (wrap_i)
|
case (wrap_i)
|
||||||
`TEX_WRAP_CLAMP:
|
`TEX_WRAP_CLAMP:
|
||||||
coord_r = clamp[`FIXED_FRAC-1:0];
|
coord_r = clamp;
|
||||||
`TEX_WRAP_MIRROR:
|
`TEX_WRAP_MIRROR:
|
||||||
coord_r = coord_i[`FIXED_FRAC-1:0] ^ {`FIXED_FRAC{coord_i[`FIXED_FRAC]}};
|
coord_r = coord_i[`FIXED_FRAC-1:0] ^ {`FIXED_FRAC{coord_i[`FIXED_FRAC]}};
|
||||||
default: //`TEX_WRAP_REPEAT
|
default: //`TEX_WRAP_REPEAT
|
||||||
|
|||||||
Reference in New Issue
Block a user