Professional Documents
Culture Documents
C3 Part 2
C3 Part 2
Memory Controller
Tổng quan:
Đây là một bộ phận điều khiển bộ nhớ SDRAM làm việc trên De0 Nano. Dự án này cũng bao gồm giao diện
người dùng đơn giản là 1 nút nhấn đơn giản trên bo mạch phát triển.
Hoạt động ở tần số 100mhz, hoạt động ở chuẩn CAS3 (CAS Latency 3) có nghĩa là thời gian từ khi một yêu
cầu truy cập bộ nhớ được gửi đi đến khi dữ liệu đầu tiên được trả về cho CPU là 3 chu kỳ đồng hồ (khoảng
22,5 nanosecond ở tần số hoạt động 133 MHz). Bộ nhớ 32MB, 16 bit data.
After INIT the controller sits in IDLE waiting for REFRESH, READ or WRITE
Sau khi được khởi tạo INIT thì bộ điều khiển sẽ chuyển sang trạng thái IDLE (chờ) đợi các yêu cầu REFRESH
(làm mới), READ (đọc dữ liệu) hoặc WRITE (ghi dữ liệu) từ host interface. Khi nhận được yêu cầu này, bộ
điều khiển sẽ điều khiển truy cập vào bộ nhớ SDRAM để thực hiện yêu cầu từ host interface. Sau khi hoàn
thành yêu cầu, bộ điều khiển sẽ trở lại trạng thái IDLE để chờ đợi yêu cầu tiếp theo từ host interface.
Hoạt động làm mới được thực hiện đều đặn 8192 lần trong khoảng thời gian 32ms
Quá trình ĐỌC luôn diễn ra một lần đọc với auto precharge
Quá trình GHI luôn diễn ra một lần ghi với auto precharge
SĐK tổng quát về SDRAM_controller
SDRAM Controller: Bộ điều khiển bộ nhớ SDRAM, thực hiện các hoạt động đọc/ghi vào bộ nhớ SDRAM và
đồng bộ hóa truyền tải dữ liệu giữa Host Interface và SDRAM Interface.
wr_addr: Địa chỉ truy cập vào bộ nhớ SDRAM để ghi dữ liệu vào.
addr: Địa chỉ truy cập vào bộ nhớ SDRAM để đọc dữ liệu từ đó.
bank_addr: Địa chỉ ngân hàng bộ nhớ để truy cập vào bộ nhớ SDRAM.
wr_enable: Tín hiệu cho phép ghi dữ liệu vào bộ nhớ SDRAM.
data: Dữ liệu đang được truyền tải giữa Host Interface và SDRAM Interface.
clock_enable: Tín hiệu đồng bộ hóa cho phép truyền dữ liệu giữa Host Interface và SDRAM Interface.
rd_addr: Địa chỉ truy cập vào bộ nhớ SDRAM để đọc dữ liệu từ đó.
rd_ready: Tín hiệu báo hiệu rằng dữ liệu đã sẵn sàng để đọc từ bộ nhớ SDRAM.
busy: Tín hiệu báo hiệu rằng SDRAM đang bận hoạt động.
data_mask_low: Mặt nạ dữ liệu thấp để xác định các bit thấp của dữ liệu đang được truyền tải.
data_mask_high: Mặt nạ dữ liệu cao để xác định các bit cao của dữ liệu đang được truyền tải.
clk: Tín hiệu clock để đồng bộ hóa các hoạt động của bộ nhớ SDRAM.
Các thông tin được cung cấp trong câu hỏi mô tả về các tín hiệu và chức năng của bộ điều khiển bộ nhớ
SDRAM trên DE0-Nano:
Lưu ý:
- wr_addr và rd_addr là địa chỉ của ô nhớ trên bộ nhớ SDRAM. Địa chỉ này được tạo bởi việc nối các giá trị
ngân hàng bộ nhớ, hàng và column lại với nhau.
- rd_enable được thiết lập thành mức cao khi muốn đọc dữ liệu từ bộ nhớ SDRAM. Việc này được thực hiện
bằng cách đưa địa chỉ ô nhớ cần đọc lên bus địa chỉ (addr bus) và thiết lập rd_enable thành mức cao để cho
bộ điều khiển biết rằng yêu cầu đọc dữ liệu đã được gửi.
- wr_enable được thiết lập thành mức cao khi muốn ghi dữ liệu vào bộ nhớ SDRAM. Việc này được thực
hiện bằng cách đưa địa chỉ ô nhớ và dữ liệu cần ghi lên bus và thiết lập wr_enable thành mức cao để cho bộ
điều khiển biết rằng yêu cầu ghi dữ liệu đã được gửi.
- busy sẽ được thiết lập thành mức cao khi bộ điều khiển bộ nhớ SDRAM xác nhận nhận yêu cầu đọc hoặc
ghi dữ liệu. busy sẽ được thiết lập thành mức thấp khi quá trình đọc hoặc ghi dữ liệu đã hoàn thành.
- rd_ready sẽ được thiết lập thành mức cao khi dữ liệu cần đọc sẵn sàng trên bus dữ liệu (data bus).
Lưu ý rằng, để bảo vệ khỏi trường hợp bộ điều khiển bộ nhớ SDRAM nhận yêu cầu thêm khi vẫn còn trong
quá trình xử lý yêu cầu trước đó, khi thực hiện đọc hoặc ghi đơn lẻ, cần thiết lập rd_enable và wr_enable
thành mức thấp sau khi đã quan sát được tín hiệu busy được thiết lập thành mức cao.
Sơ đồ khối
DE0 Nano Interface là một module giao tiếp trên board DE0 Nano, cung cấp các
cổng giao tiếp để kết nối với các thiết bị khác như máy tính, cảm biến, đầu vào/đầu ra
analog và kỹ thuật số khác. Module này gồm các cổng sau:
Button_n: đây là đầu vào của nút nhấn, hoạt động ở mức thấp
rst_n: đầu vào của tín hiệu reset, hoạt động ở mức thấp
Haddr [HADDR_WITDH 1:0]: đầu ra của địa chỉ, được nối đến bộ điều khiển Sdram
rd_enable: tín hiệu cho phép kích hoạt chức năng đọc từ Sdram
rd_rdy: là tín hiệu đánh giá xem Sdram đã sẵn sàng để đọc hay chưa
wr_data [15:0]: đầu ra của dữ liệu để ghi vào bộ điều khiển Sdram
wr_enable: tín hiệu nhắm kích hoạt chức năng ghi vào Sdram
busy: đánh giá xem bộ điều khiển Sdram có đang hoạt động hay không
pl_1m và pl_100m
4Gồm
Inclk0
c0
Pll_100m
Module pll_100m là một mô-đun PLL (Phased-Locked Loop) được sử dụng để tạo ra
một tín hiệu clock với tần số 100MHz từ một tín hiệu clock đầu vào (inclk0).
Pll_1m
Là module tạo ra tín hiệu xung clock với tần số 1MHz từ tín hiệu đầu vào (inclk0)
FIFO
Wr: tín hiệu đầu vào cho phép ghi. Khi nó ở mức cao thì dữ liệu đầu vào ghi sẽ được ghi vào FIFO
Rd: tín hiệu cho phép đọc, hoạt động ở mức cao (một phần tử trong FIFO sẽ được đọc ra)
Full: tín hiệu báo đầu, ở mức thấp, đầu vào sẽ không thể ghi thêm dữ liệu vào FIFO
Empty_n: tín hiệu đầu ra cho biết FIFO đã trống, hoạt động ở mức thấp (đầu ra không thể đọc dữ liệu từ
FIFO)
Clkout: xung đồng hồ cho đầu ra đọc (đồng bộ hóa dữ liệu đầu ra)
Sdram_controller
Module SDRAM_controller trên board DE0 Nano là một module điều khiển bộ nhớ
SDRAM (Synchronous Dynamic Random Access Memory), đảm bảo việc truy xuất
và lưu trữ dữ liệu trên SDRAM được thực hiện một cách chính xác và hiệu quả.
Module này có chức năng điều khiển các tín hiệu đồng hồ, điều khiển địa chỉ và điều
khiển dữ liệu để truy xuất dữ liệu từ bộ nhớ SDRAM.
wr_add [HADDR_WITDH 1:0]: đầu vào nhận địa chỉ hoạt động ghi từ máy chủ, độ rộng 2 bit
wr_data [15:0]: nhận dữ liệu đã được ghi vào sdram từ máy chủ
wr_enable: đầu vào cho phéo nhận tín hiệu ghi từ máy chủ
rd_addr [HADDR_WITDH 1:0]: đầu vào nhận địa chỉ hoạt động đọc từ máy chủ, độ rộng 2 bit
rd_enable: đầu vào cho phéo nhận tín hiệu đọc từ máy chủ
rd_ready: đánh giá xem module đã sẵn sàng đọc hay chưa
busy: đánh giá xem module có đang hoạt động hay không
rst_n: khi tín hiệu ở mức thấp, FIFO sẽ được đặt lại giá trị ban đầu
addr [SDRADDR_WITDH 1:0]: gửi địa chỉ hàng và cột của sdram, độ rộng 2 bit
bank_addr [bank_witdth 1:0]: gửi địa chỉ bank của sdram, độ rộng 2 bit
ras_n: đầu ra gửi tín hiệu nhằm đánh dâu địa chỉ hàng
cas_n: đầu ra gửi tín hiệu nhằm đánh dâu địa chỉ cột
we_n: đầu ra gửi tín hiệu cho phép ghi vào sdram
data_mask_low: Chân
đầu ra để gửi nửa dưới của tín hiệu mặt nạ dữ liệu. Tín hiệu này
được sử dụng để chặn byte từ bus dữ liệu trong các hoạt động ghi.
Chân đầu ra để gửi nửa trên của tín hiệu mặt nạ dữ liệu. Tín hiệu này
data_mask_high:
được sử dụng để chặn byte từ bus dữ liệu trong các hoạt động ghi.
Testbench
Test Diagram:
Dnano_interface
Pll_100m
Sdram_controller
C0: cho ngõ ra vào chân clk của Dnano_interface và Sdram_controller, chân DRAM_CLK
Dnano_interface: khối này có nhiệm vụ:
Busy:
Data _output:
Data_input [15:0]
Haddr [23:0]
Liệt kê chân ra, đưa code test bench vào chatgpt để nó giải thích công dụng chân