From 1e136010c9e338da25990c62c278d5273cb6cb64 Mon Sep 17 00:00:00 2001 From: Raphael Jacquot Date: Wed, 20 Feb 2019 09:18:40 +0100 Subject: [PATCH] add copyright and license add the 9x block (needs work) --- saturn_decoder.v | 70 +++++++++++++++++++++++++++++++++++++ saturn_decoder_block_vars.v | 34 +++++++++++++++--- 2 files changed, 99 insertions(+), 5 deletions(-) diff --git a/saturn_decoder.v b/saturn_decoder.v index 58759ae..d6200d8 100644 --- a/saturn_decoder.v +++ b/saturn_decoder.v @@ -1,3 +1,23 @@ +/* + (c) Raphaël Jacquot 2019 + + This file is part of hp_saturn. + + hp_saturn is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + any later version. + + hp_saturn is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Foobar. If not, see . + + */ + /****************************************************************************** * * Instruction decoder module @@ -33,6 +53,7 @@ module saturn_decoder( o_ins_set_mode, o_mode_dec, o_ins_alu_op, o_ins_test_go, o_ins_reset, o_ins_config, + o_ins_mem_xfr, o_xfr_dir_out, o_dbg_nibbles, o_dbg_nb_nbls, o_mem_load, o_mem_pos ); @@ -97,6 +118,8 @@ output reg [0:0] o_ins_test_go; // bus operations output reg [0:0] o_ins_reset; output reg [0:0] o_ins_config; +output reg [0:0] o_ins_mem_xfr; +output reg [0:0] o_xfr_dir_out; /* data used by the debugger * @@ -191,6 +214,8 @@ always @(posedge i_clk) begin o_ins_set_mode <= 0; o_ins_reset <= 0; o_ins_config <= 0; + o_ins_mem_xfr <= 0; + o_xfr_dir_out <= 0; o_test_carry <= 0; end @@ -261,6 +286,8 @@ always @(posedge i_clk) begin $display("cleanup instruction modes"); o_ins_reset <= 0; o_ins_config <= 0; + o_ins_mem_xfr <= 0; + o_xfr_dir_out <= 0; // counters for debugger info o_dbg_nb_nbls <= 1; @@ -315,6 +342,13 @@ always @(posedge i_clk) begin `endif end 4'h8: block_8x <= 1; + 4'h9: begin + go_fields_table <= 1; + // we don't know, safe bet is table a, but could be table b, + // works either way, table is fixed on the next nibble + o_fields_table <= `FT_TABLE_a; + block_9x <= 1; + end 4'hA: begin go_fields_table <= 1; // we don't know, safe bet is table a, but could be table b, @@ -530,6 +564,10 @@ always @(posedge i_clk) begin o_alu_no_stall <= !use_fields_tbl && i_nibble[1]; // o_alu_debug <= i_nibble[1]; + // set the info about this being a memory transfer + o_ins_mem_xfr <= 1; + o_xfr_dir_out <= !i_nibble[1]; + block_15xx <= use_fields_tbl; o_ins_alu_op <= !(use_fields_tbl); @@ -583,6 +621,38 @@ always @(posedge i_clk) begin `include "saturn_decoder_block_8.v" + /* + * Block 9xx + * + * + */ + + if (do_block_9x) begin +`ifdef SIM + $display("block_9x %h", i_nibble); +`endif + o_fields_table <= i_nibble[3]?`FT_TABLE_b:`FT_TABLE_a; + block_9ax <= !i_nibble[3]; + block_9bx <= i_nibble[3]; + block_9x <= 0; + end + + if (do_block_9ax) begin +`ifdef SIM + $display("block_9ax %h", i_nibble); +`endif + o_dec_error <= 1; + block_9ax <= 0; + end + + if (do_block_9bx) begin +`ifdef SIM + $display("block_9bx %h", i_nibble); +`endif + o_dec_error <= 1; + block_9bx <= 0; + end + /* * Block Axx * ra=ra+rb a diff --git a/saturn_decoder_block_vars.v b/saturn_decoder_block_vars.v index 1758b09..1128e1e 100644 --- a/saturn_decoder_block_vars.v +++ b/saturn_decoder_block_vars.v @@ -1,9 +1,21 @@ - /* - * - * - * - * + (c) Raphaël Jacquot 2019 + + This file is part of hp_saturn. + + hp_saturn is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + any later version. + + hp_saturn is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Foobar. If not, see . + */ `ifndef _SATURN_DECODER_BLOCK_VARS @@ -123,6 +135,18 @@ wire do_block_jump_test2; assign do_block_jump_test = do_on_other_nibbles && block_jump_test; assign do_block_jump_test2 = do_on_other_nibbles && block_jump_test2; +reg block_9x; +wire do_block_9x; +assign do_block_9x = do_on_other_nibbles && block_9x; + +reg block_9ax; +wire do_block_9ax; +assign do_block_9ax = do_on_other_nibbles && block_9ax; + +reg block_9bx; +wire do_block_9bx; +assign do_block_9bx = do_on_other_nibbles && block_9bx; + reg block_Ax; wire do_block_Ax; assign do_block_Ax = do_on_other_nibbles && block_Ax;