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