Line 50... |
Line 50... |
-- /* TODO remove once generic packages are supported. */
|
-- /* TODO remove once generic packages are supported. */
|
-- subtype t_addr is unsigned(31 downto 0);
|
-- subtype t_addr is unsigned(31 downto 0);
|
-- subtype t_msg is signed(63 downto 0);
|
-- subtype t_msg is signed(63 downto 0);
|
|
|
/* BFM control interface. */
|
/* BFM control interface. */
|
type tBfmCtrl is record
|
type t_bfm is record
|
address:t_addr;
|
address:t_addr;
|
message:t_msg;
|
message:t_msg;
|
trigger:boolean;
|
trigger:boolean;
|
end record tBfmCtrl;
|
end record t_bfm;
|
|
|
procedure write(
|
procedure write(
|
signal request:inout tBfmCtrl; --FIXME use inout because Quartus doesn't yet allow reading of "out" within a procedure. VHDL-2008 allows this, and QuestaSim works fine.
|
signal request:inout t_bfm; --FIXME use inout because Quartus doesn't yet allow reading of "out" within a procedure. VHDL-2008 allows this, and QuestaSim works fine.
|
address:in t_addr;
|
address:in t_addr;
|
data:in t_msg
|
data:in t_msg
|
);
|
);
|
|
|
procedure writeStream(
|
procedure writeStream(
|
signal request:inout tBfmCtrl;
|
signal request:inout t_bfm;
|
data:in t_msg
|
data:in t_msg
|
);
|
);
|
|
|
procedure read(
|
procedure read(
|
signal request:inout tBfmCtrl; --FIXME use inout because Quartus doesn't yet allow reading of "out" within a procedure. VHDL-2008 allows this, and QuestaSim works fine.
|
signal request:inout t_bfm; --FIXME use inout because Quartus doesn't yet allow reading of "out" within a procedure. VHDL-2008 allows this, and QuestaSim works fine.
|
address:in t_addr
|
address:in t_addr
|
);
|
);
|
end package tlm;
|
end package tlm;
|
|
|
package body tlm is
|
package body tlm is
|
procedure write(
|
procedure write(
|
signal request:inout tBfmCtrl; --FIXME use inout because Quartus doesn't yet allow reading of "out" within a procedure. VHDL-2008 allows this, and QuestaSim works fine.
|
signal request:inout t_bfm; --FIXME use inout because Quartus doesn't yet allow reading of "out" within a procedure. VHDL-2008 allows this, and QuestaSim works fine.
|
address:in t_addr;
|
address:in t_addr;
|
data:in t_msg
|
data:in t_msg
|
) is begin
|
) is begin
|
request.address<=address;
|
request.address<=address;
|
request.message<=data;
|
request.message<=data;
|
request.trigger<=not request.trigger;
|
request.trigger<=not request.trigger;
|
end procedure write;
|
end procedure write;
|
|
|
procedure writeStream(
|
procedure writeStream(
|
signal request:inout tBfmCtrl;
|
signal request:inout t_bfm;
|
data:in t_msg
|
data:in t_msg
|
) is begin
|
) is begin
|
request.message<=data;
|
request.message<=data;
|
request.trigger<=not request.trigger;
|
request.trigger<=not request.trigger;
|
end procedure writeStream;
|
end procedure writeStream;
|
|
|
procedure read(
|
procedure read(
|
signal request:inout tBfmCtrl; --FIXME use inout because Quartus doesn't yet allow reading of "out" within a procedure. VHDL-2008 allows this, and QuestaSim works fine.
|
signal request:inout t_bfm; --FIXME use inout because Quartus doesn't yet allow reading of "out" within a procedure. VHDL-2008 allows this, and QuestaSim works fine.
|
address:in t_addr
|
address:in t_addr
|
) is begin
|
) is begin
|
request.address<=address;
|
request.address<=address;
|
request.trigger<=not request.trigger;
|
request.trigger<=not request.trigger;
|
--report "request.address: " & to_hstring(request.address);
|
--report "request.address: " & to_hstring(request.address);
|