Hardware Reference
In-Depth Information
77
//FSM state register:
78
always_ff @(posedge clk, posedge rst)
79
if (rst) pr_state <= idle;
80
else pr_state <= nx_state;
81
82
//FSM combinational logic:
83
always_comb begin
84
case (pr_state)
85
idle: begin
86
A <= 0;
87
WEn <= 1'b1;
88
done_wr <= 1'b1;
89
done_rd <= 1'b1;
90
tmax <= 0;
91
if (wr & ~rd) nx_state <= write1;
92
else if (~wr & rd) nx_state <= read1;
93
else nx_state <= idle;
94
end
95
write1: begin
96
A <= A_reg;
97
WEn <= 1'b0;
98
done_wr <= 1'b0;
99
done_rd <= 1'b1;
100
tmax <= 0;
101
nx_state <= write2;
102
end
103
write2: begin
104
A <= A_reg + 1;
105
WEn <= 1'b1;
106
done_wr <= 1'b0;
107
done_rd <= 1'b1;
108
tmax <= 0;
109
if (A <= Amax) nx_state <= write1;
110
else nx_state <= hold;
111
end
112
read1: begin
113
A <= A_reg;
114
WEn <= 1'b1;
115
done_wr <= 1'b1;
116
done_rd <= 1'b0;
117
tmax <= Tread;
118
if (t>=tmax) nx_state <= read2;
119
else nx_state <= read1;
120
end
121
read2: begin
122
A <= A_reg + 1;
123
WEn <= 1'b1;
124
done_wr <= 1'b1;
125
done_rd <= 1'b0;
126
tmax <= 0;
127
if (A <= Amax) nx_state <= read1;
128
else nx_state <= hold;
129
end
130
hold: begin
131
A <= 0;
132
WEn <= 1'b1;
133
done_wr <= 1'b1;
Search WWH ::




Custom Search