Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module SmdController
- (
- input clk,
- input smd_select,
- output smd_data0, smd_data1, smd_data2, smd_data3, smd_data4, smd_data5,
- input button_a, button_b, button_c, button_x, button_y, button_z, button_up, button_down, button_left, button_right, button_start, button_mode
- );
- reg [12:0] idle_counter;
- reg [1:0] select_counter;
- reg [1:0] select_counter_prev;
- wire reset = idle_counter == 0;
- assign smd_data0 = !select_counter[1] ?
- button_up :
- (!select_counter[0] ?
- (smd_select ? button_up : 1'b0) :
- (smd_select ? button_z : 1'b1)
- ); // Up/Z
- assign smd_data1 = !select_counter[1] ?
- button_down :
- (!select_counter[0] ?
- (smd_select ? button_down : 1'b0) :
- (smd_select ? button_y : 1'b1)
- ); // Down/Y
- assign smd_data2 = smd_select ? (select_counter[1:0] != 2'b11 ? button_left : button_x) : (select_counter[1:0] != 2'b11 ? 1'b0 : 1'b1); // Left/X
- assign smd_data3 = smd_select ? (select_counter[1:0] != 2'b11 ? button_right : button_mode) : (select_counter[1:0] != 2'b11 ? 1'b0 : 1'b1); //Right/Mode
- assign smd_data4 = smd_select ? button_b : button_a; // A/B
- assign smd_data5 = smd_select ? button_c : button_start; // Start/C
- always @ (posedge smd_select, posedge reset)
- begin
- if (reset)
- select_counter = 0;
- else
- select_counter = select_counter + 1'b1;
- end
- always @ (negedge clk)
- begin
- if (select_counter != select_counter_prev)
- begin
- select_counter_prev= select_counter;
- idle_counter = 1'b1;
- end else begin
- idle_counter = idle_counter + 1'b1;
- end
- end
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement