# -*- Makefile -*- for the GHDL Run Time library. # Copyright (C) 2002, 2003, 2004, 2005 Tristan Gingold # # GHDL is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2, or (at your option) any later # version. # # GHDL is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. # # You should have received a copy of the GNU General Public License # along with GCC; see the file COPYING. If not, write to the Free # Software Foundation, 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. GRT_FLAGS=-g -O GRT_ADAFLAGS=-gnatn ADAC=gcc CC=gcc GNATFLAGS=$(CFLAGS) -gnatf -gnaty3befhkmr -gnatwlu GHDL1=../ghdl1-gcc GRTSRCDIR=. GRT_RANLIB=ranlib INSTALL=install INSTALL_DATA=$(INSTALL) -m 644 prefix=/usr/local exec_prefix=$(prefix) libdir=$(exec_prefix)/lib grt_libdir=$(libdir) target:=$(shell $(CC) -dumpmachine) all: grt-all install: grt-install clean: grt-clean $(RM) *~ show_target: echo "Target is $(target)" include Makefile.inc GRT_CFLAGS=$(GRT_FLAGS) -Wall ghwdump: ghwdump.o ghwlib.o $(CC) $(GRT_CFLAGS) -o $@ ghwdump.o ghwlib.o ghwlib.o: ghwlib.c ghwlib.h $(CC) -c $(GRT_CFLAGS) -o $@ $< ghwdump.o: ghwdump.c ghwlib.h $(CC) -c $(GRT_CFLAGS) -o $@ $< 2bda56467c8f07cc44d3b92f0eab2ba'>treecommitdiffstats
path: root/examples/igloo2/example.v
blob: 4a9486e50f6b185e09544e19d5b42112cba70db9 (plain)
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
module example (
	input  clk,
	input  SW1,
	input  SW2,
	output LED1,
	output LED2,
	output LED3,
	output LED4,

	output AA, AB, AC, AD,
	output AE, AF, AG, CA
);

	localparam BITS = 8;
	localparam LOG2DELAY = 22;

	reg [BITS+LOG2DELAY-1:0] counter = 0;
	reg [BITS-1:0] outcnt;

	always @(posedge clk) begin
		counter <= counter + SW1 + SW2 + 1;
		outcnt <= counter >> LOG2DELAY;
	end

	assign {LED1, LED2, LED3, LED4} = outcnt ^ (outcnt >> 1);

	// assign CA = counter[10];
	// seg7enc seg7encinst (
	// 	.seg({AA, AB, AC, AD, AE, AF, AG}),
	// 	.dat(CA ? outcnt[3:0] : outcnt[7:4])
	// );

	assign {AA, AB, AC, AD, AE, AF, AG} = ~(7'b 100_0000 >> outcnt[6:4]);
	assign CA = outcnt[7];
endmodule

module seg7enc (
	input [3:0] dat,
	output [6:0] seg
);
	reg [6:0] seg_inv;
	always @* begin
		seg_inv = 0;
		case (dat)
			4'h0: seg_inv = 7'b 0111111;
			4'h1: seg_inv = 7'b 0000110;
			4'h2: seg_inv = 7'b 1011011;
			4'h3: seg_inv = 7'b 1001111;
			4'h4: seg_inv = 7'b 1100110;
			4'h5: seg_inv = 7'b 1101101;
			4'h6: seg_inv = 7'b 1111101;
			4'h7: seg_inv = 7'b 0000111;
			4'h8: seg_inv = 7'b 1111111;
			4'h9: seg_inv = 7'b 1101111;
			4'hA: seg_inv = 7'b 1110111;
			4'hB: seg_inv = 7'b 1111100;
			4'hC: seg_inv = 7'b 0111001;
			4'hD: seg_inv = 7'b 1011110;
			4'hE: seg_inv = 7'b 1111001;
			4'hF: seg_inv = 7'b 1110001;
		endcase
	end
	assign seg = ~seg_inv;
endmodule