File: glue-setup.c

package info (click to toggle)
faumachine 20180503-4
  • links: PTS
  • area: main
  • in suites: buster
  • size: 61,272 kB
  • sloc: ansic: 272,290; makefile: 6,199; asm: 4,251; sh: 3,022; perl: 886; xml: 563; pascal: 311; lex: 214; vhdl: 204
file content (99 lines) | stat: -rw-r--r-- 2,095 bytes parent folder | download
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
/*
 * Copyright (C) 2008-2009 FAUmachine Team <info@faumachine.org>.
 * This program is free software. You can redistribute it and/or modify it
 * under the terms of the GNU General Public License, either version 2 of
 * the License, or (at your option) any later version. See COPYING.
 */

/*
 *  Glue layer to setup components/signals. Should replace mssetup.h/c from
 *  expect.
 */

#include "config.h"

#include <assert.h>
#include <stdio.h>

#include "glue.h"
#include "glue-setup.h"
#include "fauhdli.h"
#include "glue-vhdl.h"

/** glue_setup structure. There can be only one glue_setup
 *  for a running FAUmachine.
 */
static struct cpssp {
	/** fauhdl interpreter instance. */
	struct fauhdli *fauhdli;
	/** glue_vhdl instance */
	void *glue_vhdl;
} cpssp;

static void
glue_setup_quit(int status)
{
	failure = status;
	sim_exit();
}

void
glue_setup_create(void)
{
	int ret;
	char top_entity[2048];
	static struct glue_vhdl_cb cb = {
		/* memory related */
#if 0
		.malloc = shm_alloc,
		.free = shm_free,
#else
		.malloc = malloc,
		.free = free,
#endif
		/* scheduling related */
		.time_virt = time_virt,
		.time_call_at = time_call_at,
		.time_call_delete = time_call_delete,
		.quit = glue_setup_quit,
		/* logging */
		.log = (void (*)(int, 
				const char *, 
				const char *, 
				const char *,
				...))faum_log,

	};

	assert(cpssp.fauhdli == NULL);

	cpssp.glue_vhdl = glue_vhdl_create(&cb);
	cpssp.fauhdli = fauhdli_create(
				simsetup.vhdl_model, 
				NULL, 
				0 < loglevel,
				&cb,
				cpssp.glue_vhdl
				);

	glue_vhdl_init(cpssp.glue_vhdl, cpssp.fauhdli);

	/* FIXME really use expect as library name space, or rather
	 *       define that in simulation.setup? 
	 *       (there is the possibility to override this via fauhdlc!)
	 */
	ret = snprintf(top_entity, sizeof(top_entity), "expect:%s", 
			simsetup.base_entity);
	assert(ret < sizeof(top_entity));

	fauhdli_init(cpssp.fauhdli, top_entity);
}

void
glue_setup_destroy(void)
{
	assert(cpssp.fauhdli != NULL);
	fauhdli_destroy(cpssp.fauhdli);
	glue_vhdl_destroy(cpssp.glue_vhdl);
	cpssp.fauhdli = NULL;
}