k0b0's record.

Computer Engineering, Arts and Books

Introduction to SystemVerilog. ROM and RAM

ROM、RAM

 SystemVerilogでROM、RAMを記述してみる。

ROM(Read Only Memory)

ROM(ROM.sv)

 4ワード3ビットのROMの記述。ROMは組合わせ回路で実現できるためalways_comb文+case文で記述している。

/* rom.sv */
module rom (input  logic [1:0] addr,
            output logic [2:0] dout);

always_comb
begin
    case(addr)
	2'b00 : dout = 3'b111;
	2'b01 : dout = 3'b110;
	2'b10 : dout = 3'b101;
	2'b00 : dout = 3'b001;
    endcase
end
endmodule

RAM(Random Access Memory )

RAM(ram.sv)

 2のN乗ワード、MビットのRAMの記述。always_ff文を用いて記述している。RAMへのデータの書き込みはクロック信号(clk)の立ち上がり時に書き込み許可信号(we)が'1'の場合にのみ行われる。データの読み出しは常時、アドレス信号(addr)が指し示す値が出力される。

/* ram.sv */
module ram #(parameter N = 6, M = 32)
            (input          clk,
	     input          we,
	     input  [N-1:0] addr,
	     input  [M-1:0] data,
	     output [M-1:0] dout);

//Definition of RAM
logic [M-1:0] mem [2**N-1:0];

// Write Data
always_ff @(posedge clk)
begin
    if(we) mem[addr] <= data;
end

//Read Data
assign dout = mem[addr];
endmodule