Professional Documents
Culture Documents
Fpga元件導論 1111116 Ram
Fpga元件導論 1111116 Ram
9911 -1-
隨機存取記憶體 (RAM) 、唯讀記憶體 (ROM)。
9911 -2-
8個字組,每個字組有8個位元的隨機存取記憶體
// 具有5個字組, 每個字組有8個位元的記憶體模組
module ram_w5_bit8(CS, RW, Address, Data_In, Data_Out);
parameter Words = 5;
input CS, RW;
input [2:0] Address;
input [7:0] Data_In;
output [7:0] Data_Out;
reg [7:0] RAM_Data[Words-1:0];
reg [7:0] Data_Out;
always @(negedge CS)
begin // 負緣觸發, 選擇到此晶片
if (RW == 1'b0) // 讀取
Data_Out = RAM_Data[Address[2:0]];
else
if (RW == 1'b1) // 寫入
RAM_Data[Address[2:0]] = Data_In;
else
Data_Out = 8'bz; // 高阻抗 (High Impedance)
end
endmodule
9911 -3-
module RAM_Word6_Bit3 (CS, RW, Address, Data_In, Data_Out);
parameter Words = 6;
input CS, RW;
input [2:0] Address;
input [2:0] Data_In;
output [2:0] Data_Out;
reg [2:0] RAM_Data[Words-1:0];
reg [2:0] Data_Out;
9911 -4-
16*4 的RAM
addr=4bits(16 word)
data_in=4bits if(cs==1) data_out=4'bz
data_out=4bits
else
addr
if(rw==0)
data_out ram[addr]=data_in
4
data_out=4'bz
data_in
ram 4 else
4 16*4 data_out=ram[addr]
cs
rw
寫入
讀出
9911 -5-
module ram_w16_d4(data_out,data_in,cs,rw,addr);
parameter words =16;
input cs,rw;
addr input [3:0] addr;
data_out input [3:0] data_in;
4 output [3:0] data_out;
reg [3:0] ram_data[words-1:0];
data_in
ram 4 reg [3:0] data_out;
讀出
9911 -6-
ram_test
addr
ck ck cout addr data_out
4-bits 4 data_out
counter 4
clr clr
data_in
4 ram
16*4
cs cs
rw rw
9911 -10-
具有16個字組, 每個字組有8個位元的唯讀記憶體
module rom_test (CS, Address, D_Out);
input CS;
input [3:0] Address;
output [7:0] D_Out;
// 使用 16個 6 Bits 的 Register, 來模擬 ROM
reg [7:0] ROM_Data[15:0];
9911 -11-
if (cs==0) data_out= (Address)
else data_out= Z;
9911 -12-
請自訂一個 rom 的資料,設計一電路執行位址奇偶相鄰的 rom
data 相加後存到 ram,,最後,讀出 ram data 確認有寫入與相加結
果是對的(ram data 至少需存入 2 筆)
9911 -13-