Hôm trước dc anh NEO giúp đỡ đoạn code lưu 1 số kia viết khá thành công , em tiếp tục phát triển viết lưu 2 số . Đoạn code hôm trước anh NEO chỉ em là thực hiện : tăng giá trị 1 biến khi bấm KEY[3] , bấm KEY[0] thì tăng giá trị 1 biến khác nếu như giá trị đó nhỏ hơn giá trị tại KEY[3] . Khi giá trị KEY[0] bắt đầu lớn hơn giá trị KEY[3] thì việc bấm KEY[0] sẽ gọi giá trị đã lưu trước đó bởi KEY[1]. Đoạn code này em đã thực hiện dc. ( file : ram0206)
Bây giờ em muốn mở rộng thêm như sau : thay vì bấm KEY[3] để tăng biến Y4Y5 như trên thì em sẽ dùng SW[0] để tăng Y4Y5 . Dùng KEY[0] để điều khiển tăng giá trị Y0Y1 , KEY[2] để tăng giá trị Y2Y3 , nhưng là tăng giá trị lớn nhất trong 2 số đó và chỉ tăng khi giá trị max này bé hơn giá trị của Y4Y5 . Em ví dụ : Khi SW[0] tăng đến 5 , bấm KEY[0] sẽ hiển thị ra 1 , bấm KEY[2] hiển thị ra 2, bấm tiếp KEY[0] thì hiển thị ra 3.....
KEY[1] dùng để lưu giá trị hiển thị điều khiển bởi KEY[0]
KEY[3] dùng để lưu giá trị hiển thị điều khiển bởi KEY[2]
Khi giá trị max của Y0Y1 và Y2Y3 bắt đầu lớn hơn Y4Y5 thì việc bấm các KEY[0] và KEY[2] sẽ ko tăng Y0Y1 và Y2Y3 nữa mà thay vào đó sẽ hiển thị ra kết quả đã lưu trước đó . File : testram0306 . Đoạn này em chưa làm dc , mong anh em tìm hộ em điểm sai với ạ . Em cảm ơn anh em nhiều.
Còn đây là đoạn lưu 1 giá trị đã chạy dc :
Mong anh em chiếu cố giúp cho!!Cảm ơn anh em nhiều lắm
Bây giờ em muốn mở rộng thêm như sau : thay vì bấm KEY[3] để tăng biến Y4Y5 như trên thì em sẽ dùng SW[0] để tăng Y4Y5 . Dùng KEY[0] để điều khiển tăng giá trị Y0Y1 , KEY[2] để tăng giá trị Y2Y3 , nhưng là tăng giá trị lớn nhất trong 2 số đó và chỉ tăng khi giá trị max này bé hơn giá trị của Y4Y5 . Em ví dụ : Khi SW[0] tăng đến 5 , bấm KEY[0] sẽ hiển thị ra 1 , bấm KEY[2] hiển thị ra 2, bấm tiếp KEY[0] thì hiển thị ra 3.....
KEY[1] dùng để lưu giá trị hiển thị điều khiển bởi KEY[0]
KEY[3] dùng để lưu giá trị hiển thị điều khiển bởi KEY[2]
Khi giá trị max của Y0Y1 và Y2Y3 bắt đầu lớn hơn Y4Y5 thì việc bấm các KEY[0] và KEY[2] sẽ ko tăng Y0Y1 và Y2Y3 nữa mà thay vào đó sẽ hiển thị ra kết quả đã lưu trước đó . File : testram0306 . Đoạn này em chưa làm dc , mong anh em tìm hộ em điểm sai với ạ . Em cảm ơn anh em nhiều.
Code:
module testram0306(KEY,HEX7,HEX6,HEX5,HEX4,HEX3,HEX2,SW,CLOCK_50); input CLOCK_50; input [0:0]SW; input [3:0]KEY; output [6:0]HEX4,HEX5,HEX6,HEX7,HEX3,HEX2; reg [7:0]mem1[100:0]; reg [7:0]mem2[100:0]; integer add_write1,add_read1,add_write2,add_read2; reg [3:0]Y0,Y1,Y2,Y3,Y4,Y5,Y0a,Y1a,Y2a,Y3a,Yread1,Yread2,Yread3,Yread4; reg [7:0]Y6,Y7,Y8,Ymax,Yreg1,Yreg2; reg [7:0]Y10; always @(negedge SW[0]) begin Y4=Y4+1; if(Y4>9) begin Y4=0; Y5=Y5+1; end end always begin Y6=Y5*10+Y4; Y7=Y1*10+Y0; Y8=Y3*10+Y2; end always begin if(Y7>Y8) Ymax=Y7; else Ymax=Y8; end always @(Y0,Y1,Y6,Ymax,Yread1,Yread2) begin if(KEY[0]==1'b0) begin if(Y6>Ymax) begin Y0a=Y0; Y1a=Y1; end else begin Y0a=Yread1; Y1a=Yread2; end end end always @(negedge KEY[0]) begin if(Y6>Ymax) begin if(Y7>Y8) begin Y1=Y1; Y0=Y0+1; if(Y0>9) begin Y0=0; Y1=Y1+1; end end if(Y8>Y7) begin Y1=Y3; Y0=Y2+1; if(Y0>9) begin Y0=0; Y1=Y1+1; end end end else begin Y0=Y0; Y1=Y1; if(add_write1>add_read1) begin Yreg1=mem1[add_read1]; add_read1=add_read1+1; Yread1=Yreg1[7:4]; Yread2=Yreg1[3:0]; end else begin add_read1=add_read1; end end end always @(negedge KEY[1]) begin mem1[add_write1]={Y0a,Y1a}; add_write1=add_write1+1; end always @(Y2,Y3,Y6,Ymax,Yread3,Yread4) begin if(KEY[1]==1'b0) begin if(Y6>Ymax) begin Y2a=Y2; Y3a=Y3; end else begin Y2a=Yread2; Y3a=Yread3; end end end always @(negedge KEY[2]) begin if(Y6>Ymax) begin if(Y7>Y8) begin Y3=Y1; Y2=Y0+1; if(Y2>9) begin Y2=0; Y3=Y3+1; end end if(Y8>Y7) begin Y3=Y3; Y3=Y2+1; if(Y3>9) begin Y3=0; Y3=Y3+1; end end end else begin Y2=Y2; Y3=Y3; if(add_write2>add_read2) begin Yreg2=mem2[add_read2]; add_read2=add_read2+1; Yread3=Yreg2[7:4]; Yread4=Yreg2[3:0]; end else begin add_read2=add_read2; end end end always @(negedge KEY[3]) begin mem2[add_write2]={Y2a,Y3a}; add_write2=add_write2+1; end hienthi(Y5,HEX7); hienthi(Y4,HEX6); hienthi(Y1a,HEX5); hienthi(Y0a,HEX4); hienthi(Y3a,HEX3); hienthi(Y2a,HEX2); 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
Còn đây là đoạn lưu 1 giá trị đã chạy dc :
Code:
module ram0206(KEY,HEX7,HEX6,HEX5,HEX4,SW); input [0:0]SW; 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 @(Y0,Y1,Y2,Y3,Y6,Y7) begin if(KEY[0]==1'b0) begin if(Y6>Y7) begin Y8=Y0; Y9=Y1; end else begin Y8=Y2; Y9=Y3; end end end always @(negedge KEY[0]) begin Y6=Y5*10+Y4; Y7=Y1*10+Y0; if(Y6>Y7) begin Y0=Y0+1; if(Y0>9) begin Y0=0; Y1=Y1+1; end end else begin Y0=Y0; Y1=Y1; if(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 mem[add_write]={Y9,Y8}; add_write=add_write+1; 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