From 6fa9c5b0feac673efc34e80e8ef001f298f4fa40 Mon Sep 17 00:00:00 2001 From: sorgelig Date: Thu, 10 Jan 2019 05:45:09 +0800 Subject: [PATCH] Update sys. --- sys/hps_io.v | 22 ++++++++++++++++++++-- sys/spdif.v | 43 +++++++++++++++++++++++++++++++------------ 2 files changed, 51 insertions(+), 14 deletions(-) diff --git a/sys/hps_io.v b/sys/hps_io.v index b11a567..1003bbd 100644 --- a/sys/hps_io.v +++ b/sys/hps_io.v @@ -40,8 +40,16 @@ module hps_io #(parameter STRLEN=0, PS2DIV=2000, WIDE=0, VDNUM=1, PS2WE=0) output reg [15:0] joystick_0, output reg [15:0] joystick_1, + output reg [15:0] joystick_2, + output reg [15:0] joystick_3, + output reg [15:0] joystick_4, + output reg [15:0] joystick_5, output reg [15:0] joystick_analog_0, output reg [15:0] joystick_analog_1, + output reg [15:0] joystick_analog_2, + output reg [15:0] joystick_analog_3, + output reg [15:0] joystick_analog_4, + output reg [15:0] joystick_analog_5, output [1:0] buttons, output forced_scandoubler, @@ -325,6 +333,10 @@ always@(posedge clk_sys) begin 'h01: cfg <= io_din[7:0]; 'h02: joystick_0 <= io_din; 'h03: joystick_1 <= io_din; + 'h10: joystick_2 <= io_din; + 'h11: joystick_3 <= io_din; + 'h12: joystick_4 <= io_din; + 'h13: joystick_5 <= io_din; // store incoming ps2 mouse bytes 'h04: begin @@ -379,8 +391,14 @@ always@(posedge clk_sys) begin // joystick analog 'h1a: case(byte_cnt) 1: stick_idx <= io_din[2:0]; // first byte is joystick index - 2: if(stick_idx == 0) joystick_analog_0 <= io_din; - else if(stick_idx == 1) joystick_analog_1 <= io_din; + 2: case(stick_idx) + 0: joystick_analog_0 <= io_din; + 1: joystick_analog_1 <= io_din; + 2: joystick_analog_2 <= io_din; + 3: joystick_analog_3 <= io_din; + 4: joystick_analog_4 <= io_din; + 5: joystick_analog_5 <= io_din; + endcase endcase // notify image selection diff --git a/sys/spdif.v b/sys/spdif.v index 671dcb2..add51d3 100644 --- a/sys/spdif.v +++ b/sys/spdif.v @@ -63,34 +63,27 @@ module spdif ); reg lpf_ce; -always @(negedge clk_i) begin - reg [3:0] div; - - div <= div + 1'd1; - if(div == 13) div <= 0; +always @(posedge clk_i) begin + reg [2:0] div; + if(bit_clk_q) div <= div + 1'd1; lpf_ce <= !div; end wire [15:0] al, ar; -lpf48k #(15) lpf_l +lpf_spdif lpf_l ( - .RESET(rst_i), .CLK(clk_i), .CE(lpf_ce), - .ENABLE(1), - .IDATA(audio_l), .ODATA(al) ); -lpf48k #(15) lpf_r +lpf_spdif lpf_r ( - .RESET(rst_i), .CLK(clk_i), .CE(lpf_ce), - .ENABLE(1), .IDATA(audio_r), .ODATA(ar) @@ -424,3 +417,29 @@ else assign spdif_o = spdif_out_q; endmodule + +module lpf_spdif +( + input CLK, + input CE, + input [15:0] IDATA, + output reg [15:0] ODATA +); + +reg [511:0] acc; +reg [20:0] sum; + +always @(*) begin + integer i; + sum = 0; + for (i = 0; i < 32; i = i+1) sum = sum + {{5{acc[(i*16)+15]}}, acc[i*16 +:16]}; +end + +always @(posedge CLK) begin + if(CE) begin + acc <= {acc[495:0], IDATA}; + ODATA <= sum[20:5]; + end +end + +endmodule