Hi,
I’m trying to implement a RAM model as below…
10 address decodes 4 RAMs(8x8)and each RAM enabled/disabled.
I’m getting interface issue…
someone help me on this…
mem_if
interface mem_if ();
// typedef enum {WRITE,READ} rw_t;
logic reset;
logic clock;
logic enable;
logic [7:0] addr;
logic [7:0] data;
//rw_t rwn;
logic rwn;
endinterface
RAM
module RAM (mem_if MemBus);
logic [7:0] mem[0:255];
always @ (negedge MemBus.reset or posedge MemBus.clock or MemBus.enable)
begin
if (MemBus.enable)begin
if (~MemBus.reset)
MemBus.data = 8'bz;
else begin
if (MemBus.rwn)
MemBus.data = mem[MemBus.addr];
else
mem[MemBus.addr] = MemBus.data;
end
end
end
endmodule
mem_cntrl_if
interface mem_ctrl_if ();
// typedef enum {WRITE,READ} rw_t;
logic Reset;
logic Clock;
logic [9:0] Addr;
logic [7:0] Data;
// rw_t RWn;
logic RWn;
// modport mem_if (input Reset,Clock,Enable,RWn, input logic [7:0] Addr,inout logic [7:0] Data);
endinterface
mem_ctrl
module mem_ctrl (mem_ctrl_if ctrl_if);
logic [3:0] Enable;
//instantiate interfaces
mem_if mem0if(.reset (ctrl_if.Reset), .clock (ctrl_if.Clock), .enable (Enable[0]), .addr (ctrl_if.Addr[7:0]),.data (ctrl_if.Data),.rwn (ctrl_if.RWn));
mem_if mem1if(.reset (ctrl_if.Reset), .clock (ctrl_if.Clock), .enable (Enable[1]), .addr (ctrl_if.Addr[7:0]),.data (ctrl_if.Data),.rwn (ctrl_if.RWn));
mem_if mem2if(.reset (ctrl_if.Reset), .clock (ctrl_if.Clock), .enable (Enable[2]), .addr (ctrl_if.Addr[7:0]),.data (ctrl_if.Data),.rwn (ctrl_if.RWn));
mem_if mem3if(.reset (ctrl_if.Reset), .clock (ctrl_if.Clock), .enable (Enable[3]), .addr (ctrl_if.Addr[7:0]),.data (ctrl_if.Data),.rwn (ctrl_if.RWn));
//Enable Memory based on [9:8] bits at Addr
assign Enable[0] = (ctrl_if.Addr[9:8] == 2'b00) ? 1'b1 : 1'b0;
assign Enable[1] = (ctrl_if.Addr[9:8] == 2'b01) ? 1'b1 : 1'b0;
assign Enable[2] = (ctrl_if.Addr[9:8] == 2'b10) ? 1'b1 : 1'b0;
assign Enable[3] = (ctrl_if.Addr[9:8] == 2'b11) ? 1'b1 : 1'b0;
//instantiate RAMs
RAM ram0 (.MemBus (mem0if));
RAM ram1 (.MemBus (mem1if));
RAM ram2 (.MemBus (mem2if));
RAM ram3 (.MemBus (mem3if));
endmodule
Getting Error as below…
Caching library ‘worklib’ … Done
Elaborating the design hierarchy:
mem_if mem0if(.reset (ctrl_if.Reset), .clock (ctrl_if.Clock), .enable (Enable[0]), .addr (ctrl_if.Addr[7:0]),.data (ctrl_if.Data),.rwn (ctrl_if.RWn));
|
ncelab: *E,CUVPOM (./mem_ctrl.sv,7|20): Port name ‘reset’ is invalid or has multiple connections.
mem_if mem0if(.reset (ctrl_if.Reset), .clock (ctrl_if.Clock), .enable (Enable[0]), .addr (ctrl_if.Addr[7:0]),.data (ctrl_if.Data),.rwn (ctrl_if.RWn));
|
ncelab: *E,CUVPOM (./mem_ctrl.sv,7|44): Port name ‘clock’ is invalid or has multiple connections.
mem_if mem0if(.reset (ctrl_if.Reset), .clock (ctrl_if.Clock), .enable (Enable[0]), .addr (ctrl_if.Addr[7:0]),.data (ctrl_if.Data),.rwn (ctrl_if.RWn));