Mình làm tới phần sử dụng SRAM trên board DE2 , nhưng mình không hiểu cách sử dụng nó ra sao . Mấy cái port như SRAM_ADDR thì mình khai báo trong cái topmodule luôn hay sao , và nó là output hay input (muốn nhập địa chỉ từ các SW ) , hay là mình phải tạo 1 module khác , trong đó khai báo các port của SRAM , và nếu tạo module khác , thì trong module ngoài khai báo mấy cái port ra thì còn làm dzi nữa . . . , hỏi kiểu này hơi khó hiểu , nhưng ai hiểu được câu hỏi của mình thì giúp với
Thông báo
Collapse
No announcement yet.
SRAM tren board DE2
Collapse
X
-
ah , bài của mình chỉ đơn giản là đọc và ghi dữ liệu thui , sử dụng 32x8 trên SRAM , code của mình đây :
Trong bài của mìn thì tất cả các chân điều khiển cho bằng 0 , còn cái write_enable thì cho SW[17] điều khiển , nhưng mình thử trên board , thì giả sử cho write_enable = 0(ghi) , rùi cho address va data vào , sau đó nhấn Clock , rùi thêm 1 address khác , data khác , sau đó cho write_enable lên cao(read) , thì led 7 đoạn chỉ hiển thị cái data mình vừa nhập vào thui , còn qua cái địa chỉ trước thì không có phản ứng , bạn nào bít giúp giùm , thanks
module SRAM_32x8(SW,KEY,LEDG,HEX7,HEX6,HEX5,HEX4,HEX1,HEX 0,SRAM_ADDR,SRAM_DQ,SRAM_CE_N,
SRAM_OE_N,SRAM_WE_N,SRAM_UB_N,SRAM_LB_N);
output [0:6] HEX7;
output [0:6] HEX6;
output [0:6] HEX5;
output [0:6] HEX4;
output [0:6] HEX1;
output [0:6] HEX0;
output [0:0] LEDG;
output SRAM_CE_N;
output SRAM_OE_N;
output SRAM_WE_N;
output SRAM_UB_N;
output SRAM_LB_N;
output [17:0] SRAM_ADDR;
inout reg [15:0] SRAM_DQ;
input [17:0] SW;
input [0:0] KEY;
assign SRAM_CE_N = 1'b0;
assign SRAM_OE_N = 1'b0;
assign SRAM_UB_N = 1'b0;
assign SRAM_LB_N = 1'b0;
wire [7:0] data_in;
wire wr_enable;
wire Clk;
reg [7:0] data_out;
reg [17:0] address;
assign Clk = ~KEY[0];
assign {data_in} = {SW[7:0]};
assign SRAM_ADDR = address;
assign SRAM_WE_N = wr_enable;
assign wr_enable = SW[17];
always@(posedge Clk)
begin
address[4:0] =SW [15:11];
if(~wr_enable)
SRAM_DQ[7:0] <= data_in;
else
data_out<=SRAM_DQ[7:0];
end
Comment
-
Sorry vì mình không có thời gian đọc code nhiều.
Về bộ đệm ba trạng thái thì cách thức implement của nó như sau:
RAM_DATA = WE_N ? 16'hzzzz : RAM_DATA_out;
RAM_DATA_in = RAM_DATA;
Mục đích của cái này để ghép một port in và một port out thành 1 port inout.
Bạn coi lại trong LAB 8 sẽ thấy có dòng gần giống như vậy. Chạy tổng hợp rồi cố gắng phân tích.
Xong rồi không hiểu mới hỏi tiếp nhé. Chưa tìm hiểu mà hỏi thì mình thường ít trả lời lắm.
Thân chào
Comment
-
Ủa vậy hả. Sorry. Tưởng đâu hắn post code mẫu chứ. Hihi. Sorry nhiều nhé.
Mà hình như mình attach file không được không hiểu vì sao nữa. Để coppy vào vậy:
module part2(SW,KEY,
HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,
SRAM_ADDR,
SRAM_DQ,
SRAM_CE_N,
SRAM_OE_N,
SRAM_WE_N,
SRAM_UB_N,
SRAM_LB_N);
input [17:0] SW;
input [2:0]KEY;
output [17:0]SRAM_ADDR;
inout [15:0]SRAM_DQ;
output SRAM_CE_N;
output SRAM_OE_N;
output SRAM_WE_N;
output SRAM_UB_N;
output SRAM_LB_N;
output [6:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5;
wire clk,reset_n;
wire [7:0]DATA;
wire [7:0]DATA_out;
wire [4:0] ADDR ;
assign clk_ = KEY[0];
assign reset_n = KEY[1];
regitern #(.n(1))reg1(clk, reset_n, SW[17], SRAM_CE_N); //SRAM_CE_N = SW[17];
regitern #(.n(1))reg2 (clk, reset_n, SW[16], SRAM_WE_N); // SRAM_WE_N = SW[16];
regitern #(.n(8))reg3 (clk, reset_n, SW[7:0], DATA [7:0]); // DATA [7:0] = SW[7:0];
regitern #(.n(8))reg4 (clk, reset_n, SW[12:8], ADDR [4:0]); // 5 bit dia chi
assign SRAM_DQ[7:0] = SRAM_WE_N ? 8'hzz : DATA ;
assign SRAM_ADDR [17:5] = 13'b0;
assign SRAM_OE_N = 1'b0;
assign SRAM_UB_N = 1'b0;
assign SRAM_LB_N = 1'b0;
assign SRAM_ADDR [4:0] = ADDR [4:0];
assign DATA_out = SRAM_DQ [7:0];
displayhex D1(DATA_out[3:0], HEX0); // hien
displayhex D2(DATA_out[7:4], HEX1); // thi
displayhex D3(DATA[3:0], HEX4); // led
displayhex D4(DATA[7:4], HEX5); //
displayhex D5(ADDR [3:0], HEX2); //
displayhex D6({3'b0,ADDR [4]}, HEX3); //
endmodule
////////////////////gia ma led /////////////////////////////////////////
module displayhex(hex, led);
input [3:0] hex;
output reg [6:0] led;
always @(hex)
case (hex)
4'b0000 : led = 7'b1000000; //0
4'b0001 : led = 7'b1111001; //1
4'b0010 : led = 7'b0100100; //2
4'b0011 : led = 7'b0110000; //3
4'b0100 : led = 7'b0011001; //4
4'b0101 : led = 7'b0010010; //5
4'b0110 : led = 7'b0000010; //6
4'b0111 : led = 7'b1111000; //7
4'b1000 : led = 7'b0000000; //8
4'b1001 : led = 7'b0010000; //9
4'b1010 : led = 7'b0001000; //a
4'b1011 : led = 7'b0000011; //b
4'b1100 : led = 7'b1000110; //c
4'b1101 : led = 7'b0100001; //d
4'b1110 : led = 7'b0000110; //e
4'b1111 : led = 7'b0001110; //f
endcase
endmodule
//////////////////////thanh ghi/////////////////////////////
module regitern(clk, reset_n, inreg, outreg);
parameter n = 8;
input clk, reset_n;
input [n-1:0] inreg;
output reg [n-1:0] outreg;
always @(posedge clk or negedge reset_n)
if (reset_n == 0)
outreg <= 0;
else
outreg <= inreg;
endmodule
////////////////////////////////////////////////////////////
npkhttl về tổng hợp và coi Kết quả nhé.
Comment
-
TÌnh hình là sau khi xem qua code của bạn , mình đã chỉnh sửa lại đoạn code của mình , nhưng vẫn còn chút vướng mắc . Giả sử mình ghi vao address 0 và address 1 2 dữ liệu (0F va FF chẳng hạn). Sau đó , mình để SRAM_EN_N lên 1 ( trạng thái read) , thì led chỉ hiển thị data mà mình vừa ghi vào thui ( ghi address 0 data 0F trước , sau đó ghi address 1 data FF) , nó chỉ hiển thị FF , chuyển sang address 0 vẫn hiển thị FF .
Ngay tại chỗ WR_EN_N = 1 thì SRAM_DQ là tổng trở cao , thì không biết có đúng hay không , nhưng mình nghĩ nó sẽ không đưa dữ liệu ra data_out được ????
Comment
-
Bạn coi lại giao thức giao tiếp SRAM nha.
+ Trong datasheet đó.
+ Hay dùng Megafunction tạo RAM cũng được. Trong quá trình tạo nhớ chú ý đánh dấu vào
timimg.bmp. Nó sẽ cho bạn file de coi dạng sóng để giao tiếp.
+ Hay down cái lab8 về trong đó nó cũng nói về cách đọc ghi RAM
Mình nói sơ qua cho bạn. Để ghi data vào ram:
B0: Đảm bảo WE_N == 1 (đọc RAM)
B1: cấp địa chỉ
B2: cấp data
B3: WE_N = 0 ghi data vào RAM
B4: WE_N = 1
Sau đó mới được thay đổi data và địa chỉ. Nếu không sẽ bị ghi sai giá trị vào RAM đó.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietCuối năm bàn thêm chuyện to hơn chút, đấy là 2 vụ rơi đám 737 đời mới và trục trặc ở cả tá chiếc khác. Ngay cả những thứ tưởng như cao siêu sang xịn thật thì vẫn có thể gặp trường hợp oái oăm như thường. Từ hồi đó bqv đã thấy khó hiểu làm sao lại đẻ ra đám MCAS quái thai đến thế được. Rồi...
-
Channel: Điện tử công suất
Hôm qua, 19:40 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietBqv phải vào ngay để tán đồng với bài viết trên của bạn. Chỉ bàn về kỹ thuật, thiết bị máy móc của hãng dù danh tiếng vẫn có thể xảy ra những chuyện ngoài dự kiến, thậm chí những chuyện tưởng như không bao giờ có thể xảy ra....
-
Channel: Điện tử công suất
Hôm qua, 19:31 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80(ĐT chia sẻ MPPT này, với mong muốn rằng, chúng ta hãy tự tin lên, hãy tự hào là người VN, đừng quá tin vào người khác, đừng quá thần tượng họ, cần kiểm tra thực chứng chứ không nên cứ cho các thiết bị thông minh, cao siêu là hoàn hảo)
-
Channel: Điện tử công suất
Hôm qua, 12:08 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80Dưới đây là hình ảnh thực:
(bị phạm con tụ pi C17 (phía trên IC U3/DIP08: văng mất xác!)
(hàn vào vị trí C17 tụ pi 27nF ( giá trị phỏng đoán từ 10-100nF!), mạch vẫn chạy như trước khi cạy keo)...-
Channel: Điện tử công suất
Hôm qua, 12:05 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80ĐT đã mạnh dạn mail thử cho hãng SRNE, họ trả lời là nó dùng nhiệt điện trở ở bên trong mạch như sau:
"Our street light controller product triggers high temperature protection based on internal thermistor sampling''
Thấy hơi lo lắng vì kiến thức điện tử...-
Channel: Điện tử công suất
Hôm qua, 11:39 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi mèomướpDạ chú mua cái kẹp dòng ấy ạ. Chị hàng xóm nhà cháu có 1 cái thấy lâu lâu rùi chưa hỏng ạ. Ví dụ như mẫu này trên shoppee đầy ạ...
https://vn.shp.ee/dWYVgq7-
Channel: Điện tử dành cho người mới bắt đầu
21-01-2025, 12:48 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi vi van phamBác Đinh Vặn sai rồi,bây giờ con nít mẫu giáo đã giải phương trình 2 ẩn số rồi.
Tôi chứng minh bác lên youtube đầy video đơn giản tựa rất hot, chỉ 1 transistor hay 1 con diode và hướng dẩn cách làm, tác giả không vẽ sơ đồ mạch điện...-
Channel: Điện tử công suất
21-01-2025, 11:55 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi nguyendinhvanBây giờ mới có tháng giêng, bao giờ mới đến tháng mười ?
Các cháu mẫu giáo mới lên lớp 1 được có 4 tháng. Nên đừng lấy lý do chúng nó đã đi học rồi để bắt nó viết một bài luận văn, hay là giải bài toán hàm. Phải kiên nhẫn...-
Channel: Điện tử công suất
21-01-2025, 00:47 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi nguyendinhvanKhông có loại nào đủ một vạn chức năng đâu. Nó chỉ được 2345678 , hoặc khủng lắm thì được 10 chức năng.
-
Channel: Điện tử dành cho người mới bắt đầu
21-01-2025, 00:16 -
-
bởi since0501Cảm ơn bác đã chia sẻ!...
-
Channel: Điện tử dành cho người mới bắt đầu
19-01-2025, 19:00 -
Comment