You are on page 1of 11

Báo cáo cuối kì

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.

Đặc điểm cơ bản:

Operates at 100Mhz, CAS 3, 32MB, 16-bit data

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.

Khi reset sẽ vào quy trình khởi tạo INIT

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ừ đó.

wr_data: Dữ liệu cần ghi vào bộ nhớ SDRAM.

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ừ đó.

cs_n: Tín hiệu chọn chip SDRAM.

rd_enable: Tín hiệu cho phép đọc dữ liệu từ bộ nhớ SDRAM.

ras_n: Tín hiệu đọc dòng trong SDRAM.

rd_data: Dữ liệu được đọc từ bộ nhớ SDRAM.

cas_n: Tín hiệu đọc cột trong SDRAM.

rd_ready: Tín hiệu báo hiệu rằng dữ liệu đã sẵn sàng để đọc từ bộ nhớ SDRAM.

we_n: Tín hiệu ghi dữ liệu vào 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.

rst_n: Tín hiệu đặt lại bộ điều khiển SDRAM.

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

SĐK Top Level

SĐK chi tiết


Dnano-interface

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

Dip [3:0]: đầu vào của 4 công tắc

rst_n: đầu vào của tín hiệu reset, hoạt động ở mức thấp

Clk: ngõ vào xung clock

Leds [7:0]: đầu ra tín hiệu 8 đèn led

Haddr [HADDR_WITDH 1:0]: đầu ra của địa chỉ, được nối đến bộ điều khiển Sdram

rd_data [15:0]: đầu vào của dữ liệu từ 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

rd_ack: tín hiệu xác nhận rằng dữ liệu đã được đọc

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

Datain [BUS_WITH-1:0]: dữ liệu đầu vào để ghi, độ rộng 2 bit

Dataout [BUS_WITH-1:0]: dữ liệu đầu ra để đọc, độ rộng 2 bit

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

Rst_n: tín hiệu reset, hoạt động ở mức thấp


Clkin: xung đồng hồ cho đầu vào ghi (đồng bộ hóa dữ liệu đầu vào)

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

clk: cấp xung clock

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

data [15:0]: Chân


nhập/xuất để gửi và nhận dữ liệu từ và đến thiết bị SDRAM. Độ rộng
của chân này là 16 bit
clock_enable: đầu ra gửi tín hiệu cho phép xung clock

cs_n: đầu ra gửi tín hiệu chọn chip Sdram

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:

Gồm 3 block chính:

Dnano_interface

Pll_100m

Sdram_controller

Pll_100m: khối này có nhiệm vụ:

Inclk0: ngõ vào Clock 50

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:

Button_n: nối với Button bên ngoài

Clk: nhận xung clk từ pll100m

Data _output:

Dip [3:0]: nối chân Dip [3:0]

Rst_n: nối chân reset bên ngoài

Data_input [15:0]

Haddr [23:0]

Leds [7:0]: nối với 7 led bên ngoài

Rd_enable: nối với chân Rd_enable của Sdram_controller, có nhiệm vụ

Wr_enable: nối với chân Wr_enable của Sdram_controller, có nhiệm vụ


Sdram_controller: khối này có nhiệm vụ:

Liệt kê chân ra, đưa code test bench vào chatgpt để nó giải thích công dụng chân

You might also like