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