-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathquiz_13.v
More file actions
110 lines (82 loc) · 1.39 KB
/
quiz_13.v
File metadata and controls
110 lines (82 loc) · 1.39 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
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
module quiz_13(
clk,
PB_in,
data_in,
ROM_RDY,
valid_out,
value_valid
);
input clk;
input PB_in;
input [15:0]data_in;
input ROM_RDY;
output [15:0] valid_out;
output value_valid;
reg[1:0] PS, NS;
reg[4:0] counter_reg, counter_sig;
reg wea = 0;
reg ena = 0;
reg enb = 0;
reg [1:0] addra = 0;
reg [1:0] addrb = 0;
reg [15:0] dia = 0;
wire [15:0] doa = 0;
wire [15:0] dob = 0;
/*instantiate memory here..*/
// make connections...
v_ram ram (
.clka(clk),
.clkb(clk),
.wea(wea),
.ena(ena),
.enb(enb),
.addra(addra),
.addrb(addrb),
.dia(dia),
.doa(doa),
.dob(dob)
);
parameter INIT_ST = 0;
parameter START_ST = 1;
parameter ST_1 = 2;
parameter ST_2 = 3;
parameter ST_3 = 4;
always @(posedge clk) begin
PS <= NS;
counter_reg <= counter_sig;
addra <= counter_sig;
addrb <= counter_reg;
end
always @(*) begin
// default assignment goes here..
counter_sig = 0;
NS = 0;
case (PS)
INIT_ST: begin
counter_sig = counter_sig + 1;
if (counter_reg <= 4)
NS = INIT_ST;
else
NS = START_ST;
end
START_ST: begin
counter_sig = 0;
NS = START_ST;
end
endcase
end
/*Always block for writing to the memory*/
always @(posedge clk) begin
if (PS == INIT_ST) begin
ena <= 1;
wea <= 1;
dia <= data_in;
addra <= addra + 1;
end
else begin
ena <= 0;
wea <= 0;
end
end
/*Always block for reading from the memory*/
endmodule