blob: af980ed5d4393fd80d43f11ed90cd35af4d86fdb [file] [log] [blame]
//****************************************************************************
//
// Copyright 2017-2023 Vivante Corporation
//
// Portions Copyright (c) 2003 Silicon Image GmbH, used with permission
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//****************************************************************************
// Auto-generated file on 11/03/2023.
//
//****************************************************************************
module vsisp_self_vert_scale
(
clk,
reset_n,
soft_rst,
cfg_upd,
gen_cfg_upd,
scale_v_en,
scale_v_up,
scale_v,
phase_v,
scale_v_lut_ad,
scale_v_lut,
scale_v_en_sdw,
scale_v_up_sdw,
scale_v_sdw,
phase_v_sdw,
in_pix_data,
in_val,
in_h_end,
in_v_end,
in_cfg_upd,
in_ack,
out_pix_data,
out_val,
out_h_end,
out_v_end,
out_cfg_upd,
out_ack,
ram_wr_n,
ram_cs_n,
ram_addr,
ram_wdata,
ram_rdata);
`include "vsisp_self_resize.vh"
input clk;
input reset_n;
input soft_rst;
input cfg_upd;
input gen_cfg_upd;
input scale_v_en;
input scale_v_up;
input [c_scale_v - 1:0] scale_v;
input [c_phase_v - 1:0] phase_v;
output [c_scale_lut_addr - 1:0] scale_v_lut_ad;
wire [c_scale_lut_addr - 1:0] scale_v_lut_ad;
input [c_scale_lut - 1:0] scale_v_lut;
input [7:0] in_pix_data;
input in_val;
input in_h_end;
input in_v_end;
output in_ack;
reg in_ack;
input in_cfg_upd;
output [7:0] out_pix_data;
reg [7:0] out_pix_data;
output out_val;
reg out_val;
output out_h_end;
reg out_h_end;
output out_v_end;
reg out_v_end;
output out_cfg_upd;
input out_ack;
output scale_v_en_sdw;
reg scale_v_en_sdw;
output scale_v_up_sdw;
reg scale_v_up_sdw;
output [c_scale_v - 1:0] scale_v_sdw;
reg [c_scale_v - 1:0] scale_v_sdw;
output [c_scale_v - 1:0] phase_v_sdw;
reg [c_scale_v - 1:0] phase_v_sdw;
output ram_wr_n;
output ram_cs_n;
output [c_ram_width-1:0] ram_addr;
reg [c_ram_width-1:0] ram_addr;
output [31:0] ram_wdata;
reg [31:0] ram_wdata;
input [31:0] ram_rdata;
reg viv_s0;
reg viv_s1;
reg viv_s2;
reg viv_s3;
reg viv_s4;
reg viv_s5;
reg viv_s6;
reg viv_s7;
reg [1:0] viv_s8;
parameter c_idle = 2'b00;
parameter c_second = 2'b01;
parameter c_between = 2'b10;
reg viv_s9;
reg viv_s10;
reg viv_s11;
reg viv_s12;
reg viv_s13;
reg [31:0] viv_s14;
reg viv_s15;
reg viv_s16;
reg [7:0] viv_s17;
reg viv_s18;
reg viv_s19;
reg viv_s20;
reg viv_s21;
reg [7:0] viv_s22;
reg viv_s23;
reg viv_s24;
reg viv_s25;
reg viv_s26;
reg viv_s27;
reg viv_s28;
reg viv_s29;
reg [15:0] viv_s30;
reg [15:0] viv_s31;
reg [c_ram_width:0] viv_s32;
reg [c_ram_width-1:0] viv_s33;
reg [c_ram_width-1:0] viv_s34;
reg [c_ram_width-1:0] viv_s35;
reg [c_ram_width-1:0] viv_s36;
reg [c_ram_width:0] viv_s37;
reg [31:0] viv_s38;
wire [(c_scale_v * 2) - 1:0] viv_s39;
wire [(c_scale_v * 2) - 1:0] viv_s40;
wire [(c_scale_v * 2) - 1:0] viv_s41;
wire [(c_scale_v * 2) - 1:0] viv_s42;
wire [c_scale_v - 1:0] viv_s43;
reg [c_scale_v - 1:0] viv_s44;
reg [c_scale_v:0] viv_s45;
wire [c_scale_v:0] viv_s46;
wire [c_scale_v - 1:0] viv_s47;
reg [c_scale_v - 1:0] viv_s48;
reg [c_scale_v - 1:0] viv_s49;
reg [c_scale_v - 1:0] viv_s50;
reg [c_scale_v - 1:0] viv_s51;
wire [c_scale_v - 1:0] viv_s52;
wire [c_scale_v - 1:0] viv_s53;
wire [c_scale_v - 1:0] viv_s54;
wire [c_scale_v - 1:0] viv_s55;
wire [63:0] viv_s56;
wire [7:0] viv_s57;
wire [c_scale_v :0] viv_s58;
wire viv_s59;
reg [15:0] viv_s60;
reg [15:0] viv_s61;
reg [15:0] viv_s62;
reg [15:0] viv_s63;
reg [15:0] viv_s64;
reg [15:0] viv_s65;
reg [c_lbuf_v + 1:0] viv_s66;
reg viv_s67;
reg viv_s68;
reg viv_s69;
reg viv_s70;
reg [c_scale_h - 1:0] viv_s71;
reg [1:0] viv_s72;
reg viv_s73;
reg viv_s74;
reg [7:0] viv_s75;
reg [9:0] viv_s76;
reg viv_s77;
reg viv_s78;
reg viv_s79;
reg viv_s80;
reg viv_s81;
reg viv_s82;
reg [c_ram_width:0] viv_s83;
reg [c_ram_width-1:0] viv_s84;
reg [c_ram_width-1:0] viv_s85;
reg [c_ram_width-1:0] viv_s86;
reg [c_ram_width:0] viv_s87;
reg [7:0] viv_s88;
reg viv_s89;
reg viv_s90;
reg viv_s91;
reg viv_s92;
reg [7:0] viv_s93;
reg viv_s94;
reg viv_s95;
reg viv_s96;
reg viv_s97;
reg viv_s98;
reg viv_s99;
reg viv_s100;
reg viv_s101;
reg viv_s102;
reg viv_s103;
reg viv_s104;
wire viv_s105;
wire viv_s106;
wire viv_s107;
wire viv_s108;
wire viv_s109;
wire viv_s110;
reg [19:0] viv_s111;
reg [19:0] viv_s112;
assign viv_s105 = (out_val & out_h_end & out_v_end & out_ack & (out_cfg_upd || gen_cfg_upd)) |
cfg_upd;
assign viv_s106 = viv_s89 & viv_s97 & viv_s90 & viv_s91;
assign viv_s107 = viv_s94 & viv_s92;
assign viv_s108 = viv_s79 & viv_s97;
assign viv_s109 = viv_s9 & viv_s10;
assign viv_s110 = (viv_s45[c_scale_v] & viv_s46[c_scale_v]);
assign viv_s47 = scale_v_sdw;
assign viv_s56 = 64'b0;
assign viv_s57 = 8'b0;
assign viv_s58 = viv_s45 - {1'b0, phase_v_sdw};
assign viv_s59 = viv_s45[c_scale_v] & viv_s58[c_scale_v]
& |(viv_s58[c_scale_v-1:0]);
assign viv_s46 = viv_s45[c_scale_v-1:0] + viv_s47;
always @(posedge clk or negedge reset_n)
begin : proc_shadow
if (~reset_n)
begin
scale_v_en_sdw <= 1'b0;
scale_v_up_sdw <= 1'b0;
scale_v_sdw <= {c_scale_v{1'b0}};
phase_v_sdw <= {c_scale_v{1'b0}};
end
else
begin
if (viv_s105)
begin
scale_v_en_sdw <= scale_v_en;
scale_v_up_sdw <= scale_v_up;
scale_v_sdw <= scale_v;
phase_v_sdw <= phase_v;
end
end
end
always @(scale_v_en_sdw or in_pix_data or in_val or in_h_end or in_v_end or
viv_s21 or viv_s22 or viv_s23 or viv_s24 or
viv_s25 or out_ack or in_cfg_upd or viv_s99)
begin : proc_bypass
if (scale_v_en_sdw)
begin
viv_s17 = (in_pix_data[7:0]);
viv_s18 = in_val;
viv_s19 = in_h_end;
viv_s20 = in_v_end;
viv_s98 = in_cfg_upd;
in_ack = viv_s21;
out_pix_data = viv_s22;
out_val = viv_s23;
out_h_end = viv_s24;
out_v_end = viv_s25;
viv_s103 = viv_s99;
viv_s26 = out_ack;
end
else
begin
viv_s17 = 8'b0;
viv_s18 = 1'b0;
viv_s19 = 1'b0;
viv_s20 = 1'b0;
viv_s98 = 1'b0;
viv_s26 = 1'b0;
out_pix_data = in_pix_data;
out_val = in_val;
out_h_end = in_h_end;
out_v_end = in_v_end;
viv_s103 = in_cfg_upd;
in_ack = out_ack;
end
end
assign out_cfg_upd = viv_s103;
always @(viv_s17 or viv_s18 or viv_s19 or
viv_s20 or viv_s92 or viv_s27 or viv_s4 or viv_s98)
begin : proc_even_width
viv_s93 = viv_s17;
viv_s94 = viv_s18;
viv_s96 = viv_s20;
viv_s102 = viv_s98;
if (~viv_s27)
begin
if (viv_s18 & viv_s19 & ~viv_s4)
begin
if (viv_s92)
begin
viv_s28 = 1'b1;
end
else
begin
viv_s28 = 1'b0;
end
viv_s21 = 1'b0;
viv_s95 = 1'b0;
viv_s102 = 1'b0;
end
else
begin
viv_s28 = 1'b0;
viv_s21 = viv_s92;
viv_s95 = viv_s19;
viv_s102 = viv_s98;
end
end
else
begin
viv_s28 = ~viv_s92;
viv_s21 = viv_s92;
viv_s95 = viv_s19;
viv_s102 = viv_s98;
end
end
reg viv_s113;
always @(posedge clk or negedge reset_n) begin
if(~reset_n) begin
viv_s113 <= 1'b0;
end
else begin
if(viv_s102) begin
viv_s113 <= 1'b1;
end
if(viv_s89 & viv_s97 & viv_s90 & viv_s91) begin
viv_s113 <= 1'b0;
end
end
end
wire viv_s114 = viv_s102 || viv_s113;
always @(posedge clk or negedge reset_n)
begin : proc_add_pel_regs
if (~reset_n)
begin
viv_s27 <= 1'b0;
viv_s29 <= 1'b0;
end
else
begin
if (soft_rst)
begin
viv_s27 <= 1'b0;
viv_s29 <= 1'b0;
end
else
begin
viv_s27 <= viv_s28;
if (viv_s28)
begin
viv_s29 <= 1'b1;
end
if (viv_s106)
begin
viv_s29 <= 1'b0;
end
end
end
end
always @(viv_s88 or viv_s91 or viv_s26 or viv_s89 or viv_s90 or
viv_s29 or viv_s33 or viv_s6 or viv_s101 or viv_s100)
begin : proc_odd_width
viv_s22 = viv_s88;
viv_s25 = viv_s91;
viv_s97 = viv_s26;
if (~viv_s29)
begin
viv_s23 = viv_s89;
viv_s24 = viv_s90;
viv_s99 = viv_s101;
end
else
begin
if ((viv_s33 == {c_ram_width{1'b0}}) & (viv_s6 == 1'b0))
begin
viv_s24 = viv_s89;
viv_s23 = viv_s89;
viv_s99 = viv_s100;
end
else
begin
viv_s24 = 1'b0;
viv_s23 = viv_s89 & ~viv_s90;
viv_s99 = 1'b0;
end
end
end
always @(viv_s90 or viv_s6 or viv_s108)
begin : proc_write_odd
if (viv_s108)
begin
if (viv_s90)
begin
viv_s74 = 1'b0;
end
else
begin
viv_s74 = ~viv_s6;
end
end
else
begin
viv_s74 = viv_s6;
end
end
always @(*)
begin : proc_calc
viv_s45 = ({1'b0, viv_s44}) + ({1'b0, viv_s47});
if (scale_v_up_sdw)
begin
viv_s48 = {viv_s56[c_scale_v - 1:10], viv_s30[7:0], 2'b00};
viv_s49 = viv_s43;
end
else
begin
if ((viv_s45[c_scale_v]) == 1'b1)
begin
viv_s48 = {viv_s56[c_scale_v - 1:10], viv_s93, 2'b00};
viv_s49 = viv_s45[c_scale_v - 1:0];
end
else
begin
viv_s48 = {viv_s56[c_scale_v - 1:10], viv_s93, 2'b00};
if (viv_s0)
viv_s49 = viv_s47+phase_v_sdw;
else
viv_s49 = viv_s47;
end
end
if (viv_s8 == c_between)
begin
viv_s50 = ({viv_s56[c_scale_v - 1:10], viv_s30[15:8], 2'b00});
viv_s51 = viv_s43;
end
else
begin
viv_s50 = ({viv_s56[c_scale_v - 1:10], viv_s93, 2'b00});
if (scale_v_up_sdw)
begin
viv_s51 = viv_s43;
end
else
begin
viv_s51 = viv_s44;
end
end
end
vsisp_self_vert_mult u_self_vert_mult
(
.a_y1(viv_s52),
.b_y1(viv_s53),
.a_y2(viv_s54),
.b_y2(viv_s55),
.mult_y1(viv_s41),
.mult_y2(viv_s42));
assign viv_s52 = viv_s48;
assign viv_s53 = viv_s49;
assign viv_s54 = viv_s50;
assign viv_s55 = viv_s51;
assign viv_s39 = {2'b0, viv_s41[(c_scale_v * 2) - 1:2]};
assign viv_s40 = {2'b0, viv_s42[(c_scale_v * 2) - 1:2]};
always @(posedge clk or negedge reset_n)
begin : proc_scale_regs
if (~reset_n)
begin
viv_s44 <= {c_scale_v{1'b0}};
viv_s4 <= 1'b0;
viv_s0 <= 1'b1;
viv_s1 <= 1'b1;
viv_s32 <= {c_ram_width+1{1'b0}};
viv_s37 <= c_max_hsize-1;
viv_s6 <= 1'b0;
viv_s8 <= c_idle;
viv_s2 <= 1'b0;
viv_s3 <= 1'b0;
viv_s88 <= 8'b0;
viv_s89 <= 1'b0;
viv_s79 <= 1'b0;
viv_s90 <= 1'b0;
viv_s91 <= 1'b0;
viv_s101 <= 1'b0;
viv_s31 <= 16'b0;
viv_s104 <= 1'b0;
viv_s111 <= 20'd0;
viv_s112 <= 20'd0;
end
else
begin
if (soft_rst)
begin
viv_s44 <= phase_v_sdw;
viv_s4 <= 1'b0;
viv_s0 <= 1'b1;
viv_s1 <= 1'b1;
viv_s32 <= {c_ram_width+1{1'b0}};
viv_s37 <= c_max_hsize-1;
viv_s6 <= 1'b0;
viv_s8 <= c_idle;
viv_s2 <= 1'b0;
viv_s3 <= 1'b0;
viv_s88 <= 8'b0;
viv_s89 <= 1'b0;
viv_s79 <= 1'b0;
viv_s90 <= 1'b0;
viv_s91 <= 1'b0;
viv_s101 <= 1'b0;
viv_s31 <= 16'b0;
viv_s104 <= 1'b0;
viv_s111 <= 20'd0;
viv_s112 <= 20'd0;
end
else
begin
viv_s4 <= viv_s82;
viv_s0 <= viv_s67;
viv_s1 <= viv_s68;
viv_s32 <= viv_s83;
viv_s37 <= viv_s87;
viv_s6 <= viv_s74;
viv_s8 <= viv_s72;
viv_s2 <= viv_s69;
viv_s3 <= viv_s70;
viv_s44 <= viv_s71;
if (viv_s105)
begin
viv_s44 <= phase_v;
end
else
begin
viv_s44 <= viv_s71;
end
viv_s88 <= viv_s75;
viv_s91 <= viv_s81;
viv_s90 <= viv_s80;
viv_s31 <= viv_s65;
viv_s101 <= viv_s100;
viv_s89 <= viv_s77;
viv_s79 <= viv_s78;
if (viv_s107) begin
viv_s104 <= viv_s96;
end
if (viv_s89 & viv_s97) begin
if (viv_s90) begin
viv_s112 <= 20'd0;
end else begin
viv_s112 <= viv_s112 + 20'd1;
end
end
if (viv_s89 & viv_s97 & viv_s90) begin
if (viv_s91) begin
viv_s111 <= 20'd0;
end else begin
viv_s111 <= viv_s111 + 20'd1;
end
end
end
end
end
always @(*)
begin : proc_scale
viv_s71 = viv_s44;
viv_s82 = viv_s4;
viv_s67 = viv_s0;
viv_s68 = viv_s1;
viv_s73 = viv_s97;
viv_s69 = viv_s2;
viv_s70 = viv_s3;
viv_s72 = viv_s8;
viv_s83 = viv_s32;
viv_s87 = viv_s37;
viv_s75 = viv_s88;
viv_s77 = viv_s89 & ~viv_s97;
viv_s78 = viv_s89 & ~viv_s97;
viv_s80 = viv_s90 & ~viv_s97;
viv_s81 = viv_s91 & ~(viv_s90 & viv_s97);
viv_s100 = viv_s101 & ~viv_s97;
viv_s65 = viv_s31;
viv_s76 = 10'b0;
viv_s66 = {c_lbuf_v + 2{1'b0}};
if (viv_s107) begin
viv_s82 = ~viv_s4;
end
case (viv_s8)
c_between :
begin
if (viv_s97)
begin
viv_s77 = 1'b1;
viv_s78 = 1'b1;
viv_s81 = 1'b0;
if (viv_s32 == viv_s37)
begin
viv_s80 = 1'b1;
end
else
begin
viv_s80 = 1'b0;
end
if (viv_s3 | (viv_s2 & ~(|viv_s44)))
viv_s76 = ({viv_s30[7:0],2'b00});
else
viv_s76 = viv_s39[(c_scale_v + 7):(c_scale_v - 2)]+
{viv_s30[15:8], 2'b00} -
viv_s40[(c_scale_v + 7):(c_scale_v - 2)];
viv_s75 = viv_s76[9:2];
if (viv_s2)
begin
viv_s81 = 1'b1;
viv_s65 = 16'b0;
if(viv_s80) begin
viv_s100 = viv_s114;
end
end
if (viv_s32 == viv_s37)
begin
viv_s83 = {c_ram_width+1{1'b0}};
if (viv_s2 == 1'b1)
begin
viv_s71 = phase_v_sdw;
viv_s72 = c_idle;
viv_s87 = c_max_hsize-1;
end
else begin
viv_s71 = viv_s45[c_scale_v - 1:0];
if (viv_s104)
if (viv_s3)
if (viv_s46 > {1'b0,phase_v_sdw})
viv_s69 = 1'b1;
else
viv_s69 = 1'b0;
else
if ((viv_s45[c_scale_v] | viv_s46[c_scale_v])
& (viv_s46[c_scale_v-1:0] > phase_v_sdw))
viv_s69 = 1'b1;
else
viv_s69 = 1'b0;
else
viv_s69 = 1'b0;
if (viv_s45[c_scale_v])
begin
if (viv_s104) begin
viv_s70 = 1'b1;
viv_s72 = c_between;
end else begin
viv_s72 = c_second;
end
end
else
begin
viv_s72 = c_between;
end
end
end
else
begin
viv_s83 = viv_s32 + 1'd1;
viv_s72 = c_between;
end
end
end
c_second :
begin
if (viv_s107)
begin
viv_s77 = 1'b1;
viv_s78 = 1'b1;
viv_s81 = 1'b0;
viv_s80 = viv_s95;
viv_s76 = viv_s40[(c_scale_v + 7):(c_scale_v - 2)] +
({viv_s30[7:0], 2'b00}) -
viv_s39[(c_scale_v + 7):(c_scale_v - 2)];
viv_s75 = viv_s76[9:2];
viv_s65[15:8] = viv_s30[7:0];
viv_s65[7:0] = viv_s93;
if (viv_s96 & viv_s59)
begin
viv_s81 = 1'b1;
viv_s65 = 16'b0;
if(viv_s80) begin
viv_s100 = viv_s114;
end
end
if (~viv_s95)
begin
viv_s83 = viv_s32 + 1'd1;
viv_s72 = c_second;
end
else
begin
viv_s83 = {c_ram_width+1{1'b0}};
viv_s87 = viv_s32;
if (viv_s96 &
(((viv_s45[c_scale_v] | viv_s46[c_scale_v]) &
(viv_s46[c_scale_v-1:0] > phase_v_sdw)) | viv_s110))
viv_s69 = 1'b1;
else
viv_s69 = 1'b0;
if (viv_s45[c_scale_v])
begin
if (viv_s2)
begin
viv_s71 = phase_v_sdw;
viv_s72 = c_idle;
viv_s87 = c_max_hsize-1;
end
else
begin
viv_s71 = viv_s45[c_scale_v - 1:0];
if (viv_s96 == 1'b1) begin
if (viv_s59 == 1'b1) begin
viv_s72 = c_idle;
end else begin
viv_s72 = c_between;
viv_s70 = 1'b1;
end
end else begin
viv_s72 = c_second;
end
end
end
else
begin
viv_s71 = viv_s45[c_scale_v - 1:0];
viv_s72 = c_between;
end
end
end
end
default :
begin
if (~scale_v_up_sdw)
begin
if (viv_s107)
begin
if ((viv_s45[c_scale_v]) | viv_s96)
begin
viv_s77 = 1'b1;
viv_s78 = 1'b1;
if(viv_s0) begin
viv_s76 = 10'h0 +
{viv_s93, 2'b10} -
viv_s40[c_scale_v + 7:c_scale_v - 2];
end else begin
viv_s76 = viv_s30[c_lbuf_v - 1:c_lbuf_v - 10] +
{viv_s93, 2'b10} -
viv_s40[c_scale_v + 7:c_scale_v - 2];
end
viv_s75 = viv_s76[9:2];
viv_s66 = viv_s39[c_scale_v + 7:c_scale_v - c_lbuf_v + 6];
viv_s65 = {viv_s56[15:c_lbuf_v], viv_s66[c_lbuf_v + 1:2]};
viv_s80 = viv_s95;
viv_s81 = viv_s96;
end
else
begin
if (viv_s0)
begin
viv_s66 = viv_s39[c_scale_v + 7: c_scale_v - c_lbuf_v + 6];
end
else
begin
viv_s66 = ({viv_s30[c_lbuf_v - 1:0], 2'b00}) +
viv_s39[c_scale_v + 7:c_scale_v - c_lbuf_v + 6];
end
viv_s65 = {viv_s56[15:c_lbuf_v], viv_s66[c_lbuf_v + 1:2]};
end
if (viv_s96)
begin
viv_s65 = 16'b0;
viv_s100 = viv_s102;
end
if (viv_s95)
begin
viv_s68 = 1'b1;
if (viv_s96)
begin
viv_s67 = 1'b1;
viv_s71 = phase_v_sdw;
end
else
begin
viv_s67 = 1'b0;
viv_s71 = viv_s45[c_scale_v - 1:0];
end
end
if (viv_s1 & ~viv_s95)
begin
viv_s68 = 1'b0;
end
end
end
else
begin
viv_s70 = 1'b0;
viv_s69 = 1'b0;
viv_s71 = phase_v_sdw;
if (viv_s107)
begin
viv_s78 = 1'b1;
viv_s77 = ~(|phase_v_sdw);
viv_s80 = viv_s95;
viv_s81 = viv_s96;
viv_s75 = viv_s93;
viv_s65[7:0] = viv_s93;
if (~viv_s95)
begin
viv_s72 = c_idle;
viv_s83 = viv_s32 + 1'd1;
end
else
begin
viv_s87 = viv_s32;
viv_s83 = {c_ram_width+1{1'b0}};
viv_s72 = c_second;
if (~(|phase_v_sdw))
viv_s71 = viv_s45[c_scale_v - 1:0];
end
end
end
end
endcase
end
always @(*)
begin : proc_outmode
if (~scale_v_up_sdw)
begin
viv_s7 = viv_s45[c_scale_v] | viv_s90 | viv_s96;
viv_s92 = viv_s73 | ~viv_s7;
end
else
begin
if (viv_s8 == c_between)
begin
viv_s7 = 1'b1;
end
else
begin
viv_s7 = 1'b0;
end
viv_s92 = viv_s73 & ~viv_s7;
end
end
always @(posedge clk or negedge reset_n)
begin : proc_write_ram_regs
if (~reset_n)
begin
viv_s14 <= 32'b0;
viv_s13 <= 1'b0;
viv_s35 <= (c_max_hsize/2)-1;
viv_s33 <= {c_ram_width{1'b0}};
viv_s34 <= {c_ram_width{1'b0}};
viv_s36 <= (c_max_hsize/2)-1;
viv_s60 <= 16'b0;
viv_s61 <= 16'b0;
viv_s64 <= 16'b0;
viv_s63 <= 16'b0;
viv_s62 <= 16'b0;
viv_s5 <= 1'b0;
viv_s9 <= 1'b0;
viv_s10 <= 1'b1;
viv_s11 <= 1'b1;
viv_s38 <= 32'b0;
viv_s12 <= 1'b0;
end
else
begin
if (soft_rst)
begin
viv_s14 <= 32'b0;
viv_s13 <= 1'b0;
viv_s35 <= (c_max_hsize/2)-1;
viv_s33 <= {c_ram_width{1'b0}};
viv_s34 <= {c_ram_width{1'b0}};
viv_s36 <= (c_max_hsize/2)-1;
viv_s60 <= 16'b0;
viv_s61 <= 16'b0;
viv_s64 <= 16'b0;
viv_s63 <= 16'b0;
viv_s62 <= 16'b0;
viv_s5 <= 1'b0;
viv_s9 <= 1'b0;
viv_s10 <= 1'b1;
viv_s11 <= 1'b1;
viv_s38 <= 32'b0;
viv_s12 <= 1'b0;
end
else
begin
viv_s13 <= 1'b0;
viv_s5 <= viv_s4;
viv_s9 <= viv_s94;
viv_s10 <= viv_s92;
viv_s11 <= viv_s97;
viv_s12 <= viv_s13;
if (~scale_v_up_sdw)
begin
viv_s33 <= viv_s84;
viv_s35 <= viv_s85;
viv_s36 <= viv_s86;
if (viv_s107)
begin
if (viv_s4)
begin
viv_s60 <= (viv_s31);
end
else
begin
viv_s61 <= (viv_s31);
end
end
if (viv_s109)
begin
if (~viv_s5)
begin
viv_s62 <= ram_rdata[31:16];
viv_s64 <= ram_rdata[15:0];
end
else
begin
viv_s63 <= viv_s64;
end
end
end
else
begin
case (viv_s8)
c_between :
begin
if (viv_s108)
begin
if (~viv_s6)
begin
viv_s34 <= viv_s33;
if (viv_s33 == viv_s36)
begin
viv_s33 <= {c_ram_width{1'b0}};
end
else
begin
viv_s33 <= viv_s33 + 1'd1;
end
end
end
end
c_second :
begin
if (viv_s4)
begin
if (viv_s107)
begin
viv_s13 <= 1'b1;
viv_s14 <= {viv_s60,
({viv_s30[7:0],
viv_s93})};
if (viv_s35 == viv_s36)
begin
viv_s35 <= {c_ram_width{1'b0}};
end
else
begin
viv_s35 <= viv_s35 + 1'd1;
end
viv_s34 <= viv_s33;
if (viv_s33 == viv_s36)
begin
viv_s33 <= {c_ram_width{1'b0}};
end
else
begin
viv_s33 <= viv_s33 + 1'd1;
end
end
end
else
begin
if (viv_s107)
begin
viv_s60 <= ({viv_s30[7:0],
viv_s93});
end
end
end
default :
begin
if (viv_s107)
begin
if (viv_s4)
begin
viv_s13 <= 1'b1;
viv_s14 <= {viv_s60,
viv_s57[7:0],
(viv_s93)};
if (viv_s35 == viv_s36)
begin
viv_s35 <= {c_ram_width{1'b0}};
end
else
begin
viv_s35 <= viv_s35 + 1'b1;
end
if (viv_s95)
begin
viv_s36 <= viv_s35 + 1'b1;
viv_s33 <= {c_ram_width{1'b0}}+1'b1;
viv_s34 <= viv_s33;
end
end
else
begin
viv_s60 <= {viv_s57[7:0],
(viv_s93)};
end
end
end
endcase
end
if (viv_s91 & viv_s90 & viv_s108)
begin
viv_s36 <= (c_max_hsize/2)-1;
viv_s33 <= {c_ram_width{1'b0}};
viv_s35 <= (c_max_hsize/2)-1;
end
if (viv_s6 & viv_s79 & viv_s11)
begin
viv_s38 <= ram_rdata;
end
end
end
end
always @(*)
begin : proc_ram
viv_s86 = viv_s36;
viv_s85 = viv_s35;
viv_s84 = viv_s33;
if (~scale_v_up_sdw)
begin
viv_s15 = scale_v_en_sdw & viv_s4;
viv_s16 = scale_v_en_sdw & viv_s94;
ram_wdata = ({viv_s60, viv_s61});
if (viv_s4 == 1'b0)
begin
ram_addr = viv_s33;
end
else
begin
ram_addr = viv_s35;
end
end
else
begin
viv_s16 = scale_v_en_sdw;
viv_s15 = viv_s13;
ram_wdata = viv_s14;
if (viv_s109 & viv_s5)
begin
ram_addr = viv_s35;
end
else
begin
if (viv_s97)
begin
ram_addr = viv_s33;
end
else
begin
ram_addr = viv_s34;
end
end
end
if (viv_s8 != c_between)
begin
if (~scale_v_up_sdw)
begin
if (viv_s4)
begin
viv_s30 = (viv_s63[15:0]);
end
else
begin
viv_s30 = (viv_s62[15:0]);
end
if (viv_s107)
begin
if (viv_s95 & viv_s0)
begin
viv_s86 = viv_s35 + 1'd1;
viv_s84 = {c_ram_width{1'b0}} + 1'b1;
end
if (viv_s4)
begin
if (viv_s35 == viv_s36)
begin
viv_s85 = {c_ram_width{1'b0}};
end
else
begin
viv_s85 = viv_s35 + 1'd1;
end
if (viv_s0 == 1'b0)
begin
if (viv_s33 == viv_s36)
begin
viv_s84 = {c_ram_width{1'b0}};
end
else
begin
viv_s84 = viv_s33 + 1'd1;
end
end
end
else
begin
viv_s85 = viv_s35;
viv_s84 = viv_s33;
end
end
end
else
begin
if (viv_s4)
begin
viv_s30 = (viv_s38[15:0]);
end
else
begin
if (~viv_s9) begin
if((viv_s6==1) & (viv_s32=={c_ram_width+1{1'b0}})) begin
viv_s30 = (ram_rdata[31:16]);
end
else
begin
viv_s30 = (viv_s38[31:16]);
end
end
else
begin
if (viv_s12)
begin
viv_s30 = (viv_s38[31:16]);
end
else
begin
viv_s30 = (ram_rdata[31:16]);
end
end
end
end
end
else
begin
if (viv_s6)
begin
if (~viv_s11)
begin
viv_s30 = (viv_s38[31:16]);
end
else
begin
if (viv_s12)
begin
viv_s30 = (viv_s38[31:16]);
end
else
begin
viv_s30 = (ram_rdata[31:16]);
end
end
end
else
begin
viv_s30 = (viv_s38[15:0]);
end
end
if (viv_s91 & viv_s90 & viv_s108)
begin
viv_s86 = (c_max_hsize/2)-1;
viv_s85 = (c_max_hsize/2)-1;
viv_s84 = {c_ram_width{1'b0}};
end
end
assign ram_wr_n = ~viv_s15;
assign ram_cs_n = ~viv_s16;
assign scale_v_lut_ad = (viv_s44[c_scale_v - 1:c_scale_v - c_scale_lut_addr]);
assign viv_s43 = {(scale_v_lut), viv_s56[c_scale_v - c_scale_lut - 1:0]};
endmodule