From d901304d7d3b9a190d1549f31ab16de8b82ded9a Mon Sep 17 00:00:00 2001 From: "DESKTOP-OVSDVEK\\Wong Yi Hao" Date: Tue, 8 Apr 2025 21:17:31 +0800 Subject: [PATCH 1/9] oled menu --- FPGraph.srcs/sources_1/new/charRom.v | 355 +++++ FPGraph.srcs/sources_1/new/control_screen.v | 123 ++ FPGraph.srcs/sources_1/new/num_gen.v | 98 ++ FPGraph.srcs/sources_1/new/scene_controller.v | 1237 +++++++++++++++++ 4 files changed, 1813 insertions(+) create mode 100644 FPGraph.srcs/sources_1/new/charRom.v create mode 100644 FPGraph.srcs/sources_1/new/control_screen.v create mode 100644 FPGraph.srcs/sources_1/new/num_gen.v create mode 100644 FPGraph.srcs/sources_1/new/scene_controller.v diff --git a/FPGraph.srcs/sources_1/new/charRom.v b/FPGraph.srcs/sources_1/new/charRom.v new file mode 100644 index 0000000..ed9c915 --- /dev/null +++ b/FPGraph.srcs/sources_1/new/charRom.v @@ -0,0 +1,355 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 03/18/2025 11:05:40 PM +// Design Name: +// Module Name: charRom +// Project Name: +// Target Devices: +// Tool Versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// + + +module charRom( + input [7:0] char, + input [2:0] row, col, + output pixel + ); + + reg [4:0] data [44:0][4:0]; + + initial begin + // '0' + data[0][0] = 5'b01100; + data[0][1] = 5'b10110; + data[0][2] = 5'b11010; + data[0][3] = 5'b10010; + data[0][4] = 5'b01100; + + // '1' + data[1][0] = 5'b00100; + data[1][1] = 5'b01100; + data[1][2] = 5'b00100; + data[1][3] = 5'b00100; + data[1][4] = 5'b00100; + + // '2' + data[2][0] = 5'b01100; + data[2][1] = 5'b10010; + data[2][2] = 5'b00100; + data[2][3] = 5'b01000; + data[2][4] = 5'b11110; + + // '3' + data[3][0] = 5'b01100; + data[3][1] = 5'b10010; + data[3][2] = 5'b00100; + data[3][3] = 5'b10010; + data[3][4] = 5'b01100; + + // '4' + data[4][0] = 5'b10010; + data[4][1] = 5'b10010; + data[4][2] = 5'b11110; + data[4][3] = 5'b00010; + data[4][4] = 5'b00010; + + // '5' + data[5][0] = 5'b11110; + data[5][1] = 5'b10000; + data[5][2] = 5'b11100; + data[5][3] = 5'b00010; + data[5][4] = 5'b11100; + + // '6' + data[6][0] = 5'b01100; + data[6][1] = 5'b10000; + data[6][2] = 5'b11100; + data[6][3] = 5'b10010; + data[6][4] = 5'b01100; + + // '7' + data[7][0] = 5'b11110; + data[7][1] = 5'b10010; + data[7][2] = 5'b00100; + data[7][3] = 5'b00100; + data[7][4] = 5'b00100; + + // '8' + data[8][0] = 5'b01100; + data[8][1] = 5'b10010; + data[8][2] = 5'b01100; + data[8][3] = 5'b10010; + data[8][4] = 5'b01100; + + // '9' + data[9][0] = 5'b01100; + data[9][1] = 5'b10010; + data[9][2] = 5'b01110; + data[9][3] = 5'b00010; + data[9][4] = 5'b01100; + + // 'A' + data[10][0] = 5'b00100; + data[10][1] = 5'b01110; + data[10][2] = 5'b01010; + data[10][3] = 5'b11111; + data[10][4] = 5'b10001; + + // 'B' + data[11][0] = 5'b11100; + data[11][1] = 5'b10010; + data[11][2] = 5'b11110; + data[11][3] = 5'b10001; + data[11][4] = 5'b11110; + + // 'C' + data[12][0] = 5'b01110; + data[12][1] = 5'b10000; + data[12][2] = 5'b10000; + data[12][3] = 5'b10000; + data[12][4] = 5'b01110; + + // 'D' + data[13][0] = 5'b11100; + data[13][1] = 5'b10010; + data[13][2] = 5'b10001; + data[13][3] = 5'b10001; + data[13][4] = 5'b11110; + + // 'E' + data[14][0] = 5'b11111; + data[14][1] = 5'b10000; + data[14][2] = 5'b11111; + data[14][3] = 5'b10000; + data[14][4] = 5'b11111; + + // 'F' + data[15][0] = 5'b11111; + data[15][1] = 5'b10000; + data[15][2] = 5'b11111; + data[15][3] = 5'b10000; + data[15][4] = 5'b10000; + + // 'G' + data[16][0] = 5'b01111; + data[16][1] = 5'b10000; + data[16][2] = 5'b10111; + data[16][3] = 5'b10010; + data[16][4] = 5'b01110; + + // 'H' + data[17][0] = 5'b10001; + data[17][1] = 5'b10001; + data[17][2] = 5'b11111; + data[17][3] = 5'b10001; + data[17][4] = 5'b10001; + + // 'I' + data[18][0] = 5'b11111; + data[18][1] = 5'b00100; + data[18][2] = 5'b00100; + data[18][3] = 5'b00100; + data[18][4] = 5'b11111; + + // 'J' + data[19][0] = 5'b11111; + data[19][1] = 5'b00100; + data[19][2] = 5'b00100; + data[19][3] = 5'b10100; + data[19][4] = 5'b01000; + + // 'K' + data[20][0] = 5'b10001; + data[20][1] = 5'b10010; + data[20][2] = 5'b11100; + data[20][3] = 5'b10010; + data[20][4] = 5'b10001; + + // 'L' + data[21][0] = 5'b10000; + data[21][1] = 5'b10000; + data[21][2] = 5'b10000; + data[21][3] = 5'b10000; + data[21][4] = 5'b11111; + + // 'M' + data[22][0] = 5'b10101; + data[22][1] = 5'b11111; + data[22][2] = 5'b10101; + data[22][3] = 5'b10101; + data[22][4] = 5'b10001; + + // 'N' + data[23][0] = 5'b10001; + data[23][1] = 5'b11001; + data[23][2] = 5'b10101; + data[23][3] = 5'b10011; + data[23][4] = 5'b10001; + + + // 'O' + data[24][0] = 5'b01110; + data[24][1] = 5'b10001; + data[24][2] = 5'b10001; + data[24][3] = 5'b10001; + data[24][4] = 5'b01110; + + // 'P' + data[25][0] = 5'b11110; + data[25][1] = 5'b10001; + data[25][2] = 5'b11110; + data[25][3] = 5'b10000; + data[25][4] = 5'b10000; + + // 'Q' + data[26][0] = 5'b01110; + data[26][1] = 5'b10001; + data[26][2] = 5'b10101; + data[26][3] = 5'b01110; + data[26][4] = 5'b00001; + + // 'R' + data[27][0] = 5'b11110; + data[27][1] = 5'b10001; + data[27][2] = 5'b11111; + data[27][3] = 5'b10010; + data[27][4] = 5'b10001; + + // 'S' + data[28][0] = 5'b01111; + data[28][1] = 5'b10000; + data[28][2] = 5'b01110; + data[28][3] = 5'b00001; + data[28][4] = 5'b11110; + + // 'T' + data[29][0] = 5'b11111; + data[29][1] = 5'b00100; + data[29][2] = 5'b00100; + data[29][3] = 5'b00100; + data[29][4] = 5'b00100; + + // 'U' + data[30][0] = 5'b10001; + data[30][1] = 5'b10001; + data[30][2] = 5'b10001; + data[30][3] = 5'b10001; + data[30][4] = 5'b01110; + + // 'V' + data[31][0] = 5'b10001; + data[31][1] = 5'b10001; + data[31][2] = 5'b01010; + data[31][3] = 5'b01010; + data[31][4] = 5'b00100; + + // 'W' + data[32][0] = 5'b10001; + data[32][1] = 5'b10101; + data[32][2] = 5'b10101; + data[32][3] = 5'b11011; + data[32][4] = 5'b10001; + + // 'X' + data[33][0] = 5'b10001; + data[33][1] = 5'b01010; + data[33][2] = 5'b00100; + data[33][3] = 5'b01010; + data[33][4] = 5'b10001; + + // 'Y' + data[34][0] = 5'b10001; + data[34][1] = 5'b01010; + data[34][2] = 5'b00100; + data[34][3] = 5'b00100; + data[34][4] = 5'b00100; + + // 'Z' + data[35][0] = 5'b10001; + data[35][1] = 5'b10001; + data[35][2] = 5'b11111; + data[35][3] = 5'b10001; + data[35][4] = 5'b10001; + + // ' ' + data[36][0] = 5'b00000; + data[36][1] = 5'b00000; + data[36][2] = 5'b00000; + data[36][3] = 5'b00000; + data[36][4] = 5'b00000; + + // '.' in the middle + data[37][0] = 5'b00000; + data[37][1] = 5'b01110; + data[37][2] = 5'b01110; + data[37][3] = 5'b01110; + data[37][4] = 5'b00000; + + // '+' + data[38][0] = 5'b00000; + data[38][1] = 5'b00100; + data[38][2] = 5'b01110; + data[38][3] = 5'b00100; + data[38][4] = 5'b00000; + + //'-' + data[39][0] = 5'b00000; + data[39][1] = 5'b00000; + data[39][2] = 5'b01110; + data[39][3] = 5'b00000; + data[39][4] = 5'b00000; + + //'divide' + data[40][0] = 5'b00100; + data[40][1] = 5'b00000; + data[40][2] = 5'b01110; + data[40][3] = 5'b00000; + data[40][4] = 5'b00100; + + //'multiply' + data[41][0] = 5'b10101; + data[41][1] = 5'b01110; + data[41][2] = 5'b11111; + data[41][3] = 5'b01110; + data[41][4] = 5'b10101; + + //'power' + data[42][0] = 5'b00100; + data[42][1] = 5'b01110; + data[42][2] = 5'b10001; + data[42][3] = 5'b00000; + data[42][4] = 5'b00000; + + //'=' + data[43][0] = 5'b00000; + data[43][1] = 5'b01110; + data[43][2] = 5'b00000; + data[43][3] = 5'b01110; + data[43][4] = 5'b00000; + + //'.' in the bot + data[44][0] = 5'b00000; + data[44][1] = 5'b00000; + data[44][2] = 5'b00000; + data[44][3] = 5'b00000; + data[44][4] = 5'b00100; + + + + + end + + assign pixel = data[char][row][4-col]; + +endmodule diff --git a/FPGraph.srcs/sources_1/new/control_screen.v b/FPGraph.srcs/sources_1/new/control_screen.v new file mode 100644 index 0000000..cc99f99 --- /dev/null +++ b/FPGraph.srcs/sources_1/new/control_screen.v @@ -0,0 +1,123 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 03/18/2025 09:55:39 PM +// Design Name: +// Module Name: control_screen +// Project Name: +// Target Devices: +// Tool Versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// + + +module control_screen( + input CLOCK, + input [7:0] x_cor, + input [7:0] y_cor, + input [12:0] pixel_index, + input btnc, + input btnr, + input btnl, + input btnu, + input btnd, + output reg [15:0] colour_out, + output [13:0] int_part_A1, int_part_B1, int_part_C1, + int_part_A2, int_part_B2, int_part_C2, + int_part_A3, int_part_B3, int_part_C3, + + output [6:0] deci_part_A1, deci_part_B1, deci_part_C1, + deci_part_A2, deci_part_B2, deci_part_C2, + deci_part_A3, deci_part_B3, deci_part_C3, + output enable1, enable2, enable3 + ); + + parameter [7:0] x_incr = 5; + parameter [7:0] y_incr = 5; + parameter [7:0] start_x = 3; + parameter [7:0] start_y = 2; + parameter [7:0] end_x = 92; + parameter [7:0] end_y = 61; + parameter [15:0] white = 16'hFFFF; + + reg [15:0] oled_holder; + + + + +//18 pixels on x and 12 pixels on y.this is storing row by row + wire [7:0] screen_chars; // Stores character codes + // Declare a 2D wire array to store pixel outputs + //wire pixel_array [0:11][0:17]; + + wire [2:0] x; + wire [2:0] y; + + assign x = (x_cor - start_x) % 5; + assign y = (y_cor - start_y) % 5; + + + + //scene_controller control_scene (.btnc(btnc), .btnr(btnr), .btnl(btnl), .btnu(btnu), .btnd(btnd), .x_cor(x_cor), .CLOCK(CLOCK), .y_cor(y_cor), .array_out(screen_chars)); + // Instantiate the scene_controller + scene_controller u_scene_controller ( + .btnc(btnc), + .btnr(btnr), + .btnl(btnl), + .btnu(btnu), + .btnd(btnd), + .CLOCK(CLOCK), + .x_cor(x_cor), + .y_cor(y_cor), + .array_out(screen_chars), + + .int_part_A1(int_part_A1), .int_part_B1(int_part_B1), .int_part_C1(int_part_C1), + .int_part_A2(int_part_A2), .int_part_B2(int_part_B2), .int_part_C2(int_part_C2), + .int_part_A3(int_part_A3), .int_part_B3(int_part_B3), .int_part_C3(int_part_C3), + + .deci_part_A1(deci_part_A1), .deci_part_B1(deci_part_B1), .deci_part_C1(deci_part_C1), + .deci_part_A2(deci_part_A2), .deci_part_B2(deci_part_B2), .deci_part_C2(deci_part_C2), + .deci_part_A3(deci_part_A3), .deci_part_B3(deci_part_B3), .deci_part_C3(deci_part_C3), + + .enable1(enable1), + .enable2(enable2), + .enable3(enable3) + ); + + + wire pixel_out; + + charRom rom (.char(screen_chars), .row(y), .col(x), .pixel(pixel_out)); + + +reg [7:0] x_pos; +reg [7:0] y_pos; + + always @(posedge CLOCK) begin + if (x_cor > end_x || y_cor > end_y || x_cor < start_x || y_cor < start_y) begin + colour_out <= 16'h0000; + end else begin + x_pos = (x_cor - start_x) / 5; + y_pos = (y_cor - start_y) / 5; + + if (pixel_out) begin + colour_out <= 16'hFFFF; + end else begin + colour_out <= 16'h0000; + end + + + end + + + end +endmodule diff --git a/FPGraph.srcs/sources_1/new/num_gen.v b/FPGraph.srcs/sources_1/new/num_gen.v new file mode 100644 index 0000000..5407cb5 --- /dev/null +++ b/FPGraph.srcs/sources_1/new/num_gen.v @@ -0,0 +1,98 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 04/06/2025 02:30:59 PM +// Design Name: +// Module Name: num_gen +// Project Name: +// Target Devices: +// Tool Versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// + + +module num_gen( + input [4:0] digit_in, + input add, + input clear, + input CLOCK, + input is_deci, + input is_neg, + output [13:0] int_part, + output [6:0] deci_part, + output [7:0] neg_sign, + output [7:0] b4, //these are pos of digits assuming all digits are used + output [7:0] b3, + output [7:0] b2, + output [7:0] b1, + output [7:0] b0, //deci_point if all digits used + output [7:0] b_1, + output [7:0] b_2 + ); + + reg [13:0] int =14'd0; + reg [6:0] deci = 14'd0; + parameter [7:0] dot = 8'd44; + parameter [7:0] space = 8'd36; + parameter [7:0] neg = 8'd39; + + always @ (posedge CLOCK) begin + if (clear) begin + int <= 0; + deci <= 0; + end else if (add) begin + if (is_deci) begin + deci <= (deci < 10) ? (deci * 10 + digit_in) : ((deci % 10) * 10 + digit_in); + end else begin + int <= (int < 14'd1000) ? (int * 10 + digit_in) : ((int % 1000) * 10 + digit_in); + end + + end + end + + wire [2:0] int_digits = (int / 1000 != 0) ? (3'd4) : ((int / 100 != 0) ? 3'd3 : (int / 10 != 0) ? 3'd2 : 3'd1); + wire [2:0] deci_digits = (deci / 10 != 0) ? (2'd2) : ((deci != 0) ? 2'd1 : 2'd0); + + assign neg_sign = (is_neg) ? neg : space; + assign b4 = (int_digits == 4) ? (int / 1000) : + ((int_digits == 3) ? (int / 100) : + ((int_digits == 2) ? int / 10 : + int)); + assign b3 = (int_digits == 4) ? ((int % 1000) / 100) : + ((int_digits == 3) ? ((int % 100) / 10) : + ((int_digits == 2) ? int % 10 : + (deci_digits == 0) ? space : + dot)); + assign b2 = (int_digits == 4) ? ((int % 100) / 10) : + (int_digits == 3) ? (int % 10) : + (int_digits == 2) ? ((deci_digits == 0) ? space : dot) : + (deci_digits == 0) ? (space) : + (deci_digits == 1) ? deci : (deci / 10); + assign b1 = (int_digits == 4) ? (int % 10) : + (int_digits == 3) ? ((deci_digits == 0) ? space : dot) : + (int_digits == 2) ? ((deci_digits == 0) ? space : ((deci_digits == 1) ? deci % 10 : deci / 10)) : + (deci_digits == 2) ? (deci % 10) : space; + assign b0 = (int_digits == 4) ? ((deci_digits == 0) ? space : dot) : + (int_digits == 3) ? ((deci_digits == 0) ? space : ((deci_digits == 1) ? deci % 10 : (deci / 10))) : + (int_digits == 2) ? ((deci_digits == 2) ? (deci % 10) : space) : + space; + assign b_1 = (int_digits == 4) ? ((deci_digits == 0) ? space : + (deci_digits == 1) ? (deci % 10) : + (deci / 10)) : + ((int_digits == 3) ? ((deci_digits == 2) ? deci % 10 : + space) : + space); + assign b_2 = (int_digits == 4 && deci_digits == 2) ? (deci % 10) : + space; + assign int_part = int; + assign deci_part = deci; +endmodule diff --git a/FPGraph.srcs/sources_1/new/scene_controller.v b/FPGraph.srcs/sources_1/new/scene_controller.v new file mode 100644 index 0000000..e7de8ee --- /dev/null +++ b/FPGraph.srcs/sources_1/new/scene_controller.v @@ -0,0 +1,1237 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 03/20/2025 09:27:17 PM +// Design Name: +// Module Name: scene_controller +// Project Name: +// Target Devices: +// Tool Versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// + + +module scene_controller( + input btnc, + input btnr, + input btnl, + input btnu, + input btnd, + input CLOCK, + input [7:0] x_cor, + input [7:0] y_cor, + output reg [7:0] array_out, + output [13:0] int_part_A1, int_part_B1, int_part_C1, + int_part_A2, int_part_B2, int_part_C2, + int_part_A3, int_part_B3, int_part_C3, + + output [6:0] deci_part_A1, deci_part_B1, deci_part_C1, + deci_part_A2, deci_part_B2, deci_part_C2, + deci_part_A3, deci_part_B3, deci_part_C3, + output reg enable1 = 0, enable2 = 0, enable3 = 0 + + ); + + reg [7:0] pixel_array [0:11][0:17]; + parameter [7:0] start_x = 3; + parameter [7:0] start_y = 2; + parameter [7:0] end_x = 92; + parameter [7:0] end_y = 61; + + wire [7:0] x = ((x_cor - 3) / 5 > 17) ? 17 : (x_cor < 3) ? 0 : (x_cor - 3) / 5; + wire [7:0] y = ((y_cor - 2) / 5 > 11) ? 11 : (y_cor < 2) ? 0 : (y_cor - 2) / 5; + + + + //debouncing + // Debounce counter and period (200ms) + reg [23:0] debounceCounter = 0; + //reg prevPushState = 0; + localparam DEBOUNCE_PERIOD = 24'd2000000; // 80ms at 25MHz + reg btnc_press, btnr_press; + reg btnl_press, btnu_press; + reg btnd_press; + reg [4:0] prevPushState; + + //states + parameter [3:0] interstate = 4'd0; + parameter [3:0] mainmenu_1 = 4'd1; + parameter [3:0] quadrmenu = 4'd2; + parameter [3:0] lnrmenu = 4'd3; + parameter [3:0] numpad = 4'd4; + parameter [3:0] eqnmenu = 4'd5; + + //state var + reg [7:0] state = interstate; + reg [7:0] nextstate = eqnmenu; + reg [7:0] prevstate = interstate; + reg [7:0] dot_x = 12; + reg [7:0] dot_y = 3; + reg [7:0] eqn = 1; + + + + //displayed var + reg [7:0] letter; + integer i,j; + + // Shared across all instances + reg [4:0] digit_in; + reg is_deci; + + reg addA1, addB1, addC1; + reg addA2, addB2, addC2; + reg addA3, addB3, addC3; + + // ----- Instance A1 ----- + //wire [13:0] int_part_A1; wire [6:0] deci_part_A1; + wire [7:0] b4A1, b3A1, b2A1, b1A1, b0A1, b_1A1, b_2A1, neg_signA1; + reg clearA1, is_negA1; + + // ----- Instance B1 ----- + //wire [13:0] int_part_B1; wire [6:0] deci_part_B1; + wire [7:0] b4B1, b3B1, b2B1, b1B1, b0B1, b_1B1, b_2B1, neg_signB1; + reg clearB1, is_negB1; + + // ----- Instance C1 ----- + //wire [13:0] int_part_C1; wire [6:0] deci_part_C1; + wire [7:0] b4C1, b3C1, b2C1, b1C1, b0C1, b_1C1, b_2C1, neg_signC1; + reg clearC1, is_negC1; + + // ----- Instance A2 ----- + //wire [13:0] int_part_A2; wire [6:0] deci_part_A2; + wire [7:0] b4A2, b3A2, b2A2, b1A2, b0A2, b_1A2, b_2A2, neg_signA2; + reg clearA2, is_negA2; + + // ----- Instance B2 ----- + //wire [13:0] int_part_B2; wire [6:0] deci_part_B2; + wire [7:0] b4B2, b3B2, b2B2, b1B2, b0B2, b_1B2, b_2B2, neg_signB2; + reg clearB2, is_negB2; + + // ----- Instance C2 ----- + //wire [13:0] int_part_C2; wire [6:0] deci_part_C2; + wire [7:0] b4C2, b3C2, b2C2, b1C2, b0C2, b_1C2, b_2C2, neg_signC2; + reg clearC2, is_negC2; + + // ----- Instance A3 ----- + //wire [13:0] int_part_A3; wire [6:0] deci_part_A3; + wire [7:0] b4A3, b3A3, b2A3, b1A3, b0A3, b_1A3, b_2A3, neg_signA3; + reg clearA3, is_negA3; + + // ----- Instance B3 ----- + //wire [13:0] int_part_B3; wire [6:0] deci_part_B3; + wire [7:0] b4B3, b3B3, b2B3, b1B3, b0B3, b_1B3, b_2B3, neg_signB3; + reg clearB3, is_negB3; + + // ----- Instance C3 ----- + //wire [13:0] int_part_C3; wire [6:0] deci_part_C3; + wire [7:0] b4C3, b3C3, b2C3, b1C3, b0C3, b_1C3, b_2C3, neg_signC3; + reg clearC3, is_negC3; + + // ----- A1 ----- + num_gen A1 ( + .digit_in(digit_in), .add(addA1), .clear(clearA1), .CLOCK(CLOCK), + .is_deci(is_deci), .is_neg(is_negA1), + .int_part(int_part_A1), .deci_part(deci_part_A1), .neg_sign(neg_signA1), + .b4(b4A1), .b3(b3A1), .b2(b2A1), .b1(b1A1), .b0(b0A1), .b_1(b_1A1), .b_2(b_2A1) + ); + + // ----- B1 ----- + num_gen B1 ( + .digit_in(digit_in), .add(addB1), .clear(clearB1), .CLOCK(CLOCK), + .is_deci(is_deci), .is_neg(is_negB1), + .int_part(int_part_B1), .deci_part(deci_part_B1), .neg_sign(neg_signB1), + .b4(b4B1), .b3(b3B1), .b2(b2B1), .b1(b1B1), .b0(b0B1), .b_1(b_1B1), .b_2(b_2B1) + ); + + // ----- C1 ----- + num_gen C1 ( + .digit_in(digit_in), .add(addC1), .clear(clearC1), .CLOCK(CLOCK), + .is_deci(is_deci), .is_neg(is_negC1), + .int_part(int_part_C1), .deci_part(deci_part_C1), .neg_sign(neg_signC1), + .b4(b4C1), .b3(b3C1), .b2(b2C1), .b1(b1C1), .b0(b0C1), .b_1(b_1C1), .b_2(b_2C1) + ); + + // ----- A2 ----- + num_gen A2 ( + .digit_in(digit_in), .add(addA2), .clear(clearA2), .CLOCK(CLOCK), + .is_deci(is_deci), .is_neg(is_negA2), + .int_part(int_part_A2), .deci_part(deci_part_A2), .neg_sign(neg_signA2), + .b4(b4A2), .b3(b3A2), .b2(b2A2), .b1(b1A2), .b0(b0A2), .b_1(b_1A2), .b_2(b_2A2) + ); + + // ----- B2 ----- + num_gen B2 ( + .digit_in(digit_in), .add(addB2), .clear(clearB2), .CLOCK(CLOCK), + .is_deci(is_deci), .is_neg(is_negB2), + .int_part(int_part_B2), .deci_part(deci_part_B2), .neg_sign(neg_signB2), + .b4(b4B2), .b3(b3B2), .b2(b2B2), .b1(b1B2), .b0(b0B2), .b_1(b_1B2), .b_2(b_2B2) + ); + + // ----- C2 ----- + num_gen C2 ( + .digit_in(digit_in), .add(addC2), .clear(clearC2), .CLOCK(CLOCK), + .is_deci(is_deci), .is_neg(is_negC2), + .int_part(int_part_C2), .deci_part(deci_part_C2), .neg_sign(neg_signC2), + .b4(b4C2), .b3(b3C2), .b2(b2C2), .b1(b1C2), .b0(b0C2), .b_1(b_1C2), .b_2(b_2C2) + ); + + // ----- A3 ----- + num_gen A3 ( + .digit_in(digit_in), .add(addA3), .clear(clearA3), .CLOCK(CLOCK), + .is_deci(is_deci), .is_neg(is_negA3), + .int_part(int_part_A3), .deci_part(deci_part_A3), .neg_sign(neg_signA3), + .b4(b4A3), .b3(b3A3), .b2(b2A3), .b1(b1A3), .b0(b0A3), .b_1(b_1A3), .b_2(b_2A3) + ); + + // ----- B3 ----- + num_gen B3 ( + .digit_in(digit_in), .add(addB3), .clear(clearB3), .CLOCK(CLOCK), + .is_deci(is_deci), .is_neg(is_negB3), + .int_part(int_part_B3), .deci_part(deci_part_B3), .neg_sign(neg_signB3), + .b4(b4B3), .b3(b3B3), .b2(b2B3), .b1(b1B3), .b0(b0B3), .b_1(b_1B3), .b_2(b_2B3) + ); + + // ----- C3 ----- + num_gen C3 ( + .digit_in(digit_in), .add(addC3), .clear(clearC3), .CLOCK(CLOCK), + .is_deci(is_deci), .is_neg(is_negC3), + .int_part(int_part_C3), .deci_part(deci_part_C3), .neg_sign(neg_signC3), + .b4(b4C3), .b3(b3C3), .b2(b2C3), .b1(b1C3), .b0(b0C3), .b_1(b_1C3), .b_2(b_2C3) + ); + + + + + + //Button synchronization and edge detection + always @(posedge CLOCK) begin + + if (debounceCounter == 0) begin + // No new presses this cycle + btnu_press <= 0; btnd_press <= 0; + btnc_press <= 0; btnr_press <= 0; btnl_press <= 0; + end + + if (debounceCounter > 0) begin + debounceCounter <= debounceCounter - 1; + btnu_press <= 0; btnd_press <= 0; + btnc_press <= 0; btnr_press <= 0; btnl_press <= 0; + end else begin + // Detect new press per button (rising edge) + if (btnu && !prevPushState[0]) begin + btnu_press <= 1; + debounceCounter <= DEBOUNCE_PERIOD; + end + if (btnd && !prevPushState[1]) begin + btnd_press <= 1; + debounceCounter <= DEBOUNCE_PERIOD; + end + if (btnc && !prevPushState[2]) begin + btnc_press <= 1; + debounceCounter <= DEBOUNCE_PERIOD; + end + if (btnr && !prevPushState[3]) begin + btnr_press <= 1; + debounceCounter <= DEBOUNCE_PERIOD; + end + if (btnl && !prevPushState[4]) begin + btnl_press <= 1; + debounceCounter <= DEBOUNCE_PERIOD; + end + end + + // Always update prevPushState at the end + prevPushState[0] <= btnu; + prevPushState[1] <= btnd; + prevPushState[2] <= btnc; + prevPushState[3] <= btnr; + prevPushState[4] <= btnl; + + end + + always @ (posedge CLOCK) begin + if (state == interstate) begin + for (i = 0 ; i < 18 ; i = i + 1)begin + for (j = 0 ; j < 12 ; j = j + 1) begin + pixel_array[j][i] <= 8'd36; + end + end + + state <= nextstate; + + //BTN UP + end else if (btnu_press) begin + + case(state) + + mainmenu_1: begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= (dot_y > 1) ? dot_y - 4 : dot_y; + end + + quadrmenu:begin + if (dot_y == 6) begin + pixel_array[dot_y][dot_x] <=8'd36; + dot_y <= 1; + dot_x <= 1; + end else if (dot_y > 6) begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= dot_y - 2; + dot_x <= 4; + end + end + + lnrmenu:begin + if (dot_y == 8) begin + pixel_array[dot_y][dot_x] <=8'd36; + dot_y <= 1; + dot_x <= 1; + end else if (dot_y > 8) begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= dot_y - 2; + dot_x <= 4; + end + end + + numpad:begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= (dot_x == 13) ? ((dot_y > 8) ? dot_y - 3 : dot_y) : ((dot_y > 2) ? dot_y - 3 : dot_y); + end + + eqnmenu:begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= (dot_y > 3) ? dot_y - 3 : dot_y; + end + + default:state <= interstate; + endcase + + end + + //BTN DOWN + else if (btnd_press) begin + case(state) + + mainmenu_1: begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= (dot_y < 9) ? dot_y + 4 : dot_y; + end + + + quadrmenu:begin + if (dot_y == 1) begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= 6; + dot_x <= 4; + end + else begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= (dot_y < 10) ? dot_y + 2: dot_y; + end + end + + lnrmenu:begin + if (dot_y == 1) begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= 8; + dot_x <= 4; + end + else begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= (dot_y < 10) ? dot_y + 2: dot_y; + end + end + + numpad:begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= (dot_y < 11) ? dot_y + 3 : dot_y; + end + + eqnmenu:begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= (dot_y < 9) ? dot_y + 3 : dot_y; + end + + default:state <= interstate; + endcase + end + + + //BTN CNTR + else if (btnc_press) begin + + case(state) + mainmenu_1:begin + if (dot_y == 9) begin + state <= interstate; + nextstate <= quadrmenu; + dot_x <= 1; + dot_y <= 1; + end if (dot_y == 5) begin + state <= interstate; + nextstate <= lnrmenu; + dot_x <= 1; + dot_y <= 1; + end + else if (dot_y == 1) begin + state <= interstate; + nextstate <= eqnmenu; + dot_x <= 8'd12; + dot_y <= 3 * eqn; + end + end + + quadrmenu:begin + if (dot_y == 1 && dot_x ==1) begin + state <= interstate; + nextstate <= mainmenu_1; + dot_x <= 1; + dot_y <= 9; + + case(eqn) + 1:begin + is_negA1 <= 0; + clearA1 <= 1; + is_negB1 <= 0; + clearB1 <= 1; + is_negC1 <= 0; + clearC1 <= 1; + end + 2:begin + is_negA2 <= 0; + clearA2 <= 1; + is_negB2 <= 0; + clearB2 <= 1; + is_negC2 <= 0; + clearC2 <= 1; + end + 3:begin + is_negA3 <= 0; + clearA3 <= 1; + is_negB3 <= 0; + clearB3 <= 1; + is_negC3 <= 0; + clearC3 <= 1; + end + default:; + endcase + end + else if (dot_x == 12 && dot_y == 1) begin + state <= interstate; nextstate <= eqnmenu; + dot_x <= 12; + dot_y <= eqn/3; + case(eqn) + 1:enable1 <= 1; + 2:enable2 <= 1; + 3:enable3 <= 1; + endcase + end + + else begin + if (dot_y == 6 && dot_x == 4) begin + letter <= 6'd10; + end + else if (dot_y == 8 && dot_x == 4) begin + letter <= 6'd11; + end + else if (dot_y == 10 && dot_x == 4) begin + letter <= 6'd12; + end + state <= interstate; + nextstate <= numpad; + prevstate <= quadrmenu; + dot_x <= 1; + dot_y <= 2; + end + + + end + + lnrmenu:begin + if (dot_y == 1 && dot_x ==1) begin + nextstate <= mainmenu_1; + state <= interstate; + dot_x <= 1; + dot_y <= 5; + + case(eqn) + 1:begin + is_negA1 <= 0; + clearA1 <= 1; + is_negB1 <= 0; + clearB1 <= 1; + is_negC1 <= 0; + clearC1 <= 1; + end + 2:begin + is_negA2 <= 0; + clearA2 <= 1; + is_negB2 <= 0; + clearB2 <= 1; + is_negC2 <= 0; + clearC2 <= 1; + end + 3:begin + is_negA3 <= 0; + clearA3 <= 1; + is_negB3 <= 0; + clearB3 <= 1; + is_negC3 <= 0; + clearC3 <= 1; + end + default:; + endcase + + end + + else if (dot_x == 12 && dot_y == 1) begin + state <= interstate; nextstate <= eqnmenu; + dot_x <= 12; + dot_y <= eqn/3; + case(eqn) + 1:enable1 <= 1; + 2:enable2 <= 1; + 3:enable3 <= 1; + endcase + end + + else begin + if (dot_y == 8 && dot_x == 4) begin + letter <= 6'd11; + end + else if (dot_y == 10 && dot_x == 4) begin + letter <= 6'd12; + end + state <= interstate; + nextstate <= numpad; + prevstate <= lnrmenu; + dot_x <= 1; + dot_y <= 2; + end + + end + + numpad:begin + if (dot_x == 9 && dot_y == 11) begin + dot_x <= 4; dot_y <= (letter == 6'd10) ? 6 : (letter == 6'd11) ? 8 : 10; + nextstate <= prevstate; + state <= interstate; + is_deci <= 0; + end + else if (dot_x == 5 && dot_y == 11) begin + digit_in <= 0; + case(eqn) + 1:begin + if (letter == 6'd10) begin + addA1 <= 1; + end + if (letter == 6'd11) begin + addB1 <= 1; + end + if (letter == 6'd12) begin + addC1 <= 1; + end + end + 2:begin + if (letter == 6'd10) begin + addA2 <= 1; + end + if (letter == 6'd11) begin + addB2 <= 1; + end + if (letter == 6'd12) begin + addC2 <= 1; + end + end + 3:begin + if (letter == 6'd10) begin + addA3 <= 1; + end + if (letter == 6'd11) begin + addB3 <= 1; + end + if (letter == 6'd12) begin + addC3 <= 1; + end + end + default:; + endcase + end + + else if (dot_x == 1 && dot_y == 11) begin + case(eqn) + 1: begin + if (letter == 6'd10) begin + is_negA1 <= 1; + end + if (letter == 6'd11) begin + is_negB1 <= 1; + end + if (letter == 6'd12) begin + is_negC1 <= 1; + end + end + + 2: begin + if (letter == 6'd10) begin + is_negA2 <= 1; + end + if (letter == 6'd11) begin + is_negB2 <= 1; + end + if (letter == 6'd12) begin + is_negC2 <= 1; + end + end + + 3: begin + if (letter == 6'd10) begin + is_negA3 <= 1; + end + if (letter == 6'd11) begin + is_negB3 <= 1; + end + if (letter == 6'd12) begin + is_negC3 <= 1; + end + end + + default: ; + endcase + end + + else if (dot_x == 13 && dot_y == 11) begin + case(eqn) + 1: begin + if (letter == 6'd10) begin + clearA1 <= 1; + is_deci <= 0; + is_negA1 <= 0; + end + if (letter == 6'd11) begin + clearB1 <= 1; + is_deci <= 0; + is_negB1 <= 0; + end + if (letter == 6'd12) begin + clearC1 <= 1; + is_deci <= 0; + is_negC1 <= 0; + end + end + + 2: begin + if (letter == 6'd10) begin + clearA2 <= 1; + is_deci <= 0; + is_negA2 <= 0; + end + if (letter == 6'd11) begin + clearB2 <= 1; + is_deci <= 0; + is_negB2 <= 0; + end + if (letter == 6'd12) begin + clearC2 <= 1; + is_deci <= 0; + is_negC2 <= 0; + end + end + + 3: begin + if (letter == 6'd10) begin + clearA3 <= 1; + is_deci <= 0; + is_negA3 <= 0; + end + if (letter == 6'd11) begin + clearB3 <= 1; + is_deci <= 0; + is_negB3 <= 0; + end + if (letter == 6'd12) begin + clearC3 <= 1; + is_deci <= 0; + is_negC3 <= 0; + end + end + + default: ; + endcase + + + end + + else if (dot_x == 13 && dot_y == 8) begin + is_deci <= 1; + end + + else begin + digit_in <= 1 + ((dot_x - 1) / 4) + ((dot_y - 2)); + case(eqn) + 1: begin + if (letter == 6'd10) begin + addA1 <= 1; + end + if (letter == 6'd11) begin + addB1 <= 1; + end + if (letter == 6'd12) begin + addC1 <= 1; + end + end + + 2: begin + if (letter == 6'd10) begin + addA2 <= 1; + end + if (letter == 6'd11) begin + addB2 <= 1; + end + if (letter == 6'd12) begin + addC2 <= 1; + end + end + + 3: begin + if (letter == 6'd10) begin + addA3 <= 1; + end + if (letter == 6'd11) begin + addB3 <= 1; + end + if (letter == 6'd12) begin + addC3 <= 1; + end + end + + default: ; + endcase + + end + + end + + eqnmenu:begin + if (dot_x == 12) begin + eqn <= dot_y / 3; + state <= interstate; + nextstate <= mainmenu_1; + dot_x <= 1; + dot_y <= 5; + end + + else if (dot_x == 14) begin + case(dot_y) + 3:enable1 <= ~enable1; + 6:enable2 <= ~enable2; + 9:enable3 <= ~enable3; + default:; + endcase + end + + else if (dot_x == 16) begin + case(dot_y) + 3:begin + enable1 <= 0; clearA1 <= 1; + clearB1 <= 1; clearC1 <= 1; + is_negA1 <= 0; is_negB1 <= 0; + is_negC1 <= 0; + end + 6:begin + enable2 <= 0; clearA2 <= 1; + clearB2 <= 1; clearC2 <= 1; + is_negA2 <= 0; is_negB2 <= 0; + is_negC2 <= 0; + end + 9:begin + enable3 <= 0; clearA3 <= 1; + clearB3 <= 1; clearC3 <= 1; + is_negA3 <= 0; is_negB3 <= 0; + is_negC3 <= 0; + end + default:; + endcase + end + + end + + default:state <= interstate; + endcase + end + + + //BTN RIGHT + else if (btnr_press) begin + case(state) + quadrmenu:begin + if (dot_y == 1 && dot_x == 1) begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_x <= 12; + end + end + + lnrmenu:begin + if (dot_y == 1 && dot_x == 1) begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_x <= 12; + end + end + + numpad:begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_x <= (dot_y < 8) ? ((dot_x < 9) ? dot_x + 4 : dot_x) : ((dot_x < 13) ? dot_x + 4 : dot_x); + end + + eqnmenu:begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_x <= (dot_x < 16) ? dot_x + 2 : dot_x; + end + + default:; + endcase + end + + + //BTN LEFT + else if (btnl_press) begin + case(state) + quadrmenu:begin + if (dot_y == 1 && dot_x == 12) begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_x <= 1; + end + + end + + lnrmenu:begin + if (dot_y == 1 && dot_x == 12) begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_x <= 1; + end + end + + numpad:begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_x <= (dot_x > 1) ? dot_x - 4 : dot_x; + end + + eqnmenu:begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_x <= (dot_x > 12) ? dot_x - 2 : dot_x; + end + default:; + endcase + end + + else if (state == nextstate) begin + + case(state) + + mainmenu_1: begin + //dot + + pixel_array[dot_y][dot_x] <= 8'd37; + //back + pixel_array[1][3] <= 8'd11; pixel_array[1][4] <= 8'd10; + pixel_array[1][5] <= 8'd12; pixel_array[1][6] <= 8'd20; + + //linear + pixel_array[5][3] <= 8'd21; pixel_array[5][4] <= 8'd18; + pixel_array[5][5] <= 8'd23; pixel_array[5][6] <= 8'd14; + pixel_array[5][7] <= 8'd10; pixel_array[5][8] <= 8'd27; + //quadratic + pixel_array[9][3] <= 8'd26; + pixel_array[9][4] <= 8'd30; pixel_array[9][5] <= 8'd10; + pixel_array[9][6] <= 8'd13; pixel_array[9][7] <= 8'd27; + pixel_array[9][8] <= 8'd10; pixel_array[9][9] <= 8'd29; + pixel_array[9][10] <= 8'd18; pixel_array[9][11] <= 8'd12; + end + + quadrmenu: begin + //back + pixel_array[1][3] <= 8'd11;pixel_array[1][4] <= 8'd10; + pixel_array[1][5] <= 8'd12;pixel_array[1][6] <= 8'd20; + //calc + pixel_array[1][14] <= 8'd12;pixel_array[1][15] <= 8'd10; + pixel_array[1][16] <= 8'd21;pixel_array[1][17] <= 8'd12; + //dot + pixel_array[dot_y][dot_x] <= 8'd37; + + + //y=ax^2+bx+c + pixel_array[4][3] <= 8'd34;pixel_array[4][4] <= 8'd43; + pixel_array[4][5] <= 8'd10; + pixel_array[4][6] <= 8'd33;pixel_array[4][7] <= 8'd42; + pixel_array[4][8] <= 8'd2;pixel_array[4][9] <= 8'd38; + pixel_array[4][10] <= 8'd11;pixel_array[4][11] <= 8'd33; + pixel_array[4][12] <= 8'd38;pixel_array[4][13] <= 8'd12; + //a= + pixel_array[6][6] <= 8'd10;pixel_array[6][7] <= 8'd43; + //b= + pixel_array[8][6] <= 8'd11;pixel_array[8][7] <= 8'd43; + //c= + pixel_array[10][6] <= 8'd12;pixel_array[10][7] <= 8'd43; + + // DISPLAY THE NUM + case(eqn) + 1: begin + // A1 + pixel_array[6][9] <= b4A1; pixel_array[6][10] <= b3A1; + pixel_array[6][11] <= b2A1; pixel_array[6][12] <= b1A1; + pixel_array[6][13] <= b0A1; pixel_array[6][14] <= b_1A1; + pixel_array[6][15] <= b_2A1; pixel_array[6][8] <= neg_signA1; + + // B1 + pixel_array[8][9] <= b4B1; pixel_array[8][10] <= b3B1; + pixel_array[8][11] <= b2B1; pixel_array[8][12] <= b1B1; + pixel_array[8][13] <= b0B1; pixel_array[8][14] <= b_1B1; + pixel_array[8][15] <= b_2B1; pixel_array[8][8] <= neg_signB1; + + // C1 + pixel_array[10][9] <= b4C1; pixel_array[10][10] <= b3C1; + pixel_array[10][11] <= b2C1; pixel_array[10][12] <= b1C1; + pixel_array[10][13] <= b0C1; pixel_array[10][14] <= b_1C1; + pixel_array[10][15] <= b_2C1; pixel_array[10][8] <= neg_signC1; + end + + 2: begin + // A2 + pixel_array[6][9] <= b4A2; pixel_array[6][10] <= b3A2; + pixel_array[6][11] <= b2A2; pixel_array[6][12] <= b1A2; + pixel_array[6][13] <= b0A2; pixel_array[6][14] <= b_1A2; + pixel_array[6][15] <= b_2A2; pixel_array[6][8] <= neg_signA2; + + // B2 + pixel_array[8][9] <= b4B2; pixel_array[8][10] <= b3B2; + pixel_array[8][11] <= b2B2; pixel_array[8][12] <= b1B2; + pixel_array[8][13] <= b0B2; pixel_array[8][14] <= b_1B2; + pixel_array[8][15] <= b_2B2; pixel_array[8][8] <= neg_signB2; + + // C2 + pixel_array[10][9] <= b4C2; pixel_array[10][10] <= b3C2; + pixel_array[10][11] <= b2C2; pixel_array[10][12] <= b1C2; + pixel_array[10][13] <= b0C2; pixel_array[10][14] <= b_1C2; + pixel_array[10][15] <= b_2C2; pixel_array[10][8] <= neg_signC2; + end + + 3: begin + // A3 + pixel_array[6][9] <= b4A3; pixel_array[6][10] <= b3A3; + pixel_array[6][11] <= b2A3; pixel_array[6][12] <= b1A3; + pixel_array[6][13] <= b0A3; pixel_array[6][14] <= b_1A3; + pixel_array[6][15] <= b_2A3; pixel_array[6][8] <= neg_signA3; + + // B3 + pixel_array[8][9] <= b4B3; pixel_array[8][10] <= b3B3; + pixel_array[8][11] <= b2B3; pixel_array[8][12] <= b1B3; + pixel_array[8][13] <= b0B3; pixel_array[8][14] <= b_1B3; + pixel_array[8][15] <= b_2B3; pixel_array[8][8] <= neg_signB3; + + // C3 + pixel_array[10][9] <= b4C3; pixel_array[10][10] <= b3C3; + pixel_array[10][11] <= b2C3; pixel_array[10][12] <= b1C3; + pixel_array[10][13] <= b0C3; pixel_array[10][14] <= b_1C3; + pixel_array[10][15] <= b_2C3; pixel_array[10][8] <= neg_signC3; + end + + default: ; + endcase + + + end + + lnrmenu: begin + //back + pixel_array[1][3] <= 8'd11;pixel_array[1][4] <= 8'd10; + pixel_array[1][5] <= 8'd12;pixel_array[1][6] <= 8'd20; + + //calc + pixel_array[1][14] <= 8'd12;pixel_array[1][15] <= 8'd10; + pixel_array[1][16] <= 8'd21;pixel_array[1][17] <= 8'd12; + + //dot + pixel_array[dot_y][dot_x] <= 8'd37; + + //y=bx+c + pixel_array[4][3] <= 8'd34;pixel_array[4][4] <= 8'd43; + pixel_array[4][5] <= 8'd11;pixel_array[4][6] <= 8'd33; + pixel_array[4][7] <= 8'd38;pixel_array[4][8] <= 8'd12; + + //b= + pixel_array[8][6] <= 8'd11;pixel_array[8][7] <= 8'd43; + + //c= + pixel_array[10][6] <= 8'd12;pixel_array[10][7] <= 8'd43; + + //DISPLAY THE NUM + case(eqn) + 1:begin + pixel_array[8][9] <= b4B1; pixel_array[8][10] <= b3B1; + pixel_array[8][11] <= b2B1; pixel_array[8][12] <= b1B1; + pixel_array[8][13] <= b0B1; pixel_array[8][14] <= b_1B1; + pixel_array[8][15] <= b_2B1; pixel_array[8][8] <= neg_signB1; + + pixel_array[10][9] <= b4C1; pixel_array[10][10] <= b3C1; + pixel_array[10][11] <= b2C1; pixel_array[10][12] <= b1C1; + pixel_array[10][13] <= b0C1; pixel_array[10][14] <= b_1C1; + pixel_array[10][15] <= b_2C1; pixel_array[10][8] <= neg_signC1; + end + + 2: begin + // B2 + pixel_array[8][9] <= b4B2; pixel_array[8][10] <= b3B2; + pixel_array[8][11] <= b2B2; pixel_array[8][12] <= b1B2; + pixel_array[8][13] <= b0B2; pixel_array[8][14] <= b_1B2; + pixel_array[8][15] <= b_2B2; pixel_array[8][8] <= neg_signB2; + + // C2 + pixel_array[10][9] <= b4C2; pixel_array[10][10] <= b3C2; + pixel_array[10][11] <= b2C2; pixel_array[10][12] <= b1C2; + pixel_array[10][13] <= b0C2; pixel_array[10][14] <= b_1C2; + pixel_array[10][15] <= b_2C2; pixel_array[10][8] <= neg_signC2; + end + + + 3: begin + // B3 + pixel_array[8][9] <= b4B3; pixel_array[8][10] <= b3B3; + pixel_array[8][11] <= b2B3; pixel_array[8][12] <= b1B3; + pixel_array[8][13] <= b0B3; pixel_array[8][14] <= b_1B3; + pixel_array[8][15] <= b_2B3; pixel_array[8][8] <= neg_signB3; + + // C3 + pixel_array[10][9] <= b4C3; pixel_array[10][10] <= b3C3; + pixel_array[10][11] <= b2C3; pixel_array[10][12] <= b1C3; + pixel_array[10][13] <= b0C3; pixel_array[10][14] <= b_1C3; + pixel_array[10][15] <= b_2C3; pixel_array[10][8] <= neg_signC3; + end + + default:; + endcase + + end + + + numpad: begin + //numbers + pixel_array[2][3] <= 8'd1;pixel_array[2][7] <= 8'd2; + pixel_array[2][11] <= 8'd3;pixel_array[5][3] <= 8'd4; + pixel_array[5][7] <= 8'd5;pixel_array[5][11] <= 8'd6; + pixel_array[8][3] <= 8'd7;pixel_array[8][7] <= 8'd8; + pixel_array[8][11] <= 8'd9;pixel_array[11][3] <= 8'd39; + pixel_array[11][7] <= 8'd0;pixel_array[11][11] <= 8'd43; + pixel_array[8][15] <= 8'd44;pixel_array[11][15] <= 8'd12; + pixel_array[11][16] <= 8'd21;pixel_array[11][17] <= 8'd27; + + //dot + pixel_array[dot_y][dot_x] <= 8'd37; + + addA1 <= 0; addB1 <= 0; addC1 <= 0; + addA2 <= 0; addB2 <= 0; addC2 <= 0; + addA3 <= 0; addB3 <= 0; addC3 <= 0; + + //letter + pixel_array[0][1] <= letter; pixel_array[0][2] <= 8'd43; + if (letter == 8'd10) begin + case(eqn) + 1:begin + pixel_array[0][4] <= b4A1; pixel_array[0][5] <= b3A1; + pixel_array[0][6] <= b2A1; pixel_array[0][7] <= b1A1; + pixel_array[0][8] <= b0A1; pixel_array[0][9] <= b_1A1; + pixel_array[0][10] <= b_2A1; pixel_array[0][3] <= neg_signA1; + end + + 2:begin + pixel_array[0][4] <= b4A2; pixel_array[0][5] <= b3A2; + pixel_array[0][6] <= b2A2; pixel_array[0][7] <= b1A2; + pixel_array[0][8] <= b0A2; pixel_array[0][9] <= b_1A2; + pixel_array[0][10] <= b_2A2; pixel_array[0][3] <= neg_signA2; + end + + 3:begin + pixel_array[0][4] <= b4A3; pixel_array[0][5] <= b3A3; + pixel_array[0][6] <= b2A3; pixel_array[0][7] <= b1A3; + pixel_array[0][8] <= b0A3; pixel_array[0][9] <= b_1A3; + pixel_array[0][10] <= b_2A3; pixel_array[0][3] <= neg_signA3; + end + default:; + endcase + end + + if (letter == 8'd11) begin + case(eqn) + 1: begin + pixel_array[0][4] <= b4B1; pixel_array[0][5] <= b3B1; + pixel_array[0][6] <= b2B1; pixel_array[0][7] <= b1B1; + pixel_array[0][8] <= b0B1; pixel_array[0][9] <= b_1B1; + pixel_array[0][10] <= b_2B1; pixel_array[0][3] <= neg_signB1; + end + + 2: begin + pixel_array[0][4] <= b4B2; pixel_array[0][5] <= b3B2; + pixel_array[0][6] <= b2B2; pixel_array[0][7] <= b1B2; + pixel_array[0][8] <= b0B2; pixel_array[0][9] <= b_1B2; + pixel_array[0][10] <= b_2B2; pixel_array[0][3] <= neg_signB2; + end + + 3: begin + pixel_array[0][4] <= b4B3; pixel_array[0][5] <= b3B3; + pixel_array[0][6] <= b2B3; pixel_array[0][7] <= b1B3; + pixel_array[0][8] <= b0B3; pixel_array[0][9] <= b_1B3; + pixel_array[0][10] <= b_2B3; pixel_array[0][3] <= neg_signB3; + end + default: ; + endcase + end + + if (letter == 8'd12) begin + case(eqn) + 1: begin + pixel_array[0][4] <= b4C1; pixel_array[0][5] <= b3C1; + pixel_array[0][6] <= b2C1; pixel_array[0][7] <= b1C1; + pixel_array[0][8] <= b0C1; pixel_array[0][9] <= b_1C1; + pixel_array[0][10] <= b_2C1; pixel_array[0][3] <= neg_signC1; + end + + 2: begin + pixel_array[0][4] <= b4C2; pixel_array[0][5] <= b3C2; + pixel_array[0][6] <= b2C2; pixel_array[0][7] <= b1C2; + pixel_array[0][8] <= b0C2; pixel_array[0][9] <= b_1C2; + pixel_array[0][10] <= b_2C2; pixel_array[0][3] <= neg_signC2; + end + + 3: begin + pixel_array[0][4] <= b4C3; pixel_array[0][5] <= b3C3; + pixel_array[0][6] <= b2C3; pixel_array[0][7] <= b1C3; + pixel_array[0][8] <= b0C3; pixel_array[0][9] <= b_1C3; + pixel_array[0][10] <= b_2C3; pixel_array[0][3] <= neg_signC3; + end + default: ; + endcase + end + + end + + eqnmenu: begin + + //dot + pixel_array[dot_y][dot_x] <= 8'd37; + + //fpgraph + pixel_array[0][0] <= 8'd15; pixel_array[0][1] <= 8'd25; + pixel_array[0][2] <= 8'd16; pixel_array[0][3] <= 8'd27; + pixel_array[0][4] <= 8'd10; pixel_array[0][5] <= 8'd25; + pixel_array[0][6] <= 8'd17; + + //plot + pixel_array[0][9] <= 8'd25; pixel_array[0][10] <= 8'd21; + pixel_array[0][11] <= 8'd24; pixel_array[0][12] <= 8'd29; + + //T + pixel_array[0][14] <= 8'd29; + + //D + pixel_array[0][16] <= 8'd13; + + // eqn1 (starts at row 3) + pixel_array[4][0] <= (enable1 == 1) ? 8'd34 : 8'd23; + pixel_array[3][0] <= 8'd1; pixel_array[3][2] <= 8'd10; + pixel_array[3][3] <= 8'd43; pixel_array[3][4] <= neg_signA1; + pixel_array[3][5] <= b4A1; pixel_array[3][6] <= b3A1; + pixel_array[3][7] <= b2A1; pixel_array[3][8] <= b1A1; + pixel_array[3][9] <= b0A1; pixel_array[3][10] <= b_1A1; + pixel_array[3][11] <= b_2A1; + + pixel_array[4][2] <= 8'd11; pixel_array[4][3] <= 8'd43; + pixel_array[4][4] <= neg_signB1; pixel_array[4][5] <= b4B1; + pixel_array[4][6] <= b3B1; pixel_array[4][7] <= b2B1; + pixel_array[4][8] <= b1B1; pixel_array[4][9] <= b0B1; + pixel_array[4][10] <= b_1B1; pixel_array[4][11] <= b_2B1; + + pixel_array[5][2] <= 8'd12; pixel_array[5][3] <= 8'd43; + pixel_array[5][4] <= neg_signC1; pixel_array[5][5] <= b4C1; + pixel_array[5][6] <= b3C1; pixel_array[5][7] <= b2C1; + pixel_array[5][8] <= b1C1; pixel_array[5][9] <= b0C1; + pixel_array[5][10] <= b_1C1; pixel_array[5][11] <= b_2C1; + + // eqn2 (starts at row 6) + pixel_array[7][0] <= (enable2 == 1) ? 8'd34 : 8'd23; + pixel_array[6][0] <= 8'd2; pixel_array[6][2] <= 8'd10; + pixel_array[6][3] <= 8'd43; pixel_array[6][4] <= neg_signA2; + pixel_array[6][5] <= b4A2; pixel_array[6][6] <= b3A2; + pixel_array[6][7] <= b2A2; pixel_array[6][8] <= b1A2; + pixel_array[6][9] <= b0A2; pixel_array[6][10] <= b_1A2; + pixel_array[6][11] <= b_2A2; + + pixel_array[7][2] <= 8'd11; pixel_array[7][3] <= 8'd43; + pixel_array[7][4] <= neg_signB2; pixel_array[7][5] <= b4B2; + pixel_array[7][6] <= b3B2; pixel_array[7][7] <= b2B2; + pixel_array[7][8] <= b1B2; pixel_array[7][9] <= b0B2; + pixel_array[7][10] <= b_1B2; pixel_array[7][11] <= b_2B2; + + pixel_array[8][2] <= 8'd12; pixel_array[8][3] <= 8'd43; + pixel_array[8][4] <= neg_signC2; pixel_array[8][5] <= b4C2; + pixel_array[8][6] <= b3C2; pixel_array[8][7] <= b2C2; + pixel_array[8][8] <= b1C2; pixel_array[8][9] <= b0C2; + pixel_array[8][10] <= b_1C2; pixel_array[8][11] <= b_2C2; + + // eqn3 (starts at row 9) + pixel_array[10][0] <= (enable3 == 1) ? 8'd34 : 8'd23; + pixel_array[9][0] <= 8'd3; pixel_array[9][2] <= 8'd10; + pixel_array[9][3] <= 8'd43; pixel_array[9][4] <= neg_signA3; + pixel_array[9][5] <= b4A3; pixel_array[9][6] <= b3A3; + pixel_array[9][7] <= b2A3; pixel_array[9][8] <= b1A3; + pixel_array[9][9] <= b0A3; pixel_array[9][10] <= b_1A3; + pixel_array[9][11] <= b_2A3; + + pixel_array[10][2] <= 8'd11; pixel_array[10][3] <= 8'd43; + pixel_array[10][4] <= neg_signB3; pixel_array[10][5] <= b4B3; + pixel_array[10][6] <= b3B3; pixel_array[10][7] <= b2B3; + pixel_array[10][8] <= b1B3; pixel_array[10][9] <= b0B3; + pixel_array[10][10] <= b_1B3; pixel_array[10][11] <= b_2B3; + + pixel_array[11][2] <= 8'd12; pixel_array[11][3] <= 8'd43; + pixel_array[11][4] <= neg_signC3; pixel_array[11][5] <= b4C3; + pixel_array[11][6] <= b3C3; pixel_array[11][7] <= b2C3; + pixel_array[11][8] <= b1C3; pixel_array[11][9] <= b0C3; + pixel_array[11][10] <= b_1C3; pixel_array[11][11] <= b_2C3; + end + + default: state <= interstate; + endcase + // Clear all clears + clearA1 <= 0; clearB1 <= 0; clearC1 <= 0; + clearA2 <= 0; clearB2 <= 0; clearC2 <= 0; + clearA3 <= 0; clearB3 <= 0; clearC3 <= 0; + end + + + + + end//end of always block + + + + + //end//always + + //assign array_out = (x_cor > end_x || y_cor > end_y || x_cor < start_x || y_cor < start_y) ? 0 : pixel_array[0][0]; + always @ (posedge CLOCK) begin + array_out <= (x_cor > end_x || y_cor > end_y || x_cor < start_x || y_cor < start_y) ? 8'd36 : pixel_array[y][x]; + end + +endmodule + + + From fd005da019dd57facda0fdaa98dd40ae64614ba5 Mon Sep 17 00:00:00 2001 From: "DESKTOP-OVSDVEK\\Wong Yi Hao" Date: Thu, 10 Apr 2025 13:41:35 +0800 Subject: [PATCH 2/9] updated --- FPGraph.srcs/sources_1/new/charRom.v | 9 +- FPGraph.srcs/sources_1/new/control_screen.v | 60 +- FPGraph.srcs/sources_1/new/num_gen.v | 48 +- FPGraph.srcs/sources_1/new/scene_controller.v | 748 ++++++++---------- 4 files changed, 392 insertions(+), 473 deletions(-) diff --git a/FPGraph.srcs/sources_1/new/charRom.v b/FPGraph.srcs/sources_1/new/charRom.v index ed9c915..7b5cbe7 100644 --- a/FPGraph.srcs/sources_1/new/charRom.v +++ b/FPGraph.srcs/sources_1/new/charRom.v @@ -26,7 +26,7 @@ module charRom( output pixel ); - reg [4:0] data [44:0][4:0]; + reg [4:0] data [45:0][4:0]; initial begin // '0' @@ -345,6 +345,13 @@ module charRom( data[44][3] = 5'b00000; data[44][4] = 5'b00100; + //'.' in the bot + data[45][0] = 5'b11111; + data[45][1] = 5'b11111; + data[45][2] = 5'b11111; + data[45][3] = 5'b11111; + data[45][4] = 5'b11111; + diff --git a/FPGraph.srcs/sources_1/new/control_screen.v b/FPGraph.srcs/sources_1/new/control_screen.v index cc99f99..0fd1e1f 100644 --- a/FPGraph.srcs/sources_1/new/control_screen.v +++ b/FPGraph.srcs/sources_1/new/control_screen.v @@ -31,14 +31,18 @@ module control_screen( input btnu, input btnd, output reg [15:0] colour_out, - output [13:0] int_part_A1, int_part_B1, int_part_C1, - int_part_A2, int_part_B2, int_part_C2, - int_part_A3, int_part_B3, int_part_C3, + output [13:0] int_part_A1, int_part_B1, int_part_C1, int_part_D1, + int_part_A2, int_part_B2, int_part_C2, int_part_D2, + int_part_A3, int_part_B3, int_part_C3, int_part_D3, - output [6:0] deci_part_A1, deci_part_B1, deci_part_C1, - deci_part_A2, deci_part_B2, deci_part_C2, - deci_part_A3, deci_part_B3, deci_part_C3, - output enable1, enable2, enable3 + output [6:0] deci_part_A1, deci_part_B1, deci_part_C1, deci_part_D1, + deci_part_A2, deci_part_B2, deci_part_C2, deci_part_D2, + deci_part_A3, deci_part_B3, deci_part_C3, deci_part_D3, + + output is_neg_A1, is_neg_B1, is_neg_C1, is_neg_D1, + is_neg_A2, is_neg_B2, is_neg_C2, is_neg_D2, + is_neg_A3, is_neg_B3, is_neg_C3, is_neg_D3 + ); parameter [7:0] x_incr = 5; @@ -68,30 +72,30 @@ module control_screen( //scene_controller control_scene (.btnc(btnc), .btnr(btnr), .btnl(btnl), .btnu(btnu), .btnd(btnd), .x_cor(x_cor), .CLOCK(CLOCK), .y_cor(y_cor), .array_out(screen_chars)); - // Instantiate the scene_controller - scene_controller u_scene_controller ( - .btnc(btnc), - .btnr(btnr), - .btnl(btnl), - .btnu(btnu), - .btnd(btnd), - .CLOCK(CLOCK), - .x_cor(x_cor), - .y_cor(y_cor), - .array_out(screen_chars), + // Instantiate the scene_controller module + scene_controller u_scene_controller ( + .btnc(btnc), + .btnr(btnr), + .btnl(btnl), + .btnu(btnu), + .btnd(btnd), + .CLOCK(CLOCK), + .x_cor(x_cor), + .y_cor(y_cor), + .array_out(screen_chars), - .int_part_A1(int_part_A1), .int_part_B1(int_part_B1), .int_part_C1(int_part_C1), - .int_part_A2(int_part_A2), .int_part_B2(int_part_B2), .int_part_C2(int_part_C2), - .int_part_A3(int_part_A3), .int_part_B3(int_part_B3), .int_part_C3(int_part_C3), + .int_part_A1(int_part_A1), .int_part_B1(int_part_B1), .int_part_C1(int_part_C1), .int_part_D1(int_part_D1), + .int_part_A2(int_part_A2), .int_part_B2(int_part_B2), .int_part_C2(int_part_C2), .int_part_D2(int_part_D2), + .int_part_A3(int_part_A3), .int_part_B3(int_part_B3), .int_part_C3(int_part_C3), .int_part_D3(int_part_D3), - .deci_part_A1(deci_part_A1), .deci_part_B1(deci_part_B1), .deci_part_C1(deci_part_C1), - .deci_part_A2(deci_part_A2), .deci_part_B2(deci_part_B2), .deci_part_C2(deci_part_C2), - .deci_part_A3(deci_part_A3), .deci_part_B3(deci_part_B3), .deci_part_C3(deci_part_C3), + .deci_part_A1(deci_part_A1), .deci_part_B1(deci_part_B1), .deci_part_C1(deci_part_C1), .deci_part_D1(deci_part_D1), + .deci_part_A2(deci_part_A2), .deci_part_B2(deci_part_B2), .deci_part_C2(deci_part_C2), .deci_part_D2(deci_part_D2), + .deci_part_A3(deci_part_A3), .deci_part_B3(deci_part_B3), .deci_part_C3(deci_part_C3), .deci_part_D3(deci_part_D3), - .enable1(enable1), - .enable2(enable2), - .enable3(enable3) - ); + .is_neg_A1(is_neg_A1), .is_neg_B1(is_neg_B1), .is_neg_C1(is_neg_C1), .is_neg_D1(is_neg_D1), + .is_neg_A2(is_neg_A2), .is_neg_B2(is_neg_B2), .is_neg_C2(is_neg_C2), .is_neg_D2(is_neg_D2), + .is_neg_A3(is_neg_A3), .is_neg_B3(is_neg_B3), .is_neg_C3(is_neg_C3), .is_neg_D3(is_neg_D3) + ); wire pixel_out; diff --git a/FPGraph.srcs/sources_1/new/num_gen.v b/FPGraph.srcs/sources_1/new/num_gen.v index 5407cb5..77fd7b9 100644 --- a/FPGraph.srcs/sources_1/new/num_gen.v +++ b/FPGraph.srcs/sources_1/new/num_gen.v @@ -40,7 +40,9 @@ module num_gen( ); reg [13:0] int =14'd0; - reg [6:0] deci = 14'd0; + reg [3:0] deci_2 = 4'd0; + reg [3:0] deci_1 = 4'd0; + reg [3:0] deci_digits = 4'd0; parameter [7:0] dot = 8'd44; parameter [7:0] space = 8'd36; parameter [7:0] neg = 8'd39; @@ -48,10 +50,25 @@ module num_gen( always @ (posedge CLOCK) begin if (clear) begin int <= 0; - deci <= 0; + deci_2 <= 0; + deci_1 <= 0; + deci_digits <= 0; end else if (add) begin if (is_deci) begin - deci <= (deci < 10) ? (deci * 10 + digit_in) : ((deci % 10) * 10 + digit_in); + deci_digits <= (deci_digits < 2) ? deci_digits + 1 : deci_digits; + case(deci_digits) + 0:begin + deci_2 <= digit_in; + end + 1:begin + deci_1 <= digit_in; + end + 2:begin + deci_2 <= deci_1; + deci_1 <= digit_in; + end + default:; + endcase end else begin int <= (int < 14'd1000) ? (int * 10 + digit_in) : ((int % 1000) * 10 + digit_in); end @@ -60,7 +77,7 @@ module num_gen( end wire [2:0] int_digits = (int / 1000 != 0) ? (3'd4) : ((int / 100 != 0) ? 3'd3 : (int / 10 != 0) ? 3'd2 : 3'd1); - wire [2:0] deci_digits = (deci / 10 != 0) ? (2'd2) : ((deci != 0) ? 2'd1 : 2'd0); + //wire [2:0] deci_digits = (deci / 10 != 0) ? (2'd2) : ((deci != 0) ? 2'd1 : 2'd0); assign neg_sign = (is_neg) ? neg : space; assign b4 = (int_digits == 4) ? (int / 1000) : @@ -75,24 +92,19 @@ module num_gen( assign b2 = (int_digits == 4) ? ((int % 100) / 10) : (int_digits == 3) ? (int % 10) : (int_digits == 2) ? ((deci_digits == 0) ? space : dot) : - (deci_digits == 0) ? (space) : - (deci_digits == 1) ? deci : (deci / 10); + (deci_digits == 0) ? (space) : deci_2; assign b1 = (int_digits == 4) ? (int % 10) : (int_digits == 3) ? ((deci_digits == 0) ? space : dot) : - (int_digits == 2) ? ((deci_digits == 0) ? space : ((deci_digits == 1) ? deci % 10 : deci / 10)) : - (deci_digits == 2) ? (deci % 10) : space; + (int_digits == 2) ? ((deci_digits == 0) ? space : deci_2) : + (deci_digits == 0) ? space : deci_1; assign b0 = (int_digits == 4) ? ((deci_digits == 0) ? space : dot) : - (int_digits == 3) ? ((deci_digits == 0) ? space : ((deci_digits == 1) ? deci % 10 : (deci / 10))) : - (int_digits == 2) ? ((deci_digits == 2) ? (deci % 10) : space) : + (int_digits == 3) ? ((deci_digits == 0) ? space : deci_2) : + (int_digits == 2) ? ((deci_digits != 0) ? deci_1 : space) : space; - assign b_1 = (int_digits == 4) ? ((deci_digits == 0) ? space : - (deci_digits == 1) ? (deci % 10) : - (deci / 10)) : - ((int_digits == 3) ? ((deci_digits == 2) ? deci % 10 : - space) : - space); - assign b_2 = (int_digits == 4 && deci_digits == 2) ? (deci % 10) : + assign b_1 = (int_digits == 4) ? ((deci_digits == 0) ? space : deci_2) : + (int_digits == 3) ? ((deci_digits == 0) ? space : deci_1) : space; + assign b_2 = (int_digits == 4 && deci_digits != 0) ? deci_1 : space; assign int_part = int; - assign deci_part = deci; + assign deci_part = deci_2 * 10 + deci_1; endmodule diff --git a/FPGraph.srcs/sources_1/new/scene_controller.v b/FPGraph.srcs/sources_1/new/scene_controller.v index e7de8ee..9e6ca30 100644 --- a/FPGraph.srcs/sources_1/new/scene_controller.v +++ b/FPGraph.srcs/sources_1/new/scene_controller.v @@ -30,14 +30,19 @@ module scene_controller( input [7:0] x_cor, input [7:0] y_cor, output reg [7:0] array_out, - output [13:0] int_part_A1, int_part_B1, int_part_C1, - int_part_A2, int_part_B2, int_part_C2, - int_part_A3, int_part_B3, int_part_C3, + output [13:0] int_part_A1, int_part_B1, int_part_C1, int_part_D1, + int_part_A2, int_part_B2, int_part_C2, int_part_D2, + int_part_A3, int_part_B3, int_part_C3, int_part_D3, + + output [6:0] deci_part_A1, deci_part_B1, deci_part_C1, deci_part_D1, + deci_part_A2, deci_part_B2, deci_part_C2, deci_part_D2, + deci_part_A3, deci_part_B3, deci_part_C3, deci_part_D3, + + output is_neg_A1, is_neg_B1, is_neg_C1, is_neg_D1, + is_neg_A2, is_neg_B2, is_neg_C2, is_neg_D2, + is_neg_A3, is_neg_B3, is_neg_C3, is_neg_D3 + - output [6:0] deci_part_A1, deci_part_B1, deci_part_C1, - deci_part_A2, deci_part_B2, deci_part_C2, - deci_part_A3, deci_part_B3, deci_part_C3, - output reg enable1 = 0, enable2 = 0, enable3 = 0 ); @@ -66,7 +71,7 @@ module scene_controller( parameter [3:0] interstate = 4'd0; parameter [3:0] mainmenu_1 = 4'd1; parameter [3:0] quadrmenu = 4'd2; - parameter [3:0] lnrmenu = 4'd3; + parameter [3:0] numpad = 4'd4; parameter [3:0] eqnmenu = 4'd5; @@ -74,11 +79,13 @@ module scene_controller( reg [7:0] state = interstate; reg [7:0] nextstate = eqnmenu; reg [7:0] prevstate = interstate; - reg [7:0] dot_x = 12; + reg [7:0] dot_x = 1; reg [7:0] dot_y = 3; reg [7:0] eqn = 1; - + reg enable1 = 0; + reg enable2 = 0; + reg enable3 = 0; //displayed var reg [7:0] letter; @@ -92,6 +99,18 @@ module scene_controller( reg addA2, addB2, addC2; reg addA3, addB3, addC3; + reg addD1, addD2, addD3; + reg is_negD1, is_negD2, is_negD3; + reg clearD1, clearD2, clearD3; + + + + // Bitmaps for pixel drawing + wire [7:0] b4D1, b3D1, b2D1, b1D1, b0D1, b_1D1, b_2D1, neg_signD1; + wire [7:0] b4D2, b3D2, b2D2, b1D2, b0D2, b_1D2, b_2D2, neg_signD2; + wire [7:0] b4D3, b3D3, b2D3, b1D3, b0D3, b_1D3, b_2D3, neg_signD3; + + // ----- Instance A1 ----- //wire [13:0] int_part_A1; wire [6:0] deci_part_A1; wire [7:0] b4A1, b3A1, b2A1, b1A1, b0A1, b_1A1, b_2A1, neg_signA1; @@ -208,6 +227,49 @@ module scene_controller( .int_part(int_part_C3), .deci_part(deci_part_C3), .neg_sign(neg_signC3), .b4(b4C3), .b3(b3C3), .b2(b2C3), .b1(b1C3), .b0(b0C3), .b_1(b_1C3), .b_2(b_2C3) ); + + num_gen D1 ( + .digit_in(digit_in), + .add(addD1), + .clear(clearD1), + .CLOCK(CLOCK), + .is_deci(is_deci), + .is_neg(is_negD1), + .int_part(int_part_D1), + .deci_part(deci_part_D1), + .neg_sign(neg_signD1), + .b4(b4D1), .b3(b3D1), .b2(b2D1), .b1(b1D1), + .b0(b0D1), .b_1(b_1D1), .b_2(b_2D1) + ); + + num_gen D2 ( + .digit_in(digit_in), + .add(addD2), + .clear(clearD2), + .CLOCK(CLOCK), + .is_deci(is_deci), + .is_neg(is_negD2), + .int_part(int_part_D2), + .deci_part(deci_part_D2), + .neg_sign(neg_signD2), + .b4(b4D2), .b3(b3D2), .b2(b2D2), .b1(b1D2), + .b0(b0D2), .b_1(b_1D2), .b_2(b_2D2) + ); + + num_gen D3 ( + .digit_in(digit_in), + .add(addD3), + .clear(clearD3), + .CLOCK(CLOCK), + .is_deci(is_deci), + .is_neg(is_negD3), + .int_part(int_part_D3), + .deci_part(deci_part_D3), + .neg_sign(neg_signD3), + .b4(b4D3), .b3(b3D3), .b2(b2D3), .b1(b1D3), + .b0(b0D3), .b_1(b_1D3), .b_2(b_2D3) + ); + @@ -274,34 +336,18 @@ module scene_controller( case(state) - mainmenu_1: begin - pixel_array[dot_y][dot_x] <= 8'd36; - dot_y <= (dot_y > 1) ? dot_y - 4 : dot_y; - end - quadrmenu:begin - if (dot_y == 6) begin + if (dot_y == 5) begin pixel_array[dot_y][dot_x] <=8'd36; dot_y <= 1; dot_x <= 1; - end else if (dot_y > 6) begin + end else if (dot_y > 5) begin pixel_array[dot_y][dot_x] <= 8'd36; dot_y <= dot_y - 2; dot_x <= 4; end end - lnrmenu:begin - if (dot_y == 8) begin - pixel_array[dot_y][dot_x] <=8'd36; - dot_y <= 1; - dot_x <= 1; - end else if (dot_y > 8) begin - pixel_array[dot_y][dot_x] <= 8'd36; - dot_y <= dot_y - 2; - dot_x <= 4; - end - end numpad:begin pixel_array[dot_y][dot_x] <= 8'd36; @@ -321,36 +367,20 @@ module scene_controller( //BTN DOWN else if (btnd_press) begin case(state) - - mainmenu_1: begin - pixel_array[dot_y][dot_x] <= 8'd36; - dot_y <= (dot_y < 9) ? dot_y + 4 : dot_y; - end - - + quadrmenu:begin if (dot_y == 1) begin pixel_array[dot_y][dot_x] <= 8'd36; - dot_y <= 6; + dot_y <= 5; dot_x <= 4; end else begin pixel_array[dot_y][dot_x] <= 8'd36; - dot_y <= (dot_y < 10) ? dot_y + 2: dot_y; + dot_y <= (dot_y < 11) ? dot_y + 2: dot_y; end end - lnrmenu:begin - if (dot_y == 1) begin - pixel_array[dot_y][dot_x] <= 8'd36; - dot_y <= 8; - dot_x <= 4; - end - else begin - pixel_array[dot_y][dot_x] <= 8'd36; - dot_y <= (dot_y < 10) ? dot_y + 2: dot_y; - end - end + numpad:begin pixel_array[dot_y][dot_x] <= 8'd36; @@ -371,32 +401,9 @@ module scene_controller( else if (btnc_press) begin case(state) - mainmenu_1:begin - if (dot_y == 9) begin - state <= interstate; - nextstate <= quadrmenu; - dot_x <= 1; - dot_y <= 1; - end if (dot_y == 5) begin - state <= interstate; - nextstate <= lnrmenu; - dot_x <= 1; - dot_y <= 1; - end - else if (dot_y == 1) begin - state <= interstate; - nextstate <= eqnmenu; - dot_x <= 8'd12; - dot_y <= 3 * eqn; - end - end quadrmenu:begin if (dot_y == 1 && dot_x ==1) begin - state <= interstate; - nextstate <= mainmenu_1; - dot_x <= 1; - dot_y <= 9; case(eqn) 1:begin @@ -405,7 +412,9 @@ module scene_controller( is_negB1 <= 0; clearB1 <= 1; is_negC1 <= 0; - clearC1 <= 1; + clearC1 <= 1; + is_negD1 <= 0; + clearD1 <= 1; end 2:begin is_negA2 <= 0; @@ -414,6 +423,8 @@ module scene_controller( clearB2 <= 1; is_negC2 <= 0; clearC2 <= 1; + is_negD2 <= 0; + clearD2 <= 1; end 3:begin is_negA3 <= 0; @@ -422,31 +433,32 @@ module scene_controller( clearB3 <= 1; is_negC3 <= 0; clearC3 <= 1; + is_negD3 <= 0; + clearD3 <= 1; end default:; endcase end else if (dot_x == 12 && dot_y == 1) begin state <= interstate; nextstate <= eqnmenu; - dot_x <= 12; - dot_y <= eqn/3; - case(eqn) - 1:enable1 <= 1; - 2:enable2 <= 1; - 3:enable3 <= 1; - endcase + dot_x <= 1; + dot_y <= eqn * 3; end else begin - if (dot_y == 6 && dot_x == 4) begin + if (dot_y == 5 && dot_x == 4) begin letter <= 6'd10; end - else if (dot_y == 8 && dot_x == 4) begin + else if (dot_y == 7 && dot_x == 4) begin letter <= 6'd11; end - else if (dot_y == 10 && dot_x == 4) begin + else if (dot_y == 9 && dot_x == 4) begin letter <= 6'd12; end + + else if (dot_y == 11 && dot_x == 4) begin + letter <= 6'd13; + end state <= interstate; nextstate <= numpad; prevstate <= quadrmenu; @@ -457,73 +469,10 @@ module scene_controller( end - lnrmenu:begin - if (dot_y == 1 && dot_x ==1) begin - nextstate <= mainmenu_1; - state <= interstate; - dot_x <= 1; - dot_y <= 5; - - case(eqn) - 1:begin - is_negA1 <= 0; - clearA1 <= 1; - is_negB1 <= 0; - clearB1 <= 1; - is_negC1 <= 0; - clearC1 <= 1; - end - 2:begin - is_negA2 <= 0; - clearA2 <= 1; - is_negB2 <= 0; - clearB2 <= 1; - is_negC2 <= 0; - clearC2 <= 1; - end - 3:begin - is_negA3 <= 0; - clearA3 <= 1; - is_negB3 <= 0; - clearB3 <= 1; - is_negC3 <= 0; - clearC3 <= 1; - end - default:; - endcase - - end - - else if (dot_x == 12 && dot_y == 1) begin - state <= interstate; nextstate <= eqnmenu; - dot_x <= 12; - dot_y <= eqn/3; - case(eqn) - 1:enable1 <= 1; - 2:enable2 <= 1; - 3:enable3 <= 1; - endcase - end - - else begin - if (dot_y == 8 && dot_x == 4) begin - letter <= 6'd11; - end - else if (dot_y == 10 && dot_x == 4) begin - letter <= 6'd12; - end - state <= interstate; - nextstate <= numpad; - prevstate <= lnrmenu; - dot_x <= 1; - dot_y <= 2; - end - - end - + numpad:begin - if (dot_x == 9 && dot_y == 11) begin - dot_x <= 4; dot_y <= (letter == 6'd10) ? 6 : (letter == 6'd11) ? 8 : 10; + if (dot_x == 13 && dot_y == 8) begin + dot_x <= 4; dot_y <= 5 + (letter - 10) * 2; nextstate <= prevstate; state <= interstate; is_deci <= 0; @@ -540,6 +489,9 @@ module scene_controller( end if (letter == 6'd12) begin addC1 <= 1; + end + if (letter == 6'd13) begin + addD1 <= 1; end end 2:begin @@ -552,6 +504,9 @@ module scene_controller( if (letter == 6'd12) begin addC2 <= 1; end + if (letter == 6'd13) begin + addD2 <= 1; + end end 3:begin if (letter == 6'd10) begin @@ -563,6 +518,9 @@ module scene_controller( if (letter == 6'd12) begin addC3 <= 1; end + if (letter == 6'd13) begin + addD3 <= 1; + end end default:; endcase @@ -580,6 +538,9 @@ module scene_controller( if (letter == 6'd12) begin is_negC1 <= 1; end + if (letter == 6'd13) begin + is_negD1 <= 1; + end end 2: begin @@ -592,6 +553,9 @@ module scene_controller( if (letter == 6'd12) begin is_negC2 <= 1; end + if (letter == 6'd13) begin + is_negD2 <= 1; + end end 3: begin @@ -604,6 +568,9 @@ module scene_controller( if (letter == 6'd12) begin is_negC3 <= 1; end + if (letter == 6'd13) begin + is_negD3 <= 1; + end end default: ; @@ -628,6 +595,11 @@ module scene_controller( is_deci <= 0; is_negC1 <= 0; end + if (letter == 6'd13) begin + clearD1 <= 1; + is_deci <= 0; + is_negD1 <= 0; + end end 2: begin @@ -646,6 +618,11 @@ module scene_controller( is_deci <= 0; is_negC2 <= 0; end + if (letter == 6'd13) begin + clearD2 <= 1; + is_deci <= 0; + is_negD2 <= 0; + end end 3: begin @@ -664,6 +641,11 @@ module scene_controller( is_deci <= 0; is_negC3 <= 0; end + if (letter == 6'd13) begin + clearD3 <= 1; + is_deci <= 0; + is_negD3 <= 0; + end end default: ; @@ -672,7 +654,7 @@ module scene_controller( end - else if (dot_x == 13 && dot_y == 8) begin + else if (dot_x == 9 && dot_y == 11) begin is_deci <= 1; end @@ -689,6 +671,9 @@ module scene_controller( if (letter == 6'd12) begin addC1 <= 1; end + if (letter == 6'd13) begin + addD1 <= 1; + end end 2: begin @@ -701,6 +686,9 @@ module scene_controller( if (letter == 6'd12) begin addC2 <= 1; end + if (letter == 6'd13) begin + addD2 <= 1; + end end 3: begin @@ -713,6 +701,9 @@ module scene_controller( if (letter == 6'd12) begin addC3 <= 1; end + if (letter == 6'd13) begin + addD3 <= 1; + end end default: ; @@ -723,46 +714,39 @@ module scene_controller( end eqnmenu:begin - if (dot_x == 12) begin + eqn <= dot_y / 3; state <= interstate; - nextstate <= mainmenu_1; + nextstate <= quadrmenu; dot_x <= 1; - dot_y <= 5; - end + dot_y <= 1; + - else if (dot_x == 14) begin - case(dot_y) - 3:enable1 <= ~enable1; - 6:enable2 <= ~enable2; - 9:enable3 <= ~enable3; - default:; - endcase - end - else if (dot_x == 16) begin - case(dot_y) - 3:begin - enable1 <= 0; clearA1 <= 1; - clearB1 <= 1; clearC1 <= 1; - is_negA1 <= 0; is_negB1 <= 0; - is_negC1 <= 0; - end - 6:begin - enable2 <= 0; clearA2 <= 1; - clearB2 <= 1; clearC2 <= 1; - is_negA2 <= 0; is_negB2 <= 0; - is_negC2 <= 0; - end - 9:begin - enable3 <= 0; clearA3 <= 1; - clearB3 <= 1; clearC3 <= 1; - is_negA3 <= 0; is_negB3 <= 0; - is_negC3 <= 0; - end - default:; - endcase - end + +// else if (dot_x == 16) begin +// case(dot_y) +// 3:begin +// enable1 <= 0; clearA1 <= 1; +// clearB1 <= 1; clearC1 <= 1; +// is_negA1 <= 0; is_negB1 <= 0; +// is_negC1 <= 0; +// end +// 6:begin +// enable2 <= 0; clearA2 <= 1; +// clearB2 <= 1; clearC2 <= 1; +// is_negA2 <= 0; is_negB2 <= 0; +// is_negC2 <= 0; +// end +// 9:begin +// enable3 <= 0; clearA3 <= 1; +// clearB3 <= 1; clearC3 <= 1; +// is_negA3 <= 0; is_negB3 <= 0; +// is_negC3 <= 0; +// end +// default:; +// endcase +// end end @@ -781,22 +765,13 @@ module scene_controller( end end - lnrmenu:begin - if (dot_y == 1 && dot_x == 1) begin - pixel_array[dot_y][dot_x] <= 8'd36; - dot_x <= 12; - end - end - + numpad:begin pixel_array[dot_y][dot_x] <= 8'd36; dot_x <= (dot_y < 8) ? ((dot_x < 9) ? dot_x + 4 : dot_x) : ((dot_x < 13) ? dot_x + 4 : dot_x); end - eqnmenu:begin - pixel_array[dot_y][dot_x] <= 8'd36; - dot_x <= (dot_x < 16) ? dot_x + 2 : dot_x; - end + default:; endcase @@ -814,22 +789,14 @@ module scene_controller( end - lnrmenu:begin - if (dot_y == 1 && dot_x == 12) begin - pixel_array[dot_y][dot_x] <= 8'd36; - dot_x <= 1; - end - end + numpad:begin pixel_array[dot_y][dot_x] <= 8'd36; dot_x <= (dot_x > 1) ? dot_x - 4 : dot_x; end - eqnmenu:begin - pixel_array[dot_y][dot_x] <= 8'd36; - dot_x <= (dot_x > 12) ? dot_x - 2 : dot_x; - end + default:; endcase end @@ -838,190 +805,122 @@ module scene_controller( case(state) - mainmenu_1: begin - //dot - - pixel_array[dot_y][dot_x] <= 8'd37; - //back - pixel_array[1][3] <= 8'd11; pixel_array[1][4] <= 8'd10; - pixel_array[1][5] <= 8'd12; pixel_array[1][6] <= 8'd20; - - //linear - pixel_array[5][3] <= 8'd21; pixel_array[5][4] <= 8'd18; - pixel_array[5][5] <= 8'd23; pixel_array[5][6] <= 8'd14; - pixel_array[5][7] <= 8'd10; pixel_array[5][8] <= 8'd27; - //quadratic - pixel_array[9][3] <= 8'd26; - pixel_array[9][4] <= 8'd30; pixel_array[9][5] <= 8'd10; - pixel_array[9][6] <= 8'd13; pixel_array[9][7] <= 8'd27; - pixel_array[9][8] <= 8'd10; pixel_array[9][9] <= 8'd29; - pixel_array[9][10] <= 8'd18; pixel_array[9][11] <= 8'd12; - end - quadrmenu: begin - //back - pixel_array[1][3] <= 8'd11;pixel_array[1][4] <= 8'd10; - pixel_array[1][5] <= 8'd12;pixel_array[1][6] <= 8'd20; - //calc - pixel_array[1][14] <= 8'd12;pixel_array[1][15] <= 8'd10; - pixel_array[1][16] <= 8'd21;pixel_array[1][17] <= 8'd12; + //reset + pixel_array[1][3] <= 8'd27;pixel_array[1][4] <= 8'd14; + pixel_array[1][5] <= 8'd28;pixel_array[1][6] <= 8'd14; + pixel_array[1][7] <= 8'd29; + //done + pixel_array[1][14] <= 8'd13;pixel_array[1][15] <= 8'd24; + pixel_array[1][16] <= 8'd23;pixel_array[1][17] <= 8'd14; //dot pixel_array[dot_y][dot_x] <= 8'd37; - //y=ax^2+bx+c - pixel_array[4][3] <= 8'd34;pixel_array[4][4] <= 8'd43; - pixel_array[4][5] <= 8'd10; - pixel_array[4][6] <= 8'd33;pixel_array[4][7] <= 8'd42; - pixel_array[4][8] <= 8'd2;pixel_array[4][9] <= 8'd38; - pixel_array[4][10] <= 8'd11;pixel_array[4][11] <= 8'd33; - pixel_array[4][12] <= 8'd38;pixel_array[4][13] <= 8'd12; + //y=ax^3+bx^2+cx+d + pixel_array[3][1] <= 8'd34;pixel_array[3][2] <= 8'd43; + pixel_array[3][3] <= 8'd10; + pixel_array[3][4] <= 8'd33;pixel_array[3][5] <= 8'd42; + pixel_array[3][6] <= 8'd3;pixel_array[3][7] <= 8'd38; + pixel_array[3][8] <= 8'd11;pixel_array[3][9] <= 8'd33; + pixel_array[3][10] <= 8'd42;pixel_array[3][11] <= 8'd2; + pixel_array[3][12] <= 8'd38;pixel_array[3][13] <= 8'd12; + pixel_array[3][14] <= 8'd33;pixel_array[3][15] <= 8'd38; + pixel_array[3][16] <= 8'd13; //a= - pixel_array[6][6] <= 8'd10;pixel_array[6][7] <= 8'd43; + pixel_array[5][6] <= 8'd10;pixel_array[5][7] <= 8'd43; //b= - pixel_array[8][6] <= 8'd11;pixel_array[8][7] <= 8'd43; + pixel_array[7][6] <= 8'd11;pixel_array[7][7] <= 8'd43; //c= - pixel_array[10][6] <= 8'd12;pixel_array[10][7] <= 8'd43; + pixel_array[9][6] <= 8'd12;pixel_array[9][7] <= 8'd43; + //d= + pixel_array[11][6] <= 8'd13;pixel_array[11][7] <= 8'd43; // DISPLAY THE NUM case(eqn) 1: begin // A1 - pixel_array[6][9] <= b4A1; pixel_array[6][10] <= b3A1; - pixel_array[6][11] <= b2A1; pixel_array[6][12] <= b1A1; - pixel_array[6][13] <= b0A1; pixel_array[6][14] <= b_1A1; - pixel_array[6][15] <= b_2A1; pixel_array[6][8] <= neg_signA1; + pixel_array[5][9] <= b4A1; pixel_array[5][10] <= b3A1; + pixel_array[5][11] <= b2A1; pixel_array[5][12] <= b1A1; + pixel_array[5][13] <= b0A1; pixel_array[5][14] <= b_1A1; + pixel_array[5][15] <= b_2A1; pixel_array[5][8] <= neg_signA1; // B1 - pixel_array[8][9] <= b4B1; pixel_array[8][10] <= b3B1; - pixel_array[8][11] <= b2B1; pixel_array[8][12] <= b1B1; - pixel_array[8][13] <= b0B1; pixel_array[8][14] <= b_1B1; - pixel_array[8][15] <= b_2B1; pixel_array[8][8] <= neg_signB1; + pixel_array[7][9] <= b4B1; pixel_array[7][10] <= b3B1; + pixel_array[7][11] <= b2B1; pixel_array[7][12] <= b1B1; + pixel_array[7][13] <= b0B1; pixel_array[7][14] <= b_1B1; + pixel_array[7][15] <= b_2B1; pixel_array[7][8] <= neg_signB1; // C1 - pixel_array[10][9] <= b4C1; pixel_array[10][10] <= b3C1; - pixel_array[10][11] <= b2C1; pixel_array[10][12] <= b1C1; - pixel_array[10][13] <= b0C1; pixel_array[10][14] <= b_1C1; - pixel_array[10][15] <= b_2C1; pixel_array[10][8] <= neg_signC1; + pixel_array[9][9] <= b4C1; pixel_array[9][10] <= b3C1; + pixel_array[9][11] <= b2C1; pixel_array[9][12] <= b1C1; + pixel_array[9][13] <= b0C1; pixel_array[9][14] <= b_1C1; + pixel_array[9][15] <= b_2C1; pixel_array[9][8] <= neg_signC1; + + // D1 + pixel_array[11][9] <= b4D1; pixel_array[11][10] <= b3D1; + pixel_array[11][11] <= b2D1; pixel_array[11][12] <= b1D1; + pixel_array[11][13] <= b0D1; pixel_array[11][14] <= b_1D1; + pixel_array[11][15] <= b_2D1; pixel_array[11][8] <= neg_signD1; end 2: begin // A2 - pixel_array[6][9] <= b4A2; pixel_array[6][10] <= b3A2; - pixel_array[6][11] <= b2A2; pixel_array[6][12] <= b1A2; - pixel_array[6][13] <= b0A2; pixel_array[6][14] <= b_1A2; - pixel_array[6][15] <= b_2A2; pixel_array[6][8] <= neg_signA2; + pixel_array[5][9] <= b4A2; pixel_array[5][10] <= b3A2; + pixel_array[5][11] <= b2A2; pixel_array[5][12] <= b1A2; + pixel_array[5][13] <= b0A2; pixel_array[5][14] <= b_1A2; + pixel_array[5][15] <= b_2A2; pixel_array[5][8] <= neg_signA2; // B2 - pixel_array[8][9] <= b4B2; pixel_array[8][10] <= b3B2; - pixel_array[8][11] <= b2B2; pixel_array[8][12] <= b1B2; - pixel_array[8][13] <= b0B2; pixel_array[8][14] <= b_1B2; - pixel_array[8][15] <= b_2B2; pixel_array[8][8] <= neg_signB2; + pixel_array[7][9] <= b4B2; pixel_array[7][10] <= b3B2; + pixel_array[7][11] <= b2B2; pixel_array[7][12] <= b1B2; + pixel_array[7][13] <= b0B2; pixel_array[7][14] <= b_1B2; + pixel_array[7][15] <= b_2B2; pixel_array[7][8] <= neg_signB2; // C2 - pixel_array[10][9] <= b4C2; pixel_array[10][10] <= b3C2; - pixel_array[10][11] <= b2C2; pixel_array[10][12] <= b1C2; - pixel_array[10][13] <= b0C2; pixel_array[10][14] <= b_1C2; - pixel_array[10][15] <= b_2C2; pixel_array[10][8] <= neg_signC2; + pixel_array[9][9] <= b4C2; pixel_array[9][10] <= b3C2; + pixel_array[9][11] <= b2C2; pixel_array[9][12] <= b1C2; + pixel_array[9][13] <= b0C2; pixel_array[9][14] <= b_1C2; + pixel_array[9][15] <= b_2C2; pixel_array[9][8] <= neg_signC2; + + // D2 + pixel_array[11][9] <= b4D2; pixel_array[11][10] <= b3D2; + pixel_array[11][11] <= b2D2; pixel_array[11][12] <= b1D2; + pixel_array[11][13] <= b0D2; pixel_array[11][14] <= b_1D2; + pixel_array[11][15] <= b_2D2; pixel_array[11][8] <= neg_signD2; end 3: begin // A3 - pixel_array[6][9] <= b4A3; pixel_array[6][10] <= b3A3; - pixel_array[6][11] <= b2A3; pixel_array[6][12] <= b1A3; - pixel_array[6][13] <= b0A3; pixel_array[6][14] <= b_1A3; - pixel_array[6][15] <= b_2A3; pixel_array[6][8] <= neg_signA3; + pixel_array[5][9] <= b4A3; pixel_array[5][10] <= b3A3; + pixel_array[5][11] <= b2A3; pixel_array[5][12] <= b1A3; + pixel_array[5][13] <= b0A3; pixel_array[5][14] <= b_1A3; + pixel_array[5][15] <= b_2A3; pixel_array[5][8] <= neg_signA3; // B3 - pixel_array[8][9] <= b4B3; pixel_array[8][10] <= b3B3; - pixel_array[8][11] <= b2B3; pixel_array[8][12] <= b1B3; - pixel_array[8][13] <= b0B3; pixel_array[8][14] <= b_1B3; - pixel_array[8][15] <= b_2B3; pixel_array[8][8] <= neg_signB3; + pixel_array[7][9] <= b4B3; pixel_array[7][10] <= b3B3; + pixel_array[7][11] <= b2B3; pixel_array[7][12] <= b1B3; + pixel_array[7][13] <= b0B3; pixel_array[7][14] <= b_1B3; + pixel_array[7][15] <= b_2B3; pixel_array[7][8] <= neg_signB3; // C3 - pixel_array[10][9] <= b4C3; pixel_array[10][10] <= b3C3; - pixel_array[10][11] <= b2C3; pixel_array[10][12] <= b1C3; - pixel_array[10][13] <= b0C3; pixel_array[10][14] <= b_1C3; - pixel_array[10][15] <= b_2C3; pixel_array[10][8] <= neg_signC3; + pixel_array[9][9] <= b4C3; pixel_array[9][10] <= b3C3; + pixel_array[9][11] <= b2C3; pixel_array[9][12] <= b1C3; + pixel_array[9][13] <= b0C3; pixel_array[9][14] <= b_1C3; + pixel_array[9][15] <= b_2C3; pixel_array[9][8] <= neg_signC3; + + // D3 + pixel_array[11][9] <= b4D3; pixel_array[11][10] <= b3D3; + pixel_array[11][11] <= b2D3; pixel_array[11][12] <= b1D3; + pixel_array[11][13] <= b0D3; pixel_array[11][14] <= b_1D3; + pixel_array[11][15] <= b_2D3; pixel_array[11][8] <= neg_signD3; end default: ; endcase - - end - - lnrmenu: begin - //back - pixel_array[1][3] <= 8'd11;pixel_array[1][4] <= 8'd10; - pixel_array[1][5] <= 8'd12;pixel_array[1][6] <= 8'd20; - - //calc - pixel_array[1][14] <= 8'd12;pixel_array[1][15] <= 8'd10; - pixel_array[1][16] <= 8'd21;pixel_array[1][17] <= 8'd12; - - //dot - pixel_array[dot_y][dot_x] <= 8'd37; - - //y=bx+c - pixel_array[4][3] <= 8'd34;pixel_array[4][4] <= 8'd43; - pixel_array[4][5] <= 8'd11;pixel_array[4][6] <= 8'd33; - pixel_array[4][7] <= 8'd38;pixel_array[4][8] <= 8'd12; - - //b= - pixel_array[8][6] <= 8'd11;pixel_array[8][7] <= 8'd43; - - //c= - pixel_array[10][6] <= 8'd12;pixel_array[10][7] <= 8'd43; - - //DISPLAY THE NUM - case(eqn) - 1:begin - pixel_array[8][9] <= b4B1; pixel_array[8][10] <= b3B1; - pixel_array[8][11] <= b2B1; pixel_array[8][12] <= b1B1; - pixel_array[8][13] <= b0B1; pixel_array[8][14] <= b_1B1; - pixel_array[8][15] <= b_2B1; pixel_array[8][8] <= neg_signB1; - - pixel_array[10][9] <= b4C1; pixel_array[10][10] <= b3C1; - pixel_array[10][11] <= b2C1; pixel_array[10][12] <= b1C1; - pixel_array[10][13] <= b0C1; pixel_array[10][14] <= b_1C1; - pixel_array[10][15] <= b_2C1; pixel_array[10][8] <= neg_signC1; - end - - 2: begin - // B2 - pixel_array[8][9] <= b4B2; pixel_array[8][10] <= b3B2; - pixel_array[8][11] <= b2B2; pixel_array[8][12] <= b1B2; - pixel_array[8][13] <= b0B2; pixel_array[8][14] <= b_1B2; - pixel_array[8][15] <= b_2B2; pixel_array[8][8] <= neg_signB2; - - // C2 - pixel_array[10][9] <= b4C2; pixel_array[10][10] <= b3C2; - pixel_array[10][11] <= b2C2; pixel_array[10][12] <= b1C2; - pixel_array[10][13] <= b0C2; pixel_array[10][14] <= b_1C2; - pixel_array[10][15] <= b_2C2; pixel_array[10][8] <= neg_signC2; - end - - - 3: begin - // B3 - pixel_array[8][9] <= b4B3; pixel_array[8][10] <= b3B3; - pixel_array[8][11] <= b2B3; pixel_array[8][12] <= b1B3; - pixel_array[8][13] <= b0B3; pixel_array[8][14] <= b_1B3; - pixel_array[8][15] <= b_2B3; pixel_array[8][8] <= neg_signB3; - - // C3 - pixel_array[10][9] <= b4C3; pixel_array[10][10] <= b3C3; - pixel_array[10][11] <= b2C3; pixel_array[10][12] <= b1C3; - pixel_array[10][13] <= b0C3; pixel_array[10][14] <= b_1C3; - pixel_array[10][15] <= b_2C3; pixel_array[10][8] <= neg_signC3; end - - default:; - endcase - - end - + numpad: begin //numbers @@ -1030,8 +929,9 @@ module scene_controller( pixel_array[5][7] <= 8'd5;pixel_array[5][11] <= 8'd6; pixel_array[8][3] <= 8'd7;pixel_array[8][7] <= 8'd8; pixel_array[8][11] <= 8'd9;pixel_array[11][3] <= 8'd39; - pixel_array[11][7] <= 8'd0;pixel_array[11][11] <= 8'd43; - pixel_array[8][15] <= 8'd44;pixel_array[11][15] <= 8'd12; + pixel_array[11][7] <= 8'd0;pixel_array[11][11] <= 8'd44; + pixel_array[8][15] <= 8'd28;pixel_array[8][16] <= 8'd14; + pixel_array[8][17] <= 8'd29;pixel_array[11][15] <= 8'd12; pixel_array[11][16] <= 8'd21;pixel_array[11][17] <= 8'd27; //dot @@ -1039,7 +939,25 @@ module scene_controller( addA1 <= 0; addB1 <= 0; addC1 <= 0; addA2 <= 0; addB2 <= 0; addC2 <= 0; - addA3 <= 0; addB3 <= 0; addC3 <= 0; + addA3 <= 0; addB3 <= 0; addC3 <= 0; + addD1 <= 0; addD2 <= 0; addD3 <= 0; + + //D + if (is_deci) begin + pixel_array[0][13] <= 8'd45;pixel_array[0][14] <= 8'd45; + pixel_array[1][13] <= 8'd45;pixel_array[1][15] <= 8'd45; + pixel_array[2][13] <= 8'd45;pixel_array[2][16] <= 8'd45; + pixel_array[3][13] <= 8'd45;pixel_array[3][16] <= 8'd45; + pixel_array[4][13] <= 8'd45;pixel_array[4][15] <= 8'd45; + pixel_array[5][13] <= 8'd45;pixel_array[5][14] <= 8'd45; + end else begin + pixel_array[0][13] <= 8'd36;pixel_array[0][14] <= 8'd36; + pixel_array[1][13] <= 8'd36;pixel_array[1][15] <= 8'd36; + pixel_array[2][13] <= 8'd36;pixel_array[2][16] <= 8'd36; + pixel_array[3][13] <= 8'd36;pixel_array[3][16] <= 8'd36; + pixel_array[4][13] <= 8'd36;pixel_array[4][15] <= 8'd36; + pixel_array[5][13] <= 8'd36;pixel_array[5][14] <= 8'd36; + end //letter pixel_array[0][1] <= letter; pixel_array[0][2] <= 8'd43; @@ -1120,6 +1038,34 @@ module scene_controller( default: ; endcase end + + if (letter == 8'd13) begin + case(eqn) + 1: begin + pixel_array[0][4] <= b4D1; pixel_array[0][5] <= b3D1; + pixel_array[0][6] <= b2D1; pixel_array[0][7] <= b1D1; + pixel_array[0][8] <= b0D1; pixel_array[0][9] <= b_1D1; + pixel_array[0][10] <= b_2D1; pixel_array[0][3] <= neg_signD1; + end + + 2: begin + pixel_array[0][4] <= b4D2; pixel_array[0][5] <= b3D2; + pixel_array[0][6] <= b2D2; pixel_array[0][7] <= b1D2; + pixel_array[0][8] <= b0D2; pixel_array[0][9] <= b_1D2; + pixel_array[0][10] <= b_2D2; pixel_array[0][3] <= neg_signD2; + end + + 3: begin + pixel_array[0][4] <= b4D3; pixel_array[0][5] <= b3D3; + pixel_array[0][6] <= b2D3; pixel_array[0][7] <= b1D3; + pixel_array[0][8] <= b0D3; pixel_array[0][9] <= b_1D3; + pixel_array[0][10] <= b_2D3; pixel_array[0][3] <= neg_signD3; + end + + default: ; + endcase + end + end @@ -1133,79 +1079,28 @@ module scene_controller( pixel_array[0][2] <= 8'd16; pixel_array[0][3] <= 8'd27; pixel_array[0][4] <= 8'd10; pixel_array[0][5] <= 8'd25; pixel_array[0][6] <= 8'd17; - - //plot - pixel_array[0][9] <= 8'd25; pixel_array[0][10] <= 8'd21; - pixel_array[0][11] <= 8'd24; pixel_array[0][12] <= 8'd29; - - //T - pixel_array[0][14] <= 8'd29; - - //D - pixel_array[0][16] <= 8'd13; - - // eqn1 (starts at row 3) - pixel_array[4][0] <= (enable1 == 1) ? 8'd34 : 8'd23; - pixel_array[3][0] <= 8'd1; pixel_array[3][2] <= 8'd10; - pixel_array[3][3] <= 8'd43; pixel_array[3][4] <= neg_signA1; - pixel_array[3][5] <= b4A1; pixel_array[3][6] <= b3A1; - pixel_array[3][7] <= b2A1; pixel_array[3][8] <= b1A1; - pixel_array[3][9] <= b0A1; pixel_array[3][10] <= b_1A1; - pixel_array[3][11] <= b_2A1; - - pixel_array[4][2] <= 8'd11; pixel_array[4][3] <= 8'd43; - pixel_array[4][4] <= neg_signB1; pixel_array[4][5] <= b4B1; - pixel_array[4][6] <= b3B1; pixel_array[4][7] <= b2B1; - pixel_array[4][8] <= b1B1; pixel_array[4][9] <= b0B1; - pixel_array[4][10] <= b_1B1; pixel_array[4][11] <= b_2B1; - - pixel_array[5][2] <= 8'd12; pixel_array[5][3] <= 8'd43; - pixel_array[5][4] <= neg_signC1; pixel_array[5][5] <= b4C1; - pixel_array[5][6] <= b3C1; pixel_array[5][7] <= b2C1; - pixel_array[5][8] <= b1C1; pixel_array[5][9] <= b0C1; - pixel_array[5][10] <= b_1C1; pixel_array[5][11] <= b_2C1; - - // eqn2 (starts at row 6) - pixel_array[7][0] <= (enable2 == 1) ? 8'd34 : 8'd23; - pixel_array[6][0] <= 8'd2; pixel_array[6][2] <= 8'd10; - pixel_array[6][3] <= 8'd43; pixel_array[6][4] <= neg_signA2; - pixel_array[6][5] <= b4A2; pixel_array[6][6] <= b3A2; - pixel_array[6][7] <= b2A2; pixel_array[6][8] <= b1A2; - pixel_array[6][9] <= b0A2; pixel_array[6][10] <= b_1A2; - pixel_array[6][11] <= b_2A2; - - pixel_array[7][2] <= 8'd11; pixel_array[7][3] <= 8'd43; - pixel_array[7][4] <= neg_signB2; pixel_array[7][5] <= b4B2; - pixel_array[7][6] <= b3B2; pixel_array[7][7] <= b2B2; - pixel_array[7][8] <= b1B2; pixel_array[7][9] <= b0B2; - pixel_array[7][10] <= b_1B2; pixel_array[7][11] <= b_2B2; - - pixel_array[8][2] <= 8'd12; pixel_array[8][3] <= 8'd43; - pixel_array[8][4] <= neg_signC2; pixel_array[8][5] <= b4C2; - pixel_array[8][6] <= b3C2; pixel_array[8][7] <= b2C2; - pixel_array[8][8] <= b1C2; pixel_array[8][9] <= b0C2; - pixel_array[8][10] <= b_1C2; pixel_array[8][11] <= b_2C2; - - // eqn3 (starts at row 9) - pixel_array[10][0] <= (enable3 == 1) ? 8'd34 : 8'd23; - pixel_array[9][0] <= 8'd3; pixel_array[9][2] <= 8'd10; - pixel_array[9][3] <= 8'd43; pixel_array[9][4] <= neg_signA3; - pixel_array[9][5] <= b4A3; pixel_array[9][6] <= b3A3; - pixel_array[9][7] <= b2A3; pixel_array[9][8] <= b1A3; - pixel_array[9][9] <= b0A3; pixel_array[9][10] <= b_1A3; - pixel_array[9][11] <= b_2A3; - - pixel_array[10][2] <= 8'd11; pixel_array[10][3] <= 8'd43; - pixel_array[10][4] <= neg_signB3; pixel_array[10][5] <= b4B3; - pixel_array[10][6] <= b3B3; pixel_array[10][7] <= b2B3; - pixel_array[10][8] <= b1B3; pixel_array[10][9] <= b0B3; - pixel_array[10][10] <= b_1B3; pixel_array[10][11] <= b_2B3; - - pixel_array[11][2] <= 8'd12; pixel_array[11][3] <= 8'd43; - pixel_array[11][4] <= neg_signC3; pixel_array[11][5] <= b4C3; - pixel_array[11][6] <= b3C3; pixel_array[11][7] <= b2C3; - pixel_array[11][8] <= b1C3; pixel_array[11][9] <= b0C3; - pixel_array[11][10] <= b_1C3; pixel_array[11][11] <= b_2C3; + + //equation 1 + pixel_array[3][3] <= 8'd14; pixel_array[3][4] <= 8'd26; + pixel_array[3][5] <= 8'd30; pixel_array[3][6] <= 8'd10; + pixel_array[3][7] <= 8'd29; pixel_array[3][8] <= 8'd18; + pixel_array[3][9] <= 8'd24; pixel_array[3][10] <= 8'd23; + pixel_array[3][12] <= 8'd1; + + //equation 2 + pixel_array[6][3] <= 8'd14; pixel_array[6][4] <= 8'd26; + pixel_array[6][5] <= 8'd30; pixel_array[6][6] <= 8'd10; + pixel_array[6][7] <= 8'd29; pixel_array[6][8] <= 8'd18; + pixel_array[6][9] <= 8'd24; pixel_array[6][10] <= 8'd23; + pixel_array[6][12] <= 8'd2; + + //equation 3 + pixel_array[9][3] <= 8'd14; pixel_array[9][4] <= 8'd26; + pixel_array[9][5] <= 8'd30; pixel_array[9][6] <= 8'd10; + pixel_array[9][7] <= 8'd29; pixel_array[9][8] <= 8'd18; + pixel_array[9][9] <= 8'd24; pixel_array[9][10] <= 8'd23; + pixel_array[9][12] <= 8'd3; + end default: state <= interstate; @@ -1214,6 +1109,7 @@ module scene_controller( clearA1 <= 0; clearB1 <= 0; clearC1 <= 0; clearA2 <= 0; clearB2 <= 0; clearC2 <= 0; clearA3 <= 0; clearB3 <= 0; clearC3 <= 0; + clearD1 <= 0; clearD2 <= 0; clearD3 <= 0; end From 2cfefc48d13b0d4ffb158b3bf8a880eff9ff1ead Mon Sep 17 00:00:00 2001 From: "DESKTOP-OVSDVEK\\Wong Yi Hao" Date: Thu, 10 Apr 2025 23:18:13 +0800 Subject: [PATCH 3/9] colour not working,but otherwiste ok,controlscreen is topmost module --- FPGraph.srcs/sources_1/new/control_screen.v | 30 +- FPGraph.srcs/sources_1/new/num_gen.v | 73 +-- FPGraph.srcs/sources_1/new/scene_controller.v | 605 ++++++++---------- 3 files changed, 302 insertions(+), 406 deletions(-) diff --git a/FPGraph.srcs/sources_1/new/control_screen.v b/FPGraph.srcs/sources_1/new/control_screen.v index 0fd1e1f..6e384dc 100644 --- a/FPGraph.srcs/sources_1/new/control_screen.v +++ b/FPGraph.srcs/sources_1/new/control_screen.v @@ -31,14 +31,10 @@ module control_screen( input btnu, input btnd, output reg [15:0] colour_out, - output [13:0] int_part_A1, int_part_B1, int_part_C1, int_part_D1, + output [6:0] int_part_A1, int_part_B1, int_part_C1, int_part_D1, int_part_A2, int_part_B2, int_part_C2, int_part_D2, int_part_A3, int_part_B3, int_part_C3, int_part_D3, - - output [6:0] deci_part_A1, deci_part_B1, deci_part_C1, deci_part_D1, - deci_part_A2, deci_part_B2, deci_part_C2, deci_part_D2, - deci_part_A3, deci_part_B3, deci_part_C3, deci_part_D3, - + output is_neg_A1, is_neg_B1, is_neg_C1, is_neg_D1, is_neg_A2, is_neg_B2, is_neg_C2, is_neg_D2, is_neg_A3, is_neg_B3, is_neg_C3, is_neg_D3 @@ -51,7 +47,7 @@ module control_screen( parameter [7:0] start_y = 2; parameter [7:0] end_x = 92; parameter [7:0] end_y = 61; - parameter [15:0] white = 16'hFFFF; + reg [15:0] oled_holder; @@ -69,7 +65,8 @@ module control_screen( assign x = (x_cor - start_x) % 5; assign y = (y_cor - start_y) % 5; - + wire text_colour; + wire back_colour; //scene_controller control_scene (.btnc(btnc), .btnr(btnr), .btnl(btnl), .btnu(btnu), .btnd(btnd), .x_cor(x_cor), .CLOCK(CLOCK), .y_cor(y_cor), .array_out(screen_chars)); // Instantiate the scene_controller module @@ -84,17 +81,16 @@ module control_screen( .y_cor(y_cor), .array_out(screen_chars), - .int_part_A1(int_part_A1), .int_part_B1(int_part_B1), .int_part_C1(int_part_C1), .int_part_D1(int_part_D1), - .int_part_A2(int_part_A2), .int_part_B2(int_part_B2), .int_part_C2(int_part_C2), .int_part_D2(int_part_D2), - .int_part_A3(int_part_A3), .int_part_B3(int_part_B3), .int_part_C3(int_part_C3), .int_part_D3(int_part_D3), + .int_part_A1(int_part_A1), .int_part_B1(int_part_B1), .int_part_C1(int_part_C1), + .int_part_A2(int_part_A2), .int_part_B2(int_part_B2), .int_part_C2(int_part_C2), + .int_part_A3(int_part_A3), .int_part_B3(int_part_B3), .int_part_C3(int_part_C3), - .deci_part_A1(deci_part_A1), .deci_part_B1(deci_part_B1), .deci_part_C1(deci_part_C1), .deci_part_D1(deci_part_D1), - .deci_part_A2(deci_part_A2), .deci_part_B2(deci_part_B2), .deci_part_C2(deci_part_C2), .deci_part_D2(deci_part_D2), - .deci_part_A3(deci_part_A3), .deci_part_B3(deci_part_B3), .deci_part_C3(deci_part_C3), .deci_part_D3(deci_part_D3), - .is_neg_A1(is_neg_A1), .is_neg_B1(is_neg_B1), .is_neg_C1(is_neg_C1), .is_neg_D1(is_neg_D1), - .is_neg_A2(is_neg_A2), .is_neg_B2(is_neg_B2), .is_neg_C2(is_neg_C2), .is_neg_D2(is_neg_D2), - .is_neg_A3(is_neg_A3), .is_neg_B3(is_neg_B3), .is_neg_C3(is_neg_C3), .is_neg_D3(is_neg_D3) + .is_neg_A1(is_neg_A1), .is_neg_B1(is_neg_B1), .is_neg_C1(is_neg_C1), + .is_neg_A2(is_neg_A2), .is_neg_B2(is_neg_B2), .is_neg_C2(is_neg_C2), + .is_neg_A3(is_neg_A3), .is_neg_B3(is_neg_B3), .is_neg_C3(is_neg_C3) + + //.text_colour(text_colour),.back_colour(back_colour) ); diff --git a/FPGraph.srcs/sources_1/new/num_gen.v b/FPGraph.srcs/sources_1/new/num_gen.v index 77fd7b9..8462024 100644 --- a/FPGraph.srcs/sources_1/new/num_gen.v +++ b/FPGraph.srcs/sources_1/new/num_gen.v @@ -25,86 +25,35 @@ module num_gen( input add, input clear, input CLOCK, - input is_deci, + input is_neg, - output [13:0] int_part, - output [6:0] deci_part, + output [6:0] int_part, output [7:0] neg_sign, output [7:0] b4, //these are pos of digits assuming all digits are used - output [7:0] b3, - output [7:0] b2, - output [7:0] b1, - output [7:0] b0, //deci_point if all digits used - output [7:0] b_1, - output [7:0] b_2 + output [7:0] b3 ); - reg [13:0] int =14'd0; - reg [3:0] deci_2 = 4'd0; - reg [3:0] deci_1 = 4'd0; - reg [3:0] deci_digits = 4'd0; - parameter [7:0] dot = 8'd44; + reg [6:0] int =7'd0; parameter [7:0] space = 8'd36; parameter [7:0] neg = 8'd39; always @ (posedge CLOCK) begin if (clear) begin int <= 0; - deci_2 <= 0; - deci_1 <= 0; - deci_digits <= 0; - end else if (add) begin - if (is_deci) begin - deci_digits <= (deci_digits < 2) ? deci_digits + 1 : deci_digits; - case(deci_digits) - 0:begin - deci_2 <= digit_in; - end - 1:begin - deci_1 <= digit_in; - end - 2:begin - deci_2 <= deci_1; - deci_1 <= digit_in; - end - default:; - endcase - end else begin - int <= (int < 14'd1000) ? (int * 10 + digit_in) : ((int % 1000) * 10 + digit_in); end + if (add) begin + int <= (int < 7'd10) ? (int * 10 + digit_in) : ((int % 10) * 10 + digit_in); end end - wire [2:0] int_digits = (int / 1000 != 0) ? (3'd4) : ((int / 100 != 0) ? 3'd3 : (int / 10 != 0) ? 3'd2 : 3'd1); + wire [2:0] int_digits = (int / 10 != 0) ? 3'd2 : 3'd1; //wire [2:0] deci_digits = (deci / 10 != 0) ? (2'd2) : ((deci != 0) ? 2'd1 : 2'd0); assign neg_sign = (is_neg) ? neg : space; - assign b4 = (int_digits == 4) ? (int / 1000) : - ((int_digits == 3) ? (int / 100) : - ((int_digits == 2) ? int / 10 : - int)); - assign b3 = (int_digits == 4) ? ((int % 1000) / 100) : - ((int_digits == 3) ? ((int % 100) / 10) : - ((int_digits == 2) ? int % 10 : - (deci_digits == 0) ? space : - dot)); - assign b2 = (int_digits == 4) ? ((int % 100) / 10) : - (int_digits == 3) ? (int % 10) : - (int_digits == 2) ? ((deci_digits == 0) ? space : dot) : - (deci_digits == 0) ? (space) : deci_2; - assign b1 = (int_digits == 4) ? (int % 10) : - (int_digits == 3) ? ((deci_digits == 0) ? space : dot) : - (int_digits == 2) ? ((deci_digits == 0) ? space : deci_2) : - (deci_digits == 0) ? space : deci_1; - assign b0 = (int_digits == 4) ? ((deci_digits == 0) ? space : dot) : - (int_digits == 3) ? ((deci_digits == 0) ? space : deci_2) : - (int_digits == 2) ? ((deci_digits != 0) ? deci_1 : space) : - space; - assign b_1 = (int_digits == 4) ? ((deci_digits == 0) ? space : deci_2) : - (int_digits == 3) ? ((deci_digits == 0) ? space : deci_1) : space; - assign b_2 = (int_digits == 4 && deci_digits != 0) ? deci_1 : - space; + assign b4 = (int_digits == 1) ? int : int/10; + assign b3 = (int_digits == 1) ? space : int % 10; + assign int_part = int; - assign deci_part = deci_2 * 10 + deci_1; + endmodule diff --git a/FPGraph.srcs/sources_1/new/scene_controller.v b/FPGraph.srcs/sources_1/new/scene_controller.v index 9e6ca30..87e2391 100644 --- a/FPGraph.srcs/sources_1/new/scene_controller.v +++ b/FPGraph.srcs/sources_1/new/scene_controller.v @@ -30,17 +30,15 @@ module scene_controller( input [7:0] x_cor, input [7:0] y_cor, output reg [7:0] array_out, - output [13:0] int_part_A1, int_part_B1, int_part_C1, int_part_D1, - int_part_A2, int_part_B2, int_part_C2, int_part_D2, - int_part_A3, int_part_B3, int_part_C3, int_part_D3, + output [6:0] int_part_A1, int_part_B1, int_part_C1, + int_part_A2, int_part_B2, int_part_C2, + int_part_A3, int_part_B3, int_part_C3, - output [6:0] deci_part_A1, deci_part_B1, deci_part_C1, deci_part_D1, - deci_part_A2, deci_part_B2, deci_part_C2, deci_part_D2, - deci_part_A3, deci_part_B3, deci_part_C3, deci_part_D3, - - output is_neg_A1, is_neg_B1, is_neg_C1, is_neg_D1, - is_neg_A2, is_neg_B2, is_neg_C2, is_neg_D2, - is_neg_A3, is_neg_B3, is_neg_C3, is_neg_D3 + output is_neg_A1, is_neg_B1, is_neg_C1, + is_neg_A2, is_neg_B2, is_neg_C2, + is_neg_A3, is_neg_B3, is_neg_C3 +// output reg [15:0] text_colour = 16'hFFFF, +// output reg [15:0] back_colour = 16'h0000 @@ -71,22 +69,20 @@ module scene_controller( parameter [3:0] interstate = 4'd0; parameter [3:0] mainmenu_1 = 4'd1; parameter [3:0] quadrmenu = 4'd2; - + parameter [3:0] start = 4'd6; + parameter [3:0] colour = 4'd7; parameter [3:0] numpad = 4'd4; parameter [3:0] eqnmenu = 4'd5; //state var reg [7:0] state = interstate; - reg [7:0] nextstate = eqnmenu; + reg [7:0] nextstate = start; reg [7:0] prevstate = interstate; - reg [7:0] dot_x = 1; - reg [7:0] dot_y = 3; + reg [7:0] dot_x = 4; + reg [7:0] dot_y = 7; reg [7:0] eqn = 1; - reg enable1 = 0; - reg enable2 = 0; - reg enable3 = 0; - + //displayed var reg [7:0] letter; integer i,j; @@ -106,169 +102,144 @@ module scene_controller( // Bitmaps for pixel drawing - wire [7:0] b4D1, b3D1, b2D1, b1D1, b0D1, b_1D1, b_2D1, neg_signD1; - wire [7:0] b4D2, b3D2, b2D2, b1D2, b0D2, b_1D2, b_2D2, neg_signD2; - wire [7:0] b4D3, b3D3, b2D3, b1D3, b0D3, b_1D3, b_2D3, neg_signD3; + wire [7:0] b4D1, b3D1, neg_signD1; + wire [7:0] b4D2, b3D2, neg_signD2; + wire [7:0] b4D3, b3D3, neg_signD3; + + //colours + //background + parameter [15:0] black = 16'h0000; + parameter [15:0] blue = 16'h001F; + parameter [15:0] grey = 16'h8410; + parameter [15:0] orange = 16'hFD20; + + //text + parameter [15:0] white = 16'hFFFF; + parameter [15:0] green = 16'h07E0; + parameter [15:0] red = 16'hF800; + parameter [15:0] cyan = 16'h07FF; + + reg [1:0] text_state = 0; + reg [1:0] back_state = 0; // ----- Instance A1 ----- //wire [13:0] int_part_A1; wire [6:0] deci_part_A1; - wire [7:0] b4A1, b3A1, b2A1, b1A1, b0A1, b_1A1, b_2A1, neg_signA1; + wire [7:0] b4A1, b3A1, neg_signA1; reg clearA1, is_negA1; // ----- Instance B1 ----- //wire [13:0] int_part_B1; wire [6:0] deci_part_B1; - wire [7:0] b4B1, b3B1, b2B1, b1B1, b0B1, b_1B1, b_2B1, neg_signB1; + wire [7:0] b4B1, b3B1, neg_signB1; reg clearB1, is_negB1; // ----- Instance C1 ----- //wire [13:0] int_part_C1; wire [6:0] deci_part_C1; - wire [7:0] b4C1, b3C1, b2C1, b1C1, b0C1, b_1C1, b_2C1, neg_signC1; + wire [7:0] b4C1, b3C1, neg_signC1; reg clearC1, is_negC1; // ----- Instance A2 ----- //wire [13:0] int_part_A2; wire [6:0] deci_part_A2; - wire [7:0] b4A2, b3A2, b2A2, b1A2, b0A2, b_1A2, b_2A2, neg_signA2; + wire [7:0] b4A2, b3A2, neg_signA2; reg clearA2, is_negA2; // ----- Instance B2 ----- //wire [13:0] int_part_B2; wire [6:0] deci_part_B2; - wire [7:0] b4B2, b3B2, b2B2, b1B2, b0B2, b_1B2, b_2B2, neg_signB2; + wire [7:0] b4B2, b3B2, neg_signB2; reg clearB2, is_negB2; // ----- Instance C2 ----- //wire [13:0] int_part_C2; wire [6:0] deci_part_C2; - wire [7:0] b4C2, b3C2, b2C2, b1C2, b0C2, b_1C2, b_2C2, neg_signC2; + wire [7:0] b4C2, b3C2, neg_signC2; reg clearC2, is_negC2; // ----- Instance A3 ----- //wire [13:0] int_part_A3; wire [6:0] deci_part_A3; - wire [7:0] b4A3, b3A3, b2A3, b1A3, b0A3, b_1A3, b_2A3, neg_signA3; + wire [7:0] b4A3, b3A3, neg_signA3; reg clearA3, is_negA3; // ----- Instance B3 ----- //wire [13:0] int_part_B3; wire [6:0] deci_part_B3; - wire [7:0] b4B3, b3B3, b2B3, b1B3, b0B3, b_1B3, b_2B3, neg_signB3; + wire [7:0] b4B3, b3B3, neg_signB3; reg clearB3, is_negB3; // ----- Instance C3 ----- //wire [13:0] int_part_C3; wire [6:0] deci_part_C3; - wire [7:0] b4C3, b3C3, b2C3, b1C3, b0C3, b_1C3, b_2C3, neg_signC3; + wire [7:0] b4C3, b3C3, neg_signC3; reg clearC3, is_negC3; // ----- A1 ----- num_gen A1 ( .digit_in(digit_in), .add(addA1), .clear(clearA1), .CLOCK(CLOCK), - .is_deci(is_deci), .is_neg(is_negA1), - .int_part(int_part_A1), .deci_part(deci_part_A1), .neg_sign(neg_signA1), - .b4(b4A1), .b3(b3A1), .b2(b2A1), .b1(b1A1), .b0(b0A1), .b_1(b_1A1), .b_2(b_2A1) + .is_neg(is_negA1), + .int_part(int_part_A1), .neg_sign(neg_signA1), + .b4(b4A1), .b3(b3A1) ); // ----- B1 ----- num_gen B1 ( .digit_in(digit_in), .add(addB1), .clear(clearB1), .CLOCK(CLOCK), - .is_deci(is_deci), .is_neg(is_negB1), - .int_part(int_part_B1), .deci_part(deci_part_B1), .neg_sign(neg_signB1), - .b4(b4B1), .b3(b3B1), .b2(b2B1), .b1(b1B1), .b0(b0B1), .b_1(b_1B1), .b_2(b_2B1) + .is_neg(is_negB1), + .int_part(int_part_B1), .neg_sign(neg_signB1), + .b4(b4B1), .b3(b3B1) ); // ----- C1 ----- num_gen C1 ( .digit_in(digit_in), .add(addC1), .clear(clearC1), .CLOCK(CLOCK), - .is_deci(is_deci), .is_neg(is_negC1), - .int_part(int_part_C1), .deci_part(deci_part_C1), .neg_sign(neg_signC1), - .b4(b4C1), .b3(b3C1), .b2(b2C1), .b1(b1C1), .b0(b0C1), .b_1(b_1C1), .b_2(b_2C1) + .is_neg(is_negC1), + .int_part(int_part_C1), .neg_sign(neg_signC1), + .b4(b4C1), .b3(b3C1) ); // ----- A2 ----- num_gen A2 ( .digit_in(digit_in), .add(addA2), .clear(clearA2), .CLOCK(CLOCK), - .is_deci(is_deci), .is_neg(is_negA2), - .int_part(int_part_A2), .deci_part(deci_part_A2), .neg_sign(neg_signA2), - .b4(b4A2), .b3(b3A2), .b2(b2A2), .b1(b1A2), .b0(b0A2), .b_1(b_1A2), .b_2(b_2A2) + .is_neg(is_negA2), + .int_part(int_part_A2), .neg_sign(neg_signA2), + .b4(b4A2), .b3(b3A2) ); // ----- B2 ----- num_gen B2 ( .digit_in(digit_in), .add(addB2), .clear(clearB2), .CLOCK(CLOCK), - .is_deci(is_deci), .is_neg(is_negB2), - .int_part(int_part_B2), .deci_part(deci_part_B2), .neg_sign(neg_signB2), - .b4(b4B2), .b3(b3B2), .b2(b2B2), .b1(b1B2), .b0(b0B2), .b_1(b_1B2), .b_2(b_2B2) + .is_neg(is_negB2), + .int_part(int_part_B2), .neg_sign(neg_signB2), + .b4(b4B2), .b3(b3B2) ); // ----- C2 ----- num_gen C2 ( .digit_in(digit_in), .add(addC2), .clear(clearC2), .CLOCK(CLOCK), - .is_deci(is_deci), .is_neg(is_negC2), - .int_part(int_part_C2), .deci_part(deci_part_C2), .neg_sign(neg_signC2), - .b4(b4C2), .b3(b3C2), .b2(b2C2), .b1(b1C2), .b0(b0C2), .b_1(b_1C2), .b_2(b_2C2) + .is_neg(is_negC2), + .int_part(int_part_C2), .neg_sign(neg_signC2), + .b4(b4C2), .b3(b3C2) ); // ----- A3 ----- num_gen A3 ( .digit_in(digit_in), .add(addA3), .clear(clearA3), .CLOCK(CLOCK), - .is_deci(is_deci), .is_neg(is_negA3), - .int_part(int_part_A3), .deci_part(deci_part_A3), .neg_sign(neg_signA3), - .b4(b4A3), .b3(b3A3), .b2(b2A3), .b1(b1A3), .b0(b0A3), .b_1(b_1A3), .b_2(b_2A3) + .is_neg(is_negA3), + .int_part(int_part_A3), .neg_sign(neg_signA3), + .b4(b4A3), .b3(b3A3) ); // ----- B3 ----- num_gen B3 ( .digit_in(digit_in), .add(addB3), .clear(clearB3), .CLOCK(CLOCK), - .is_deci(is_deci), .is_neg(is_negB3), - .int_part(int_part_B3), .deci_part(deci_part_B3), .neg_sign(neg_signB3), - .b4(b4B3), .b3(b3B3), .b2(b2B3), .b1(b1B3), .b0(b0B3), .b_1(b_1B3), .b_2(b_2B3) + .is_neg(is_negB3), + .int_part(int_part_B3), .neg_sign(neg_signB3), + .b4(b4B3), .b3(b3B3) ); // ----- C3 ----- num_gen C3 ( .digit_in(digit_in), .add(addC3), .clear(clearC3), .CLOCK(CLOCK), - .is_deci(is_deci), .is_neg(is_negC3), - .int_part(int_part_C3), .deci_part(deci_part_C3), .neg_sign(neg_signC3), - .b4(b4C3), .b3(b3C3), .b2(b2C3), .b1(b1C3), .b0(b0C3), .b_1(b_1C3), .b_2(b_2C3) + .is_neg(is_negC3), + .int_part(int_part_C3), .neg_sign(neg_signC3), + .b4(b4C3), .b3(b3C3) ); - num_gen D1 ( - .digit_in(digit_in), - .add(addD1), - .clear(clearD1), - .CLOCK(CLOCK), - .is_deci(is_deci), - .is_neg(is_negD1), - .int_part(int_part_D1), - .deci_part(deci_part_D1), - .neg_sign(neg_signD1), - .b4(b4D1), .b3(b3D1), .b2(b2D1), .b1(b1D1), - .b0(b0D1), .b_1(b_1D1), .b_2(b_2D1) - ); - - num_gen D2 ( - .digit_in(digit_in), - .add(addD2), - .clear(clearD2), - .CLOCK(CLOCK), - .is_deci(is_deci), - .is_neg(is_negD2), - .int_part(int_part_D2), - .deci_part(deci_part_D2), - .neg_sign(neg_signD2), - .b4(b4D2), .b3(b3D2), .b2(b2D2), .b1(b1D2), - .b0(b0D2), .b_1(b_1D2), .b_2(b_2D2) - ); - - num_gen D3 ( - .digit_in(digit_in), - .add(addD3), - .clear(clearD3), - .CLOCK(CLOCK), - .is_deci(is_deci), - .is_neg(is_negD3), - .int_part(int_part_D3), - .deci_part(deci_part_D3), - .neg_sign(neg_signD3), - .b4(b4D3), .b3(b3D3), .b2(b2D3), .b1(b1D3), - .b0(b0D3), .b_1(b_1D3), .b_2(b_2D3) - ); @@ -356,7 +327,17 @@ module scene_controller( eqnmenu:begin pixel_array[dot_y][dot_x] <= 8'd36; - dot_y <= (dot_y > 3) ? dot_y - 3 : dot_y; + dot_y <= (dot_y == 11) ? dot_y - 2 : (dot_y > 3) ? dot_y - 3 : dot_y; + end + + start:begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= (dot_y > 7) ? dot_y - 2 : dot_y; + end + + colour:begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= (dot_y > 4) ? dot_y - 2 : dot_y; end default:state <= interstate; @@ -376,7 +357,7 @@ module scene_controller( end else begin pixel_array[dot_y][dot_x] <= 8'd36; - dot_y <= (dot_y < 11) ? dot_y + 2: dot_y; + dot_y <= (dot_y < 9) ? dot_y + 2: dot_y; end end @@ -385,11 +366,22 @@ module scene_controller( numpad:begin pixel_array[dot_y][dot_x] <= 8'd36; dot_y <= (dot_y < 11) ? dot_y + 3 : dot_y; + dot_x <= (dot_x == 9 && dot_y == 8) ? 5 : dot_x; end eqnmenu:begin pixel_array[dot_y][dot_x] <= 8'd36; - dot_y <= (dot_y < 9) ? dot_y + 3 : dot_y; + dot_y <= (dot_y == 9) ? dot_y + 2 : (dot_y < 9) ? dot_y + 3 : dot_y; + end + + start:begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= (dot_y < 9) ? dot_y + 2 : dot_y; + end + + colour:begin + pixel_array[dot_y][dot_x] <= 8'd36; + dot_y <= (dot_y < 8) ? dot_y + 2 : dot_y; end default:state <= interstate; @@ -413,8 +405,7 @@ module scene_controller( clearB1 <= 1; is_negC1 <= 0; clearC1 <= 1; - is_negD1 <= 0; - clearD1 <= 1; + end 2:begin is_negA2 <= 0; @@ -423,8 +414,7 @@ module scene_controller( clearB2 <= 1; is_negC2 <= 0; clearC2 <= 1; - is_negD2 <= 0; - clearD2 <= 1; + end 3:begin is_negA3 <= 0; @@ -433,8 +423,7 @@ module scene_controller( clearB3 <= 1; is_negC3 <= 0; clearC3 <= 1; - is_negD3 <= 0; - clearD3 <= 1; + end default:; endcase @@ -456,9 +445,7 @@ module scene_controller( letter <= 6'd12; end - else if (dot_y == 11 && dot_x == 4) begin - letter <= 6'd13; - end + state <= interstate; nextstate <= numpad; prevstate <= quadrmenu; @@ -475,7 +462,7 @@ module scene_controller( dot_x <= 4; dot_y <= 5 + (letter - 10) * 2; nextstate <= prevstate; state <= interstate; - is_deci <= 0; + end else if (dot_x == 5 && dot_y == 11) begin digit_in <= 0; @@ -490,9 +477,7 @@ module scene_controller( if (letter == 6'd12) begin addC1 <= 1; end - if (letter == 6'd13) begin - addD1 <= 1; - end + end 2:begin if (letter == 6'd10) begin @@ -504,9 +489,7 @@ module scene_controller( if (letter == 6'd12) begin addC2 <= 1; end - if (letter == 6'd13) begin - addD2 <= 1; - end + end 3:begin if (letter == 6'd10) begin @@ -518,9 +501,7 @@ module scene_controller( if (letter == 6'd12) begin addC3 <= 1; end - if (letter == 6'd13) begin - addD3 <= 1; - end + end default:; endcase @@ -538,9 +519,7 @@ module scene_controller( if (letter == 6'd12) begin is_negC1 <= 1; end - if (letter == 6'd13) begin - is_negD1 <= 1; - end + end 2: begin @@ -553,9 +532,7 @@ module scene_controller( if (letter == 6'd12) begin is_negC2 <= 1; end - if (letter == 6'd13) begin - is_negD2 <= 1; - end + end 3: begin @@ -568,9 +545,7 @@ module scene_controller( if (letter == 6'd12) begin is_negC3 <= 1; end - if (letter == 6'd13) begin - is_negD3 <= 1; - end + end default: ; @@ -582,70 +557,58 @@ module scene_controller( 1: begin if (letter == 6'd10) begin clearA1 <= 1; - is_deci <= 0; + is_negA1 <= 0; end if (letter == 6'd11) begin clearB1 <= 1; - is_deci <= 0; + is_negB1 <= 0; end if (letter == 6'd12) begin clearC1 <= 1; - is_deci <= 0; + is_negC1 <= 0; end - if (letter == 6'd13) begin - clearD1 <= 1; - is_deci <= 0; - is_negD1 <= 0; - end + end 2: begin if (letter == 6'd10) begin clearA2 <= 1; - is_deci <= 0; + is_negA2 <= 0; end if (letter == 6'd11) begin clearB2 <= 1; - is_deci <= 0; + is_negB2 <= 0; end if (letter == 6'd12) begin clearC2 <= 1; - is_deci <= 0; + is_negC2 <= 0; end - if (letter == 6'd13) begin - clearD2 <= 1; - is_deci <= 0; - is_negD2 <= 0; - end + end 3: begin if (letter == 6'd10) begin clearA3 <= 1; - is_deci <= 0; + is_negA3 <= 0; end if (letter == 6'd11) begin clearB3 <= 1; - is_deci <= 0; + is_negB3 <= 0; end if (letter == 6'd12) begin clearC3 <= 1; - is_deci <= 0; + is_negC3 <= 0; end - if (letter == 6'd13) begin - clearD3 <= 1; - is_deci <= 0; - is_negD3 <= 0; - end + end default: ; @@ -654,10 +617,6 @@ module scene_controller( end - else if (dot_x == 9 && dot_y == 11) begin - is_deci <= 1; - end - else begin digit_in <= 1 + ((dot_x - 1) / 4) + ((dot_y - 2)); case(eqn) @@ -671,9 +630,7 @@ module scene_controller( if (letter == 6'd12) begin addC1 <= 1; end - if (letter == 6'd13) begin - addD1 <= 1; - end + end 2: begin @@ -686,9 +643,7 @@ module scene_controller( if (letter == 6'd12) begin addC2 <= 1; end - if (letter == 6'd13) begin - addD2 <= 1; - end + end 3: begin @@ -701,9 +656,7 @@ module scene_controller( if (letter == 6'd12) begin addC3 <= 1; end - if (letter == 6'd13) begin - addD3 <= 1; - end + end default: ; @@ -714,40 +667,50 @@ module scene_controller( end eqnmenu:begin + if (dot_y == 11) begin + state <= interstate; + nextstate <= start; + dot_x <= 4; + dot_y <= 7; + end else begin eqn <= dot_y / 3; state <= interstate; nextstate <= quadrmenu; dot_x <= 1; dot_y <= 1; + end + end + start:begin + if (dot_y == 7) begin + state <= interstate; + nextstate <= eqnmenu; + dot_x <= 1; + dot_y <= 3; + end + else if (dot_y == 9) begin + state <= interstate; + nextstate <= colour; + dot_x <= 1; + dot_y <= 4; + end + end - -// else if (dot_x == 16) begin -// case(dot_y) -// 3:begin -// enable1 <= 0; clearA1 <= 1; -// clearB1 <= 1; clearC1 <= 1; -// is_negA1 <= 0; is_negB1 <= 0; -// is_negC1 <= 0; -// end -// 6:begin -// enable2 <= 0; clearA2 <= 1; -// clearB2 <= 1; clearC2 <= 1; -// is_negA2 <= 0; is_negB2 <= 0; -// is_negC2 <= 0; -// end -// 9:begin -// enable3 <= 0; clearA3 <= 1; -// clearB3 <= 1; clearC3 <= 1; -// is_negA3 <= 0; is_negB3 <= 0; -// is_negC3 <= 0; -// end -// default:; -// endcase -// end - + colour:begin + if (dot_y == 4) begin + text_state <= (text_state == 2'd3) ? 0 : text_state + 1; + end + else if (dot_y == 6) begin + back_state <= (back_state == 2'd3) ? 0 : back_state + 1; + end + else if (dot_y == 8) begin + state <= interstate; + nextstate <= start; + dot_x <= 4; + dot_y <= 9; + end end default:state <= interstate; @@ -768,7 +731,7 @@ module scene_controller( numpad:begin pixel_array[dot_y][dot_x] <= 8'd36; - dot_x <= (dot_y < 8) ? ((dot_x < 9) ? dot_x + 4 : dot_x) : ((dot_x < 13) ? dot_x + 4 : dot_x); + dot_x <= (dot_y == 11 && dot_x == 5) ? dot_x + 8 : (dot_y < 8) ? ((dot_x < 9) ? dot_x + 4 : dot_x) : ((dot_x < 13) ? dot_x + 4 : dot_x); end @@ -793,7 +756,7 @@ module scene_controller( numpad:begin pixel_array[dot_y][dot_x] <= 8'd36; - dot_x <= (dot_x > 1) ? dot_x - 4 : dot_x; + dot_x <= (dot_x == 13 && dot_y == 11) ? dot_x - 8 : (dot_x > 1) ? dot_x - 4 : dot_x; end @@ -817,103 +780,66 @@ module scene_controller( pixel_array[dot_y][dot_x] <= 8'd37; - //y=ax^3+bx^2+cx+d - pixel_array[3][1] <= 8'd34;pixel_array[3][2] <= 8'd43; - pixel_array[3][3] <= 8'd10; - pixel_array[3][4] <= 8'd33;pixel_array[3][5] <= 8'd42; - pixel_array[3][6] <= 8'd3;pixel_array[3][7] <= 8'd38; - pixel_array[3][8] <= 8'd11;pixel_array[3][9] <= 8'd33; - pixel_array[3][10] <= 8'd42;pixel_array[3][11] <= 8'd2; - pixel_array[3][12] <= 8'd38;pixel_array[3][13] <= 8'd12; - pixel_array[3][14] <= 8'd33;pixel_array[3][15] <= 8'd38; - pixel_array[3][16] <= 8'd13; + //y=ax^2+bx+c + pixel_array[3][2] <= 8'd34;pixel_array[3][3] <= 8'd43; + pixel_array[3][4] <= 8'd10;pixel_array[3][5] <= 8'd33; + pixel_array[3][6] <= 8'd42;pixel_array[3][7] <= 8'd2; + pixel_array[3][8] <= 8'd38;pixel_array[3][9] <= 8'd11; + pixel_array[3][10] <= 8'd33;pixel_array[3][11] <= 8'd38; + pixel_array[3][12] <= 8'd12; //a= pixel_array[5][6] <= 8'd10;pixel_array[5][7] <= 8'd43; //b= pixel_array[7][6] <= 8'd11;pixel_array[7][7] <= 8'd43; //c= pixel_array[9][6] <= 8'd12;pixel_array[9][7] <= 8'd43; - //d= - pixel_array[11][6] <= 8'd13;pixel_array[11][7] <= 8'd43; + // DISPLAY THE NUM case(eqn) 1: begin // A1 - pixel_array[5][9] <= b4A1; pixel_array[5][10] <= b3A1; - pixel_array[5][11] <= b2A1; pixel_array[5][12] <= b1A1; - pixel_array[5][13] <= b0A1; pixel_array[5][14] <= b_1A1; - pixel_array[5][15] <= b_2A1; pixel_array[5][8] <= neg_signA1; + pixel_array[5][9] <= b4A1; pixel_array[5][10] <= b3A1; + pixel_array[5][8] <= neg_signA1; // B1 pixel_array[7][9] <= b4B1; pixel_array[7][10] <= b3B1; - pixel_array[7][11] <= b2B1; pixel_array[7][12] <= b1B1; - pixel_array[7][13] <= b0B1; pixel_array[7][14] <= b_1B1; - pixel_array[7][15] <= b_2B1; pixel_array[7][8] <= neg_signB1; + pixel_array[7][8] <= neg_signB1; // C1 pixel_array[9][9] <= b4C1; pixel_array[9][10] <= b3C1; - pixel_array[9][11] <= b2C1; pixel_array[9][12] <= b1C1; - pixel_array[9][13] <= b0C1; pixel_array[9][14] <= b_1C1; - pixel_array[9][15] <= b_2C1; pixel_array[9][8] <= neg_signC1; - - // D1 - pixel_array[11][9] <= b4D1; pixel_array[11][10] <= b3D1; - pixel_array[11][11] <= b2D1; pixel_array[11][12] <= b1D1; - pixel_array[11][13] <= b0D1; pixel_array[11][14] <= b_1D1; - pixel_array[11][15] <= b_2D1; pixel_array[11][8] <= neg_signD1; + pixel_array[9][8] <= neg_signC1; + end 2: begin // A2 pixel_array[5][9] <= b4A2; pixel_array[5][10] <= b3A2; - pixel_array[5][11] <= b2A2; pixel_array[5][12] <= b1A2; - pixel_array[5][13] <= b0A2; pixel_array[5][14] <= b_1A2; - pixel_array[5][15] <= b_2A2; pixel_array[5][8] <= neg_signA2; + pixel_array[5][8] <= neg_signA2; // B2 pixel_array[7][9] <= b4B2; pixel_array[7][10] <= b3B2; - pixel_array[7][11] <= b2B2; pixel_array[7][12] <= b1B2; - pixel_array[7][13] <= b0B2; pixel_array[7][14] <= b_1B2; - pixel_array[7][15] <= b_2B2; pixel_array[7][8] <= neg_signB2; + pixel_array[7][8] <= neg_signB2; // C2 pixel_array[9][9] <= b4C2; pixel_array[9][10] <= b3C2; - pixel_array[9][11] <= b2C2; pixel_array[9][12] <= b1C2; - pixel_array[9][13] <= b0C2; pixel_array[9][14] <= b_1C2; - pixel_array[9][15] <= b_2C2; pixel_array[9][8] <= neg_signC2; - - // D2 - pixel_array[11][9] <= b4D2; pixel_array[11][10] <= b3D2; - pixel_array[11][11] <= b2D2; pixel_array[11][12] <= b1D2; - pixel_array[11][13] <= b0D2; pixel_array[11][14] <= b_1D2; - pixel_array[11][15] <= b_2D2; pixel_array[11][8] <= neg_signD2; + pixel_array[9][8] <= neg_signC2; + end 3: begin // A3 pixel_array[5][9] <= b4A3; pixel_array[5][10] <= b3A3; - pixel_array[5][11] <= b2A3; pixel_array[5][12] <= b1A3; - pixel_array[5][13] <= b0A3; pixel_array[5][14] <= b_1A3; - pixel_array[5][15] <= b_2A3; pixel_array[5][8] <= neg_signA3; + pixel_array[5][8] <= neg_signA3; // B3 pixel_array[7][9] <= b4B3; pixel_array[7][10] <= b3B3; - pixel_array[7][11] <= b2B3; pixel_array[7][12] <= b1B3; - pixel_array[7][13] <= b0B3; pixel_array[7][14] <= b_1B3; - pixel_array[7][15] <= b_2B3; pixel_array[7][8] <= neg_signB3; + pixel_array[7][8] <= neg_signB3; // C3 pixel_array[9][9] <= b4C3; pixel_array[9][10] <= b3C3; - pixel_array[9][11] <= b2C3; pixel_array[9][12] <= b1C3; - pixel_array[9][13] <= b0C3; pixel_array[9][14] <= b_1C3; - pixel_array[9][15] <= b_2C3; pixel_array[9][8] <= neg_signC3; - - // D3 - pixel_array[11][9] <= b4D3; pixel_array[11][10] <= b3D3; - pixel_array[11][11] <= b2D3; pixel_array[11][12] <= b1D3; - pixel_array[11][13] <= b0D3; pixel_array[11][14] <= b_1D3; - pixel_array[11][15] <= b_2D3; pixel_array[11][8] <= neg_signD3; + pixel_array[9][8] <= neg_signC3; + end default: ; @@ -929,7 +855,7 @@ module scene_controller( pixel_array[5][7] <= 8'd5;pixel_array[5][11] <= 8'd6; pixel_array[8][3] <= 8'd7;pixel_array[8][7] <= 8'd8; pixel_array[8][11] <= 8'd9;pixel_array[11][3] <= 8'd39; - pixel_array[11][7] <= 8'd0;pixel_array[11][11] <= 8'd44; + pixel_array[11][7] <= 8'd0; pixel_array[8][15] <= 8'd28;pixel_array[8][16] <= 8'd14; pixel_array[8][17] <= 8'd29;pixel_array[11][15] <= 8'd12; pixel_array[11][16] <= 8'd21;pixel_array[11][17] <= 8'd27; @@ -940,24 +866,9 @@ module scene_controller( addA1 <= 0; addB1 <= 0; addC1 <= 0; addA2 <= 0; addB2 <= 0; addC2 <= 0; addA3 <= 0; addB3 <= 0; addC3 <= 0; - addD1 <= 0; addD2 <= 0; addD3 <= 0; - - //D - if (is_deci) begin - pixel_array[0][13] <= 8'd45;pixel_array[0][14] <= 8'd45; - pixel_array[1][13] <= 8'd45;pixel_array[1][15] <= 8'd45; - pixel_array[2][13] <= 8'd45;pixel_array[2][16] <= 8'd45; - pixel_array[3][13] <= 8'd45;pixel_array[3][16] <= 8'd45; - pixel_array[4][13] <= 8'd45;pixel_array[4][15] <= 8'd45; - pixel_array[5][13] <= 8'd45;pixel_array[5][14] <= 8'd45; - end else begin - pixel_array[0][13] <= 8'd36;pixel_array[0][14] <= 8'd36; - pixel_array[1][13] <= 8'd36;pixel_array[1][15] <= 8'd36; - pixel_array[2][13] <= 8'd36;pixel_array[2][16] <= 8'd36; - pixel_array[3][13] <= 8'd36;pixel_array[3][16] <= 8'd36; - pixel_array[4][13] <= 8'd36;pixel_array[4][15] <= 8'd36; - pixel_array[5][13] <= 8'd36;pixel_array[5][14] <= 8'd36; - end + + + //letter pixel_array[0][1] <= letter; pixel_array[0][2] <= 8'd43; @@ -965,23 +876,17 @@ module scene_controller( case(eqn) 1:begin pixel_array[0][4] <= b4A1; pixel_array[0][5] <= b3A1; - pixel_array[0][6] <= b2A1; pixel_array[0][7] <= b1A1; - pixel_array[0][8] <= b0A1; pixel_array[0][9] <= b_1A1; - pixel_array[0][10] <= b_2A1; pixel_array[0][3] <= neg_signA1; + pixel_array[0][3] <= neg_signA1; end 2:begin pixel_array[0][4] <= b4A2; pixel_array[0][5] <= b3A2; - pixel_array[0][6] <= b2A2; pixel_array[0][7] <= b1A2; - pixel_array[0][8] <= b0A2; pixel_array[0][9] <= b_1A2; - pixel_array[0][10] <= b_2A2; pixel_array[0][3] <= neg_signA2; + pixel_array[0][3] <= neg_signA2; end 3:begin pixel_array[0][4] <= b4A3; pixel_array[0][5] <= b3A3; - pixel_array[0][6] <= b2A3; pixel_array[0][7] <= b1A3; - pixel_array[0][8] <= b0A3; pixel_array[0][9] <= b_1A3; - pixel_array[0][10] <= b_2A3; pixel_array[0][3] <= neg_signA3; + pixel_array[0][3] <= neg_signA3; end default:; endcase @@ -991,23 +896,17 @@ module scene_controller( case(eqn) 1: begin pixel_array[0][4] <= b4B1; pixel_array[0][5] <= b3B1; - pixel_array[0][6] <= b2B1; pixel_array[0][7] <= b1B1; - pixel_array[0][8] <= b0B1; pixel_array[0][9] <= b_1B1; - pixel_array[0][10] <= b_2B1; pixel_array[0][3] <= neg_signB1; + pixel_array[0][3] <= neg_signB1; end 2: begin pixel_array[0][4] <= b4B2; pixel_array[0][5] <= b3B2; - pixel_array[0][6] <= b2B2; pixel_array[0][7] <= b1B2; - pixel_array[0][8] <= b0B2; pixel_array[0][9] <= b_1B2; - pixel_array[0][10] <= b_2B2; pixel_array[0][3] <= neg_signB2; + pixel_array[0][3] <= neg_signB2; end 3: begin pixel_array[0][4] <= b4B3; pixel_array[0][5] <= b3B3; - pixel_array[0][6] <= b2B3; pixel_array[0][7] <= b1B3; - pixel_array[0][8] <= b0B3; pixel_array[0][9] <= b_1B3; - pixel_array[0][10] <= b_2B3; pixel_array[0][3] <= neg_signB3; + pixel_array[0][3] <= neg_signB3; end default: ; endcase @@ -1017,56 +916,22 @@ module scene_controller( case(eqn) 1: begin pixel_array[0][4] <= b4C1; pixel_array[0][5] <= b3C1; - pixel_array[0][6] <= b2C1; pixel_array[0][7] <= b1C1; - pixel_array[0][8] <= b0C1; pixel_array[0][9] <= b_1C1; - pixel_array[0][10] <= b_2C1; pixel_array[0][3] <= neg_signC1; + pixel_array[0][3] <= neg_signC1; end 2: begin pixel_array[0][4] <= b4C2; pixel_array[0][5] <= b3C2; - pixel_array[0][6] <= b2C2; pixel_array[0][7] <= b1C2; - pixel_array[0][8] <= b0C2; pixel_array[0][9] <= b_1C2; - pixel_array[0][10] <= b_2C2; pixel_array[0][3] <= neg_signC2; + pixel_array[0][3] <= neg_signC2; end 3: begin pixel_array[0][4] <= b4C3; pixel_array[0][5] <= b3C3; - pixel_array[0][6] <= b2C3; pixel_array[0][7] <= b1C3; - pixel_array[0][8] <= b0C3; pixel_array[0][9] <= b_1C3; - pixel_array[0][10] <= b_2C3; pixel_array[0][3] <= neg_signC3; - end - default: ; - endcase - end - - if (letter == 8'd13) begin - case(eqn) - 1: begin - pixel_array[0][4] <= b4D1; pixel_array[0][5] <= b3D1; - pixel_array[0][6] <= b2D1; pixel_array[0][7] <= b1D1; - pixel_array[0][8] <= b0D1; pixel_array[0][9] <= b_1D1; - pixel_array[0][10] <= b_2D1; pixel_array[0][3] <= neg_signD1; - end - - 2: begin - pixel_array[0][4] <= b4D2; pixel_array[0][5] <= b3D2; - pixel_array[0][6] <= b2D2; pixel_array[0][7] <= b1D2; - pixel_array[0][8] <= b0D2; pixel_array[0][9] <= b_1D2; - pixel_array[0][10] <= b_2D2; pixel_array[0][3] <= neg_signD2; - end - - 3: begin - pixel_array[0][4] <= b4D3; pixel_array[0][5] <= b3D3; - pixel_array[0][6] <= b2D3; pixel_array[0][7] <= b1D3; - pixel_array[0][8] <= b0D3; pixel_array[0][9] <= b_1D3; - pixel_array[0][10] <= b_2D3; pixel_array[0][3] <= neg_signD3; + pixel_array[0][3] <= neg_signC3; end - default: ; endcase end - - + end eqnmenu: begin @@ -1100,8 +965,85 @@ module scene_controller( pixel_array[9][7] <= 8'd29; pixel_array[9][8] <= 8'd18; pixel_array[9][9] <= 8'd24; pixel_array[9][10] <= 8'd23; pixel_array[9][12] <= 8'd3; + + //back + pixel_array[11][3] <= 8'd11; pixel_array[11][4] <= 8'd10; + pixel_array[11][5] <= 8'd12; pixel_array[11][6] <= 8'd20; end + + start:begin + //FP big big + pixel_array[1][2] <= 8'd45; pixel_array[1][3] <= 8'd45; + pixel_array[1][4] <= 8'd45; + pixel_array[1][6] <= 8'd45; pixel_array[1][7] <= 8'd45; + pixel_array[1][8] <= 8'd45; pixel_array[2][2] <= 8'd45; + pixel_array[2][6] <= 8'd45; pixel_array[2][9] <= 8'd45; + pixel_array[3][2] <= 8'd45; pixel_array[3][3] <= 8'd45; + pixel_array[3][4] <= 8'd45; pixel_array[3][6] <= 8'd45; + pixel_array[3][7] <= 8'd45; pixel_array[3][8] <= 8'd45; + pixel_array[4][2] <= 8'd45; pixel_array[4][6] <= 8'd45; + pixel_array[5][6] <= 8'd45; pixel_array[5][6] <= 8'd45; + + //graph + pixel_array[5][10] <= 8'd16; pixel_array[5][11] <= 8'd27; + pixel_array[5][12] <= 8'd10; pixel_array[5][13] <= 8'd25; + pixel_array[5][14] <= 8'd17; + + //dot + pixel_array[dot_y][dot_x] <= 8'd37; + + //start + pixel_array[7][6] <= 8'd28; pixel_array[7][7] <= 8'd29; + pixel_array[7][8] <= 8'd10; pixel_array[7][9] <= 8'd27; + pixel_array[7][10] <= 8'd29; + + //options + pixel_array[9][6] <= 8'd24; pixel_array[9][7] <= 8'd25; + pixel_array[9][8] <= 8'd29; pixel_array[9][9] <= 8'd18; + pixel_array[9][10] <= 8'd24; pixel_array[9][11] <= 8'd23; + pixel_array[9][12] <= 8'd28; + + end + + colour:begin + //dot + pixel_array[dot_y][dot_x] <= 8'd37; + //colour text + pixel_array[3][10] <= (text_state == 0) ? 8'd32 : + (text_state == 1) ? 8'd16 : + (text_state == 2) ? 8'd27 : 8'd12; + + //colour back + pixel_array[6][10] <= (text_state == 0) ? 8'd11 : + (text_state == 1) ? 8'd11 : + (text_state == 2) ? 8'd16 : 8'd24; + pixel_array[6][11] <= (text_state == 0) ? 8'd21 : 8'd36; + pixel_array[6][12] <= (text_state == 0) ? 8'd20 : 8'd30; + + //colour select + pixel_array[1][3] <= 8'd12; pixel_array[1][4] <= 8'd24; + pixel_array[1][5] <= 8'd21; pixel_array[1][6] <= 8'd24; + pixel_array[1][7] <= 8'd30; pixel_array[1][8] <= 8'd27; + pixel_array[1][11] <= 8'd14; pixel_array[1][10] <= 8'd28; + pixel_array[1][13] <= 8'd14; pixel_array[1][12] <= 8'd21; + pixel_array[1][15] <= 8'd29; pixel_array[1][14] <= 8'd12; + + //background + pixel_array[3][3] <= 8'd11; pixel_array[3][4] <= 8'd10; + pixel_array[3][5] <= 8'd12; pixel_array[3][6] <= 8'd20; + pixel_array[4][3] <= 8'd16; pixel_array[4][4] <= 8'd27; + pixel_array[4][5] <= 8'd24; pixel_array[4][6] <= 8'd30; + pixel_array[4][7] <= 8'd23; pixel_array[4][8] <= 8'd13; + + //text + pixel_array[6][3] <= 8'd29; pixel_array[6][4] <= 8'd14; + pixel_array[6][5] <= 8'd33; pixel_array[6][6] <= 8'd29; + + //back + pixel_array[8][3] <= 8'd11; pixel_array[8][4] <= 8'd10; + pixel_array[8][5] <= 8'd13; pixel_array[8][6] <= 8'd20; + end default: state <= interstate; endcase @@ -1109,7 +1051,7 @@ module scene_controller( clearA1 <= 0; clearB1 <= 0; clearC1 <= 0; clearA2 <= 0; clearB2 <= 0; clearC2 <= 0; clearA3 <= 0; clearB3 <= 0; clearC3 <= 0; - clearD1 <= 0; clearD2 <= 0; clearD3 <= 0; + end @@ -1125,6 +1067,15 @@ module scene_controller( //assign array_out = (x_cor > end_x || y_cor > end_y || x_cor < start_x || y_cor < start_y) ? 0 : pixel_array[0][0]; always @ (posedge CLOCK) begin array_out <= (x_cor > end_x || y_cor > end_y || x_cor < start_x || y_cor < start_y) ? 8'd36 : pixel_array[y][x]; +// text_colour <= (text_state == 0) ? white : +// (text_state == 1) ? green : +// (text_state == 2) ? red : +// cyan; + +// back_colour <= (back_state == 0) ? black : +// (back_state == 1) ? blue : +// (back_state == 2) ? grey : +// orange; end endmodule From 6f6ebfb00be5f3975ae71d63a30b6c85cce237a6 Mon Sep 17 00:00:00 2001 From: "DESKTOP-OVSDVEK\\Wong Yi Hao" Date: Thu, 10 Apr 2025 23:26:11 +0800 Subject: [PATCH 4/9] no message --- FPGraph.srcs/sources_1/new/control_screen.v | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/FPGraph.srcs/sources_1/new/control_screen.v b/FPGraph.srcs/sources_1/new/control_screen.v index 6e384dc..3c71f4a 100644 --- a/FPGraph.srcs/sources_1/new/control_screen.v +++ b/FPGraph.srcs/sources_1/new/control_screen.v @@ -31,13 +31,13 @@ module control_screen( input btnu, input btnd, output reg [15:0] colour_out, - output [6:0] int_part_A1, int_part_B1, int_part_C1, int_part_D1, - int_part_A2, int_part_B2, int_part_C2, int_part_D2, - int_part_A3, int_part_B3, int_part_C3, int_part_D3, + output [6:0] int_part_A1, int_part_B1, int_part_C1, + int_part_A2, int_part_B2, int_part_C2, + int_part_A3, int_part_B3, int_part_C3, - output is_neg_A1, is_neg_B1, is_neg_C1, is_neg_D1, - is_neg_A2, is_neg_B2, is_neg_C2, is_neg_D2, - is_neg_A3, is_neg_B3, is_neg_C3, is_neg_D3 + output is_neg_A1, is_neg_B1, is_neg_C1, + is_neg_A2, is_neg_B2, is_neg_C2, + is_neg_A3, is_neg_B3, is_neg_C3 ); From 3a73983eb37dc91f3140fb9017b40dd8b66244e1 Mon Sep 17 00:00:00 2001 From: "DESKTOP-OVSDVEK\\Wong Yi Hao" Date: Fri, 11 Apr 2025 11:20:40 +0800 Subject: [PATCH 5/9] renamed port is_neg_A1 to is_negA1 --- FPGraph.srcs/sources_1/new/control_screen.v | 14 +++--- FPGraph.srcs/sources_1/new/scene_controller.v | 48 +++++++++---------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/FPGraph.srcs/sources_1/new/control_screen.v b/FPGraph.srcs/sources_1/new/control_screen.v index 3c71f4a..af800c5 100644 --- a/FPGraph.srcs/sources_1/new/control_screen.v +++ b/FPGraph.srcs/sources_1/new/control_screen.v @@ -35,9 +35,9 @@ module control_screen( int_part_A2, int_part_B2, int_part_C2, int_part_A3, int_part_B3, int_part_C3, - output is_neg_A1, is_neg_B1, is_neg_C1, - is_neg_A2, is_neg_B2, is_neg_C2, - is_neg_A3, is_neg_B3, is_neg_C3 + output is_negA1, is_negB1, is_negC1, + is_negA2, is_negB2, is_negC2, + is_negA3, is_negB3, is_negC3 ); @@ -86,11 +86,11 @@ module control_screen( .int_part_A3(int_part_A3), .int_part_B3(int_part_B3), .int_part_C3(int_part_C3), - .is_neg_A1(is_neg_A1), .is_neg_B1(is_neg_B1), .is_neg_C1(is_neg_C1), - .is_neg_A2(is_neg_A2), .is_neg_B2(is_neg_B2), .is_neg_C2(is_neg_C2), - .is_neg_A3(is_neg_A3), .is_neg_B3(is_neg_B3), .is_neg_C3(is_neg_C3) + .is_negA1(is_negA1), .is_negB1(is_negB1), .is_negC1(is_negC1), + .is_negA2(is_negA2), .is_negB2(is_negB2), .is_negC2(is_negC2), + .is_negA3(is_negA3), .is_negB3(is_negB3), .is_negC3(is_negC3), - //.text_colour(text_colour),.back_colour(back_colour) + .text_colour(text_colour),.back_colour(back_colour) ); diff --git a/FPGraph.srcs/sources_1/new/scene_controller.v b/FPGraph.srcs/sources_1/new/scene_controller.v index 87e2391..fc5f6d7 100644 --- a/FPGraph.srcs/sources_1/new/scene_controller.v +++ b/FPGraph.srcs/sources_1/new/scene_controller.v @@ -34,11 +34,11 @@ module scene_controller( int_part_A2, int_part_B2, int_part_C2, int_part_A3, int_part_B3, int_part_C3, - output is_neg_A1, is_neg_B1, is_neg_C1, - is_neg_A2, is_neg_B2, is_neg_C2, - is_neg_A3, is_neg_B3, is_neg_C3 -// output reg [15:0] text_colour = 16'hFFFF, -// output reg [15:0] back_colour = 16'h0000 + output reg is_negA1 = 0, is_negB1 = 0, is_negC1 = 0, + is_negA2 = 0, is_negB2 = 0, is_negC2 = 0, + is_negA3 = 0, is_negB3 = 0, is_negC3 = 0, + output reg [15:0] text_colour = 16'hFFFF, + output reg [15:0] back_colour = 16'h0000 @@ -59,7 +59,7 @@ module scene_controller( // Debounce counter and period (200ms) reg [23:0] debounceCounter = 0; //reg prevPushState = 0; - localparam DEBOUNCE_PERIOD = 24'd2000000; // 80ms at 25MHz + localparam DEBOUNCE_PERIOD = 24'd4000000; // 80ms at 25MHz reg btnc_press, btnr_press; reg btnl_press, btnu_press; reg btnd_press; @@ -126,47 +126,47 @@ module scene_controller( // ----- Instance A1 ----- //wire [13:0] int_part_A1; wire [6:0] deci_part_A1; wire [7:0] b4A1, b3A1, neg_signA1; - reg clearA1, is_negA1; + reg clearA1; // ----- Instance B1 ----- //wire [13:0] int_part_B1; wire [6:0] deci_part_B1; wire [7:0] b4B1, b3B1, neg_signB1; - reg clearB1, is_negB1; + reg clearB1; // ----- Instance C1 ----- //wire [13:0] int_part_C1; wire [6:0] deci_part_C1; wire [7:0] b4C1, b3C1, neg_signC1; - reg clearC1, is_negC1; + reg clearC1; // ----- Instance A2 ----- //wire [13:0] int_part_A2; wire [6:0] deci_part_A2; wire [7:0] b4A2, b3A2, neg_signA2; - reg clearA2, is_negA2; + reg clearA2; // ----- Instance B2 ----- //wire [13:0] int_part_B2; wire [6:0] deci_part_B2; wire [7:0] b4B2, b3B2, neg_signB2; - reg clearB2, is_negB2; + reg clearB2; // ----- Instance C2 ----- //wire [13:0] int_part_C2; wire [6:0] deci_part_C2; wire [7:0] b4C2, b3C2, neg_signC2; - reg clearC2, is_negC2; + reg clearC2; // ----- Instance A3 ----- //wire [13:0] int_part_A3; wire [6:0] deci_part_A3; wire [7:0] b4A3, b3A3, neg_signA3; - reg clearA3, is_negA3; + reg clearA3; // ----- Instance B3 ----- //wire [13:0] int_part_B3; wire [6:0] deci_part_B3; wire [7:0] b4B3, b3B3, neg_signB3; - reg clearB3, is_negB3; + reg clearB3; // ----- Instance C3 ----- //wire [13:0] int_part_C3; wire [6:0] deci_part_C3; wire [7:0] b4C3, b3C3, neg_signC3; - reg clearC3, is_negC3; + reg clearC3; // ----- A1 ----- num_gen A1 ( @@ -983,7 +983,7 @@ module scene_controller( pixel_array[3][4] <= 8'd45; pixel_array[3][6] <= 8'd45; pixel_array[3][7] <= 8'd45; pixel_array[3][8] <= 8'd45; pixel_array[4][2] <= 8'd45; pixel_array[4][6] <= 8'd45; - pixel_array[5][6] <= 8'd45; pixel_array[5][6] <= 8'd45; + pixel_array[5][2] <= 8'd45; pixel_array[5][6] <= 8'd45; //graph pixel_array[5][10] <= 8'd16; pixel_array[5][11] <= 8'd27; @@ -1067,15 +1067,15 @@ module scene_controller( //assign array_out = (x_cor > end_x || y_cor > end_y || x_cor < start_x || y_cor < start_y) ? 0 : pixel_array[0][0]; always @ (posedge CLOCK) begin array_out <= (x_cor > end_x || y_cor > end_y || x_cor < start_x || y_cor < start_y) ? 8'd36 : pixel_array[y][x]; -// text_colour <= (text_state == 0) ? white : -// (text_state == 1) ? green : -// (text_state == 2) ? red : -// cyan; + text_colour <= (text_state == 0) ? white : + (text_state == 1) ? green : + (text_state == 2) ? red : + cyan; -// back_colour <= (back_state == 0) ? black : -// (back_state == 1) ? blue : -// (back_state == 2) ? grey : -// orange; + back_colour <= (back_state == 0) ? black : + (back_state == 1) ? blue : + (back_state == 2) ? grey : + orange; end endmodule From 4cf76b75396879ad4f09fda667de68a6179ee932 Mon Sep 17 00:00:00 2001 From: "DESKTOP-OVSDVEK\\Wong Yi Hao" Date: Fri, 11 Apr 2025 11:58:48 +0800 Subject: [PATCH 6/9] colour options work for oled --- FPGraph.srcs/sources_1/new/control_screen.v | 10 +++++----- FPGraph.srcs/sources_1/new/scene_controller.v | 20 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/FPGraph.srcs/sources_1/new/control_screen.v b/FPGraph.srcs/sources_1/new/control_screen.v index af800c5..387eea7 100644 --- a/FPGraph.srcs/sources_1/new/control_screen.v +++ b/FPGraph.srcs/sources_1/new/control_screen.v @@ -65,8 +65,8 @@ module control_screen( assign x = (x_cor - start_x) % 5; assign y = (y_cor - start_y) % 5; - wire text_colour; - wire back_colour; + wire [15:0] text_colour; + wire [15:0] back_colour; //scene_controller control_scene (.btnc(btnc), .btnr(btnr), .btnl(btnl), .btnu(btnu), .btnd(btnd), .x_cor(x_cor), .CLOCK(CLOCK), .y_cor(y_cor), .array_out(screen_chars)); // Instantiate the scene_controller module @@ -104,15 +104,15 @@ reg [7:0] y_pos; always @(posedge CLOCK) begin if (x_cor > end_x || y_cor > end_y || x_cor < start_x || y_cor < start_y) begin - colour_out <= 16'h0000; + colour_out <= back_colour; end else begin x_pos = (x_cor - start_x) / 5; y_pos = (y_cor - start_y) / 5; if (pixel_out) begin - colour_out <= 16'hFFFF; + colour_out <= text_colour; end else begin - colour_out <= 16'h0000; + colour_out <= back_colour; end diff --git a/FPGraph.srcs/sources_1/new/scene_controller.v b/FPGraph.srcs/sources_1/new/scene_controller.v index fc5f6d7..cd115fb 100644 --- a/FPGraph.srcs/sources_1/new/scene_controller.v +++ b/FPGraph.srcs/sources_1/new/scene_controller.v @@ -56,10 +56,10 @@ module scene_controller( //debouncing - // Debounce counter and period (200ms) + // Debounce counter and period reg [23:0] debounceCounter = 0; //reg prevPushState = 0; - localparam DEBOUNCE_PERIOD = 24'd4000000; // 80ms at 25MHz + localparam DEBOUNCE_PERIOD = 24'd4000000; // 160ms at 25MHz reg btnc_press, btnr_press; reg btnl_press, btnu_press; reg btnd_press; @@ -699,10 +699,10 @@ module scene_controller( end colour:begin - if (dot_y == 4) begin + if (dot_y == 6) begin text_state <= (text_state == 2'd3) ? 0 : text_state + 1; end - else if (dot_y == 6) begin + else if (dot_y == 4) begin back_state <= (back_state == 2'd3) ? 0 : back_state + 1; end else if (dot_y == 8) begin @@ -1010,16 +1010,16 @@ module scene_controller( //dot pixel_array[dot_y][dot_x] <= 8'd37; //colour text - pixel_array[3][10] <= (text_state == 0) ? 8'd32 : + pixel_array[6][10] <= (text_state == 0) ? 8'd32 : (text_state == 1) ? 8'd16 : (text_state == 2) ? 8'd27 : 8'd12; //colour back - pixel_array[6][10] <= (text_state == 0) ? 8'd11 : - (text_state == 1) ? 8'd11 : - (text_state == 2) ? 8'd16 : 8'd24; - pixel_array[6][11] <= (text_state == 0) ? 8'd21 : 8'd36; - pixel_array[6][12] <= (text_state == 0) ? 8'd20 : 8'd30; + pixel_array[3][10] <= (back_state == 0) ? 8'd11 : + (back_state == 1) ? 8'd11 : + (back_state == 2) ? 8'd16 : 8'd24; + pixel_array[3][11] <= (back_state == 0 || back_state == 1) ? 8'd21 : 8'd36; + pixel_array[3][12] <= (back_state == 0) ? 8'd20 :(back_state == 1) ? 8'd30 : 8'd36; //colour select pixel_array[1][3] <= 8'd12; pixel_array[1][4] <= 8'd24; From 5607dcf55d93ae38c25cbda47fe3f396f81b3a33 Mon Sep 17 00:00:00 2001 From: "DESKTOP-OVSDVEK\\Wong Yi Hao" Date: Fri, 11 Apr 2025 23:02:02 +0800 Subject: [PATCH 7/9] no message --- FPGraph.srcs/sources_1/new/FPGraph.v | 142 +++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) diff --git a/FPGraph.srcs/sources_1/new/FPGraph.v b/FPGraph.srcs/sources_1/new/FPGraph.v index f6ec3e9..6795eaa 100644 --- a/FPGraph.srcs/sources_1/new/FPGraph.v +++ b/FPGraph.srcs/sources_1/new/FPGraph.v @@ -5,6 +5,11 @@ module FPGraph( input wire clk, + input btnC, + input btnU, + input btnD, + input btnL, + input btnR, output reg [3:0] vgaRed, output reg [3:0] vgaGreen, output reg [3:0] vgaBlue, @@ -13,6 +18,7 @@ module FPGraph( output reg sanity_led, output wire [3:0] an, output wire [7:0] seg, + output [7:0] JB, // Mouse IO inout PS2Clk, @@ -80,6 +86,142 @@ module FPGraph( .b(graph_blue) ); + + + wire main_reset; + wire clock_25Mhz; + wire clock_6_25Mhz; + wire [12:0] pixel_index; + wire [7:0] x_cor = pixel_index % 96; + wire [7:0] y_cor = pixel_index / 96; + + // Generate 25 MHz clock for control_screen + flexible_clock #( .CLK_DIV(3) ) clk_gen_25Mhz ( + .clk_in(clk), + .clk_out(clock_25Mhz) + ); + + // Generate 6.25 MHz clock for oled_driver + flexible_clock #( .CLK_DIV(7) ) clk_gen_6_25Mhz ( + .clk_in(clk), + .clk_out(clock_6_25Mhz) + ); + + // Declare wires for the outputs + wire [15:0] colour_out; + wire [6:0] int_part_A1, int_part_B1, int_part_C1; + wire [6:0] int_part_A2, int_part_B2, int_part_C2; + wire [6:0] int_part_A3, int_part_B3, int_part_C3; + + wire is_neg_A1, is_neg_B1, is_neg_C1; + wire is_neg_A2, is_neg_B2, is_neg_C2; + wire is_neg_A3, is_neg_B3, is_neg_C3; + + // Instantiate control_screen + control_screen u_control_screen ( + .CLOCK(clock_25Mhz), + .x_cor(x_cor), + .y_cor(y_cor), + .pixel_index(pixel_index), + .btnc(btnC), + .btnr(btnR), + .btnl(btnL), + .btnu(btnU), + .btnd(btnD), + .colour_out(colour_out), + .int_part_A1(int_part_A1), .int_part_B1(int_part_B1), .int_part_C1(int_part_C1), + .int_part_A2(int_part_A2), .int_part_B2(int_part_B2), .int_part_C2(int_part_C2), + .int_part_A3(int_part_A3), .int_part_B3(int_part_B3), .int_part_C3(int_part_C3), + .is_negA1(is_neg_A1), .is_negB1(is_neg_B1), .is_negC1(is_neg_C1), + .is_negA2(is_neg_A2), .is_negB2(is_neg_B2), .is_negC2(is_neg_C2), + .is_negA3(is_neg_A3), .is_negB3(is_neg_B3), .is_negC3(is_neg_C3) + ); + + Oled_Display oled_driver( + .clk(clock_6_25Mhz), + .reset(main_reset), + .frame_begin(), + .sending_pixels(), + .sample_pixel(), + .pixel_index(pixel_index), + .pixel_data(colour_out), + .cs(JB[0]), + .sdin(JB[1]), + .sclk(JB[3]), + .d_cn(JB[4]), + .resn(JB[5]), + .vccen(JB[6]), + .pmoden(JB[7]) + ); + + +// // Wires/regs to connect (you'll need real values or signals for these) + + + + wire [13:0] r0_c0_int, r0_c0_dec, r0_c1_int, r0_c1_dec; + wire [13:0] r1_c0_int, r1_c0_dec, r1_c1_int, r1_c1_dec; + wire [13:0] r2_c0_int, r2_c0_dec, r2_c1_int, r2_c1_dec; + wire [13:0] r3_c0_int, r3_c0_dec, r3_c1_int, r3_c1_dec; + wire [13:0] r4_c0_int, r4_c0_dec, r4_c1_int, r4_c1_dec; + wire [13:0] r5_c0_int, r5_c0_dec, r5_c1_int, r5_c1_dec; + + wire r0_c0_s, r0_c1_s; + wire r1_c0_s, r1_c1_s; + wire r2_c0_s, r2_c1_s; + wire r3_c0_s, r3_c1_s; + wire r4_c0_s, r4_c1_s; + wire r5_c0_s, r5_c1_s; + + wire en_r0, en_r1, en_r2, en_r3, en_r4, en_r5; + wire [1:0] intercept_state; + + wire [3:0] sidebar_red, sidebar_green, sidebar_blue; + + SideBar #( + .BASE_X(430), + .BASE_Y0(40), + .BASE_Y1(240), + .CHAR_WIDTH(8), + .CHAR_HEIGHT(16) + ) sidebar_inst ( + .clk(clk), + .x(x), + .y(y), + + .a1_1(int_part_A1 / 10), .a0_1(int_part_A1 % 10), .b1_1(int_part_B1 / 10), .b0_1(int_part_B1 % 10), .c1_1(int_part_C1 / 10), .c0_1(int_part_C1 % 10), + .a1_2(int_part_A2 / 10), .a0_2(int_part_A2 % 10), .b1_2(int_part_B2 / 10), .b0_2(int_part_B2 % 10), .c1_2(int_part_C2 / 10), .c0_2(int_part_C2 % 10), + .a1_3(int_part_A3 / 10), .a0_3(int_part_A3 % 10), .b1_3(int_part_B3 / 10), .b0_3(int_part_B3 % 10), .c1_3(int_part_C3 / 10), .c0_3(int_part_C3 % 10), + + .sa_1(is_neg_A1), .sb_1(is_neg_B1), .sc_1(is_neg_C1), + .sa_2(is_neg_A2), .sb_2(is_neg_B2), .sc_2(is_neg_C1), + .sa_3(is_neg_A3), .sb_3(is_neg_B3), .sc_3(is_neg_C1), + + .r0_c0_int(r0_c0_int), .r0_c0_dec(r0_c0_dec), .r0_c1_int(r0_c1_int), .r0_c1_dec(r0_c1_dec), + .r1_c0_int(r1_c0_int), .r1_c0_dec(r1_c0_dec), .r1_c1_int(r1_c1_int), .r1_c1_dec(r1_c1_dec), + .r2_c0_int(r2_c0_int), .r2_c0_dec(r2_c0_dec), .r2_c1_int(r2_c1_int), .r2_c1_dec(r2_c1_dec), + .r3_c0_int(r3_c0_int), .r3_c0_dec(r3_c0_dec), .r3_c1_int(r3_c1_int), .r3_c1_dec(r3_c1_dec), + .r4_c0_int(r4_c0_int), .r4_c0_dec(r4_c0_dec), .r4_c1_int(r4_c1_int), .r4_c1_dec(r4_c1_dec), + .r5_c0_int(r5_c0_int), .r5_c0_dec(r5_c0_dec), .r5_c1_int(r5_c1_int), .r5_c1_dec(r5_c1_dec), + + .r0_c0_s(r0_c0_s), .r0_c1_s(r0_c1_s), + .r1_c0_s(r1_c0_s), .r1_c1_s(r1_c1_s), + .r2_c0_s(r2_c0_s), .r2_c1_s(r2_c1_s), + .r3_c0_s(r3_c0_s), .r3_c1_s(r3_c1_s), + .r4_c0_s(r4_c0_s), .r4_c1_s(r4_c1_s), + .r5_c0_s(r5_c0_s), .r5_c1_s(r5_c1_s), + + .en_r0(en_r0), .en_r1(en_r1), .en_r2(en_r2), + .en_r3(en_r3), .en_r4(en_r4), .en_r5(en_r5), + + .intercept_state(intercept_state), + + .sidebar_red(sidebar_red), + .sidebar_green(sidebar_green), + .sidebar_blue(sidebar_blue) + ); + + always @ (posedge p_tick) begin if (p_en) begin sanity_led <= 1; From 31b4f2eca7bed746952e162f2b41217277fbc978 Mon Sep 17 00:00:00 2001 From: "DESKTOP-OVSDVEK\\Wong Yi Hao" Date: Fri, 11 Apr 2025 23:04:58 +0800 Subject: [PATCH 8/9] debounced --- FPGraph.srcs/sources_1/new/debounce.v | 61 ++++++++++ FPGraph.srcs/sources_1/new/scene_controller.v | 114 +++++++++++------- 2 files changed, 130 insertions(+), 45 deletions(-) create mode 100644 FPGraph.srcs/sources_1/new/debounce.v diff --git a/FPGraph.srcs/sources_1/new/debounce.v b/FPGraph.srcs/sources_1/new/debounce.v new file mode 100644 index 0000000..6f58978 --- /dev/null +++ b/FPGraph.srcs/sources_1/new/debounce.v @@ -0,0 +1,61 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 10.04.2025 02:34:51 +// Design Name: +// Module Name: debounce +// Project Name: +// Target Devices: +// Tool Versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// + + +module debounce( + input wire signal_in, + input wire clk_in, + output reg signal_out +); + parameter TIME_OUT = 2000000; + + reg [31:0] counter = 0; + reg time_out = 0; + + always @ (posedge clk_in) begin + if (time_out == 1) begin + if (counter + 1 == TIME_OUT) begin + time_out <= 0; + counter <= 0; + + end + else begin + if (signal_in == 1) begin + counter <= 0; + end else begin + counter <= counter + 1; + end + + end + signal_out <= 0; + end + else begin + if (signal_in == 1) begin + counter <= 0; + signal_out <= 1; + time_out <= 1; + end + else begin + signal_out <= 0; + end + end + end +endmodule diff --git a/FPGraph.srcs/sources_1/new/scene_controller.v b/FPGraph.srcs/sources_1/new/scene_controller.v index cd115fb..32b8104 100644 --- a/FPGraph.srcs/sources_1/new/scene_controller.v +++ b/FPGraph.srcs/sources_1/new/scene_controller.v @@ -59,10 +59,10 @@ module scene_controller( // Debounce counter and period reg [23:0] debounceCounter = 0; //reg prevPushState = 0; - localparam DEBOUNCE_PERIOD = 24'd4000000; // 160ms at 25MHz - reg btnc_press, btnr_press; - reg btnl_press, btnu_press; - reg btnd_press; + localparam DEBOUNCE_PERIOD = 24'd5000000; // 160ms at 25MHz + wire btnc_press, btnr_press; + wire btnl_press, btnu_press; + wire btnd_press; reg [4:0] prevPushState; //states @@ -241,56 +241,80 @@ module scene_controller( ); - +debounce a( + .signal_in(btnu), + .clk_in(CLOCK), + .signal_out(btnu_press) +); +debounce b( + .signal_in(btnd), + .clk_in(CLOCK), + .signal_out(btnd_press) +); +debounce c( + .signal_in(btnl), + .clk_in(CLOCK), + .signal_out(btnl_press) +); +debounce d( + .signal_in(btnr), + .clk_in(CLOCK), + .signal_out(btnr_press) +); +debounce e( + .signal_in(btnc), + .clk_in(CLOCK), + .signal_out(btnc_press) +); //Button synchronization and edge detection - always @(posedge CLOCK) begin +// always @(posedge CLOCK) begin - if (debounceCounter == 0) begin - // No new presses this cycle - btnu_press <= 0; btnd_press <= 0; - btnc_press <= 0; btnr_press <= 0; btnl_press <= 0; - end +// if (debounceCounter == 0) begin +// // No new presses this cycle +// btnu_press <= 0; btnd_press <= 0; +// btnc_press <= 0; btnr_press <= 0; btnl_press <= 0; +// end - if (debounceCounter > 0) begin - debounceCounter <= debounceCounter - 1; - btnu_press <= 0; btnd_press <= 0; - btnc_press <= 0; btnr_press <= 0; btnl_press <= 0; - end else begin - // Detect new press per button (rising edge) - if (btnu && !prevPushState[0]) begin - btnu_press <= 1; - debounceCounter <= DEBOUNCE_PERIOD; - end - if (btnd && !prevPushState[1]) begin - btnd_press <= 1; - debounceCounter <= DEBOUNCE_PERIOD; - end - if (btnc && !prevPushState[2]) begin - btnc_press <= 1; - debounceCounter <= DEBOUNCE_PERIOD; - end - if (btnr && !prevPushState[3]) begin - btnr_press <= 1; - debounceCounter <= DEBOUNCE_PERIOD; - end - if (btnl && !prevPushState[4]) begin - btnl_press <= 1; - debounceCounter <= DEBOUNCE_PERIOD; - end - end +// if (debounceCounter > 0) begin +// debounceCounter <= debounceCounter - 1; +// btnu_press <= 0; btnd_press <= 0; +// btnc_press <= 0; btnr_press <= 0; btnl_press <= 0; +// end else begin +// // Detect new press per button (rising edge) +// if (btnu && !prevPushState[0]) begin +// btnu_press <= 1; +// debounceCounter <= DEBOUNCE_PERIOD; +// end +// if (btnd && !prevPushState[1]) begin +// btnd_press <= 1; +// debounceCounter <= DEBOUNCE_PERIOD; +// end +// if (btnc && !prevPushState[2]) begin +// btnc_press <= 1; +// debounceCounter <= DEBOUNCE_PERIOD; +// end +// if (btnr && !prevPushState[3]) begin +// btnr_press <= 1; +// debounceCounter <= DEBOUNCE_PERIOD; +// end +// if (btnl && !prevPushState[4]) begin +// btnl_press <= 1; +// debounceCounter <= DEBOUNCE_PERIOD; +// end +// end - // Always update prevPushState at the end - prevPushState[0] <= btnu; - prevPushState[1] <= btnd; - prevPushState[2] <= btnc; - prevPushState[3] <= btnr; - prevPushState[4] <= btnl; +// // Always update prevPushState at the end +// prevPushState[0] <= btnu; +// prevPushState[1] <= btnd; +// prevPushState[2] <= btnc; +// prevPushState[3] <= btnr; +// prevPushState[4] <= btnl; - end +// end always @ (posedge CLOCK) begin if (state == interstate) begin From 7dfb23bf8fd685be757cedc74f4ac95ebc5cafca Mon Sep 17 00:00:00 2001 From: wongyihao02 <141716716+wongyihao02@users.noreply.github.com> Date: Fri, 11 Apr 2025 23:22:46 +0800 Subject: [PATCH 9/9] Update debounce.v --- FPGraph.srcs/sources_1/new/debounce.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FPGraph.srcs/sources_1/new/debounce.v b/FPGraph.srcs/sources_1/new/debounce.v index 6f58978..26b72d3 100644 --- a/FPGraph.srcs/sources_1/new/debounce.v +++ b/FPGraph.srcs/sources_1/new/debounce.v @@ -25,7 +25,7 @@ module debounce( input wire clk_in, output reg signal_out ); - parameter TIME_OUT = 2000000; + parameter TIME_OUT = 4000000; reg [31:0] counter = 0; reg time_out = 0;