-
Notifications
You must be signed in to change notification settings - Fork 1
/
libnetpp.chdl
216 lines (158 loc) · 5.89 KB
/
libnetpp.chdl
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
--! \file libnetpp.vhdl Generated autowrapper library package
-- /* ONLY EDIT THIS FILE IF IT HAS A CHDL EXTENSION !!! */
-- This file is generated from __FILE__
-- Modifications will be lost, please edit __FILE__
-- // This is a CPP template to create a VHDL file using the C preprocessor.
-- // C style comments are stripped from the resulting file.
-- (c) 2011-2018 Martin Strubel <hackfin@section5.ch>
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all; -- Unsigned
--! \brief GHPI netpp wrapper package
--! Provides a few functions to access netpp master functionality from
--! the simulation.
package ghpi_netpp is
--! \defgroup GlobalSignals Global Signals
--! These are experimental signals
--! \addtogroup GlobalSignals
--! \{
----- GLOBAL SIGNALS -----
--! Global throttle signal. If high, use as throttle signal
--! to virtual FIFO implementations such as VirtualFX2Fifo.
signal global_throttle : std_logic := '1';
--! Global number of wait cycles for some entities to sleep.
signal global_waitcycles : natural := 50000;
--! Global debugger clock in MHz
signal global_dbgclk : std_logic := '0';
--! \}
----- NETPP SLAVE API -----
--! \addtogroup GHPI_Netpp
--! \{
function netpp_init(name : string)
return integer;
--! Initializes the netpp slave structures for a simulation
--! Allows to pass a port number
function netpp_init(name : string; portnum : integer)
return integer;
----- NETPP MASTER API -----
subtype token_t is integer;
subtype netpphandle_t is integer;
type handle_t is access integer;
-- The function wrapper appends a \000 character
--! Opens a netpp target somewhere on the network
function device_open(id: string)
return netpphandle_t;
--! Retrieves the netpp token by name
function device_gettoken(h: netpphandle_t; id: string)
return token_t;
--! \}
--! \addtogroup VirtualRAM
--! \{
----- RAM API -----
subtype ram_port_t is unsigned(31 downto 0);
subtype byte_t is unsigned(7 downto 0);
subtype regaddr_t is unsigned(7 downto 0);
type rambuf_t is access integer;
--! Allocates a new virtual RAM
--! @param size Size in words (not bytes)
--! @param name A unique name, used for netpp export
function ram_new(name : string; bits: integer; size : integer) return rambuf_t;
--! \}
--! \addtogroup VFifoAPI
--! \{
----- FIFO API -----
subtype fifoflag_t is unsigned(0 to 5);
-- FIFO flag indices:
constant FIFO_RX : natural := 0; --! in: Read advance, out: FIFO not empty
constant FIFO_TX : natural := 1; --! in: Write advance, out: FIFO not full
constant FIFO_RXE : natural := 2; --! out: LOW when FIFO almost not empty
constant FIFO_TXF : natural := 3; --! out: LOW when FIFO almost full
constant FIFO_OVR : natural := 4; --! out: overrun bit. Write 1 to clear.
constant FIFO_UNR : natural := 5; --! out: underrun bit. W1C.
-- FLAG assignments for FX2 emulation
constant TX_PROG : natural := 0;
constant TX_EMPTY : natural := 1;
constant RX_FULL : natural := 2;
-- BUS options:
constant BUS_LOCAL : natural := 0;
constant BUS_GLOBAL : natural := 1;
--! Access type. These do not directly map into C struct pointers,
--! see functions using duplexfifo_t_ghdl as arguments for example
--! on how to access the handle in C.
type duplexfifo_t is access integer;
--! Allocates a new virtual FIFO
--! @param name A unique name, used for netpp export
--! @param size Size in words (not bytes)
--! @param wordsize Word size (1 or 2)
function fifo_new(name : string; size : integer; wordsize : integer)
return duplexfifo_t;
--! \}
--! \addtogroup VBusAPI
--! \{
----- NETPP BUS API -----
type bus_t is access integer;
--! Bus flags. 0: read, 1: write, 2: read ready
subtype busflag_t is unsigned(0 to 2);
--! Create a new virtual bus.
--! @param name Name in the netpp root hierarchy
--! @param wordsize Data word width in bytes
function bus_new(name : string; wordsize : integer; bustype : integer)
return bus_t;
--! \}
----- NETPP REMOTE FRAMEBUFFER API -----
--! \addtogroup VFramebuf
--! \{
subtype framebuffer_t is integer; --! Framebuffer handle
subtype pixel_t is unsigned(15 downto 0); --! Pixel type
type pixarray_t is array(natural range <>) of pixel_t; --! Pixel array
constant VIDEOMODE_8BIT : natural := 1; --! 8 Bit grayscale
constant VIDEOMODE_UYVY : natural := 3; --! UYVY 16 bpp mode
constant VIDEOMODE_INDEXED : natural := 17; --! Indexed 16bit mode
--! \}
#include "func_decl.chdl"
end package;
package body ghpi_netpp is
function netpp_init(name : string)
return integer is
begin
return netpp_init_wrapped(name & NUL, 0);
end function;
function netpp_init(name : string; portnum : integer)
return integer is
begin
return netpp_init_wrapped(name & NUL, portnum);
end function;
function device_open(id: string)
return netpphandle_t is
variable dev : netpphandle_t;
begin
dev := device_open_wrapped(id & NUL);
if dev < 0 then
assert false report "Failed to open netpp remote device"
severity failure;
end if;
return dev;
end device_open;
function device_gettoken(h: netpphandle_t; id: string)
return token_t is
begin
return device_gettoken_wrapped(h, id & NUL);
end device_gettoken;
-- Wrap functions with string parameter: Just append a null termination
-- to become C standard compatible.
function ram_new(name : string; bits: integer; size : integer) return rambuf_t is
begin
return ram_new_wrapped(name & NUL, bits, size);
end function;
function fifo_new(name : string; size : integer; wordsize : integer )
return duplexfifo_t is
begin
return fifo_new_wrapped(name & NUL, size, wordsize);
end function;
function bus_new(name : string; wordsize : integer; bustype : integer )
return bus_t is
begin
return bus_new_wrapped(name & NUL, wordsize, bustype);
end function;
#include "func_body.chdl"
end package body;