OpenCores
URL https://opencores.org/ocsvn/i650/i650/trunk

Subversion Repositories i650

[/] [i650/] [trunk/] [rtl/] [decode_ctl.v] - Diff between revs 23 and 28

Only display areas with differences | Details | Blame | View Log

Rev 23 Rev 28
`timescale 1ns / 1ps
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
// IBM 650 Reconstruction in Verilog (i650)
// IBM 650 Reconstruction in Verilog (i650)
// 
// 
// This file is part of the IBM 650 Reconstruction in Verilog (i650) project
// This file is part of the IBM 650 Reconstruction in Verilog (i650) project
// http:////www.opencores.org/project,i650
// http:////www.opencores.org/project,i650
//
//
// Description: Instruction decode and control.
// Description: Instruction decode and control.
// 
// 
// Additional Comments: See US 2959351, Fig. 78.
// Additional Comments: See US 2959351, Fig. 78.
//
//
// Copyright (c) 2015 Robert Abeles
// Copyright (c) 2015 Robert Abeles
//
//
// This source file is free software; you can redistribute it
// This source file is free software; you can redistribute it
// and/or modify it under the terms of the GNU Lesser General
// and/or modify it under the terms of the GNU Lesser General
// Public License as published by the Free Software Foundation;
// Public License as published by the Free Software Foundation;
// either version 2.1 of the License, or (at your option) any
// either version 2.1 of the License, or (at your option) any
// later version.
// later version.
//
//
// This source is distributed in the hope that it will be
// This source is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied
// useful, but WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE.  See the GNU Lesser General Public License for more
// PURPOSE.  See the GNU Lesser General Public License for more
// details.
// details.
//
//
// You should have received a copy of the GNU Lesser General
// You should have received a copy of the GNU Lesser General
// Public License along with this source; if not, download it
// Public License along with this source; if not, download it
// from http://www.opencores.org/lgpl.shtml
// from http://www.opencores.org/lgpl.shtml
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
`include "defines.v"
`include "defines.v"
 
 
module decode_ctl (
module decode_ctl (
   input rst,
   input rst,
   input ap, bp, cp,
   input ap, bp, cp,
   input dx, d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10,
   input dx, d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10,
   input d5_d10, d10_d1_d5, dxl, dxu, d10u,
   input d5_d10, d10_d1_d5, dxl, dxu, d10u,
   input [0:6] opreg_t, opreg_u, addr_u,
   input [0:6] opreg_t, opreg_u, addr_u,
   input [0:6] ontime_dist,
   input [0:6] ontime_dist,
   input man_ro_storage, dist_back_sig, d_control, ena_arith_codes,
   input man_ro_storage, dist_back_sig, d_control, ena_arith_codes,
   input pgm_stop_sw,
   input pgm_stop_sw,
   input acc_zero_test, acc_no_zero_test, acc_plus_test, acc_minus_test,
   input acc_zero_test, acc_no_zero_test, acc_plus_test, acc_minus_test,
   input single_intlk, arith_restart, overflow_sense_sig, man_acc_reset,
   input single_intlk, arith_restart, overflow_sense_sig, man_acc_reset,
 
 
   output all_restarts, use_d_for_i, turn_on_single_intlk, turn_on_op_intlk,
   output all_restarts, use_d_for_i, turn_on_single_intlk, turn_on_op_intlk,
   output stop_code, code_69, tlu_sig,
   output stop_code, code_69, tlu_sig,
   output mult_sig, divide_sig, reset_sig, no_reset_sig, abs_sig, no_abs_sig,
   output mult_sig, divide_sig, reset_sig, no_reset_sig, abs_sig, no_abs_sig,
   output lower_sig, upper_sig, add_sig, subt_sig,
   output lower_sig, upper_sig, add_sig, subt_sig,
   output right_shift_sig, left_shift_sig, half_correct_sig, shift_count_sig,
   output right_shift_sig, left_shift_sig, half_correct_sig, shift_count_sig,
 
   output end_shift_control,
   output reg overflow_sense_latch
   output reg overflow_sense_latch
   );
   );
 
 
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   // Miscellaneous signals
   // Miscellaneous signals
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   wire code_90_d_for_i_sig, code_90_restart_sig, code_69_restart_sig,
   wire code_90_d_for_i_sig, code_90_restart_sig, code_69_restart_sig,
        code_00_01_restart_sig, code_30_35_restart, shift_restart,
        code_00_01_restart_sig, code_30_35_restart, shift_restart,
        branch_restart, branch_d_for_i, code_47_d_for_i_sig;
        branch_restart, branch_d_for_i, code_47_d_for_i_sig;
 
 
   assign all_restarts =  code_90_restart_sig | code_69_restart_sig
   assign all_restarts =  code_90_restart_sig | code_69_restart_sig
                        | code_00_01_restart_sig | code_30_35_restart
                        | code_00_01_restart_sig | code_30_35_restart
                        | shift_restart | branch_restart;
                        | shift_restart | branch_restart;
   assign use_d_for_i =  code_90_d_for_i_sig | branch_d_for_i
   assign use_d_for_i =  code_90_d_for_i_sig | branch_d_for_i
                       | code_47_d_for_i_sig;
                       | code_47_d_for_i_sig;
   assign turn_on_single_intlk = end_shift_control;
   assign turn_on_single_intlk = end_shift_control;
 
 
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   // 00 -- No Operation
   // 00 -- No Operation
   // 01 -- Stop
   // 01 -- Stop
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   wire code_00_to_04_dctl_p =  opreg_t[`biq_b0] & opreg_t[`biq_q0]
   wire code_00_to_04_dctl_p =  opreg_t[`biq_b0] & opreg_t[`biq_q0]
                              & opreg_u[`biq_b0] & d_control;
                              & opreg_u[`biq_b0] & d_control;
   wire code_00_dctl_p = code_00_to_04_dctl_p & opreg_u[`biq_q0];
   wire code_00_dctl_p = code_00_to_04_dctl_p & opreg_u[`biq_q0];
   wire code_01_dctl_p = code_00_to_04_dctl_p & opreg_u[`biq_q1];
   wire code_01_dctl_p = code_00_to_04_dctl_p & opreg_u[`biq_q1];
   wire code_00_01_restart_p = code_00_dctl_p | code_01_dctl_p;
   wire code_00_01_restart_p = code_00_dctl_p | code_01_dctl_p;
   digit_pulse c00_rstrt (rst, ap, code_00_01_restart_p,
   digit_pulse c00_rstrt (rst, ap, code_00_01_restart_p,
                          1'b0, code_00_01_restart_sig);
                          1'b0, code_00_01_restart_sig);
   assign stop_code = pgm_stop_sw & code_01_dctl_p;
   assign stop_code = pgm_stop_sw & code_01_dctl_p;
 
 
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   // 14 -- Divide
   // 14 -- Divide
   // 64 -- Divide and Reset Upper
   // 64 -- Divide and Reset Upper
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   wire code_14_64_dx_d0_p = (dx | d0) & opreg_t[`biq_q1] // schematic missing term
   wire code_14_64_dx_d0_p = (dx | d0) & opreg_t[`biq_q1] // schematic missing term
                                       & opreg_u[`biq_b0] & opreg_u[`biq_q4];
                                       & opreg_u[`biq_b0] & opreg_u[`biq_q4];
   assign divide_sig =  (code_14_64_dx_d0_p & ena_arith_codes & opreg_t[`biq_b5])
   assign divide_sig =  (code_14_64_dx_d0_p & ena_arith_codes & opreg_t[`biq_b5])
                      | (code_14_64_dx_d0_p & ena_arith_codes & opreg_t[`biq_b0]);
                      | (code_14_64_dx_d0_p & ena_arith_codes & opreg_t[`biq_b0]);
 
 
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   // 19 -- Multiply
   // 19 -- Multiply
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   assign mult_sig = (dx | d0) & ena_arith_codes
   assign mult_sig = (dx | d0) & ena_arith_codes
                               & code_19_or_69_dctl_p & opreg_t[`biq_b0];
                               & code_19_or_69_dctl_p & opreg_t[`biq_b0];
 
 
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   // 30 -- Shift Right
   // 30 -- Shift Right
   // 31 -- Shift and Round
   // 31 -- Shift and Round
   // 35 -- Shift Left
   // 35 -- Shift Left
   // 36 -- Shift Left and Count
   // 36 -- Shift Left and Count
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   reg shift_control_latch;
   reg shift_control_latch;
   wire end_shift_control;
 
   digit_pulse end_shift (rst, cp, ~shift_control_latch, 1'b1, end_shift_control);
   digit_pulse end_shift (rst, cp, ~shift_control_latch, 1'b1, end_shift_control);
   wire shift_control_on_p = d_control & d10u & ~single_intlk & opreg_t[`biq_b0]
   wire shift_control_on_p = d_control & d10u & ~single_intlk & opreg_t[`biq_b0]
                                                              & opreg_t[`biq_q3];
                                                              & opreg_t[`biq_q3];
   always @(posedge ap)
   always @(posedge ap)
      if (rst) begin
      if (rst) begin
         shift_control_latch <= 0;
         shift_control_latch <= 0;
      end else if (dxu) begin
      end else if (dxu) begin
         shift_control_latch <= 0;
         shift_control_latch <= 0;
      end else if (shift_control_on_p) begin
      end else if (shift_control_on_p) begin
         shift_control_latch <= 1;
         shift_control_latch <= 1;
      end;
      end;
 
 
   wire zero_shift_number = addr_u[`biq_b0] & addr_u[`biq_q0];
   wire zero_shift_number = addr_u[`biq_b0] & addr_u[`biq_q0];
   wire edxl_shift_control = shift_control_latch & dxl;
   wire edxl_shift_control = shift_control_latch & dxl;
   wire code_x5 = opreg_u[`biq_b5] & opreg_u[`biq_q0];
   wire code_x5 = opreg_u[`biq_b5] & opreg_u[`biq_q0];
   wire code_x0 = opreg_u[`biq_b0] & opreg_u[`biq_q0];
   wire code_x0 = opreg_u[`biq_b0] & opreg_u[`biq_q0];
   wire code_x0_or_x5 = code_x0 | code_x5;
   wire code_x0_or_x5 = code_x0 | code_x5;
   // turn_on_op_intlk: No zero shift num on 30 or 35 codes
   // turn_on_op_intlk: No zero shift num on 30 or 35 codes
   assign turn_on_op_intlk =  ~(zero_shift_number & shift_control_latch
   assign turn_on_op_intlk =  ~(zero_shift_number & shift_control_latch
                                                  & code_x0_or_x5)
                                                  & code_x0_or_x5)
                            & edxl_shift_control;
                            & edxl_shift_control;
   assign code_30_35_restart = zero_shift_number & edxl_shift_control
   assign code_30_35_restart = zero_shift_number & edxl_shift_control
                                                 & (code_x0_or_x5);
                                                 & (code_x0_or_x5);
 
 
   assign right_shift_sig  = ~zero_shift_number & edxl_shift_control & code_x0;
   assign right_shift_sig  = ~zero_shift_number & edxl_shift_control & code_x0;
   assign left_shift_sig   = ~zero_shift_number & edxl_shift_control & code_x5;
   assign left_shift_sig   = ~zero_shift_number & edxl_shift_control & code_x5;
   assign half_correct_sig = shift_control_latch & opreg_u[`biq_b0]
   assign half_correct_sig = shift_control_latch & opreg_u[`biq_b0]
                                                 & opreg_u[`biq_q1];
                                                 & opreg_u[`biq_q1];
   assign shift_count_sig  = shift_control_latch & opreg_u[`biq_b5]
   assign shift_count_sig  = shift_control_latch & opreg_u[`biq_b5]
                                                 & opreg_u[`biq_q1];
                                                 & opreg_u[`biq_q1];
   assign shift_restart = arith_restart & opreg_t[`biq_q3];
   assign shift_restart = arith_restart & opreg_t[`biq_q3];
 
 
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   // 44 -- Branch on non-zero upper acc 
   // 44 -- Branch on non-zero upper acc 
   // 45 -- Branch on zero acc
   // 45 -- Branch on zero acc
   // 46 -- Branch on minus acc
   // 46 -- Branch on minus acc
   // 47 -- Branch on adder overflow
   // 47 -- Branch on adder overflow
   //-----------------------------------------------------------------------------  
   //-----------------------------------------------------------------------------  
   wire code_44_dctl_edxl_p =  d_control & dxl
   wire code_44_dctl_edxl_p =  d_control & dxl
                             & opreg_t[`biq_b0] & opreg_t[`biq_q4]
                             & opreg_t[`biq_b0] & opreg_t[`biq_q4]
                             & opreg_u[`biq_b0] & opreg_u[`biq_q4];
                             & opreg_u[`biq_b0] & opreg_u[`biq_q4];
   wire code_45_to_49_dctl_p = d_control & opreg_t[`biq_b0] & opreg_t[`biq_q4]
   wire code_45_to_49_dctl_p = d_control & opreg_t[`biq_b0] & opreg_t[`biq_q4]
                                         & opreg_u[`biq_b5];
                                         & opreg_u[`biq_b5];
   wire code_45_dctl_edxu_p = dxu & code_45_to_49_dctl_p & opreg_u[`biq_q0];
   wire code_45_dctl_edxu_p = dxu & code_45_to_49_dctl_p & opreg_u[`biq_q0];
   wire code_46_dctl_p = code_45_to_49_dctl_p & opreg_u[`biq_q1];
   wire code_46_dctl_p = code_45_to_49_dctl_p & opreg_u[`biq_q1];
   wire code_47_dctl_p = code_45_to_49_dctl_p & opreg_u[`biq_q2];
   wire code_47_dctl_p = code_45_to_49_dctl_p & opreg_u[`biq_q2];
 
 
   wire code_44_or_45_restart_p =  (code_44_dctl_edxl_p | code_45_dctl_edxu_p)
   wire code_44_or_45_restart_p =  (code_44_dctl_edxl_p | code_45_dctl_edxu_p)
                                  & acc_zero_test;
                                  & acc_zero_test;
   wire code_44_or_45_d_for_i_p =  (code_44_dctl_edxl_p | code_45_dctl_edxu_p)
   wire code_44_or_45_d_for_i_p =  (code_44_dctl_edxl_p | code_45_dctl_edxu_p)
                                  & acc_no_zero_test;
                                  & acc_no_zero_test;
   wire code_46_restart_p = code_46_dctl_p & acc_plus_test;
   wire code_46_restart_p = code_46_dctl_p & acc_plus_test;
   wire code_46_d_for_i_p = code_46_dctl_p & acc_minus_test;
   wire code_46_d_for_i_p = code_46_dctl_p & acc_minus_test;
   wire code_47_restart_p = code_47_dctl_p & d5 & ~overflow_sense_latch;
   wire code_47_restart_p = code_47_dctl_p & d5 & ~overflow_sense_latch;
 
 
   wire branch_restart_p =  code_44_or_45_restart_p | code_46_restart_p
   wire branch_restart_p =  code_44_or_45_restart_p | code_46_restart_p
                          | code_47_restart_p;
                          | code_47_restart_p;
   digit_pulse br_rstrt (rst, bp, branch_restart_p, 1'b0, branch_restart);
   digit_pulse br_rstrt (rst, bp, branch_restart_p, 1'b0, branch_restart);
   wire branch_d_for_i_p = code_44_or_45_d_for_i_p | code_46_d_for_i_p;
   wire branch_d_for_i_p = code_44_or_45_d_for_i_p | code_46_d_for_i_p;
   digit_pulse br_d4i (rst, bp, branch_d_for_i_p, 1'b0, branch_d_for_i);
   digit_pulse br_d4i (rst, bp, branch_d_for_i_p, 1'b0, branch_d_for_i);
 
 
   wire overflow_sense_off_p = man_acc_reset | (code_47_dctl_p & d1);
   wire overflow_sense_off_p = man_acc_reset | (code_47_dctl_p & d1);
   always @(posedge ap) begin
   always @(posedge ap) begin
      if (rst) overflow_sense_latch <= 0;
      if (rst) overflow_sense_latch <= 0;
      else if (overflow_sense_off_p) overflow_sense_latch <= 0;
      else if (overflow_sense_off_p) overflow_sense_latch <= 0;
      else if (overflow_sense_sig)   overflow_sense_latch <= 1;
      else if (overflow_sense_sig)   overflow_sense_latch <= 1;
   end;
   end;
   digit_pulse c47_d4i (rst, bp, ~overflow_sense_latch, 1'b1, code_47_d_for_i_sig);
   digit_pulse c47_d4i (rst, bp, ~overflow_sense_latch, 1'b1, code_47_d_for_i_sig);
 
 
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   // 69 -- Load Distributor
   // 69 -- Load Distributor
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   wire code_19_or_69_dctl_p =  opreg_t[`biq_q1] & opreg_u[`biq_b5]
   wire code_19_or_69_dctl_p =  opreg_t[`biq_q1] & opreg_u[`biq_b5]
                              & opreg_u[`biq_q4] & d_control;
                              & opreg_u[`biq_q4] & d_control;
   assign code_69 = (code_19_or_69_dctl_p & opreg_t[`biq_b5]) | man_ro_storage;
   assign code_69 = (code_19_or_69_dctl_p & opreg_t[`biq_b5]) | man_ro_storage;
   wire code_69_restart_p = code_69 & dist_back_sig;
   wire code_69_restart_p = code_69 & dist_back_sig;
   digit_pulse c69_rstrt (rst, ap, code_69_restart_p, 1'b0, code_69_restart_sig);
   digit_pulse c69_rstrt (rst, ap, code_69_restart_p, 1'b0, code_69_restart_sig);
 
 
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   // 70 -- Read
   // 70 -- Read
   // 71 -- Punch
   // 71 -- Punch
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
 
 
 
 
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   // 84 -- Table Lookup
   // 84 -- Table Lookup
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   assign tlu_sig = d_control & ~single_intlk
   assign tlu_sig = d_control & ~single_intlk
                              & opreg_t[`biq_b5] & opreg_t[`biq_q3]
                              & opreg_t[`biq_b5] & opreg_t[`biq_q3]
                              & opreg_u[`biq_b0] & opreg_u[`biq_q4];
                              & opreg_u[`biq_b0] & opreg_u[`biq_q4];
 
 
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   // 9x -- Branch on Distributor Digit
   // 9x -- Branch on Distributor Digit
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   wire code_9x_dctl_p = opreg_t[`biq_b5] & opreg_t[`biq_q4] & d_control;
   wire code_9x_dctl_p = opreg_t[`biq_b5] & opreg_t[`biq_q4] & d_control;
   wire code_90_ctrl = (d5_d10    & code_9x_dctl_p & opreg_u[`biq_b5])
   wire code_90_ctrl = (d5_d10    & code_9x_dctl_p & opreg_u[`biq_b5])
                     | (d10_d1_d5 & code_9x_dctl_p & opreg_u[`biq_b0]);
                     | (d10_d1_d5 & code_9x_dctl_p & opreg_u[`biq_b0]);
   wire code_90_95_p = (d10 | d5) & opreg_u[`biq_q0] & code_90_ctrl;
   wire code_90_95_p = (d10 | d5) & opreg_u[`biq_q0] & code_90_ctrl;
   wire code_91_96_p = (d1  | d6) & opreg_u[`biq_q1] & code_90_ctrl;
   wire code_91_96_p = (d1  | d6) & opreg_u[`biq_q1] & code_90_ctrl;
   wire code_92_97_p = (d2  | d7) & opreg_u[`biq_q2] & code_90_ctrl;
   wire code_92_97_p = (d2  | d7) & opreg_u[`biq_q2] & code_90_ctrl;
   wire code_93_98_p = (d3  | d8) & opreg_u[`biq_q3] & code_90_ctrl;
   wire code_93_98_p = (d3  | d8) & opreg_u[`biq_q3] & code_90_ctrl;
   wire code_94_99_p = (d4  | d9) & opreg_u[`biq_q4] & code_90_ctrl;
   wire code_94_99_p = (d4  | d9) & opreg_u[`biq_q4] & code_90_ctrl;
   wire code_90_to_99_p   =  code_90_95_p | code_91_96_p | code_92_97_p
   wire code_90_to_99_p   =  code_90_95_p | code_91_96_p | code_92_97_p
                           | code_93_98_p | code_94_99_p;
                           | code_93_98_p | code_94_99_p;
   wire code_90_d_for_i_p = code_90_to_99_p & ontime_dist[`biq_b5]
   wire code_90_d_for_i_p = code_90_to_99_p & ontime_dist[`biq_b5]
                                            & ontime_dist[`biq_q3];
                                            & ontime_dist[`biq_q3];
   wire code_90_restart_p = code_90_to_99_p & ontime_dist[`biq_b5]
   wire code_90_restart_p = code_90_to_99_p & ontime_dist[`biq_b5]
                                            & ontime_dist[`biq_q4];
                                            & ontime_dist[`biq_q4];
   digit_pulse c90_d4i (rst, cp, code_90_d_for_i_p, 1'b0, code_90_d_for_i_sig);
   digit_pulse c90_d4i (rst, cp, code_90_d_for_i_p, 1'b0, code_90_d_for_i_sig);
   digit_pulse c90_rstrt (rst, cp, code_90_restart_p, 1'b0, code_90_restart_sig);
   digit_pulse c90_rstrt (rst, cp, code_90_restart_p, 1'b0, code_90_restart_sig);
 
 
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   // 10's and 60's Opcode Derived Control Signals
   // 10's and 60's Opcode Derived Control Signals
   //
   //
   //   SIGNAL        OPCODES
   //   SIGNAL        OPCODES
   //   ------------  ----------------------------------------------
   //   ------------  ----------------------------------------------
   //   reset_sig     60, 61, 64, 65, 66, 67, 68
   //   reset_sig     60, 61, 64, 65, 66, 67, 68
   //   no_reset_sig  10, 11, 14, 15, 16, 17, 18, 19, 69
   //   no_reset_sig  10, 11, 14, 15, 16, 17, 18, 19, 69
   //   abs_sig       17, 18, 67, 68
   //   abs_sig       17, 18, 67, 68
   //   no_abs_sig    10, 11, 14, 15, 16, 19, 60, 61, 64, 65, 66, 69
   //   no_abs_sig    10, 11, 14, 15, 16, 19, 60, 61, 64, 65, 66, 69
   //   lower_sig     15, 16, 17, 18, 65, 66, 67, 68
   //   lower_sig     15, 16, 17, 18, 65, 66, 67, 68
   //   upper_sig     10, 11, 14, 60, 61, 64
   //   upper_sig     10, 11, 14, 60, 61, 64
   //   add_sig       10, 15, 17, 60, 65, 67
   //   add_sig       10, 15, 17, 60, 65, 67
   //   subt_sig      11, 16, 18, 61, 66, 68
   //   subt_sig      11, 16, 18, 61, 66, 68
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   assign reset_sig    = ~code_19_or_69_dctl_p & d_control & opreg_t[`biq_b5]
   assign reset_sig    = ~code_19_or_69_dctl_p & d_control & opreg_t[`biq_b5]
                                                           & opreg_t[`biq_q1];
                                                           & opreg_t[`biq_q1];
   assign no_reset_sig = code_19_or_69_dctl_p | (d_control & opreg_t[`biq_b0]
   assign no_reset_sig = code_19_or_69_dctl_p | (d_control & opreg_t[`biq_b0]
                                                           & opreg_t[`biq_q1]);
                                                           & opreg_t[`biq_q1]);
   assign abs_sig      = d_control & opreg_t[`biq_q1] & opreg_u[`biq_b5]
   assign abs_sig      = d_control & opreg_t[`biq_q1] & opreg_u[`biq_b5]
                                   & (opreg_u[`biq_q2] | opreg_u[`biq_q3]);
                                   & (opreg_u[`biq_q2] | opreg_u[`biq_q3]);
   assign no_abs_sig   = d_control & opreg_t[`biq_q1]
   assign no_abs_sig   = d_control & opreg_t[`biq_q1]
                                   & (opreg_u[`biq_q4] | opreg_u[`biq_q1]
                                   & (opreg_u[`biq_q4] | opreg_u[`biq_q1]
                                      | opreg_u[`biq_q0]);
                                      | opreg_u[`biq_q0]);
   assign lower_sig    = ena_arith_codes & dx & ~code_19_or_69_dctl_p
   assign lower_sig    = ena_arith_codes & dx & ~code_19_or_69_dctl_p
                                         & opreg_u[`biq_b5];
                                         & opreg_u[`biq_b5];
   assign upper_sig    = ena_arith_codes & dx & opreg_u[`biq_b0];
   assign upper_sig    = ena_arith_codes & dx & opreg_u[`biq_b0];
   assign add_sig      = ena_arith_codes & (dx | d0)
   assign add_sig      = ena_arith_codes & (dx | d0)
                                         & (opreg_u[`biq_q2] | opreg_u[`biq_q0]);
                                         & (opreg_u[`biq_q2] | opreg_u[`biq_q0]);
   assign subt_sig     = ena_arith_codes & (dx | d0)
   assign subt_sig     = ena_arith_codes & (dx | d0)
                                         & (opreg_u[`biq_q3] | opreg_u[`biq_q1]);
                                         & (opreg_u[`biq_q3] | opreg_u[`biq_q1]);
 
 
endmodule
endmodule
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.