Forum: FPGA, VHDL & Co. Eine RAM-Lösung im Modul für Verilog


von peter (Gast)


Lesenswert?

Hallo, guten Tag.
Ich möchte bitte dieses RAM als Modul einbauen, um die Inputs 
(address,data,cs,we,oe)
nicht vom DE1-Pin zu steuern sondern von wire oder reg.
Habe schon einige Versuche gemacht, aber das RAM wird dann nicht von den 
"Total memory bits"
im "Flow Summary" angezeigt, da steht denn "0" als verbrauch drin statt 
zb 65000 .
Das RAM wird aber im RTL-Viewer als Bild erstellt.
Was für eine Lösung gibt es dafür?

Danke.
Gruss
1
module ram_sp_sr_sw (
2
clk         , // Clock Input
3
address     , // Address Input
4
data        , // Data bi-directional
5
cs          , // Chip Select
6
we          , // Write Enable/Read Enable
7
oe            // Output Enable
8
); 
9
10
parameter DATA_WIDTH = 8 ;
11
parameter ADDR_WIDTH = 13 ;
12
parameter RAM_DEPTH = 1 << ADDR_WIDTH;
13
14
//--------------Input Ports----------------------- 
15
input                  clk         ;
16
input [ADDR_WIDTH-1:0] address     ;
17
input                  cs          ;
18
input                  we          ;
19
input                  oe          ; 
20
21
//--------------Inout Ports----------------------- 
22
inout [DATA_WIDTH-1:0]  data       ;
23
24
//--------------Internal variables---------------- 
25
reg [DATA_WIDTH-1:0] data_out ;
26
reg [DATA_WIDTH-1:0] mem [0:RAM_DEPTH-1];
27
reg                  oe_r;
28
29
//--------------Code Starts Here------------------ 
30
31
// Tri-State Buffer control 
32
// output : When we = 0, oe = 1, cs = 1
33
assign data = (cs && oe && !we) ? data_out : 8'bz; 
34
35
// Memory Write Block 
36
// Write Operation : When we = 1, cs = 1
37
always @ (posedge clk)
38
begin : MEM_WRITE
39
   if ( cs && we ) begin
40
       mem[address] = data;
41
   end
42
end
43
44
// Memory Read Block 
45
// Read Operation : When we = 0, oe = 1, cs = 1
46
always @ (posedge clk)
47
begin : MEM_READ
48
  if (cs && !we && oe) begin
49
    data_out = mem[address];
50
    oe_r = 1;
51
  end else begin
52
    oe_r = 0;
53
  end
54
end
55
56
endmodule


Dieses ist dann der Start, welches das Modul dann die Variablen usw 
übergibt:
1
module ram_sp_sr_sw_modul(
2
  input clk,         
3
  );
4
5
....address     
6
....data        
7
....cs          
8
....we         
9
....oe            
10
11
ram_sp_sr_sw U(
12
  .clk(clk),
13
  .data(data),
14
  .address(address),
15
  .cs(cs),
16
  .we(we),
17
  .oe(oe)
18
  );
19
endmodule

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.