| //**************************************************************************** |
| // |
| // Copyright 2023 Vivante Corp. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| //**************************************************************************** |
| // Auto-generated file on 11/03/2023. |
| // |
| //**************************************************************************** |
| |
| module vsisp_RAM1P320W168B_SS(D,Q,CLK,CEB,WEB,BWEB,A,CLKEN,TESTEN); |
| input [168-1:0] D; |
| output [168-1:0] Q; |
| input CLK; |
| input CEB; |
| input WEB; |
| input [168-1:0] BWEB; |
| input [9-1:0] A; |
| input CLKEN; |
| input TESTEN; |
| `ifdef CG_IN_RAM |
| wire CLK_; |
| vsisp_GC_CG_MOD GC_CG_READ(.enable(CLKEN), .ck_in(CLK), .ck_out(CLK_), .test(TESTEN)); |
| `else |
| wire CLK_ = CLK; |
| `endif |
| reg [168-1:0] mem_core [0:320-1]; |
| wire [168-1:0] temp = mem_core[A]; |
| `ifdef CG_IN_RAM |
| always @(posedge CLK_) |
| `else |
| always @(posedge CLK) |
| `endif |
| if (~WEB & ~CEB) mem_core[A] <= (temp & BWEB) | (D & ~BWEB); |
| wire [168-1:0] QN = mem_core[A]; |
| wire [168-1:0] Q; |
| vsisp_gc_den_reg #(168) QReg (.out(Q), .clk(CLK_), .in(QN), .reset_(1'b1), .en(~CEB & WEB)); |
| `ifdef VIVANTE_COLLECT_TOGGLE_INFO_IN_FLOPS_AND_RAMS |
| `ifdef VIVANTE_SAIF_TRIGGER |
| reg [31:0] clkToggle; |
| reg [31:0] outputToggle; |
| reg [31:0] toggleRegion; |
| integer i; |
| initial begin |
| clkToggle = 0; |
| outputToggle = 0; |
| toggleRegion = 0; |
| end |
| always @(negedge CLK_) begin |
| if(~CEB) begin |
| clkToggle <= clkToggle + 1'b1; |
| if ((QN != Q) & WEB) begin |
| for (i = 0; i <= 168-1; i = i + 1) begin |
| if(QN[i] != Q[i]) begin |
| outputToggle = outputToggle + 1'b1; |
| end |
| end |
| end |
| if(clkToggle[31] | outputToggle[31]) begin |
| $display("ERROR: %m - Toggle counter overflow."); |
| #10000; |
| $finish; |
| end |
| end |
| end |
| initial begin |
| forever begin |
| @(posedge `VIVANTE_SAIF_TRIGGER); |
| $display ("vsisp_RAM1P320W168B_SS TOGGLE: %d : %m : WIDTH: %d, CLK_TOGGLE: %d, OUT_TOGGLE: %d",toggleRegion,168,clkToggle,outputToggle); |
| clkToggle = 0; |
| outputToggle = 0; |
| toggleRegion = toggleRegion + 1; |
| end |
| end |
| `endif |
| `endif |
| endmodule |