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

Subversion Repositories i650

[/] [i650/] [trunk/] [rtl/] [operator_ctl.v] - Diff between revs 10 and 11

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 10 Rev 11
Line 29... Line 29...
// from http://www.opencores.org/lgpl.shtml
// from http://www.opencores.org/lgpl.shtml
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
`include "defines.v"
`include "defines.v"
 
 
module operator_ctl (
module operator_ctl (
      input rst,
      input rst, clk,
      input ap, dp,
      input ap, dp,
      input dx, d0, d1, d2, d3, d4, d5, d6, d10,
      input dx, d0, d1, d2, d3, d4, d5, d6, d10,
      input wu, hp,
      input wu, hp,
      input [0:3] early_idx, ontime_idx,
      input [0:3] early_idx, ontime_idx,
 
 
      input [0:6] cmd_digit_in, io_buffer_in,
      input [0:6] cmd_digit_in, io_buffer_in, gs_in,
      input [0:5] command,
      input [0:5] command,
 
 
      output reg[0:6] data_out, addr_out,
      output reg[0:6] data_out, addr_out, console_out,
      output reg console_to_addr,
      output reg console_to_addr,
      output reg[0:14] gs_ram_addr,
      output reg[0:14] gs_ram_addr,
      output reg read_gs, write_gs,
      output reg read_gs, write_gs,
      output reg pgm_start, pgm_stop, err_reset, err_sense_reset,
      output reg pgm_start, pgm_stop, err_reset, err_sense_reset,
      output run_control, half_or_pgm_stop, ri_storage, ro_storage,
      output run_control, half_or_pgm_stop, ri_storage, ro_storage,
             storage_control,
             storage_control,
      output reg man_pgm_reset, man_acc_reset, set_8000, reset_8000,
      output reg man_pgm_reset, man_acc_reset, set_8000, reset_8000,
 
                 hard_reset,
 
 
      output reg[0:6] cmd_digit_out,
      output reg[0:6] cmd_digit_out,
      output reg busy, digit_ready,
      output reg busy, digit_ready,
      output reg punch_card, read_card, card_digit_ready
      output reg punch_card, read_card, card_digit_ready
   );
   );
Line 70... Line 71...
   assign ri_storage = disp_sw_ri;
   assign ri_storage = disp_sw_ri;
   assign ro_storage = disp_sw_ro;
   assign ro_storage = disp_sw_ro;
   assign storage_control = run_control | disp_sw_ro;
   assign storage_control = run_control | disp_sw_ro;
 
 
   reg do_power_on_reset, do_reset_console, do_err_reset, do_err_sense_reset,
   reg do_power_on_reset, do_reset_console, do_err_reset, do_err_sense_reset,
       do_pgm_reset, do_acc_reset;
       do_pgm_reset, do_acc_reset, do_hard_reset, do_clear_drum;
   reg [0:5] state;
   reg [0:5] state;
 
 
   reg [0:6] gs_addr_th, gs_addr_h, gs_addr_t, gs_addr_u;
   reg [0:6] gs_addr_th, gs_addr_h, gs_addr_t, gs_addr_u;
   wire [0:14] gs_band_addr;
   wire [0:14] gs_band_addr;
   wire [0:9] gs_word_offset;
   wire [0:9] gs_word_offset;
Line 92... Line 93...
   `define state_acc_reset_2           6'd6
   `define state_acc_reset_2           6'd6
   `define state_err_reset_1           6'd7
   `define state_err_reset_1           6'd7
   `define state_err_reset_2           6'd8
   `define state_err_reset_2           6'd8
   `define state_err_sense_reset_1     6'd9
   `define state_err_sense_reset_1     6'd9
   `define state_err_sense_reset_2     6'd10
   `define state_err_sense_reset_2     6'd10
 
   `define state_hard_reset_1          6'd11
 
 
   `define state_storage_entry_sw_1    6'd11
   `define state_storage_entry_sw_1    6'd12
   `define state_storage_entry_sw_2    6'd12
   `define state_storage_entry_sw_2    6'd13
   `define state_addr_sel_sw_1         6'd13
   `define state_addr_sel_sw_1         6'd14
   `define state_addr_sel_sw_2         6'd14
   `define state_addr_sel_sw_2         6'd15
 
 
   `define state_xfer_key_1            6'd15
   `define state_xfer_key_1            6'd16
   `define state_xfer_key_2            6'd16
   `define state_xfer_key_2            6'd17
   `define state_pgm_start_key_1       6'd17
   `define state_pgm_start_key_1       6'd18
   `define state_pgm_start_key_2       6'd18
   `define state_pgm_start_key_2       6'd19
   `define state_pgm_stop_key_1        6'd19
   `define state_pgm_stop_key_1        6'd20
   `define state_pgm_stop_key_2        6'd20
   `define state_pgm_stop_key_2        6'd21
 
 
   `define state_read_gs_1             6'd31
   `define state_read_gs_1             6'd30
   `define state_read_gs_2             6'd32
   `define state_read_gs_2             6'd31
   `define state_read_gs_3             6'd33
   `define state_read_gs_3             6'd32
   `define state_read_gs_4             6'd34
   `define state_read_gs_4             6'd33
   `define state_read_gs_5             6'd35
   `define state_read_gs_5             6'd34
 
 
 
   `define state_clear_drum_1          6'd50
 
   `define state_clear_drum_2          6'd51
 
   `define state_clear_drum_3          6'd52
 
 
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   // Operator console state machine
   // Operator console state machine
   //-----------------------------------------------------------------------------
   //-----------------------------------------------------------------------------
   always @(posedge rst, posedge dp) begin
   always @(posedge clk) begin
      if (rst) begin
      if (rst) begin
         console_to_addr  <= 0;
         console_to_addr  <= 0;
         pgm_start        <= 0;
         pgm_start        <= 0;
         pgm_stop         <= 0;
         pgm_stop         <= 0;
         err_reset        <= 0;
         err_reset        <= 0;
         err_sense_reset  <= 0;
         err_sense_reset  <= 0;
         man_pgm_reset    <= 0;
         man_pgm_reset    <= 0;
         man_acc_reset    <= 0;
         man_acc_reset    <= 0;
         set_8000         <= 0;
         set_8000         <= 0;
         reset_8000       <= 0;
         reset_8000       <= 0;
 
         hard_reset       <= 0;
 
 
         // reset console switches
         // reset console switches
         pgm_sw_stop      <= 0;
         pgm_sw_stop      <= 0;
         pgm_sw_run       <= 1;
         pgm_sw_run       <= 1;
 
         half_cycle_sw_run <= 1;
 
         half_cycle_sw_half <= 0;
         ctl_sw_addr_stop <= 0;
         ctl_sw_addr_stop <= 0;
         ctl_sw_run       <= 1;
         ctl_sw_run       <= 1;
         ctl_sw_manual    <= 0;
         ctl_sw_manual    <= 0;
         disp_sw_lacc     <= 0;
         disp_sw_lacc     <= 0;
         disp_sw_uacc     <= 0;
         disp_sw_uacc     <= 0;
Line 154... Line 163...
         do_reset_console   <= 0;
         do_reset_console   <= 0;
         do_err_reset       <= 0;
         do_err_reset       <= 0;
         do_err_sense_reset <= 0;
         do_err_sense_reset <= 0;
         do_pgm_reset       <= 0;
         do_pgm_reset       <= 0;
         do_acc_reset       <= 0;
         do_acc_reset       <= 0;
 
         do_hard_reset      <= 0;
 
         do_clear_drum      <= 0;
 
 
         gs_ram_addr        <= 15'd0;
         gs_ram_addr        <= 15'd0;
         read_gs            <= 0;
         read_gs            <= 0;
         write_gs           <= 0;
         write_gs           <= 0;
      end else begin
         console_out        <= `biq_blank;
 
      end else if (dp) begin
         case (state)
         case (state)
            `state_idle: begin
            `state_idle: begin
               case (command)
               case (command)
                  `cmd_none: begin
                  `cmd_none: begin
                     if (do_power_on_reset) begin
                     if (do_power_on_reset) begin
Line 170... Line 182...
                        do_reset_console   <= 1;
                        do_reset_console   <= 1;
                        do_pgm_reset       <= 1;
                        do_pgm_reset       <= 1;
                        do_acc_reset       <= 1;
                        do_acc_reset       <= 1;
                        do_err_reset       <= 1;
                        do_err_reset       <= 1;
                        do_err_sense_reset <= 1;
                        do_err_sense_reset <= 1;
 
                        do_hard_reset      <= 1;
 
                        do_clear_drum      <= 1;
 
                     end else if (do_hard_reset) begin
 
                        do_hard_reset <= 0;
 
                        hard_reset <= 1;
 
                        state <= `state_hard_reset_1;
                     end else if (do_reset_console) begin
                     end else if (do_reset_console) begin
                        do_reset_console   <= 0;
                        do_reset_console   <= 0;
                        state <= `state_reset_console_1;
                        state <= `state_reset_console_1;
 
                     end else if (do_clear_drum) begin
 
                        do_clear_drum <= 0;
 
                        gs_ram_addr <= 15'd0;
 
                        state <= `state_clear_drum_1;
                     end else if (do_pgm_reset) begin
                     end else if (do_pgm_reset) begin
                        do_pgm_reset       <= 0;
                        do_pgm_reset       <= 0;
                        state <= `state_pgm_reset_1;
                        state <= `state_pgm_reset_1;
                     end else if (do_acc_reset) begin
                     end else if (do_acc_reset) begin
                        do_acc_reset       <= 0;
                        do_acc_reset       <= 0;
Line 352... Line 374...
                     pgm_stop <= 1;
                     pgm_stop <= 1;
                     state <= `state_pgm_stop_key_1;
                     state <= `state_pgm_stop_key_1;
                  end
                  end
 
 
                  `cmd_pgm_reset_key: begin
                  `cmd_pgm_reset_key: begin
 
                     busy <= 1;
                     do_pgm_reset <= 1;
                     do_pgm_reset <= 1;
                     do_err_reset <= 1;
                     do_err_reset <= 1;
                  end
                  end
 
 
                  `cmd_comp_reset_key: begin
                  `cmd_comp_reset_key: begin
 
                     busy <= 1;
                     do_pgm_reset <= 1;
                     do_pgm_reset <= 1;
                     do_acc_reset <= 1;
                     do_acc_reset <= 1;
                     do_err_reset <= 1;
                     do_err_reset <= 1;
                  end
                  end
 
 
                  `cmd_acc_reset_key: begin
                  `cmd_acc_reset_key: begin
 
                     busy <= 1;
                     do_acc_reset <= 1;
                     do_acc_reset <= 1;
                     do_err_reset <= 1;
                     do_err_reset <= 1;
                  end
                  end
 
 
                  `cmd_err_reset_key: begin
                  `cmd_err_reset_key: begin
 
                     busy <= 1;
                     do_err_reset <= 1;
                     do_err_reset <= 1;
                  end
                  end
 
 
                  `cmd_err_sense_reset_key: begin
                  `cmd_err_sense_reset_key: begin
 
                     busy <= 1;
                     do_err_sense_reset <= 1;
                     do_err_sense_reset <= 1;
                  end
                  end
 
 
                  //--------------------------------------------------------------
                  //--------------------------------------------------------------
                  // Read from general storage:
                  // Read from general storage:
Line 419... Line 446...
                  //     dx: blank
                  //     dx: blank
                  //     d0: minus
                  //     d0: minus
                  //     d1-d10: zero
                  //     d1-d10: zero
                  //     gs_ram_addr++
                  //     gs_ram_addr++
                  `cmd_clear_gs: begin
                  `cmd_clear_gs: begin
 
                     if (ctl_sw_manual) begin
 
                        busy <= 1;
 
                        do_clear_drum <= 1;
 
                     end
                  end
                  end
 
 
                  `cmd_load_gs: begin
                  `cmd_load_gs: begin
                  end
                  end
 
 
Line 434... Line 464...
                  end
                  end
 
 
                  `cmd_reset_console: begin
                  `cmd_reset_console: begin
                  end
                  end
 
 
 
                  `cmd_hard_reset: begin
 
                     busy <= 1;
 
                     do_hard_reset <= 1;
 
                  end
 
 
               endcase;
               endcase;
            end
            end
 
 
            // Reset console            
            // Reset console            
            `state_reset_console_1: begin
            `state_reset_console_1: begin
               if (d10) state <= `state_reset_console_2;
               if (d10) state <= `state_reset_console_2;
            end
            end
 
 
            `state_reset_console_2: begin
            `state_reset_console_2: begin
               storage_entry_sw[ontime_idx] <= d0? `biq_plus : `biq_0;
               storage_entry_sw[ontime_idx] <= dx? `biq_blank
 
                                             : d0? `biq_plus : `biq_0;
               addr_sel_sw[ontime_idx[2:3]] <= `biq_0;
               addr_sel_sw[ontime_idx[2:3]] <= `biq_0;
               if (d10) state <= `state_idle;
               if (d10) state <= `state_idle;
            end
            end
 
 
            // Program reset key press
            // Program reset key press
Line 508... Line 544...
                  err_sense_reset <= 0;
                  err_sense_reset <= 0;
                  state <= `state_idle;
                  state <= `state_idle;
               end
               end
            end
            end
 
 
 
            // Hard reset
 
            `state_hard_reset_1: begin
 
               hard_reset <= 0;
 
               state <= `state_idle;
 
            end
 
 
            // Set storage entry switches
            // Set storage entry switches
            `state_storage_entry_sw_1: begin
            `state_storage_entry_sw_1: begin
               if (d0) begin
               if (d0) begin
                  state <= `state_storage_entry_sw_2;
                  state <= `state_storage_entry_sw_2;
                  digit_ready <= 1;
                  digit_ready <= 1;
Line 620... Line 662...
               gs_ram_addr <= gs_word_addr;
               gs_ram_addr <= gs_word_addr;
               state <= `state_read_gs_4;
               state <= `state_read_gs_4;
            end
            end
 
 
            `state_read_gs_4: begin
            `state_read_gs_4: begin
 
               cmd_digit_out <= gs_in;
               state <= `state_read_gs_5;
               state <= `state_read_gs_5;
            end
            end
 
 
 
            // 0 : Ignore if not in manual
 
            //     Clear gs_ram_addr
 
            // 1 : Synchronize with d10
 
            //     Turn on console_write_gs
 
            // 2 : Put a digit:
 
            //     dx: blank
 
            //     d0: minus
 
            //     d1-d10: zero
 
            //     gs_ram_addr++
 
            `state_clear_drum_1: begin
 
               if (d10) begin
 
                  state <= `state_clear_drum_2;
 
               end
 
            end
 
 
 
            `state_clear_drum_2: begin
 
               write_gs <= 1;
 
               console_out <= dx? `biq_blank
 
                            : d0? `biq_minus
 
                            : `biq_0;
 
               if (write_gs)
 
                  gs_ram_addr <= gs_ram_addr + 1;
 
               if (gs_ram_addr == 15'd23999) begin
 
                  write_gs <= 0;
 
                  state <= `state_idle;
 
               end
 
            end
 
 
         endcase;
         endcase;
      end
      end
   end;
   end;
 
 
   always @(posedge rst, posedge ap) begin
   always @(posedge ap) begin
      if (rst) begin
      if (hard_reset) begin
         data_out <= `biq_blank;
         data_out <= `biq_blank;
         addr_out <= `biq_blank;
         addr_out <= `biq_blank;
      end else begin
      end else begin
         data_out <= d10? `biq_blank : storage_entry_sw[early_idx];
         data_out <= d10? `biq_blank : storage_entry_sw[early_idx];
         addr_out <= (d3 | d4 | d5 | d6)? addr_sel_sw[early_idx[2:3]] : `biq_blank;
         addr_out <= (d3 | d4 | d5 | d6)? addr_sel_sw[early_idx[2:3]] : `biq_blank;
      end
      end
   end;
   end;
 
 
   always @(posedge rst, posedge ap) begin
   always @(posedge ap) begin
      if (rst) begin
      if (hard_reset) begin
         punch_card       <= 0;
         punch_card       <= 0;
         read_card        <= 0;
         read_card        <= 0;
         card_digit_ready <= 0;
         card_digit_ready <= 0;
      end
      end
   end;
   end;

powered by: WebSVN 2.1.0

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