Now works on iCEstick
[yule.git] / processor_4.v
index 2184846c30af4349c899f6ac4f5da5fe570d31ae..aa894bf7f60c5ac2f2e8a89dde5c27ce7207ae54 100644 (file)
 `define INST_CAR           4'b1111
 `define INST_CDR           4'b1101
 
-`define STORE_BUTTON       buttons[8]
-`define CLEAR_BUTTON       buttons[9]
-`define PC_INC_BUTTON      buttons[10]
-`define PC_DEC_BUTTON      buttons[11]
-`define PC_CLR_BUTTON      buttons[12]
-`define ACCUM_CLR_BUTTON   buttons[13]
-`define RUN_BUTTON         buttons[14]
-`define EXECUTE_BUTTON     buttons[15]
-
 `define GCOP_NOP      4'd0
 `define GCOP_CDR      4'd1
 `define GCOP_CAR      4'd2
@@ -52,7 +43,7 @@
 // This is a simple four bit accumulator machine. It is a Havard architecture with separate
 // program and user memory address spaces.
 
-module PROCESSOR (input clk, output [23:0] led, output [3:0] indicators, input [15:0] buttons, output uart_tx, input uart_rx);
+module PROCESSOR (input clk, output [4:0] led, output uart_tx, input uart_rx);
    // storage unit
    reg  [7:0] Ein;
    wire [7:0] Eout;
@@ -66,31 +57,14 @@ module PROCESSOR (input clk, output [23:0] led, output [3:0] indicators, input [
 
    reg running = 1;
 
-   always @ (posedge `RUN_BUTTON) begin
-      running <= !running;
-   end
-
-   // Generate running clock
-
-   wire running_counter;
-
-   PRESCALER #(.BITS(1)) scal0 (.clk(clk), .out(running_counter));
-
-   wire running_clk = running & running_counter;
-
-   // Handle execution
-
-   wire execute_trigger;
+   // Generate eval and gc clocks
 
-   SINGLE_TRIGGER trig0 (.clk(clk), .trigger_in(`EXECUTE_BUTTON), .trigger_out(execute_trigger));
-
-   wire running_trigger;
-
-   SINGLE_TRIGGER trig1 (.clk(clk), .trigger_in(running_clk), .trigger_out(running_trigger));
-
-   wire gc_clock = (!running & execute_trigger) | running_clk;
+   reg gc_clock = 0;
    wire eval_clock = !gc_clock & step_eval;
 
+   always @ (posedge clk)
+         gc_clock <= !gc_clock;
+
    GC gc (.clk(gc_clock), .mclk(clk), .Ein(Ein), .Eout(Eout), .gcop(gcop), .ostate(ostate), .step_eval(step_eval));
 
    // Handle halt
@@ -156,14 +130,6 @@ module PROCESSOR (input clk, output [23:0] led, output [3:0] indicators, input [
    wire [3:0] next = pc + 4'b0001;
    wire [3:0] prev = pc + 4'b1111;
 
-   wire       pc_prev_trigger;
-   wire       pc_next_trigger;
-   wire       pc_zero_trigger;
-
-   SINGLE_TRIGGER trig3 (.clk(clk), .trigger_in(`PC_INC_BUTTON), .trigger_out(pc_next_trigger));
-   SINGLE_TRIGGER trig4 (.clk(clk), .trigger_in(`PC_DEC_BUTTON), .trigger_out(pc_prev_trigger));
-   SINGLE_TRIGGER trig5 (.clk(clk), .trigger_in(`PC_CLR_BUTTON), .trigger_out(pc_zero_trigger));
-
    wire [3:0] newPc =
                          (inst == `INST_JP) ? argu :
               (inst == `INST_JPZ) & (accum == 4'b0000) ? argu :
@@ -172,9 +138,6 @@ module PROCESSOR (input clk, output [23:0] led, output [3:0] indicators, input [
                          (inst == `INST_READ) & !fifo_re ? pc :
                          (inst == `INST_RDQ) & !reading_E ? pc :
               (inst != `INST_HALT) ? next :
-/*              !running & pc_zero_trigger ? 4'b00000 :
-              !running & pc_next_trigger ? next :
-              !running & pc_prev_trigger ? prev : */
               pc;
 
    always @ (posedge eval_clock) begin
@@ -208,8 +171,8 @@ module PROCESSOR (input clk, output [23:0] led, output [3:0] indicators, input [
 
    hex_to_ascii h2a (.hex(accum), .ascii(uart_tx_byte));
 
-   // 300-ish baud uart
-   uart #(.CLOCK_DIVIDE(81)) uart (.clk(clk), .rx(uart_rx), .tx(uart_tx), .transmit(uart_tx_signal), .tx_byte(uart_tx_byte), .received(uart_rx_signal), .rx_byte(uart_rx_byte), .is_receiving(uart_is_receiving), .is_transmitting(uart_is_transmitting), .recv_error (uart_rx_error));
+   // 300 baud uart
+   uart #(.CLOCK_DIVIDE(5)) uart (.clk(clk), .rx(uart_rx), .tx(uart_tx), .transmit(uart_tx_signal), .tx_byte(uart_tx_byte), .received(uart_rx_signal), .rx_byte(uart_rx_byte), .is_receiving(uart_is_receiving), .is_transmitting(uart_is_transmitting), .recv_error (uart_rx_error));
 
    // GC logic
    always @ (posedge eval_clock) begin
@@ -249,16 +212,18 @@ module PROCESSOR (input clk, output [23:0] led, output [3:0] indicators, input [
    assign led[4] = uart_rx_error;
    assign led[5] = fifo_empty;
    assign led[6] = fifo_full;
-   assign led[7] = fifo_re;*/
+   assign led[7] = fifo_re;
    assign led[7:4] = Ein[3:0];
    assign led[3:0] = Eout[3:0];
 //   assign led[15:8] = programOut;
 //   assign led[15:8] = uart_rx_byte;
-   assign led[15] = step_eval;
-   assign led[14] = eval_clock;
    assign led[13:8] = ostate;
    assign led[19:16] = pc;
    assign led[23:20] = accum;
-   assign indicators = {1'b0, (!running & `EXECUTE_BUTTON) | running_clk, halt, running & !halt};
+   assign indicators = {1'b0, (!running & `EXECUTE_BUTTON) | running_clk, halt, running & !halt};*/
 
+   assign led[0] = eval_clock;
+   assign led[1] = uart_is_transmitting;
+   assign led[2] = uart_is_receiving;
+   assign led[3] = recv_error;
 endmodule
This page took 0.01169 seconds and 4 git commands to generate.