source: ReferenceDesigns/w3_802.11/sysgen/wlan_phy_rx_pmd/blackboxes/bit_match_ram.v

Last change on this file was 6151, checked in by murphpo, 7 years ago

Redesigned DSSS Rx frontend for better synchronization performance at mid-to-low SNR

File size: 4.2 KB
Line 
1module bit_match_ram (
2  clk,
3  ce,
4
5  bit_in,
6  bit_in_wr_en,
7 
8  addr_a,
9  addr_b,
10 
11  dout_a,
12  dout_b
13);
14
15//Sysgen blackboxes must have clk and ce ports
16// VHDL wrapper uses std_logic for these signals
17input clk;
18input ce;
19
20// Sysgen instantiates this module in a VHDL wrapper. The wrapper uses std_logic_vector(0:0) signals
21//  to connect to this module's ports. It's *very* important the scalar I/O below have dimensions [0:0].
22//  Without these XST bizarrely decides no connection is made and optimizes out the RAM block.
23// Using Sysgen's "port.useHDLVector(false)" in the config.m would probably achieve the same thing.
24
25input  [0:0] bit_in;
26input  [0:0] bit_in_wr_en;
27
28input [14:0] addr_a;
29input [14:0] addr_b;
30
31output [31:0] dout_a;
32output [31:0] dout_b;
33
34(* box_type = "black_box" *)
35bit_match_ram_blkmemgen ram_inst (
36    .clka(clk),
37    .clkb(clk),
38   
39    .dina(bit_in),
40    .dinb(1'b0),
41
42    .wea(bit_in_wr_en),
43    .web(1'b0),
44
45    .addra(addr_a),
46    .addrb(addr_b),
47   
48    .douta(dout_a),
49    .doutb(dout_b)
50);
51
52endmodule
53
54
55module bit_match_ram_blkmemgen(
56  clka,
57  wea,
58  addra,
59  dina,
60  douta,
61  clkb,
62  web,
63  addrb,
64  dinb,
65  doutb
66);
67
68input clka;
69input [0 : 0] wea;
70input [14 : 0] addra;
71input [0 : 0] dina;
72output [31 : 0] douta;
73input clkb;
74input [0 : 0] web;
75input [14 : 0] addrb;
76input [0 : 0] dinb;
77output [31 : 0] doutb;
78
79// synthesis translate_off
80
81  BLK_MEM_GEN_V7_3 #(
82    .C_ADDRA_WIDTH(15),
83    .C_ADDRB_WIDTH(15),
84    .C_ALGORITHM(1),
85    .C_AXI_ID_WIDTH(4),
86    .C_AXI_SLAVE_TYPE(0),
87    .C_AXI_TYPE(1),
88    .C_BYTE_SIZE(9),
89    .C_COMMON_CLK(1),
90    .C_DEFAULT_DATA("0"),
91    .C_DISABLE_WARN_BHV_COLL(0),
92    .C_DISABLE_WARN_BHV_RANGE(0),
93    .C_ENABLE_32BIT_ADDRESS(0),
94    .C_FAMILY("virtex6"),
95    .C_HAS_AXI_ID(0),
96    .C_HAS_ENA(0),
97    .C_HAS_ENB(0),
98    .C_HAS_INJECTERR(0),
99    .C_HAS_MEM_OUTPUT_REGS_A(0),
100    .C_HAS_MEM_OUTPUT_REGS_B(0),
101    .C_HAS_MUX_OUTPUT_REGS_A(0),
102    .C_HAS_MUX_OUTPUT_REGS_B(0),
103    .C_HAS_REGCEA(0),
104    .C_HAS_REGCEB(0),
105    .C_HAS_RSTA(0),
106    .C_HAS_RSTB(0),
107    .C_HAS_SOFTECC_INPUT_REGS_A(0),
108    .C_HAS_SOFTECC_OUTPUT_REGS_B(0),
109    .C_INIT_FILE("BlankString"),
110    .C_INIT_FILE_NAME("no_coe_file_loaded"),
111    .C_INITA_VAL("0"),
112    .C_INITB_VAL("0"),
113    .C_INTERFACE_TYPE(0),
114    .C_LOAD_INIT_FILE(0),
115    .C_MEM_TYPE(2),
116    .C_MUX_PIPELINE_STAGES(0),
117    .C_PRIM_TYPE(1),
118    .C_READ_DEPTH_A(1024),
119    .C_READ_DEPTH_B(1024),
120    .C_READ_WIDTH_A(32),
121    .C_READ_WIDTH_B(32),
122    .C_RST_PRIORITY_A("CE"),
123    .C_RST_PRIORITY_B("CE"),
124    .C_RST_TYPE("SYNC"),
125    .C_RSTRAM_A(0),
126    .C_RSTRAM_B(0),
127    .C_SIM_COLLISION_CHECK("ALL"),
128    .C_USE_BRAM_BLOCK(0),
129    .C_USE_BYTE_WEA(0),
130    .C_USE_BYTE_WEB(0),
131    .C_USE_DEFAULT_DATA(0),
132    .C_USE_ECC(0),
133    .C_USE_SOFTECC(0),
134    .C_WEA_WIDTH(1),
135    .C_WEB_WIDTH(1),
136    .C_WRITE_DEPTH_A(32768),
137    .C_WRITE_DEPTH_B(32768),
138    .C_WRITE_MODE_A("WRITE_FIRST"),
139    .C_WRITE_MODE_B("WRITE_FIRST"),
140    .C_WRITE_WIDTH_A(1),
141    .C_WRITE_WIDTH_B(1),
142    .C_XDEVICEFAMILY("virtex6")
143  )
144  inst (
145    .CLKA(clka),
146    .WEA(wea),
147    .ADDRA(addra),
148    .DINA(dina),
149    .DOUTA(douta),
150    .CLKB(clkb),
151    .WEB(web),
152    .ADDRB(addrb),
153    .DINB(dinb),
154    .DOUTB(doutb),
155    .RSTA(),
156    .ENA(),
157    .REGCEA(),
158    .RSTB(),
159    .ENB(),
160    .REGCEB(),
161    .INJECTSBITERR(),
162    .INJECTDBITERR(),
163    .SBITERR(),
164    .DBITERR(),
165    .RDADDRECC(),
166    .S_ACLK(),
167    .S_ARESETN(),
168    .S_AXI_AWID(),
169    .S_AXI_AWADDR(),
170    .S_AXI_AWLEN(),
171    .S_AXI_AWSIZE(),
172    .S_AXI_AWBURST(),
173    .S_AXI_AWVALID(),
174    .S_AXI_AWREADY(),
175    .S_AXI_WDATA(),
176    .S_AXI_WSTRB(),
177    .S_AXI_WLAST(),
178    .S_AXI_WVALID(),
179    .S_AXI_WREADY(),
180    .S_AXI_BID(),
181    .S_AXI_BRESP(),
182    .S_AXI_BVALID(),
183    .S_AXI_BREADY(),
184    .S_AXI_ARID(),
185    .S_AXI_ARADDR(),
186    .S_AXI_ARLEN(),
187    .S_AXI_ARSIZE(),
188    .S_AXI_ARBURST(),
189    .S_AXI_ARVALID(),
190    .S_AXI_ARREADY(),
191    .S_AXI_RID(),
192    .S_AXI_RDATA(),
193    .S_AXI_RRESP(),
194    .S_AXI_RLAST(),
195    .S_AXI_RVALID(),
196    .S_AXI_RREADY(),
197    .S_AXI_INJECTSBITERR(),
198    .S_AXI_INJECTDBITERR(),
199    .S_AXI_SBITERR(),
200    .S_AXI_DBITERR(),
201    .S_AXI_RDADDRECC()
202  );
203
204// synthesis translate_on
205endmodule
Note: See TracBrowser for help on using the repository browser.