Sau 1 thời gian mình cố viết code để lưu giá trị vào ram ko thành công ( Gà ),mình đã thử sử dụng lưu giá trị vào mảng.Ý tưởng của code mình như sau : Dùng KEY[3] để tăng giá trị 1 biến(Y4Y5) . Khi bấm KEY[0] thì sẽ xuất ra giá trị Y8Y9=Y0Y1 đồng thời tăng giá trị 1 biến (Y0Y1 nếu Y0Y1<Y4Y5 . Nếu Y0Y1>Y4Y5 thì bấm KEY[0] sẽ không tăng Y0Y1 và Y8Y9 sẽ bằng Y2Y3 với giá trị Y2Y3 dc truy xuất ra từ mảng . Bấm KEY[1] sẽ lưu Y8Y9 vào mảng .
Ví dụ : Khi bấm KEY[3] cho Y4Y5 đến giá trị là 6
Ta bấm KEY[0] cho Y0Y1 lên đến 2 rùi bấm KEY[1] lần 1
Bấm tiếp KEY[0] cho Y0Y1 lên 4 ta lại bấm KEY[1]
Bấm KEY[0] cho Y0Y1 lên 5 ta lại bấm KEY1
Tiếp tục bấm KEY[0] cho Y0Y1 lên tiếp qua 6 (>Y4Y5) lúc này việc bấm KEY[0] sẽ xuất ra giá trị lưu tại mảng tức là các số 2 4 5 sau 3 lần bấm KEY[0]. Tuy nhiên đoạn code mình viết nó lại xuất ra giá trị 0 2 4 5 sau 4 lần bấm KEY[0] . Mong các sư huynh chỉ giáo giúp . Em xin cảm ơn . Sau đây là đoạn code của đệ :
Mô phỏng dạng sóng nè!!Các bạn sẽ thấy khi bấm KEY[0] qua 6 nó sẽ xuất giá trị lần lượt là 0 2 4 5 . Nhờ các huynh giúp bỏ đi số 0 để xuất dc giá trị là 2 4 5 mà thôi . Thank các huynh nhiều lắm ạ .Hjx hjx
Ví dụ : Khi bấm KEY[3] cho Y4Y5 đến giá trị là 6
Ta bấm KEY[0] cho Y0Y1 lên đến 2 rùi bấm KEY[1] lần 1
Bấm tiếp KEY[0] cho Y0Y1 lên 4 ta lại bấm KEY[1]
Bấm KEY[0] cho Y0Y1 lên 5 ta lại bấm KEY1
Tiếp tục bấm KEY[0] cho Y0Y1 lên tiếp qua 6 (>Y4Y5) lúc này việc bấm KEY[0] sẽ xuất ra giá trị lưu tại mảng tức là các số 2 4 5 sau 3 lần bấm KEY[0]. Tuy nhiên đoạn code mình viết nó lại xuất ra giá trị 0 2 4 5 sau 4 lần bấm KEY[0] . Mong các sư huynh chỉ giáo giúp . Em xin cảm ơn . Sau đây là đoạn code của đệ :
Code:
module ram2705(KEY,HEX7,HEX6,HEX5,HEX4); input [3:0]KEY; output [6:0]HEX4,HEX5,HEX6,HEX7; reg [7:0]mem[100:1]; integer add_write,add_read; reg [3:0]Y0,Y1,Y2,Y3,Y4,Y5,Y8,Y9; reg [7:0]Y6,Y7; reg [7:0]Y10; always @(negedge KEY[3]) begin Y4=Y4+1; if(Y4>9) begin Y4=0; Y5=Y5+1; end end always @(negedge KEY[0]) begin Y6=Y5*10+Y4; Y7=Y1*10+Y0; if(Y6>Y7) begin Y0=Y0+1; Y8=Y0; Y9=Y1; if(Y0>9) begin Y0=0; Y1=Y1+1; Y8=Y0; Y9=Y1; end end else begin Y8=Y2; Y9=Y3; Y0=Y0; Y1=Y1; if(add_write>add_read||add_write==add_read) begin Y10=mem[add_read]; add_read=add_read+1; Y3=Y10[7:4]; Y2=Y10[3:0]; end else begin add_read=add_read; end end end always @(negedge KEY[1]) begin add_write=add_write+1; mem[add_write]={Y9,Y8}; end hienthi(Y5,HEX7); hienthi(Y4,HEX6); hienthi(Y9,HEX5); hienthi(Y8,HEX4); endmodule module hienthi(c,display); input [3:0]c; output reg [0:6]display; always @(c) case(c) 4'd0:display=7'b1000000; 4'd1:display=7'b1111001; 4'd2:display=7'b0100100; 4'd3:display=7'b0110000; 4'd4:display=7'b0011001; 4'd5:display=7'b0010010; 4'd6:display=7'b0000010; 4'd7:display=7'b1111000; 4'd8:display=7'b0000000; 4'd9:display=7'b0010000; default:display=7'b1111111; endcase endmodule
Comment