-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStack.v
More file actions
61 lines (52 loc) · 1.21 KB
/
Stack.v
File metadata and controls
61 lines (52 loc) · 1.21 KB
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
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer: Yuechuan Xue
//
// Create Date: 2015/07/11 09:36:50
// Design Name:
// Module Name: Stack
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module Stack (
input clk,
input push,
input pop,
input [8:0] in,
output [8:0] out
);
// ---------------
// | Stack 2 | <--
// --------------- ^ push
// in = Stack_1_next => | Stack 1 | --> ^
// push push||pop ---------------
// ||
// out
// PUSH:
// in = Stack_1 => Stack_2
// POP:
// Stack_2 => Stack_1 = out
// OTHER:
// Stack_1 = out
reg [8:0] Stack_1, Stack_2;
wire [8:0] Stack_1_next = push ? in : Stack_2;
always @(posedge clk) begin
if (push || pop) Stack_1 <= Stack_1_next;
else Stack_1 <= Stack_1;
end
always @(posedge clk) begin
if (push) Stack_2 <= Stack_1;
else Stack_2 <= Stack_2;
end
assign out = Stack_1;
endmodule