-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathproc.v
More file actions
100 lines (92 loc) · 1.88 KB
/
proc.v
File metadata and controls
100 lines (92 loc) · 1.88 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
// set the opcodes. this takes the ascii value of
// these keys so a brainfuck program can go straight
// into memory, at the expense of a few bits.
`define INCDP ">"
`define DECDP "<"
`define INCDATA "+"
`define DECDATA "-"
`define OUTONE "."
`define INONE ","
`define CONDJMP "["
`define JMPBACK "]"
module proc (
dataptr , // out: data address
instptr , // out: instruction address
myoutput, // out: output from the program
memwrite, // out: write enable for memory
dataval , // out: new value when mem is written
indata , // the data pointed at
inst , // the instruction pointed at
myin , // data into the program
clk , // clock
reset_ // reset, active low
);
output [7:0] dataptr;
output [7:0] instptr;
output [7:0] myoutput;
output memwrite;
output [7:0] dataval;
input [7:0] indata;
input [7:0] inst;
input [7:0] myin;
input clk;
input reset_;
reg [7:0] data;
reg [7:0] dataptr;
reg [7:0] instptr;
reg [7:0] myoutput;
reg [7:0] dataval;
reg memwrite;
always @(posedge clk)
begin
data=indata;
if (reset_) // run state
begin
memwrite=0;
case (inst)
`INCDP: begin
dataptr=dataptr+1;
instptr=instptr+1;
end
`DECDP: begin
dataptr=dataptr-1; //allows wrapping
instptr=instptr+1;
end
`INCDATA: begin
data=data+1;
dataval=data;
memwrite=1;
instptr=instptr+1;
end
`DECDATA: begin
data=data-1;
dataval=data;
memwrite=1;
instptr=instptr+1;
end
`OUTONE: begin
myoutput=data;
instptr=instptr+1;
end
`INONE: begin
data=myin;
dataval=data;
memwrite=1;
instptr=instptr+1;
end
`CONDJMP: begin
end
`JMPBACK: begin
end
default: begin
instptr=instptr+1;
end
endcase //undefined opcodes not supported
end
else
begin
dataptr=0;
instptr=0;
end
end
endmodule