-
Notifications
You must be signed in to change notification settings - Fork 47
/
Copy pathql-bram-asymmetric-wider-write.pmg
65 lines (57 loc) · 1.8 KB
/
ql-bram-asymmetric-wider-write.pmg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
pattern ql_bram_asymmetric_wider_write
state <SigSpec> mem_rd_data
state <SigSpec> mem_rd_addr
state <SigSpec> mem_wr_data
state <SigSpec> mem_wr_addr
state <SigSpec> mem_wr_en
state <SigSpec> rd_data_shift_y
state <SigSpec> rd_data_ff_q
state <SigSpec> rd_data_ff_en
state <SigSpec> rd_data_ff_clk
state <SigSpec> wr_addr_ff_d
state <SigSpec> wr_en_mux_s
state <SigSpec> rd_addr_and_a
state <SigSpec> rd_addr_and_b
match mem
select mem->type == ($mem_v2)
// 2 because it is a primary output connected to one cell (rq port or $shiftx cell)
select nusers(port(mem, \RD_DATA)) == 2
set mem_rd_data port(mem, \RD_DATA)
set mem_rd_addr port(mem, \RD_ADDR)
set mem_wr_data port(mem, \WR_DATA)
set mem_wr_addr port(mem, \WR_ADDR)
set mem_wr_en port(mem, \WR_EN)
endmatch
match rd_data_shift
select rd_data_shift->type.in($shiftx)
index <SigSpec> port(rd_data_shift, \A) === mem_rd_data
set rd_data_shift_y port(rd_data_shift, \Y)
endmatch
match rd_data_ff
select rd_data_ff->type.in($dffe)
select nusers(port(rd_data_ff, \D)) == 2
index <SigSpec> port(rd_data_ff, \D) === rd_data_shift_y
set rd_data_ff_q port(rd_data_ff, \Q)
set rd_data_ff_en port(rd_data_ff, \EN)
set rd_data_ff_clk port(rd_data_ff, \CLK)
endmatch
match wr_addr_ff
select wr_addr_ff->type.in($dff)
select nusers(port(wr_addr_ff, \Q)) == 2
index <SigSpec> port(wr_addr_ff, \Q) === mem_wr_addr
set wr_addr_ff_d port(wr_addr_ff, \D)
optional
endmatch
match wr_en_mux
select wr_en_mux->type.in($mux)
index <SigSpec> port(wr_en_mux, \Y) === mem_wr_en[0]
set wr_en_mux_s port(wr_en_mux, \S)
endmatch
match rd_addr_and
select rd_addr_and->type.in($and)
set rd_addr_and_a port(rd_addr_and, \A)
set rd_addr_and_b port(rd_addr_and, \B)
endmatch
code
accept;
endcode