Mình có tham khảo 1 vài đoạn code tham khảo về việc lưu và đọc giá trị vào SRAM trên kit DE2 . Sau đó mình đã thực hiện đoạn code sau để test thử - nhưng vẫn chưa thực hiện dc!!Mong anh em xem giúp và chỉ giáo thêm dùm!! Ý tưởng của đoạn code này như sau : Ta dùng KEY[3] để tăng 1 biến lên (Y4 và Y5 -mỗi lần nhấn KEY[3] biến tăng thêm 1) . Khi bấm KEY[0] cũng sẽ tăng 1 biến thêm 1(biến Y0 và Y1) nhưng với điều kiện là giá trị biến do KEY[0] điều khiển phải nhỏ hơn giá trị của KEY[3] thì biến mới dc tăng lên. Khi giá trị biến do KEY[0] điều khiển lớn hơn giá trị biến KEY[3] thì việc tăng KEY[0] sẽ dc thay bằng việc xuất giá trị từ SRAM ra . Khi KEY[1] dc nhấn thì giá trị của biến KEY[0] sẽ dc lưu vào SRAM . Và sau đây là đoạn code chi tiết mình làm , mời anh em tham khảo :
module test(CLOCK_50,SRAM_CE_N,SRAM_WE_N,SRAM_OE_N,SRAM_A DDR,SRAM_DQ,KEY,SRAM_UB_N,SRAM_LB_N);
input CLOCK_50;
input [3:0]KEY;
output SRAM_UB_N;
output SRAM_LB_N;
output SRAM_CE_N;
output SRAM_WE_N;
output SRAM_OE_N;
output [17:0]SRAM_ADDR;
inout [15:0]SRAM_DQ;
reg [17:0]add,add1;
reg [3:0]Y1,Y0,Y2,Y3,Y4,Y5,Y6,Y7;
reg [17:0]addr_reg;
reg [15:0]data_reg;
reg we;
reg [7:0]dataout1,dataout2;
assign SRAM_CE_N = 0;
assign SRAM_0E_N = 0;
assign SRAM_UB_N = 0;
assign SRAM_LB_N = 0;
assign SRAM_WE_N = we;
assign SRAM_ADDR = addr_reg;
assign SRAM_DQ = data_reg;
// KEY[0] goi so
// KEY[1] cancel
// KEY[3] lay so thu tu
always @(negedge KEY[1])
begin
add1=add1+1;
end
always @(negedge KEY[3])
begin
Y4=Y4+1;
if(Y4>9)
begin
Y4=0;
Y5=Y5+1;
end
end
always @(posedge CLOCK_50)
begin
if(KEY[0]==1'b0)
begin
Y6=Y5*10+Y4;
Y7=Y3*10+Y2;
if(Y6>Y7)
begin
we=0;
addr_reg=18'b000000000000010000;
Y0=Y0+1;
if(Y0>9)
begin
Y0=0;
Y1=Y1+1;
end
data_reg={4'b0,Y0,4'b0,Y1};
Y2=SRAM_DQ[11:8];
Y3=SRAM_DQ[3:0];
end
else
begin
we=1;
addr_reg=add;
Y0=SRAM_DQ[11:8];
Y1=SRAM_DQ[3:0];
end
end
if(KEY[1]==1'b0)
begin
we=0;
addr_reg=add1;
data_reg={4'b0,Y0,4'b0,Y1};
end
end
always @(negedge KEY[0])
begin
if(Y6<Y7)
begin
add=add+1;
end
else
add=add;
end
endmodule
Ví dụ : Khi nhấn KEY[3] cho Y4Y5 đến giá trị 13 chẳng hạn . Ta bắt đầu bấm KEY[0] để cho Y0Y1 tăng lên. Nếu tại giá trị Y0Y1 bằng 04 ta bấm KEY[1] thì 04 dc lưu vào SRAM tại địa chỉ đầu , bấm tiếp KEY[0] tăng Y0Y1 lên tiếp , giả sử tại Y0Y1 = 08 ta lại bấm KEY[1] thì 08 lại dc lưu vào SRAM tại địa chỉ kế tiếp . Ta tiếp tục bấm KEY[0] lên , khi Y0Y1 vượt qua giá trị 13 ta bấm KEY[0] thì sẽ xuất SRAM ra cho Y0Y1=4 , nhấn tiếp sẽ xuất tiếp giá trị 8 và ngừng . Đó là ý tưởng mình muốn thực hiện . Tuy nhiên vẫn chưa làm dc . Rất mong nhận dc sự giúp đỡ của anh em . Xin chân thành cảm ơn anh em . .
module test(CLOCK_50,SRAM_CE_N,SRAM_WE_N,SRAM_OE_N,SRAM_A DDR,SRAM_DQ,KEY,SRAM_UB_N,SRAM_LB_N);
input CLOCK_50;
input [3:0]KEY;
output SRAM_UB_N;
output SRAM_LB_N;
output SRAM_CE_N;
output SRAM_WE_N;
output SRAM_OE_N;
output [17:0]SRAM_ADDR;
inout [15:0]SRAM_DQ;
reg [17:0]add,add1;
reg [3:0]Y1,Y0,Y2,Y3,Y4,Y5,Y6,Y7;
reg [17:0]addr_reg;
reg [15:0]data_reg;
reg we;
reg [7:0]dataout1,dataout2;
assign SRAM_CE_N = 0;
assign SRAM_0E_N = 0;
assign SRAM_UB_N = 0;
assign SRAM_LB_N = 0;
assign SRAM_WE_N = we;
assign SRAM_ADDR = addr_reg;
assign SRAM_DQ = data_reg;
// KEY[0] goi so
// KEY[1] cancel
// KEY[3] lay so thu tu
always @(negedge KEY[1])
begin
add1=add1+1;
end
always @(negedge KEY[3])
begin
Y4=Y4+1;
if(Y4>9)
begin
Y4=0;
Y5=Y5+1;
end
end
always @(posedge CLOCK_50)
begin
if(KEY[0]==1'b0)
begin
Y6=Y5*10+Y4;
Y7=Y3*10+Y2;
if(Y6>Y7)
begin
we=0;
addr_reg=18'b000000000000010000;
Y0=Y0+1;
if(Y0>9)
begin
Y0=0;
Y1=Y1+1;
end
data_reg={4'b0,Y0,4'b0,Y1};
Y2=SRAM_DQ[11:8];
Y3=SRAM_DQ[3:0];
end
else
begin
we=1;
addr_reg=add;
Y0=SRAM_DQ[11:8];
Y1=SRAM_DQ[3:0];
end
end
if(KEY[1]==1'b0)
begin
we=0;
addr_reg=add1;
data_reg={4'b0,Y0,4'b0,Y1};
end
end
always @(negedge KEY[0])
begin
if(Y6<Y7)
begin
add=add+1;
end
else
add=add;
end
endmodule
Ví dụ : Khi nhấn KEY[3] cho Y4Y5 đến giá trị 13 chẳng hạn . Ta bắt đầu bấm KEY[0] để cho Y0Y1 tăng lên. Nếu tại giá trị Y0Y1 bằng 04 ta bấm KEY[1] thì 04 dc lưu vào SRAM tại địa chỉ đầu , bấm tiếp KEY[0] tăng Y0Y1 lên tiếp , giả sử tại Y0Y1 = 08 ta lại bấm KEY[1] thì 08 lại dc lưu vào SRAM tại địa chỉ kế tiếp . Ta tiếp tục bấm KEY[0] lên , khi Y0Y1 vượt qua giá trị 13 ta bấm KEY[0] thì sẽ xuất SRAM ra cho Y0Y1=4 , nhấn tiếp sẽ xuất tiếp giá trị 8 và ngừng . Đó là ý tưởng mình muốn thực hiện . Tuy nhiên vẫn chưa làm dc . Rất mong nhận dc sự giúp đỡ của anh em . Xin chân thành cảm ơn anh em . .
Comment