// © IBM Corp. 2020
// Licensed under the Apache License, Version 2.0 (the "License"), as modified by
// the terms below; you may not use the files in this repository except in
// compliance with the License as modified.
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
//
// Modified Terms:
//
// 1) For the purpose of the patent license granted to you in Section 3 of the
// License, the "Work" hereby includes implementations of the work of authorship
// in physical form.
//
// 2) Notwithstanding any terms to the contrary in the License, any licenses
// necessary for implementation of the Work that are available from OpenPOWER
// via the Power ISA End User License Agreement (EULA) are explicitly excluded
// hereunder, and may be obtained from OpenPOWER under the terms and conditions
// of the EULA.
//
// Unless required by applicable law or agreed to in writing, the reference design
// 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.
//
// Additional rights, including the ability to physically implement a softcore that
// is compliant with the required sections of the Power ISA Specification, are
// available at no cost under the terms of the OpenPOWER Power ISA EULA, which can be
// obtained (along with the Power ISA) here: https://openpowerfoundation.org.
`timescale 1 ns / 1 ns
//********************************************************************
//*
//* TITLE: IU Microcode
//*
//* NAME: iuq_uc.v
//*
//*********************************************************************
`include " tri_a2o.vh "
module iuq_uc (
vdd ,
gnd ,
clk ,
rst ,
pc_iu_func_sl_thold_2 ,
pc_iu_sg_2 ,
tc_ac_ccflush_dc ,
clkoff_b ,
act_dis ,
d_mode ,
delay_lclkr ,
mpw1_b ,
mpw2_b ,
scan_in ,
scan_out ,
iu_pc_err_ucode_illegal ,
xu_iu_ucode_xer_val ,
xu_iu_ucode_xer ,
iu_flush ,
br_iu_redirect ,
cp_flush_into_uc ,
cp_uc_np1_flush ,
cp_uc_flush_ifar ,
cp_uc_credit_free ,
cp_flush ,
uc_ic_hold ,
uc_iu4_flush ,
uc_iu4_flush_ifar ,
ic_bp_iu2_val ,
ic_bp_iu2_ifar ,
ic_bp_iu2_2ucode ,
ic_bp_iu2_2ucode_type ,
ic_bp_iu2_error ,
ic_bp_iu2_flush ,
ic_bp_iu3_flush ,
ic_bp_iu3_ecc_err ,
ic_bp_iu2_0_instr ,
ic_bp_iu2_1_instr ,
ic_bp_iu2_2_instr ,
ic_bp_iu2_3_instr ,
bp_ib_iu3_val ,
ib_uc_rdy ,
uc_ib_iu3_invalid ,
uc_ib_iu3_flush_all ,
uc_ib_val ,
uc_ib_done ,
uc_ib_instr0 ,
uc_ib_instr1 ,
uc_ib_ifar0 ,
uc_ib_ifar1 ,
uc_ib_ext0 ,
uc_ib_ext1
) ;
inout vdd ;
inout gnd ;
input clk ;
input rst ;
input pc_iu_func_sl_thold_2 ;
input pc_iu_sg_2 ;
input tc_ac_ccflush_dc ;
input clkoff_b ;
input act_dis ;
input d_mode ;
input delay_lclkr ;
input mpw1_b ;
input mpw2_b ;
( * pin_data = " PIN_FUNCTION=/SCAN_IN/ " * )
input scan_in ;
( * pin_data = " PIN_FUNCTION=/SCAN_OUT/ " * )
output scan_out ;
output iu_pc_err_ucode_illegal ;
input xu_iu_ucode_xer_val ;
input [ 57 : 63 ] xu_iu_ucode_xer ;
input iu_flush ;
input br_iu_redirect ;
input cp_flush_into_uc ;
input cp_uc_np1_flush ;
input [ 43 : 61 ] cp_uc_flush_ifar ;
input cp_uc_credit_free ;
input cp_flush ;
output uc_ic_hold ;
output uc_iu4_flush ;
output [ 62 - `EFF_IFAR_WIDTH : 61 ] uc_iu4_flush_ifar ;
input [ 0 : 3 ] ic_bp_iu2_val ;
input [ 62 - `EFF_IFAR_WIDTH : 61 ] ic_bp_iu2_ifar ;
input ic_bp_iu2_2ucode ;
input ic_bp_iu2_2ucode_type ;
input ic_bp_iu2_error ;
input ic_bp_iu2_flush ;
input ic_bp_iu3_flush ;
input ic_bp_iu3_ecc_err ;
// iu2 instruction(0:31) + predecode(32:35); (32:33) = "01" when uCode
input [ 0 : 33 ] ic_bp_iu2_0_instr ;
input [ 0 : 33 ] ic_bp_iu2_1_instr ;
input [ 0 : 33 ] ic_bp_iu2_2_instr ;
input [ 0 : 33 ] ic_bp_iu2_3_instr ;
input [ 0 : 3 ] bp_ib_iu3_val ;
input ib_uc_rdy ;
output [ 0 : 3 ] uc_ib_iu3_invalid ;
output uc_ib_iu3_flush_all ;
output reg [ 0 : 1 ] uc_ib_val ;
output reg uc_ib_done ;
output reg [ 0 : 31 ] uc_ib_instr0 ;
output reg [ 0 : 31 ] uc_ib_instr1 ;
output reg [ 62 - `EFF_IFAR_WIDTH : 61 ] uc_ib_ifar0 ;
output reg [ 62 - `EFF_IFAR_WIDTH : 61 ] uc_ib_ifar1 ;
output reg [ 0 : 3 ] uc_ib_ext0 ; //RT, S1, S2, S3
output reg [ 0 : 3 ] uc_ib_ext1 ; //RT, S1, S2, S3
//@@ Signal Declarations
wire [ 1 : 78 ] get_address_pt ;
wire force_ep ;
wire fxm_type ;
wire late_end ;
wire [ 0 : 9 ] start_addr ;
wire uc_legal ;
wire xer_type ;
parameter ucode_width = 72 ;
parameter uc_ifar = 20 ;
parameter iu3_val_offset = 0 ;
parameter iu3_ifar_offset = iu3_val_offset + 4 ;
parameter iu3_2ucode_offset = iu3_ifar_offset + `EFF_IFAR_WIDTH ;
parameter iu3_2ucode_type_offset = iu3_2ucode_offset + 1 ;
parameter iu3_instr_offset = iu3_2ucode_type_offset + 1 ;
parameter iu_flush_offset = iu3_instr_offset + 136 ;
parameter br_hold_offset = iu_flush_offset + 1 ;
parameter flush_into_uc_offset = br_hold_offset + 1 ;
parameter np1_flush_offset = flush_into_uc_offset + 1 ;
parameter flush_ifar_offset = np1_flush_offset + 1 ;
parameter cp_flush_offset = flush_ifar_offset + 19 ;
parameter br_iu_redirect_offset = cp_flush_offset + 1 ;
parameter iu_pc_err_ucode_illegal_offset = br_iu_redirect_offset + 1 ;
parameter advance_buffers_offset = iu_pc_err_ucode_illegal_offset + 1 ;
parameter romvalid_offset = advance_buffers_offset + 1 ;
parameter rom_data_even_late_offset = romvalid_offset + 1 ;
parameter rom_data_odd_late_offset = rom_data_even_late_offset + 32 ;
parameter iu4_valid_offset = rom_data_odd_late_offset + 32 ;
parameter iu4_ifar_offset = iu4_valid_offset + 2 ;
parameter iu4_ext0_offset = iu4_ifar_offset + uc_ifar ;
parameter iu4_ext1_offset = iu4_ext0_offset + 4 ;
parameter iu4_done_offset = iu4_ext1_offset + 4 ;
parameter iu4_ov_valid_offset = iu4_done_offset + 1 ;
parameter iu4_ov_ifar_offset = iu4_ov_valid_offset + 2 ;
parameter iu4_ov_instr0_offset = iu4_ov_ifar_offset + uc_ifar ;
parameter iu4_ov_instr1_offset = iu4_ov_instr0_offset + 32 ;
parameter iu4_ov_ext0_offset = iu4_ov_instr1_offset + 32 ;
parameter iu4_ov_ext1_offset = iu4_ov_ext0_offset + 4 ;
parameter iu4_ov_done_offset = iu4_ov_ext1_offset + 4 ;
parameter scan_right = iu4_ov_done_offset + 1 - 1 ;
// Latches
wire [ 0 : 3 ] iu3_val_d ;
wire [ 62 - `EFF_IFAR_WIDTH : 61 ] iu3_ifar_d ;
wire iu3_2ucode_d ;
wire iu3_2ucode_type_d ;
wire [ 0 : 33 ] iu3_0_instr_d ;
wire [ 0 : 33 ] iu3_1_instr_d ;
wire [ 0 : 33 ] iu3_2_instr_d ;
wire [ 0 : 33 ] iu3_3_instr_d ;
wire [ 0 : 3 ] iu3_val_l2 ;
wire [ 62 - `EFF_IFAR_WIDTH : 61 ] iu3_ifar_l2 ;
wire iu3_2ucode_l2 ;
wire iu3_2ucode_type_l2 ;
wire [ 0 : 33 ] iu3_0_instr_l2 ;
wire [ 0 : 33 ] iu3_1_instr_l2 ;
wire [ 0 : 33 ] iu3_2_instr_l2 ;
wire [ 0 : 33 ] iu3_3_instr_l2 ;
wire iu_pc_err_ucode_illegal_d ;
wire iu_pc_err_ucode_illegal_l2 ;
wire cp_flush_d ;
wire cp_flush_l2 ;
wire br_iu_redirect_d ;
wire br_iu_redirect_l2 ;
wire advance_buffers_d ;
wire advance_buffers_l2 ;
wire romvalid_d ;
wire romvalid_l2 ;
wire iu_flush_d ;
wire iu_flush_l2 ;
wire br_hold_d ;
wire br_hold_l2 ;
wire flush_into_uc_d ;
wire flush_into_uc_l2 ;
wire np1_flush_d ;
wire np1_flush_l2 ;
wire [ 43 : 61 ] flush_ifar_d ;
wire [ 43 : 61 ] flush_ifar_l2 ;
reg [ 0 : 1 ] iu4_valid_d ;
wire [ 62 - uc_ifar: 61 ] iu4_ifar_d ;
wire [ 0 : 3 ] iu4_ext0_d ; //RT, S1, S2, S3
wire [ 0 : 3 ] iu4_ext1_d ;
wire iu4_done_d ;
wire [ 0 : 1 ] iu4_valid_l2 ;
wire [ 62 - uc_ifar: 61 ] iu4_ifar_l2 ;
wire [ 0 : 31 ] iu4_instr0_l2 ;
wire [ 0 : 31 ] iu4_instr1_l2 ;
wire [ 0 : 3 ] iu4_ext0_l2 ;
wire [ 0 : 3 ] iu4_ext1_l2 ;
wire iu4_done_l2 ;
reg [ 0 : 1 ] iu4_ov_valid_d ;
wire [ 62 - uc_ifar: 61 ] iu4_ov_ifar_d ;
wire [ 0 : 31 ] iu4_ov_instr0_d ;
wire [ 0 : 31 ] iu4_ov_instr1_d ;
wire [ 0 : 3 ] iu4_ov_ext0_d ;
wire [ 0 : 3 ] iu4_ov_ext1_d ;
wire iu4_ov_done_d ;
wire [ 0 : 1 ] iu4_ov_valid_l2 ;
wire [ 62 - uc_ifar: 61 ] iu4_ov_ifar_l2 ;
wire [ 0 : 31 ] iu4_ov_instr0_l2 ;
wire [ 0 : 31 ] iu4_ov_instr1_l2 ;
wire [ 0 : 3 ] iu4_ov_ext0_l2 ;
wire [ 0 : 3 ] iu4_ov_ext1_l2 ;
wire iu4_ov_done_l2 ;
wire uc_val ;
wire uc_end ;
wire cplbuffer_full ;
wire clear_ill_flush_2ucode ;
wire next_valid ;
wire [ 0 : 31 ] next_instr ;
wire iu2_flush ;
wire flush_next ;
wire flush_next_control ;
wire flush_current ;
wire uc_iu4_flush_int ;
wire uc_default_act ;
wire uc_stall ;
wire new_command ;
wire msr_64bit ;
wire early_end ;
wire new_cond ;
wire [ 0 : 8 ] rom_ra ;
wire [ 62 - uc_ifar: 61 ] ucode_ifar ;
wire [ 0 : 31 ] ucode_instr_even ;
wire [ 0 : 31 ] ucode_instr_odd ;
wire [ 0 : 3 ] ucode_ext_even ;
wire [ 0 : 3 ] ucode_ext_odd ;
wire [ 0 : 1 ] ucode_valid ;
wire rom_act ;
wire [ 0 : 9 ] rom_addr_even ;
wire [ 0 : 9 ] rom_addr_odd ;
wire iu4_stall ;
wire data_valid ;
wire [ 0 : ucode_width - 1 ] rom_data_even ;
wire [ 0 : ucode_width - 1 ] rom_data_odd ;
wire [ 0 : 31 ] rom_data_even_late_d ;
wire [ 0 : 31 ] rom_data_even_late_l2 ;
wire [ 0 : 31 ] rom_data_odd_late_d ;
wire [ 0 : 31 ] rom_data_odd_late_l2 ;
wire ra_valid ;
wire iu4_stage_act ;
wire iu4_ov_stage_act ;
reg [ 62 - uc_ifar: 61 ] iu4_ifar_out ;
wire pc_iu_func_sl_thold_1 ;
wire pc_iu_func_sl_thold_0 ;
wire pc_iu_func_sl_thold_0_b ;
wire pc_iu_sg_1 ;
wire pc_iu_sg_0 ;
wire force_t ;
wire xu_iu_flush ;
wire [ 0 : scan_right + 4 ] siv ;
wire [ 0 : scan_right + 4 ] sov ;
wire tidn ;
wire tiup ;
assign tidn = 1 'b0 ;
assign tiup = 1 'b1 ;
//---------------------------------------------------------------------
// latch inputs
//---------------------------------------------------------------------
assign iu3_val_d = { 4 { ( ~ iu2_flush ) & ( ~ xu_iu_flush ) & ( ~ ic_bp_iu2_error ) } } & ic_bp_iu2_val ;
assign iu3_ifar_d = ic_bp_iu2_ifar ;
assign iu3_2ucode_d = ic_bp_iu2_2ucode & ic_bp_iu2_val [ 0 ] ;
assign iu3_2ucode_type_d = ic_bp_iu2_2ucode_type & ic_bp_iu2_val [ 0 ] ;
assign iu3_0_instr_d = ic_bp_iu2_0_instr ;
assign iu3_1_instr_d = ic_bp_iu2_1_instr ;
assign iu3_2_instr_d = ic_bp_iu2_2_instr ;
assign iu3_3_instr_d = ic_bp_iu2_3_instr ;
//---------------------------------------------------------------------
// buffers
//---------------------------------------------------------------------
iuq_uc_buffer iuq_uc_buffer0 (
. vdd ( vdd ) ,
. gnd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. pc_iu_func_sl_thold_0_b ( pc_iu_func_sl_thold_0_b ) ,
. pc_iu_sg_0 ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. d_mode ( d_mode ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. scan_in ( siv [ scan_right + 4 ] ) ,
. scan_out ( sov [ scan_right + 4 ] ) ,
. iu3_val_l2 ( iu3_val_l2 ) ,
. iu3_ifar_l2 ( iu3_ifar_l2 ) ,
. iu3_2ucode_l2 ( iu3_2ucode_l2 ) ,
. iu3_0_instr_l2 ( iu3_0_instr_l2 ) ,
. iu3_1_instr_l2 ( iu3_1_instr_l2 ) ,
. iu3_2_instr_l2 ( iu3_2_instr_l2 ) ,
. iu3_3_instr_l2 ( iu3_3_instr_l2 ) ,
. ic_bp_iu2_flush ( ic_bp_iu2_flush ) ,
. ic_bp_iu3_flush ( ic_bp_iu3_flush ) ,
. ic_bp_iu3_ecc_err ( ic_bp_iu3_ecc_err ) ,
. bp_ib_iu3_val ( bp_ib_iu3_val ) ,
. uc_ib_iu3_invalid ( uc_ib_iu3_invalid ) ,
. uc_ib_iu3_flush_all ( uc_ib_iu3_flush_all ) ,
. uc_ic_hold ( uc_ic_hold ) ,
. uc_iu4_flush ( uc_iu4_flush_int ) ,
. uc_iu4_flush_ifar ( uc_iu4_flush_ifar ) ,
. xu_iu_flush ( xu_iu_flush ) ,
. uc_val ( uc_val ) ,
. advance_buffers ( advance_buffers_l2 ) ,
. br_hold_l2 ( br_hold_l2 ) ,
. cplbuffer_full ( cplbuffer_full ) ,
. clear_ill_flush_2ucode ( clear_ill_flush_2ucode ) ,
. next_valid ( next_valid ) ,
. next_instr ( next_instr ) ,
. iu2_flush ( iu2_flush ) ,
. flush_next ( flush_next ) ,
. flush_current ( flush_current )
) ;
assign uc_iu4_flush = uc_iu4_flush_int ;
//---------------------------------------------------------------------
// new command
//---------------------------------------------------------------------
assign uc_default_act = flush_into_uc_l2 | next_valid | uc_val | iu4_valid_l2 [ 0 ] | iu4_ov_valid_l2 [ 0 ] ;
// stall if same command in buffer0 next cycle
assign uc_stall = ( uc_val & ( ~ uc_end ) ) |
br_hold_l2 | cplbuffer_full ; // we need this line if we use new_command to increment cplbuffer (br_hold_l2 prevents underwrap, cplbuffer_full prevents overflow)
assign new_command = next_valid & ( ~ uc_stall ) ; // Check that it can receive next command
assign advance_buffers_d = new_command & uc_val ;
assign msr_64bit = tidn ; // Unused
// output
assign early_end = ( ~ late_end ) ;
// If '1', will skip lines with skip_cond bit set
assign new_cond = ( ~ iu3_2ucode_type_l2 ) ;
//---------------------------------------------------------------------
// look up address
//---------------------------------------------------------------------
/ *
//table_start
? TABLE get_address LISTING ( final ) OPTIMIZE PARMS ( ON - SET , DC - SET ) ;
* INPUTS * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * OUTPUTS * = = = = = = = = = = = = = = = = = = = = *
| | |
| next_instr | start_addr |
| | next_instr | | |
| | | iu3_2ucode_l2 | | xer_type |
| | | | iu3_2ucode_type_l2 | | | late_end | # For update form , etc .
| | | | | msr_64bit | | | | force_ep |
| | | | | | | | | | | fxm_type |
| | | | | | | | | | | | uc_legal |
| | 22222222233 | | | | | | | | | | |
| 012345 12345678901 | | | | 0123456789 | | | | | |
* TYPE * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = + = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
| PPPPPP PPPPPPPPPPP P P P | SSSSSSSSSS S S S S S |
* TERMS * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = + = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
| 101000 . . . . . . . . . . . . . . | 0000000000 0 0 0 0 1 | lhz # Flushed 2 ucode
| 011111 0100010111. . . . | 0000010000 0 0 0 0 1 | lhzx
| 011111 0100011111. . . . | 0000010000 0 0 1 0 1 | lhepx
| 101010 . . . . . . . . . . . . . . | 0000100000 0 0 0 0 1 | lha
| 011111 0101010111. . . . | 0000110000 0 0 0 0 1 | lhax
| 100000 . . . . . . . . . . . . . . | 0001000000 0 0 0 0 1 | lwz
| 011111 0000010111. . . . | 0001010000 0 0 0 0 1 | lwzx
| 011111 0000011111. . . . | 0001010000 0 0 1 0 1 | lwepx
| 111010 . . . . . . . . .10 . . . | 0001100000 0 1 0 0 1 | lwa
| 011111 0101010101. . . . | 0001110000 0 0 0 0 1 | lwax
| 111010 . . . . . . . . .00 . . . | 0010000000 0 0 0 0 1 | ld
| 011111 0000010101. . . . | 0010010000 0 0 0 0 1 | ldx
| 011111 0000011101. . . . | 0010010000 0 0 1 0 1 | ldepx
| 101100 . . . . . . . . . . . . . . | 0100000000 0 0 0 0 1 | sth
| 011111 0110010111. . . . | 0100010000 0 0 0 0 1 | sthx
| 011111 0110011111. . . . | 0100010000 0 0 1 0 1 | sthepx
| 101101 . . . . . . . . . . . . . . | 0100000000 0 1 0 0 1 | sthu
| 011111 0110110111. . . . | 0100010000 0 1 0 0 1 | sthux
| 100100 . . . . . . . . . . . . . . | 0101000000 0 0 0 0 1 | stw
| 011111 0010010111. . . . | 0101010000 0 0 0 0 1 | stwx
| 011111 0010011111. . . . | 0101010000 0 0 1 0 1 | stwepx
| 100101 . . . . . . . . . . . . . . | 0101000000 0 1 0 0 1 | stwu
| 011111 0010110111. . . . | 0101010000 0 1 0 0 1 | stwux
| 111110 . . . . . . . . .00 . . . | 0110000000 0 0 0 0 1 | std
| 011111 0010010101. . . . | 0110010000 0 0 0 0 1 | stdx
| 011111 0010011101. . . . | 0110010000 0 0 1 0 1 | stdepx
| 111110 . . . . . . . . .01 . . . | 0110000000 0 1 0 0 1 | stdu
| 011111 0010110101. . . . | 0110010000 0 1 0 0 1 | stdux
| 011111 1100010110. . . . | 0000010000 0 0 0 0 1 | lhbrx
| 011111 1000010110. . . . | 0001010000 0 0 0 0 1 | lwbrx
| 011111 1000010100. . . . | 0010010000 0 0 0 0 1 | ldbrx
| 011111 1110010110. . . . | 0100010000 0 0 0 0 1 | sthbrx
| 011111 1010010110. . . . | 0101010000 0 0 0 0 1 | stwbrx
| 011111 1010010100. . . . | 0110010000 0 0 0 0 1 | stdbrx
| | |
| 011111 1000000000. . . . | 0101100000 0 1 0 0 1 | mcrxr
| 011111 0000010011. . . . | 0101110000 0 1 0 0 1 | mfcr
| 011111 0010010000. . . . | 0111110000 0 1 0 1 1 | mtcrf
| 011111 0010010000. . . . | 0111110000 0 1 0 1 1 | mtocrf # Flushed 2 ucode
| | |
| 101001 . . . . . . . . . . . 1 . . | 0000000000 0 1 0 0 1 | lhzu # Flushed 2 ucode
| 011111 0100110111. 1 . . | 0000010000 0 1 0 0 1 | lhzux
| 101011 . . . . . . . . . . . 1 . . | 0000100000 0 1 0 0 1 | lhau
| 011111 0101110111. 1 . . | 0000110000 0 1 0 0 1 | lhaux
| 100001 . . . . . . . . . . . 1 . . | 0001000000 0 1 0 0 1 | lwzu
| 011111 0000110111. 1 . . | 0001010000 0 1 0 0 1 | lwzux
| 011111 0101110101. 1 . . | 0001110000 0 1 0 0 1 | lwaux
| 111010 . . . . . . . . .01 1 . . | 0010000000 0 1 0 0 1 | ldu
| 011111 0000110101. 1 . . | 0010010000 0 1 0 0 1 | ldux
| | |
| 100011 . . . . . . . . . . . . . . | 1010100000 0 1 0 0 1 | lbzu # Aligned
| 011111 0001110111. . . . | 1010101000 0 1 0 0 1 | lbzux
| 101001 . . . . . . . . . . . 0 . . | 1010110000 0 1 0 0 1 | lhzu
| 011111 0100110111. 0 . . | 1010111000 0 1 0 0 1 | lhzux
| 101011 . . . . . . . . . . . 0 . . | 1011100000 0 1 0 0 1 | lhau
| 011111 0101110111. 0 . . | 1011101000 0 1 0 0 1 | lhaux
| 100001 . . . . . . . . . . . 0 . . | 1011000000 0 1 0 0 1 | lwzu
| 011111 0000110111. 0 . . | 1011001000 0 1 0 0 1 | lwzux
| 011111 0101110101. 0 . . | 1011111000 0 1 0 0 1 | lwaux
| 111010 . . . . . . . . .01 0 . . | 1011010000 0 1 0 0 1 | ldu
| 011111 0000110101. 0 . . | 1011011000 0 1 0 0 1 | ldux
| 101110 . . . . . . . . . . . . . . | 0010100000 0 1 0 0 1 | lmw
| 011111 1001010101. . . . | 0010110000 0 1 0 0 1 | lswi
| 011111 1000010101. . . . | 0011010000 1 1 0 0 1 | lswx
| 101111 . . . . . . . . . . . . . . | 0110100000 0 1 0 0 1 | stmw
| 011111 1011010101. . . . | 0110110000 0 1 0 0 1 | stswi
| 011111 1010010101. . . . | 0111010000 1 1 0 0 1 | stswx
| | |
| 110001 . . . . . . . . . . . 0 . . | 1111000000 0 1 0 0 1 | lfsu # Aligned
| 011111 1000110111. 0 . . | 1111001000 0 1 0 0 1 | lfsux
| 110011 . . . . . . . . . . . 0 . . | 1111010000 0 1 0 0 1 | lfdu
| 011111 1001110111. 0 . . | 1111011000 0 1 0 0 1 | lfdux
| | |
| 011111 1101010111. . . . | 1000110000 0 1 0 0 1 | lfiwax # Flushed 2 ucode
| 011111 1101110111. . . . | 1001110000 0 1 0 0 1 | lfiwzx
| 110000 . . . . . . . . . . . . . . | 1001000000 0 0 0 0 1 | lfs
| 011111 1000010111. . . . | 1001010000 0 0 0 0 1 | lfsx
| 110001 . . . . . . . . . . . 1 . . | 1001000000 0 1 0 0 1 | lfsu
| 011111 1000110111. 1 . . | 1001010000 0 1 0 0 1 | lfsux
| 110010 . . . . . . . . . . . . . . | 1010000000 0 0 0 0 1 | lfd
| 011111 1001010111. . . . | 1010010000 0 0 0 0 1 | lfdx
| 011111 1001011111. . . . | 1010010000 0 0 1 0 1 | lfdepx
| 110011 . . . . . . . . . . . 1 . . | 1010000000 0 1 0 0 1 | lfdu
| 011111 1001110111. 1 . . | 1010010000 0 1 0 0 1 | lfdux
| | |
| 011111 1111010111. . . . | 1100110000 0 1 0 0 1 | stfiwx
| 110100 . . . . . . . . . . . . . . | 1101000000 0 0 0 0 1 | stfs
| 011111 1010010111. . . . | 1101010000 0 0 0 0 1 | stfsx
| 110101 . . . . . . . . . . . . . . | 1101000000 0 1 0 0 1 | stfsu
| 011111 1010110111. . . . | 1101010000 0 1 0 0 1 | stfsux
| 110110 . . . . . . . . . . . . . . | 1110000000 0 0 0 0 1 | stfd
| 011111 1011010111. . . . | 1110010000 0 0 0 0 1 | stfdx
| 011111 1011011111. . . . | 1110010000 0 0 1 0 1 | stfdepx
| 110111 . . . . . . . . . . . . . . | 1110000000 0 1 0 0 1 | stfdu
| 011111 1011110111. . . . | 1110010000 0 1 0 0 1 | stfdux
| | |
| 000100 . . . . .10101 . . . . | 1100000000 0 1 0 0 1 | qvfadd
| 000000 . . . . .10101 . . . . | 1100000000 0 1 0 0 1 | qvfadds
| 000100 . . . . .10100 . . . . | 1100000000 0 1 0 0 1 | qvfsub
| 000000 . . . . .10100 . . . . | 1100000000 0 1 0 0 1 | qvfsubs
| 000100 . . . . .11000 . . . . | 1100000000 0 1 0 0 1 | qvfre
| 000000 . . . . .11000 . . . . | 1100000000 0 1 0 0 1 | qvfres
| 000100 . . . . .11010 . . . . | 1100000000 0 1 0 0 1 | frsqrte
| 000000 . . . . .11010 . . . . | 1100000000 0 1 0 0 1 | frsqrtes
| 000100 . . . . .11101 . . . . | 1100000000 0 1 0 0 1 | qvfmadd
| 000000 . . . . .11101 . . . . | 1100000000 0 1 0 0 1 | qvfmadds
| 000100 . . . . .11100 . . . . | 1100000000 0 1 0 0 1 | qvfmsub
| 000000 . . . . .11100 . . . . | 1100000000 0 1 0 0 1 | qvfmsubs
| 000100 . . . . .11111 . . . . | 1100000000 0 1 0 0 1 | qvfnmadd
| 000000 . . . . .11111 . . . . | 1100000000 0 1 0 0 1 | qvfnmadds
| 000100 . . . . .11110 . . . . | 1100000000 0 1 0 0 1 | qvfnmsub
| 000000 . . . . .11110 . . . . | 1100000000 0 1 0 0 1 | qvfnmsubs
| 000100 . . . . .01001 . . . . | 1100000000 0 1 0 0 1 | qvfxmadd
| 000000 . . . . .01001 . . . . | 1100000000 0 1 0 0 1 | qvfxmadds
| 000100 . . . . .01011 . . . . | 1100000000 0 1 0 0 1 | qvfxxnpmadd
| 000000 . . . . .01011 . . . . | 1100000000 0 1 0 0 1 | qvfxxnpmadds
| 000100 . . . . .00011 . . . . | 1100000000 0 1 0 0 1 | qvfxxcpnmadd
| 000000 . . . . .00011 . . . . | 1100000000 0 1 0 0 1 | qvfxxcpnmadds
| 000100 . . . . .00001 . . . . | 1100000000 0 1 0 0 1 | qvfxxmadd
| 000000 . . . . .00001 . . . . | 1100000000 0 1 0 0 1 | qvfxxmadds
| 000100 1101001110. . . . | 1100010000 0 1 0 0 1 | qvfcfid - SP prenorm only
| | |
| 111111 . . . . .10101 . . . . | 1100000000 0 1 0 0 1 | fadd
| 111011 . . . . .10101 . . . . | 1100000000 0 1 0 0 1 | fadds
| 111111 0000100000. . . . | 1100000000 0 1 0 0 1 | fcmpo
| 111111 0000000000. . . . | 1100000000 0 1 0 0 1 | fcmpu
| 111111 . . . . .10010 . . . . | 1100001000 0 1 0 0 1 | fdiv
| 111011 . . . . .10010 . . . . | 1100001000 0 1 0 0 1 | fdivs
| 111111 . . . . .11101 . . . . | 1100000000 0 1 0 0 1 | fmadd
| 111011 . . . . .11101 . . . . | 1100000000 0 1 0 0 1 | fmadds
| 111111 . . . . .11100 . . . . | 1100000000 0 1 0 0 1 | fmsub
| 111011 . . . . .11100 . . . . | 1100000000 0 1 0 0 1 | fmsubs
| 111111 . . . . .11111 . . . . | 1100000000 0 1 0 0 1 | fnmadd
| 111011 . . . . .11111 . . . . | 1100000000 0 1 0 0 1 | fnmadds
| 111111 . . . . .11110 . . . . | 1100000000 0 1 0 0 1 | fnmsub
| 111011 . . . . .11110 . . . . | 1100000000 0 1 0 0 1 | fnmsubs
| 111111 . . . . .11000 . . . . | 1100000000 0 1 0 0 1 | fre
| 111011 . . . . .11000 . . . . | 1100000000 0 1 0 0 1 | fres
| 111111 1101001110. . . . | 1100000000 0 1 0 0 1 | fcfid
| 111111 1111001110. . . . | 1100000000 0 1 0 0 1 | fcfidu
| 111011 1101001110. . . . | 1100000000 0 1 0 0 1 | fcfids
| 111011 1111001110. . . . | 1100000000 0 1 0 0 1 | fcfidus
| 111111 . . . . .11010 . . . . | 1100000000 0 1 0 0 1 | frsqrte
| 111011 . . . . .11010 . . . . | 1100000000 0 1 0 0 1 | frsqrtes
| 111111 . . . . .10100 . . . . | 1100000000 0 1 0 0 1 | fsub
| 111011 . . . . .10100 . . . . | 1100000000 0 1 0 0 1 | fsubs
| 111111 . . . . .10110 . . . . | 1100000000 0 1 0 0 1 | fsqrt
| 111011 . . . . .10110 . . . . | 1100000000 0 1 0 0 1 | fsqrts
| 111111 0010000000. . . . | 1100001000 0 1 0 0 1 | ftdiv
| 111111 0010100000. . . . | 1100000000 0 1 0 0 1 | ftsqrt
| 111111 1011000111. . . . | 1100000000 0 1 0 0 1 | mtfsf
* END * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = + = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
? TABLE END get_address ;
//table_end
*/
//assign_start
assign get_address_pt [ 1 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 16 'b0001001101001110 ) ;
assign get_address_pt [ 2 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 16 'b1111110010000000 ) ;
assign get_address_pt [ 3 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 16 'b0111111000000000 ) ;
assign get_address_pt [ 4 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 15 'b011111101011111 ) ;
assign get_address_pt [ 5 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 30 ] , iu3_2ucode_l2
} ) = = 16 'b0111110000110110 ) ;
assign get_address_pt [ 6 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] , iu3_2ucode_l2
} ) = = 16 'b0111111001101110 ) ;
assign get_address_pt [ 7 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 30 ] , iu3_2ucode_l2
} ) = = 16 'b0111110101110111 ) ;
assign get_address_pt [ 8 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 15 'b011111010110101 ) ;
assign get_address_pt [ 9 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ] ,
iu3_2ucode_l2 } ) = = 17 'b01111101001101110 ) ;
assign get_address_pt [ 10 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 15 'b011111101101111 ) ;
assign get_address_pt [ 11 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 23 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 15 'b011111111010111 ) ;
assign get_address_pt [ 12 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 14 'b01111100011111 ) ;
assign get_address_pt [ 13 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 3 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 21 ] ,
next_instr [ 22 ] , next_instr [ 23 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 15 'b111111011000111 ) ;
assign get_address_pt [ 14 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 30 ]
} ) = = 14 'b01111100001111 ) ;
assign get_address_pt [ 15 ] =
( ( { next_instr [ 1 ] , next_instr [ 2 ] ,
next_instr [ 3 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 21 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 14 'b11111110010110 ) ;
assign get_address_pt [ 16 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 30 ] , iu3_2ucode_l2
} ) = = 16 'b0111110101110110 ) ;
assign get_address_pt [ 17 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 30 ] } ) = = 15 'b011111010101011 ) ;
assign get_address_pt [ 18 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 15 'b011111100010101 ) ;
assign get_address_pt [ 19 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 16 'b0111110010010000 ) ;
assign get_address_pt [ 20 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 16 'b0111111101110111 ) ;
assign get_address_pt [ 21 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 16 'b0111110001110111 ) ;
assign get_address_pt [ 22 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 15 'b011111101110111 ) ;
assign get_address_pt [ 23 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 22 ] , next_instr [ 24 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] , iu3_2ucode_l2
} ) = = 14 'b01111100101111 ) ;
assign get_address_pt [ 24 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ]
} ) = = 14 'b01111110100101 ) ;
assign get_address_pt [ 25 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 23 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 14 'b01111101001111 ) ;
assign get_address_pt [ 26 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ] ,
iu3_2ucode_l2 } ) = = 15 'b011111001101111 ) ;
assign get_address_pt [ 27 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 28 ] , next_instr [ 30 ]
} ) = = 14 'b01111100100111 ) ;
assign get_address_pt [ 28 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 14 'b01111100001111 ) ;
assign get_address_pt [ 29 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 16 'b0111110000010011 ) ;
assign get_address_pt [ 30 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 24 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 30 ]
} ) = = 14 'b01111100101011 ) ;
assign get_address_pt [ 31 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 30 ]
} ) = = 14 'b01111110101011 ) ;
assign get_address_pt [ 32 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 3 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 21 ] ,
next_instr [ 22 ] , next_instr [ 24 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 13 'b1111100000000 ) ;
assign get_address_pt [ 33 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ]
} ) = = 14 'b01111110001011 ) ;
assign get_address_pt [ 34 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 15 'b011111000110101 ) ;
assign get_address_pt [ 35 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 14 'b01111110010110 ) ;
assign get_address_pt [ 36 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 23 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 14 'b01111110110111 ) ;
assign get_address_pt [ 37 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 23 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 15 'b011111010110111 ) ;
assign get_address_pt [ 38 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 21 ] ,
next_instr [ 22 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 13 'b1111111101110 ) ;
assign get_address_pt [ 39 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ]
} ) = = 14 'b01111110001010 ) ;
assign get_address_pt [ 40 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 15 'b011111101010101 ) ;
assign get_address_pt [ 41 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 14 'b01111100001101 ) ;
assign get_address_pt [ 42 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 15 'b011111111010111 ) ;
assign get_address_pt [ 43 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 22 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 14 'b01111100110111 ) ;
assign get_address_pt [ 44 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 24 ] , next_instr [ 25 ] ,
next_instr [ 26 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 14 'b01111110101111 ) ;
assign get_address_pt [ 45 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 24 ] ,
next_instr [ 25 ] , next_instr [ 26 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 13 'b0111110001111 ) ;
assign get_address_pt [ 46 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 30 ] , next_instr [ 31 ] ,
iu3_2ucode_l2 } ) = = 9 'b111010010 ) ;
assign get_address_pt [ 47 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 21 ] , next_instr [ 22 ] ,
next_instr [ 26 ] , next_instr [ 27 ] ,
next_instr [ 28 ] , next_instr [ 29 ] ,
next_instr [ 30 ] } ) = = 13 'b0111111010111 ) ;
assign get_address_pt [ 48 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 26 ] ,
next_instr [ 28 ] , next_instr [ 30 ]
} ) = = 8 'b00000001 ) ;
assign get_address_pt [ 49 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 30 ]
} ) = = 8 'b00000110 ) ;
assign get_address_pt [ 50 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ]
} ) = = 8 'b00000111 ) ;
assign get_address_pt [ 51 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 26 ] ,
next_instr [ 28 ] , next_instr [ 29 ]
} ) = = 8 'b00000110 ) ;
assign get_address_pt [ 52 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
iu3_2ucode_l2 } ) = = 7 'b1100110 ) ;
assign get_address_pt [ 53 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 30 ] ,
next_instr [ 31 ] } ) = = 7 'b1111001 ) ;
assign get_address_pt [ 54 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
iu3_2ucode_l2 } ) = = 7 'b1010010 ) ;
assign get_address_pt [ 55 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 30 ] , next_instr [ 31 ]
} ) = = 8 'b11101010 ) ;
assign get_address_pt [ 56 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
iu3_2ucode_l2 } ) = = 7 'b1010110 ) ;
assign get_address_pt [ 57 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ] ,
next_instr [ 29 ] , next_instr [ 30 ]
} ) = = 10 'b1111110010 ) ;
assign get_address_pt [ 58 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 5 ] , iu3_2ucode_l2
} ) = = 6 'b110010 ) ;
assign get_address_pt [ 59 ] =
( ( { next_instr [ 0 ] , next_instr [ 2 ] ,
next_instr [ 3 ] , next_instr [ 5 ] ,
iu3_2ucode_l2 } ) = = 5 'b10010 ) ;
assign get_address_pt [ 60 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 3 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 30 ]
} ) = = 6 'b111100 ) ;
assign get_address_pt [ 61 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] , next_instr [ 5 ]
} ) = = 6 'b100011 ) ;
assign get_address_pt [ 62 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 3 ] , next_instr [ 4 ]
} ) = = 4 'b1010 ) ;
assign get_address_pt [ 63 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 3 ] , next_instr [ 5 ]
} ) = = 4 'b1001 ) ;
assign get_address_pt [ 64 ] =
( ( { next_instr [ 0 ] , next_instr [ 2 ] ,
next_instr [ 4 ] , next_instr [ 5 ]
} ) = = 4 'b1001 ) ;
assign get_address_pt [ 65 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 4 ] , next_instr [ 5 ] ,
next_instr [ 30 ] } ) = = 5 'b11100 ) ;
assign get_address_pt [ 66 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 30 ]
} ) = = 8 'b11111110 ) ;
assign get_address_pt [ 67 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 4 ]
} ) = = 4 'b1011 ) ;
assign get_address_pt [ 68 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ]
} ) = = 4 'b1101 ) ;
assign get_address_pt [ 69 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 4 ] } ) = = 5 'b10111 ) ;
assign get_address_pt [ 70 ] =
( ( { next_instr [ 0 ] , next_instr [ 2 ] ,
next_instr [ 4 ] } ) = = 3 'b100 ) ;
assign get_address_pt [ 71 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 26 ] ,
next_instr [ 27 ] , next_instr [ 28 ]
} ) = = 8 'b11111111 ) ;
assign get_address_pt [ 72 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 26 ] ,
next_instr [ 28 ] , next_instr [ 29 ]
} ) = = 8 'b11111110 ) ;
assign get_address_pt [ 73 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 3 ] ,
next_instr [ 5 ] } ) = = 5 'b10111 ) ;
assign get_address_pt [ 74 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 5 ]
} ) = = 4 'b1101 ) ;
assign get_address_pt [ 75 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 4 ] ,
next_instr [ 5 ] , next_instr [ 26 ] ,
next_instr [ 28 ] , next_instr [ 30 ]
} ) = = 8 'b11111110 ) ;
assign get_address_pt [ 76 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] } ) = = 3 'b110 ) ;
assign get_address_pt [ 77 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] } ) = = 3 'b101 ) ;
assign get_address_pt [ 78 ] =
( ( { next_instr [ 0 ] , next_instr [ 1 ] ,
next_instr [ 2 ] , next_instr [ 4 ]
} ) = = 4 'b1101 ) ;
assign start_addr [ 0 ] =
( get_address_pt [ 1 ] | get_address_pt [ 5 ]
| get_address_pt [ 9 ] | get_address_pt [ 13 ]
| get_address_pt [ 16 ] | get_address_pt [ 20 ]
| get_address_pt [ 21 ] | get_address_pt [ 32 ]
| get_address_pt [ 38 ] | get_address_pt [ 42 ]
| get_address_pt [ 44 ] | get_address_pt [ 46 ]
| get_address_pt [ 47 ] | get_address_pt [ 48 ]
| get_address_pt [ 49 ] | get_address_pt [ 50 ]
| get_address_pt [ 51 ] | get_address_pt [ 54 ]
| get_address_pt [ 56 ] | get_address_pt [ 57 ]
| get_address_pt [ 59 ] | get_address_pt [ 61 ]
| get_address_pt [ 66 ] | get_address_pt [ 71 ]
| get_address_pt [ 72 ] | get_address_pt [ 75 ]
| get_address_pt [ 76 ] ) ;
assign start_addr [ 1 ] =
( get_address_pt [ 1 ] | get_address_pt [ 3 ]
| get_address_pt [ 6 ] | get_address_pt [ 10 ]
| get_address_pt [ 11 ] | get_address_pt [ 13 ]
| get_address_pt [ 15 ] | get_address_pt [ 19 ]
| get_address_pt [ 24 ] | get_address_pt [ 25 ]
| get_address_pt [ 27 ] | get_address_pt [ 29 ]
| get_address_pt [ 30 ] | get_address_pt [ 31 ]
| get_address_pt [ 32 ] | get_address_pt [ 36 ]
| get_address_pt [ 37 ] | get_address_pt [ 38 ]
| get_address_pt [ 48 ] | get_address_pt [ 49 ]
| get_address_pt [ 50 ] | get_address_pt [ 51 ]
| get_address_pt [ 57 ] | get_address_pt [ 58 ]
| get_address_pt [ 60 ] | get_address_pt [ 62 ]
| get_address_pt [ 66 ] | get_address_pt [ 68 ]
| get_address_pt [ 71 ] | get_address_pt [ 72 ]
| get_address_pt [ 73 ] | get_address_pt [ 75 ]
) ;
assign start_addr [ 2 ] =
( get_address_pt [ 5 ] | get_address_pt [ 6 ]
| get_address_pt [ 9 ] | get_address_pt [ 16 ]
| get_address_pt [ 19 ] | get_address_pt [ 21 ]
| get_address_pt [ 22 ] | get_address_pt [ 34 ]
| get_address_pt [ 39 ] | get_address_pt [ 40 ]
| get_address_pt [ 41 ] | get_address_pt [ 44 ]
| get_address_pt [ 54 ] | get_address_pt [ 56 ]
| get_address_pt [ 59 ] | get_address_pt [ 61 ]
| get_address_pt [ 65 ] | get_address_pt [ 69 ]
| get_address_pt [ 78 ] ) ;
assign start_addr [ 3 ] =
( get_address_pt [ 3 ] | get_address_pt [ 5 ]
| get_address_pt [ 6 ] | get_address_pt [ 8 ]
| get_address_pt [ 16 ] | get_address_pt [ 18 ]
| get_address_pt [ 19 ] | get_address_pt [ 20 ]
| get_address_pt [ 28 ] | get_address_pt [ 29 ]
| get_address_pt [ 33 ] | get_address_pt [ 43 ]
| get_address_pt [ 46 ] | get_address_pt [ 55 ]
| get_address_pt [ 56 ] | get_address_pt [ 58 ]
| get_address_pt [ 70 ] ) ;
assign start_addr [ 4 ] =
( get_address_pt [ 3 ] | get_address_pt [ 7 ]
| get_address_pt [ 9 ] | get_address_pt [ 16 ]
| get_address_pt [ 17 ] | get_address_pt [ 19 ]
| get_address_pt [ 20 ] | get_address_pt [ 21 ]
| get_address_pt [ 29 ] | get_address_pt [ 40 ]
| get_address_pt [ 42 ] | get_address_pt [ 54 ]
| get_address_pt [ 55 ] | get_address_pt [ 61 ]
| get_address_pt [ 67 ] ) ;
assign start_addr [ 5 ] =
( get_address_pt [ 1 ] | get_address_pt [ 7 ]
| get_address_pt [ 8 ] | get_address_pt [ 9 ]
| get_address_pt [ 17 ] | get_address_pt [ 19 ]
| get_address_pt [ 20 ] | get_address_pt [ 22 ]
| get_address_pt [ 23 ] | get_address_pt [ 26 ]
| get_address_pt [ 29 ] | get_address_pt [ 33 ]
| get_address_pt [ 34 ] | get_address_pt [ 35 ]
| get_address_pt [ 36 ] | get_address_pt [ 37 ]
| get_address_pt [ 39 ] | get_address_pt [ 40 ]
| get_address_pt [ 41 ] | get_address_pt [ 42 ]
| get_address_pt [ 44 ] | get_address_pt [ 45 ]
| get_address_pt [ 46 ] | get_address_pt [ 52 ]
| get_address_pt [ 54 ] ) ;
assign start_addr [ 6 ] =
( get_address_pt [ 2 ] | get_address_pt [ 5 ]
| get_address_pt [ 6 ] | get_address_pt [ 9 ]
| get_address_pt [ 16 ] | get_address_pt [ 21 ]
| get_address_pt [ 57 ] ) ;
assign start_addr [ 7 ] =
1 'b0 ;
assign start_addr [ 8 ] =
1 'b0 ;
assign start_addr [ 9 ] =
1 'b0 ;
assign xer_type =
( get_address_pt [ 18 ] ) ;
assign late_end =
( get_address_pt [ 1 ] | get_address_pt [ 3 ]
| get_address_pt [ 7 ] | get_address_pt [ 9 ]
| get_address_pt [ 13 ] | get_address_pt [ 16 ]
| get_address_pt [ 18 ] | get_address_pt [ 19 ]
| get_address_pt [ 20 ] | get_address_pt [ 21 ]
| get_address_pt [ 22 ] | get_address_pt [ 26 ]
| get_address_pt [ 29 ] | get_address_pt [ 32 ]
| get_address_pt [ 34 ] | get_address_pt [ 37 ]
| get_address_pt [ 38 ] | get_address_pt [ 40 ]
| get_address_pt [ 42 ] | get_address_pt [ 43 ]
| get_address_pt [ 48 ] | get_address_pt [ 49 ]
| get_address_pt [ 50 ] | get_address_pt [ 51 ]
| get_address_pt [ 53 ] | get_address_pt [ 55 ]
| get_address_pt [ 57 ] | get_address_pt [ 63 ]
| get_address_pt [ 64 ] | get_address_pt [ 66 ]
| get_address_pt [ 69 ] | get_address_pt [ 71 ]
| get_address_pt [ 72 ] | get_address_pt [ 73 ]
| get_address_pt [ 74 ] | get_address_pt [ 75 ]
) ;
assign force_ep =
( get_address_pt [ 4 ] | get_address_pt [ 12 ]
| get_address_pt [ 14 ] ) ;
assign fxm_type =
( get_address_pt [ 19 ] ) ;
assign uc_legal =
( get_address_pt [ 1 ] | get_address_pt [ 3 ]
| get_address_pt [ 7 ] | get_address_pt [ 9 ]
| get_address_pt [ 13 ] | get_address_pt [ 16 ]
| get_address_pt [ 17 ] | get_address_pt [ 19 ]
| get_address_pt [ 20 ] | get_address_pt [ 21 ]
| get_address_pt [ 26 ] | get_address_pt [ 29 ]
| get_address_pt [ 32 ] | get_address_pt [ 34 ]
| get_address_pt [ 35 ] | get_address_pt [ 37 ]
| get_address_pt [ 38 ] | get_address_pt [ 39 ]
| get_address_pt [ 40 ] | get_address_pt [ 41 ]
| get_address_pt [ 42 ] | get_address_pt [ 43 ]
| get_address_pt [ 44 ] | get_address_pt [ 45 ]
| get_address_pt [ 47 ] | get_address_pt [ 48 ]
| get_address_pt [ 49 ] | get_address_pt [ 50 ]
| get_address_pt [ 51 ] | get_address_pt [ 55 ]
| get_address_pt [ 57 ] | get_address_pt [ 61 ]
| get_address_pt [ 65 ] | get_address_pt [ 66 ]
| get_address_pt [ 70 ] | get_address_pt [ 71 ]
| get_address_pt [ 72 ] | get_address_pt [ 75 ]
| get_address_pt [ 77 ] | get_address_pt [ 78 ]
) ;
//assign_end
//---------------------------------------------------------------------
// illegal op
//---------------------------------------------------------------------
// Need to handle the cmodx case where load/store gets flushed to uCode,
// then that instruction is changed to some non-uCode instruction.
// Solution: Any time an instruction was flushed_2ucode and doesn't hit
// in table, flush instruction to clear flush_2ucode bit. Instruction
// will then re-fetch as regular instruction.
assign clear_ill_flush_2ucode = new_command & ( ~ uc_legal ) & iu3_2ucode_l2 ;
assign flush_next_control = flush_next | clear_ill_flush_2ucode ;
assign iu_pc_err_ucode_illegal_d = new_command & ( ~ uc_legal ) & ( ~ iu3_2ucode_l2 ) & ( ~ flush_next ) ;
tri_direct_err_rpt # ( . WIDTH ( 1 ) ) err_ucode_illegal (
. vd ( vdd ) ,
. gd ( gnd ) ,
. err_in ( iu_pc_err_ucode_illegal_l2 ) ,
. err_out ( iu_pc_err_ucode_illegal )
) ;
//---------------------------------------------------------------------
// create instruction
//---------------------------------------------------------------------
assign xu_iu_flush = iu_flush_l2 | br_iu_redirect_l2 ;
assign iu_flush_d = iu_flush ;
assign cp_flush_d = cp_flush ;
assign br_iu_redirect_d = br_iu_redirect & ( ~ ( cp_flush_l2 | iu_flush_l2 ) ) ;
// When br_iu_redirect happens, hold off uCode commands until cp_flush
// otherwise weird things happen
assign br_hold_d = ( cp_flush_l2 = = 1 'b1 ) ? 1 'b0 :
( br_iu_redirect_l2 = = 1 'b1 ) ? 1 'b1 :
br_hold_l2 ;
assign flush_into_uc_d = iu_flush & cp_flush_into_uc ;
assign np1_flush_d = cp_uc_np1_flush ;
assign flush_ifar_d = cp_uc_flush_ifar ;
iuq_uc_control uc_control (
. vdd ( vdd ) ,
. gnd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. pc_iu_func_sl_thold_0_b ( pc_iu_func_sl_thold_0_b ) ,
. pc_iu_sg_0 ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. d_mode ( d_mode ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. scan_in ( siv [ scan_right + 1 ] ) ,
. scan_out ( sov [ scan_right + 1 ] ) ,
. xu_iu_ucode_xer_val ( xu_iu_ucode_xer_val ) ,
. xu_iu_ucode_xer ( xu_iu_ucode_xer ) ,
. br_hold ( br_hold_l2 ) ,
. flush_next ( flush_next_control ) ,
. flush ( flush_current ) ,
. flush_into_uc ( flush_into_uc_l2 ) ,
. np1_flush ( np1_flush_l2 ) ,
. flush_ifar ( flush_ifar_l2 ) ,
. cp_uc_credit_free ( cp_uc_credit_free ) ,
. cp_flush ( cp_flush_l2 ) ,
. uc_default_act ( uc_default_act ) ,
. next_valid ( next_valid ) ,
. new_command ( new_command ) ,
. new_instr ( next_instr ) ,
. start_addr ( start_addr [ 0 : 8 ] ) , // bit (9) is unused - always even
. xer_type ( xer_type ) ,
. early_end ( early_end ) ,
. force_ep ( force_ep ) ,
. fxm_type ( fxm_type ) ,
. new_cond ( new_cond ) ,
. ra_valid ( ra_valid ) ,
. rom_ra ( rom_ra ) ,
. rom_act ( rom_act ) ,
. data_valid ( data_valid ) ,
. rom_data_even ( rom_data_even [ 32 : ucode_width - 1 ] ) ,
. rom_data_odd ( rom_data_odd [ 32 : ucode_width - 1 ] ) ,
. rom_data_even_late ( rom_data_even_late_l2 ) ,
. rom_data_odd_late ( rom_data_odd_late_l2 ) ,
. uc_val ( uc_val ) ,
. uc_end ( uc_end ) ,
. cplbuffer_full ( cplbuffer_full ) ,
. ucode_valid ( ucode_valid ) ,
. ucode_ifar_even ( ucode_ifar ) ,
. ucode_instr_even ( ucode_instr_even ) ,
. ucode_instr_odd ( ucode_instr_odd ) ,
. ucode_ext_even ( ucode_ext_even ) ,
. ucode_ext_odd ( ucode_ext_odd )
) ;
//---------------------------------------------------------------------
// ROM
//---------------------------------------------------------------------
assign romvalid_d = ra_valid ;
assign rom_addr_even = { rom_ra [ 0 : 8 ] , 1 'b0 } ;
assign rom_addr_odd = { rom_ra [ 0 : 8 ] , 1 'b1 } ;
assign iu4_stall = iu4_valid_l2 [ 0 ] & iu4_ov_valid_l2 [ 0 ] ; // ??? Need to check vector if ever switch to only i1 being valid
assign data_valid = romvalid_l2 & ( ~ iu4_stall ) ;
//---------------------------------------------------------------------
// ROM Lookup
//---------------------------------------------------------------------
iuq_uc_rom_even uc_rom_even (
. vdd ( vdd ) ,
. gnd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. pc_iu_func_sl_thold_0_b ( pc_iu_func_sl_thold_0_b ) ,
. pc_iu_sg_0 ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. d_mode ( d_mode ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. scan_in ( siv [ scan_right + 2 ] ) ,
. scan_out ( sov [ scan_right + 2 ] ) ,
. rom_act ( rom_act ) ,
. rom_addr ( rom_addr_even ) ,
. rom_data ( rom_data_even )
) ;
assign rom_data_even_late_d = rom_data_even [ 0 : 31 ] ;
iuq_uc_rom_odd uc_rom_odd (
. vdd ( vdd ) ,
. gnd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. pc_iu_func_sl_thold_0_b ( pc_iu_func_sl_thold_0_b ) ,
. pc_iu_sg_0 ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. d_mode ( d_mode ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. scan_in ( siv [ scan_right + 3 ] ) ,
. scan_out ( sov [ scan_right + 3 ] ) ,
. rom_act ( rom_act ) ,
. rom_addr ( rom_addr_odd ) ,
. rom_data ( rom_data_odd )
) ;
assign rom_data_odd_late_d = rom_data_odd [ 0 : 31 ] ;
//---------------------------------------------------------------------
// Staging latches
//---------------------------------------------------------------------
assign iu4_stage_act = data_valid ; // ??? Removed "not flush and not skip" from act. Do we want to add in some form of skip check?
generate
begin : xhdl1
genvar i ;
for ( i = 0 ; i < = 1 ; i = i + 1 )
begin : gen_iu4_val
always @ ( * ) iu4_valid_d [ i ] = ( ( ucode_valid [ i ] & ( ~ iu4_stall ) ) |
( iu4_valid_l2 [ i ] & iu4_stall ) ) &
( ~ ( iu_flush_l2 | br_iu_redirect_l2 ) ) ; // clear on flush
end
end
endgenerate
assign iu4_ifar_d = ucode_ifar ;
assign iu4_ext0_d = ucode_ext_even ;
assign iu4_ext1_d = ucode_ext_odd ;
//late data
assign iu4_instr0_l2 = ucode_instr_even ;
assign iu4_instr1_l2 = ucode_instr_odd ;
assign iu4_done_d = uc_end ;
// Overflow latches
assign iu4_ov_stage_act = iu4_valid_l2 [ 0 ] & ( ~ iu4_ov_valid_l2 [ 0 ] ) ;
generate
begin : xhdl2
genvar i ;
for ( i = 0 ; i < = 1 ; i = i + 1 )
begin : gen_ov_valid
always @ ( * ) iu4_ov_valid_d [ i ] = ( iu4_ov_valid_l2 [ i ] | ( iu4_valid_l2 [ i ] & ( ~ iu4_ov_valid_l2 [ 0 ] ) ) ) & ( ~ ib_uc_rdy ) & ( ~ ( iu_flush_l2 | br_iu_redirect_l2 ) ) ;
end
end
endgenerate
assign iu4_ov_ifar_d = iu4_ifar_l2 ;
assign iu4_ov_ext0_d = iu4_ext0_l2 ;
assign iu4_ov_ext1_d = iu4_ext1_l2 ;
assign iu4_ov_instr0_d = iu4_instr0_l2 ;
assign iu4_ov_instr1_d = iu4_instr1_l2 ;
assign iu4_ov_done_d = iu4_done_l2 ;
// If uc_ifar > `EFF_IFAR_WIDTH, we
// need to change uc_control so uc_ifar is not bigger than EFF_IFAR_WIDTH
// so that we don't lose part of ifar on flush
generate
begin
if ( uc_ifar > = `EFF_IFAR_WIDTH )
begin : ifara
always @ ( * ) uc_ib_ifar0 = iu4_ifar_out [ 62 - `EFF_IFAR_WIDTH : 61 ] ;
always @ ( * ) uc_ib_ifar1 = { iu4_ifar_out [ 62 - `EFF_IFAR_WIDTH : 60 ] , 1 'b1 } ;
end
if ( uc_ifar < `EFF_IFAR_WIDTH )
begin : ifarb
always @ ( * )
begin
uc_ib_ifar0 [ 62 - `EFF_IFAR_WIDTH : 62 - uc_ifar - 1 ] = { `EFF_IFAR_WIDTH - uc_ifar { 1 'b0 } } ;
uc_ib_ifar1 [ 62 - `EFF_IFAR_WIDTH : 62 - uc_ifar - 1 ] = { `EFF_IFAR_WIDTH - uc_ifar { 1 'b0 } } ;
uc_ib_ifar0 [ 62 - uc_ifar: 61 ] = iu4_ifar_out ;
uc_ib_ifar1 [ 62 - uc_ifar: 61 ] = { iu4_ifar_out [ 62 - uc_ifar: 60 ] , 1 'b1 } ;
end
end
end
endgenerate
always @ *
begin : ib_proc
uc_ib_val = iu4_valid_l2 ;
iu4_ifar_out = iu4_ifar_l2 ;
uc_ib_instr0 = iu4_instr0_l2 ;
uc_ib_instr1 = iu4_instr1_l2 ;
uc_ib_ext0 = iu4_ext0_l2 ;
uc_ib_ext1 = iu4_ext1_l2 ;
uc_ib_done = iu4_done_l2 ;
if ( iu4_ov_valid_l2 [ 0 ] = = 1 'b1 )
begin
uc_ib_val = iu4_ov_valid_l2 ;
iu4_ifar_out = iu4_ov_ifar_l2 ;
uc_ib_instr0 = iu4_ov_instr0_l2 ;
uc_ib_instr1 = iu4_ov_instr1_l2 ;
uc_ib_ext0 = iu4_ov_ext0_l2 ;
uc_ib_ext1 = iu4_ov_ext1_l2 ;
uc_ib_done = iu4_ov_done_l2 ;
end
end
//---------------------------------------------------------------------
// Latches
//---------------------------------------------------------------------
tri_rlmreg_p # ( . WIDTH ( 4 ) , . INIT ( 0 ) , . NEEDS_SRESET ( 1 ) ) iu3_val_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( tiup ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu3_val_offset: iu3_val_offset + 4 - 1 ] ) ,
. scout ( sov [ iu3_val_offset: iu3_val_offset + 4 - 1 ] ) ,
. din ( iu3_val_d ) ,
. dout ( iu3_val_l2 )
) ;
tri_rlmreg_p # ( . WIDTH ( `EFF_IFAR_WIDTH ) , . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu3_ifar_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( ic_bp_iu2_val [ 0 ] ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu3_ifar_offset: iu3_ifar_offset + `EFF_IFAR_WIDTH - 1 ] ) ,
. scout ( sov [ iu3_ifar_offset: iu3_ifar_offset + `EFF_IFAR_WIDTH - 1 ] ) ,
. din ( iu3_ifar_d ) ,
. dout ( iu3_ifar_l2 )
) ;
tri_rlmlatch_p # ( . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu3_2ucode_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( tiup ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu3_2ucode_offset ] ) ,
. scout ( sov [ iu3_2ucode_offset ] ) ,
. din ( iu3_2ucode_d ) ,
. dout ( iu3_2ucode_l2 )
) ;
tri_rlmlatch_p # ( . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu3_2ucode_type_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( tiup ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu3_2ucode_type_offset ] ) ,
. scout ( sov [ iu3_2ucode_type_offset ] ) ,
. din ( iu3_2ucode_type_d ) ,
. dout ( iu3_2ucode_type_l2 )
) ;
tri_rlmreg_p # ( . WIDTH ( 34 * 4 ) , . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu3_instr_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( ic_bp_iu2_val [ 0 ] ) , // ??? Could create act for 0:31 when buffers full?
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu3_instr_offset: iu3_instr_offset + ( 34 * 4 ) - 1 ] ) ,
. scout ( sov [ iu3_instr_offset: iu3_instr_offset + ( 34 * 4 ) - 1 ] ) ,
. din ( { iu3_0_instr_d , iu3_1_instr_d , iu3_2_instr_d , iu3_3_instr_d } ) ,
. dout ( { iu3_0_instr_l2 , iu3_1_instr_l2 , iu3_2_instr_l2 , iu3_3_instr_l2 } )
) ;
tri_rlmlatch_p # ( . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu_pc_err_ucode_illegal_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( tiup ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu_pc_err_ucode_illegal_offset ] ) ,
. scout ( sov [ iu_pc_err_ucode_illegal_offset ] ) ,
. din ( iu_pc_err_ucode_illegal_d ) ,
. dout ( iu_pc_err_ucode_illegal_l2 )
) ;
tri_rlmlatch_p # ( . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu_flush_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( tiup ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu_flush_offset ] ) ,
. scout ( sov [ iu_flush_offset ] ) ,
. din ( iu_flush_d ) ,
. dout ( iu_flush_l2 )
) ;
tri_rlmlatch_p # ( . INIT ( 0 ) , . NEEDS_SRESET ( 1 ) ) br_hold_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( tiup ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ br_hold_offset ] ) ,
. scout ( sov [ br_hold_offset ] ) ,
. din ( br_hold_d ) ,
. dout ( br_hold_l2 )
) ;
tri_rlmlatch_p # ( . INIT ( 0 ) , . NEEDS_SRESET ( 1 ) ) flush_into_uc_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( tiup ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ flush_into_uc_offset ] ) ,
. scout ( sov [ flush_into_uc_offset ] ) ,
. din ( flush_into_uc_d ) ,
. dout ( flush_into_uc_l2 )
) ;
tri_rlmlatch_p # ( . INIT ( 0 ) , . NEEDS_SRESET ( 1 ) ) np1_flush_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( cp_flush_into_uc ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ np1_flush_offset ] ) ,
. scout ( sov [ np1_flush_offset ] ) ,
. din ( np1_flush_d ) ,
. dout ( np1_flush_l2 )
) ;
tri_rlmreg_p # ( . WIDTH ( 19 ) , . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) flush_ifar_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( cp_flush_into_uc ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ flush_ifar_offset: flush_ifar_offset + 19 - 1 ] ) ,
. scout ( sov [ flush_ifar_offset: flush_ifar_offset + 19 - 1 ] ) ,
. din ( flush_ifar_d ) ,
. dout ( flush_ifar_l2 )
) ;
tri_rlmlatch_p # ( . INIT ( 0 ) , . NEEDS_SRESET ( 1 ) ) cp_flush_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( tiup ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ cp_flush_offset ] ) ,
. scout ( sov [ cp_flush_offset ] ) ,
. din ( cp_flush_d ) ,
. dout ( cp_flush_l2 )
) ;
tri_rlmlatch_p # ( . INIT ( 0 ) , . NEEDS_SRESET ( 1 ) ) br_iu_redirect_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( tiup ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ br_iu_redirect_offset ] ) ,
. scout ( sov [ br_iu_redirect_offset ] ) ,
. din ( br_iu_redirect_d ) ,
. dout ( br_iu_redirect_l2 )
) ;
tri_rlmlatch_p # ( . INIT ( 0 ) , . NEEDS_SRESET ( 1 ) ) advance_buffers_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( tiup ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ advance_buffers_offset ] ) ,
. scout ( sov [ advance_buffers_offset ] ) ,
. din ( advance_buffers_d ) ,
. dout ( advance_buffers_l2 )
) ;
// ROM
tri_rlmlatch_p # ( . INIT ( 0 ) , . NEEDS_SRESET ( 1 ) ) romvalid_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( uc_default_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ romvalid_offset ] ) ,
. scout ( sov [ romvalid_offset ] ) ,
. din ( romvalid_d ) ,
. dout ( romvalid_l2 )
) ;
tri_rlmreg_p # ( . WIDTH ( 32 ) , . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) rom_data_even_late_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( iu4_stage_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ rom_data_even_late_offset: rom_data_even_late_offset + 32 - 1 ] ) ,
. scout ( sov [ rom_data_even_late_offset: rom_data_even_late_offset + 32 - 1 ] ) ,
. din ( rom_data_even_late_d ) ,
. dout ( rom_data_even_late_l2 )
) ;
tri_rlmreg_p # ( . WIDTH ( 32 ) , . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) rom_data_odd_late_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( iu4_stage_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ rom_data_odd_late_offset: rom_data_odd_late_offset + 32 - 1 ] ) ,
. scout ( sov [ rom_data_odd_late_offset: rom_data_odd_late_offset + 32 - 1 ] ) ,
. din ( rom_data_odd_late_d ) ,
. dout ( rom_data_odd_late_l2 )
) ;
// Staging latches
tri_rlmreg_p # ( . WIDTH ( 2 ) , . INIT ( 0 ) , . NEEDS_SRESET ( 1 ) ) iu4_valid_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( uc_default_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu4_valid_offset: iu4_valid_offset + 2 - 1 ] ) ,
. scout ( sov [ iu4_valid_offset: iu4_valid_offset + 2 - 1 ] ) ,
. din ( iu4_valid_d ) ,
. dout ( iu4_valid_l2 )
) ;
tri_rlmreg_p # ( . WIDTH ( uc_ifar ) , . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu4_ifar_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( iu4_stage_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu4_ifar_offset: iu4_ifar_offset + uc_ifar - 1 ] ) ,
. scout ( sov [ iu4_ifar_offset: iu4_ifar_offset + uc_ifar - 1 ] ) ,
. din ( iu4_ifar_d ) ,
. dout ( iu4_ifar_l2 )
) ;
tri_rlmreg_p # ( . WIDTH ( 4 ) , . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu4_ext0_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( iu4_stage_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu4_ext0_offset: iu4_ext0_offset + 4 - 1 ] ) ,
. scout ( sov [ iu4_ext0_offset: iu4_ext0_offset + 4 - 1 ] ) ,
. din ( iu4_ext0_d ) ,
. dout ( iu4_ext0_l2 )
) ;
tri_rlmreg_p # ( . WIDTH ( 4 ) , . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu4_ext1_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( iu4_stage_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu4_ext1_offset: iu4_ext1_offset + 4 - 1 ] ) ,
. scout ( sov [ iu4_ext1_offset: iu4_ext1_offset + 4 - 1 ] ) ,
. din ( iu4_ext1_d ) ,
. dout ( iu4_ext1_l2 )
) ;
tri_rlmlatch_p # ( . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu4_done_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( iu4_stage_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu4_done_offset ] ) ,
. scout ( sov [ iu4_done_offset ] ) ,
. din ( iu4_done_d ) ,
. dout ( iu4_done_l2 )
) ;
// Overflow Staging latches
tri_rlmreg_p # ( . WIDTH ( 2 ) , . INIT ( 0 ) , . NEEDS_SRESET ( 1 ) ) iu4_ov_valid_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( uc_default_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu4_ov_valid_offset: iu4_ov_valid_offset + 2 - 1 ] ) ,
. scout ( sov [ iu4_ov_valid_offset: iu4_ov_valid_offset + 2 - 1 ] ) ,
. din ( iu4_ov_valid_d ) ,
. dout ( iu4_ov_valid_l2 )
) ;
tri_rlmreg_p # ( . WIDTH ( uc_ifar ) , . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu4_ov_ifar_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( iu4_ov_stage_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu4_ov_ifar_offset: iu4_ov_ifar_offset + uc_ifar - 1 ] ) ,
. scout ( sov [ iu4_ov_ifar_offset: iu4_ov_ifar_offset + uc_ifar - 1 ] ) ,
. din ( iu4_ov_ifar_d ) ,
. dout ( iu4_ov_ifar_l2 )
) ;
tri_rlmreg_p # ( . WIDTH ( 32 ) , . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu4_ov_instr0_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( iu4_ov_stage_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu4_ov_instr0_offset: iu4_ov_instr0_offset + 32 - 1 ] ) ,
. scout ( sov [ iu4_ov_instr0_offset: iu4_ov_instr0_offset + 32 - 1 ] ) ,
. din ( iu4_ov_instr0_d ) ,
. dout ( iu4_ov_instr0_l2 )
) ;
tri_rlmreg_p # ( . WIDTH ( 32 ) , . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu4_ov_instr1_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( iu4_ov_stage_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu4_ov_instr1_offset: iu4_ov_instr1_offset + 32 - 1 ] ) ,
. scout ( sov [ iu4_ov_instr1_offset: iu4_ov_instr1_offset + 32 - 1 ] ) ,
. din ( iu4_ov_instr1_d ) ,
. dout ( iu4_ov_instr1_l2 )
) ;
tri_rlmreg_p # ( . WIDTH ( 4 ) , . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) u4_ov_ext0_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( iu4_ov_stage_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu4_ov_ext0_offset: iu4_ov_ext0_offset + 4 - 1 ] ) ,
. scout ( sov [ iu4_ov_ext0_offset: iu4_ov_ext0_offset + 4 - 1 ] ) ,
. din ( iu4_ov_ext0_d ) ,
. dout ( iu4_ov_ext0_l2 )
) ;
tri_rlmreg_p # ( . WIDTH ( 4 ) , . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu4_ov_ext1_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( iu4_ov_stage_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu4_ov_ext1_offset: iu4_ov_ext1_offset + 4 - 1 ] ) ,
. scout ( sov [ iu4_ov_ext1_offset: iu4_ov_ext1_offset + 4 - 1 ] ) ,
. din ( iu4_ov_ext1_d ) ,
. dout ( iu4_ov_ext1_l2 )
) ;
tri_rlmlatch_p # ( . INIT ( 0 ) , . NEEDS_SRESET ( 0 ) ) iu4_ov_done_latch (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. act ( iu4_ov_stage_act ) ,
. thold_b ( pc_iu_func_sl_thold_0_b ) ,
. sg ( pc_iu_sg_0 ) ,
. force_t ( force_t ) ,
. delay_lclkr ( delay_lclkr ) ,
. mpw1_b ( mpw1_b ) ,
. mpw2_b ( mpw2_b ) ,
. d_mode ( d_mode ) ,
. scin ( siv [ iu4_ov_done_offset ] ) ,
. scout ( sov [ iu4_ov_done_offset ] ) ,
. din ( iu4_ov_done_d ) ,
. dout ( iu4_ov_done_l2 )
) ;
//---------------------------------------------------------------------
// pervasive thold/sg latches
//---------------------------------------------------------------------
tri_plat # ( . WIDTH ( 2 ) ) perv_2to1_reg (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. flush ( tc_ac_ccflush_dc ) ,
. din ( { pc_iu_func_sl_thold_2 , pc_iu_sg_2 } ) ,
. q ( { pc_iu_func_sl_thold_1 , pc_iu_sg_1 } )
) ;
tri_plat # ( . WIDTH ( 2 ) ) perv_1to0_reg (
. vd ( vdd ) ,
. gd ( gnd ) ,
. clk ( clk ) ,
. rst ( rst ) ,
. flush ( tc_ac_ccflush_dc ) ,
. din ( { pc_iu_func_sl_thold_1 , pc_iu_sg_1 } ) ,
. q ( { pc_iu_func_sl_thold_0 , pc_iu_sg_0 } )
) ;
tri_lcbor perv_lcbor (
. clkoff_b ( clkoff_b ) ,
. thold ( pc_iu_func_sl_thold_0 ) ,
. sg ( pc_iu_sg_0 ) ,
. act_dis ( act_dis ) ,
. force_t ( force_t ) ,
. thold_b ( pc_iu_func_sl_thold_0_b )
) ;
//---------------------------------------------------------------------
// Scan
//---------------------------------------------------------------------
assign siv [ 0 : scan_right + 4 ] = { sov [ 1 : scan_right + 4 ] , scan_in } ;
assign scan_out = sov [ 0 ] ;
endmodule