Skip to content
This repository was archived by the owner on Mar 13, 2024. It is now read-only.

Commit ca109fe

Browse files
committed
simple character generator with character rom
1 parent 33ad4e9 commit ca109fe

File tree

5 files changed

+333
-34
lines changed

5 files changed

+333
-34
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
module chargen (
2+
input clk,
3+
input [7:0] character,
4+
input [2:0] vertcount,
5+
output pixel
6+
);
7+
8+
reg [2:0] index = 0;
9+
wire [7:0] pixels;
10+
11+
assign pixel = pixels[index];
12+
13+
always @(posedge clk) index <= index + 1;
14+
15+
charmem #() character_rom (
16+
.clk(clk),
17+
.addr(character),
18+
.row(vertcount[2:0]),
19+
.pixels(pixels)
20+
);
21+
22+
endmodule
Lines changed: 256 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,256 @@
1+
00 00 00 00 00 00 00 00
2+
00 00 00 00 00 00 00 00
3+
00 00 00 00 00 00 00 00
4+
00 00 00 00 00 00 00 00
5+
00 00 00 00 00 00 00 00
6+
00 00 00 00 00 00 00 00
7+
00 00 00 00 00 00 00 00
8+
00 00 00 00 00 00 00 00
9+
00 00 00 00 00 00 00 00
10+
00 00 00 00 00 00 00 00
11+
00 00 00 00 00 00 00 00
12+
00 00 00 00 00 00 00 00
13+
00 00 00 00 00 00 00 00
14+
00 00 00 00 00 00 00 00
15+
00 00 00 00 00 00 00 00
16+
00 00 00 00 00 00 00 00
17+
00 00 00 00 00 00 00 00
18+
00 00 00 00 00 00 00 00
19+
00 00 00 00 00 00 00 00
20+
00 00 00 00 00 00 00 00
21+
00 00 00 00 00 00 00 00
22+
00 00 00 00 00 00 00 00
23+
00 00 00 00 00 00 00 00
24+
00 00 00 00 00 00 00 00
25+
00 00 00 00 00 00 00 00
26+
00 00 00 00 00 00 00 00
27+
00 00 00 00 00 00 00 00
28+
00 00 00 00 00 00 00 00
29+
00 00 00 00 00 00 00 00
30+
00 00 00 00 00 00 00 00
31+
00 00 00 00 00 00 00 00
32+
00 00 00 00 00 00 00 00
33+
00 00 00 00 00 00 00 00
34+
18 3C 3C 18 18 00 18 00
35+
36 36 00 00 00 00 00 00
36+
36 36 7F 36 7F 36 36 00
37+
0C 3E 03 1E 30 1F 0C 00
38+
00 63 33 18 0C 66 63 00
39+
1C 36 1C 6E 3B 33 6E 00
40+
06 06 03 00 00 00 00 00
41+
18 0C 06 06 06 0C 18 00
42+
06 0C 18 18 18 0C 06 00
43+
00 66 3C FF 3C 66 00 00
44+
00 0C 0C 3F 0C 0C 00 00
45+
00 00 00 00 00 0C 0C 06
46+
00 00 00 3F 00 00 00 00
47+
00 00 00 00 00 0C 0C 00
48+
60 30 18 0C 06 03 01 00
49+
3E 63 73 7B 6F 67 3E 00
50+
0C 0E 0C 0C 0C 0C 3F 00
51+
1E 33 30 1C 06 33 3F 00
52+
1E 33 30 1C 30 33 1E 00
53+
38 3C 36 33 7F 30 78 00
54+
3F 03 1F 30 30 33 1E 00
55+
1C 06 03 1F 33 33 1E 00
56+
3F 33 30 18 0C 0C 0C 00
57+
1E 33 33 1E 33 33 1E 00
58+
1E 33 33 3E 30 18 0E 00
59+
00 0C 0C 00 00 0C 0C 00
60+
00 0C 0C 00 00 0C 0C 06
61+
18 0C 06 03 06 0C 18 00
62+
00 00 3F 00 00 3F 00 00
63+
06 0C 18 30 18 0C 06 00
64+
1E 33 30 18 0C 00 0C 00
65+
3E 63 7B 7B 7B 03 1E 00
66+
0C 1E 33 33 3F 33 33 00
67+
3F 66 66 3E 66 66 3F 00
68+
3C 66 03 03 03 66 3C 00
69+
1F 36 66 66 66 36 1F 00
70+
7F 46 16 1E 16 46 7F 00
71+
7F 46 16 1E 16 06 0F 00
72+
3C 66 03 03 73 66 7C 00
73+
33 33 33 3F 33 33 33 00
74+
1E 0C 0C 0C 0C 0C 1E 00
75+
78 30 30 30 33 33 1E 00
76+
67 66 36 1E 36 66 67 00
77+
0F 06 06 06 46 66 7F 00
78+
63 77 7F 7F 6B 63 63 00
79+
63 67 6F 7B 73 63 63 00
80+
1C 36 63 63 63 36 1C 00
81+
3F 66 66 3E 06 06 0F 00
82+
1E 33 33 33 3B 1E 38 00
83+
3F 66 66 3E 36 66 67 00
84+
1E 33 07 0E 38 33 1E 00
85+
3F 2D 0C 0C 0C 0C 1E 00
86+
33 33 33 33 33 33 3F 00
87+
33 33 33 33 33 1E 0C 00
88+
63 63 63 6B 7F 77 63 00
89+
63 63 36 1C 1C 36 63 00
90+
33 33 33 1E 0C 0C 1E 00
91+
7F 63 31 18 4C 66 7F 00
92+
1E 06 06 06 06 06 1E 00
93+
03 06 0C 18 30 60 40 00
94+
1E 18 18 18 18 18 1E 00
95+
08 1C 36 63 00 00 00 00
96+
00 00 00 00 00 00 00 FF
97+
0C 0C 18 00 00 00 00 00
98+
00 00 1E 30 3E 33 6E 00
99+
07 06 06 3E 66 66 3B 00
100+
00 00 1E 33 03 33 1E 00
101+
38 30 30 3e 33 33 6E 00
102+
00 00 1E 33 3f 03 1E 00
103+
1C 36 06 0f 06 06 0F 00
104+
00 00 6E 33 33 3E 30 1F
105+
07 06 36 6E 66 66 67 00
106+
0C 00 0E 0C 0C 0C 1E 00
107+
30 00 30 30 30 33 33 1E
108+
07 06 66 36 1E 36 67 00
109+
0E 0C 0C 0C 0C 0C 1E 00
110+
00 00 33 7F 7F 6B 63 00
111+
00 00 1F 33 33 33 33 00
112+
00 00 1E 33 33 33 1E 00
113+
00 00 3B 66 66 3E 06 0F
114+
00 00 6E 33 33 3E 30 78
115+
00 00 3B 6E 66 06 0F 00
116+
00 00 3E 03 1E 30 1F 00
117+
08 0C 3E 0C 0C 2C 18 00
118+
00 00 33 33 33 33 6E 00
119+
00 00 33 33 33 1E 0C 00
120+
00 00 63 6B 7F 7F 36 00
121+
00 00 63 36 1C 36 63 00
122+
00 00 33 33 33 3E 30 1F
123+
00 00 3F 19 0C 26 3F 00
124+
38 0C 0C 07 0C 0C 38 00
125+
18 18 18 00 18 18 18 00
126+
07 0C 0C 38 0C 0C 07 00
127+
6E 3B 00 00 00 00 00 00
128+
00 00 00 00 00 00 00 00
129+
00 00 00 00 00 00 00 00
130+
00 00 00 00 00 00 00 00
131+
00 00 00 00 00 00 00 00
132+
00 00 00 00 00 00 00 00
133+
00 00 00 00 00 00 00 00
134+
00 00 00 00 00 00 00 00
135+
00 00 00 00 00 00 00 00
136+
00 00 00 00 00 00 00 00
137+
00 00 00 00 00 00 00 00
138+
00 00 00 00 00 00 00 00
139+
00 00 00 00 00 00 00 00
140+
00 00 00 00 00 00 00 00
141+
00 00 00 00 00 00 00 00
142+
00 00 00 00 00 00 00 00
143+
00 00 00 00 00 00 00 00
144+
00 00 00 00 00 00 00 00
145+
00 00 00 00 00 00 00 00
146+
00 00 00 00 00 00 00 00
147+
00 00 00 00 00 00 00 00
148+
00 00 00 00 00 00 00 00
149+
00 00 00 00 00 00 00 00
150+
00 00 00 00 00 00 00 00
151+
00 00 00 00 00 00 00 00
152+
00 00 00 00 00 00 00 00
153+
00 00 00 00 00 00 00 00
154+
00 00 00 00 00 00 00 00
155+
00 00 00 00 00 00 00 00
156+
00 00 00 00 00 00 00 00
157+
00 00 00 00 00 00 00 00
158+
00 00 00 00 00 00 00 00
159+
00 00 00 00 00 00 00 00
160+
00 00 00 00 00 00 00 00
161+
00 00 00 00 00 00 00 00
162+
00 00 00 00 00 00 00 00
163+
00 00 00 00 00 00 00 00
164+
00 00 00 00 00 00 00 00
165+
00 00 00 00 00 00 00 00
166+
00 00 00 00 00 00 00 00
167+
00 00 00 00 00 00 00 00
168+
00 00 00 00 00 00 00 00
169+
00 00 00 00 00 00 00 00
170+
00 00 00 00 00 00 00 00
171+
00 00 00 00 00 00 00 00
172+
00 00 00 00 00 00 00 00
173+
00 00 00 00 00 00 00 00
174+
00 00 00 00 00 00 00 00
175+
00 00 00 00 00 00 00 00
176+
00 00 00 00 00 00 00 00
177+
00 00 00 00 00 00 00 00
178+
00 00 00 00 00 00 00 00
179+
00 00 00 00 00 00 00 00
180+
00 00 00 00 00 00 00 00
181+
00 00 00 00 00 00 00 00
182+
00 00 00 00 00 00 00 00
183+
00 00 00 00 00 00 00 00
184+
00 00 00 00 00 00 00 00
185+
00 00 00 00 00 00 00 00
186+
00 00 00 00 00 00 00 00
187+
00 00 00 00 00 00 00 00
188+
00 00 00 00 00 00 00 00
189+
00 00 00 00 00 00 00 00
190+
00 00 00 00 00 00 00 00
191+
00 00 00 00 00 00 00 00
192+
00 00 00 00 00 00 00 00
193+
00 00 00 00 00 00 00 00
194+
00 00 00 00 00 00 00 00
195+
00 00 00 00 00 00 00 00
196+
00 00 00 00 00 00 00 00
197+
00 00 00 00 00 00 00 00
198+
00 00 00 00 00 00 00 00
199+
00 00 00 00 00 00 00 00
200+
00 00 00 00 00 00 00 00
201+
00 00 00 00 00 00 00 00
202+
00 00 00 00 00 00 00 00
203+
00 00 00 00 00 00 00 00
204+
00 00 00 00 00 00 00 00
205+
00 00 00 00 00 00 00 00
206+
00 00 00 00 00 00 00 00
207+
00 00 00 00 00 00 00 00
208+
00 00 00 00 00 00 00 00
209+
00 00 00 00 00 00 00 00
210+
00 00 00 00 00 00 00 00
211+
00 00 00 00 00 00 00 00
212+
00 00 00 00 00 00 00 00
213+
00 00 00 00 00 00 00 00
214+
00 00 00 00 00 00 00 00
215+
00 00 00 00 00 00 00 00
216+
00 00 00 00 00 00 00 00
217+
00 00 00 00 00 00 00 00
218+
00 00 00 00 00 00 00 00
219+
00 00 00 00 00 00 00 00
220+
00 00 00 00 00 00 00 00
221+
00 00 00 00 00 00 00 00
222+
00 00 00 00 00 00 00 00
223+
00 00 00 00 00 00 00 00
224+
00 00 00 00 00 00 00 00
225+
00 00 00 00 00 00 00 00
226+
00 00 00 00 00 00 00 00
227+
00 00 00 00 00 00 00 00
228+
00 00 00 00 00 00 00 00
229+
00 00 00 00 00 00 00 00
230+
00 00 00 00 00 00 00 00
231+
00 00 00 00 00 00 00 00
232+
00 00 00 00 00 00 00 00
233+
00 00 00 00 00 00 00 00
234+
00 00 00 00 00 00 00 00
235+
00 00 00 00 00 00 00 00
236+
00 00 00 00 00 00 00 00
237+
00 00 00 00 00 00 00 00
238+
00 00 00 00 00 00 00 00
239+
00 00 00 00 00 00 00 00
240+
00 00 00 00 00 00 00 00
241+
00 00 00 00 00 00 00 00
242+
00 00 00 00 00 00 00 00
243+
00 00 00 00 00 00 00 00
244+
00 00 00 00 00 00 00 00
245+
00 00 00 00 00 00 00 00
246+
00 00 00 00 00 00 00 00
247+
00 00 00 00 00 00 00 00
248+
00 00 00 00 00 00 00 00
249+
00 00 00 00 00 00 00 00
250+
00 00 00 00 00 00 00 00
251+
00 00 00 00 00 00 00 00
252+
00 00 00 00 00 00 00 00
253+
00 00 00 00 00 00 00 00
254+
00 00 00 00 00 00 00 00
255+
00 00 00 00 00 00 00 00
256+
00 00 00 00 00 00 00 00
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
module charmem (
2+
input clk,
3+
input [7:0] addr,
4+
input [2:0] row,
5+
output reg [7:0] pixels
6+
);
7+
8+
reg [7:0] chars[255:0][7:0];
9+
10+
initial $readmemh("charmem.txt", chars, 0);
11+
12+
always @(posedge clk) begin
13+
pixels <= chars[addr][row];
14+
end
15+
16+
endmodule

peripherals/jml-8-mini-vga/src/signalgen.v

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,24 @@
44
module signalgen (
55
input clk,
66

7-
output vsync,
8-
output hsync
9-
);
7+
output vsync,
8+
output hsync,
9+
output visible,
10+
output reg [9:0] vertcount = 0,
11+
output reg [9:0] horicount = 0
1012

11-
reg [9:0] vertical_count = 0;
12-
reg [9:0] horizontal_count = 0;
13+
);
1314

14-
assign hsync = (horizontal_count < 656 || horizontal_count >= 752);
15-
assign vsync = (vertical_count < 490 || vertical_count >= 492);
15+
assign hsync = (horicount < 656 || horicount >= 752);
16+
assign vsync = (vertcount < 490 || vertcount >= 492);
17+
assign visible = (horicount < 640 && vertcount < 480);
1618

1719
always @(posedge clk) begin
18-
if (horizontal_count == 799) begin
19-
horizontal_count <= 0;
20-
if (vertical_count == 524) vertical_count <= 0;
21-
else vertical_count <= vertical_count + 1;
22-
end else horizontal_count <= horizontal_count + 1;
20+
if (horicount == 799) begin
21+
horicount <= 0;
22+
if (vertcount == 524) vertcount <= 0;
23+
else vertcount <= vertcount + 1;
24+
end else horicount <= horicount + 1;
2325
end
2426

2527
endmodule

peripherals/jml-8-mini-vga/src/toplevel.v

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,33 +9,36 @@ module toplevel (
99
output lum
1010
);
1111

12-
reg [9:0] hori_counter = 0;
13-
reg [5:0] quart_counter = 0;
14-
reg [3:0] counter = 0;
12+
wire pixel;
13+
wire visible;
14+
reg [7:0] character = 65;
15+
wire [9:0] vertcount;
16+
wire [9:0] horicount;
1517

16-
always @(posedge clk) begin
17-
if (hori_counter == 799) begin
18-
hori_counter <= 0;
19-
quart_counter <= 0;
20-
counter <= 0;
21-
end else begin
22-
hori_counter <= hori_counter + 1;
23-
if (quart_counter == 39) begin
24-
quart_counter <= 0;
25-
counter <= counter + 1;
26-
end else quart_counter <= quart_counter + 1;
27-
end
28-
end
18+
assign red = pixel;
19+
assign green = pixel;
20+
assign blue = pixel;
21+
assign lum = pixel;
2922

30-
assign red = counter[0] ? counter[0] : 1'bZ;
31-
assign green = counter[1] ? counter[1] : 1'bZ;
32-
assign blue = counter[2] ? counter[2] : 1'bZ;
33-
assign lum = counter[3] ? counter[3] : 1'bZ;
23+
always @(posedge horicount[2]) begin
24+
if (character == 65) character <= 32;
25+
if (character == 32) character <= 65;
26+
end
3427

3528
signalgen #() signal_generator (
36-
.clk (clk),
29+
.clk(clk),
3730
.vsync(vsync),
38-
.hsync(hsync)
31+
.hsync(hsync),
32+
.visible(visible),
33+
.vertcount(vertcount),
34+
.horicount(horicount)
35+
);
36+
37+
chargen #() character_generator (
38+
.clk(clk),
39+
.character(character),
40+
.vertcount(vertcount[2:0]),
41+
.pixel(pixel)
3942
);
4043

4144
endmodule

0 commit comments

Comments
 (0)