aboutsummaryrefslogtreecommitdiff
path: root/test/passes/infer-widths/shr.fir
blob: 67b6896ee59242c09a731d2664af99e9b64dd278 (plain)
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
; RUN: firrtl -i %s -o %s.v -X verilog -p c 2>&1 | tee %s.out | FileCheck %s

;CHECK: Infer Widths
; CHECK: Finished Infer Widths

circuit MemSerdes : 
  module MemSerdes : 
    input clock : Clock
    input reset : UInt<1>
    input wide : {req_cmd : {flip ready : UInt<1>, valid : UInt<1>, bits : {addr : UInt<26>, tag : UInt<7>, rw : UInt<1>}}, req_data : {flip ready : UInt<1>, valid : UInt<1>, bits : {data : UInt<128>}}, flip resp : {flip ready : UInt<1>, valid : UInt<1>, bits : {data : UInt<128>, tag : UInt<7>}}}
    output narrow : {req : {flip ready : UInt<1>, valid : UInt<1>, bits : UInt<16>}, flip resp : {valid : UInt<1>, bits : UInt<16>}}
    
    wide.resp.bits.tag <= UInt<1>("h00")
    wide.resp.bits.data <= UInt<1>("h00")
    wide.resp.valid <= UInt<1>("h00")
    wide.req_data.ready <= UInt<1>("h00")
    wide.req_cmd.ready <= UInt<1>("h00")
    narrow.req.bits <= UInt<1>("h00")
    narrow.req.valid <= UInt<1>("h00")
    
    node T_218961 = cat(wide.req_cmd.bits.tag, wide.req_cmd.bits.rw)
    node T_218962 = cat(wide.req_cmd.bits.addr, T_218961)
    reg out_buf : UInt, clock, reset, out_buf
    reg in_buf : UInt, clock, reset, in_buf
    reg state : UInt<3>, clock, reset,UInt<3>("h00")
    reg send_cnt : UInt<3>, clock, reset, UInt<3>("h00")
    reg data_send_cnt : UInt<2>, clock, reset, UInt<2>("h00")
    node T_218984 = eq(send_cnt, UInt<2>("h02"))
    node adone = and(narrow.req.ready, T_218984)
    node T_218987 = eq(send_cnt, UInt<3>("h07"))
    node ddone = and(narrow.req.ready, T_218987)
    
    node T_218989 = and(narrow.req.valid, narrow.req.ready)
    when T_218989 : 
      node T_218991 = addw(send_cnt, UInt<1>("h01"))
      send_cnt <= T_218991
      node T_218992 = shr(out_buf, 16)
      out_buf <= T_218992
    
    node T_218993 = and(wide.req_cmd.valid, wide.req_cmd.ready)
    when T_218993 : 
      node T_218994 = cat(wide.req_cmd.bits.tag, wide.req_cmd.bits.rw)
      node T_218995 = cat(wide.req_cmd.bits.addr, T_218994)
      out_buf <= T_218995
    
    node T_218996 = and(wide.req_data.valid, wide.req_data.ready)
    when T_218996 : out_buf <= wide.req_data.bits.data
    node T_218997 = eq(state, UInt<3>("h00"))
    wide.req_cmd.ready <= T_218997
    node T_218998 = eq(state, UInt<3>("h03"))
    wide.req_data.ready <= T_218998
    node T_218999 = eq(state, UInt<3>("h01"))
    node T_219000 = eq(state, UInt<3>("h02"))
    node T_219001 = or(T_218999, T_219000)
    node T_219002 = eq(state, UInt<3>("h04"))
    node T_219003 = or(T_219001, T_219002)
    narrow.req.valid <= T_219003
    narrow.req.bits <= out_buf
    
    
    node T_219004 = eq(state, UInt<3>("h00"))
    node T_219005 = and(T_219004, wide.req_cmd.valid)
    when T_219005 : 
      node T_219006 = mux(wide.req_cmd.bits.rw, UInt<3>("h02"), UInt<3>("h01"))
      state <= T_219006
    
    
    node T_219007 = eq(state, UInt<3>("h01"))
    node T_219008 = and(T_219007, adone)
    when T_219008 : 
      state <= UInt<3>("h00")
      send_cnt <= UInt<1>("h00")
    
    
    node T_219010 = eq(state, UInt<3>("h02"))
    node T_219011 = and(T_219010, adone)
    when T_219011 : 
      state <= UInt<3>("h03")
      send_cnt <= UInt<1>("h00")
    
    
    node T_219013 = eq(state, UInt<3>("h03"))
    node T_219014 = and(T_219013, wide.req_data.valid)
    when T_219014 : state <= UInt<3>("h04")
    
    
    node T_219015 = eq(state, UInt<3>("h04"))
    node T_219016 = and(T_219015, ddone)
    when T_219016 : 
      node T_219018 = addw(data_send_cnt, UInt<1>("h01"))
      data_send_cnt <= T_219018
      node T_219020 = eq(data_send_cnt, UInt<2>("h03"))
      node T_219021 = mux(T_219020, UInt<3>("h00"), UInt<3>("h03"))
      state <= T_219021
      send_cnt <= UInt<1>("h00")
    reg recv_cnt : UInt<4>, clock, reset, UInt<4>("h00")
    reg data_recv_cnt : UInt<2>, clock, reset, UInt<2>("h00")
    reg resp_val : UInt<1>, clock, reset, UInt<1>("h00")
    resp_val <= UInt<1>("h00")
    when narrow.resp.valid : 
      node T_219031 = addw(recv_cnt, UInt<1>("h01"))
      recv_cnt <= T_219031
      
      node T_219033 = eq(recv_cnt, UInt<4>("h08"))
      when T_219033 : 
        recv_cnt <= UInt<1>("h00")
        node T_219036 = addw(data_recv_cnt, UInt<1>("h01"))
        data_recv_cnt <= T_219036
        resp_val <= UInt<1>("h01")
      node T_219038 = bits(in_buf, 143, 16)
      node T_219039 = cat(narrow.resp.bits, T_219038)
      in_buf <= T_219039
    wide.resp.valid <= resp_val
    wire T_219043 : {data : UInt<128>, tag : UInt<7>}
    T_219043.tag <= UInt<1>("h00")
    T_219043.data <= UInt<1>("h00")
    node T_219048 = bits(in_buf, 6, 0)
    T_219043.tag <= T_219048
    node T_219049 = bits(in_buf, 134, 7)
    T_219043.data <= T_219049
    wide.resp.bits <- T_219043