mirror of
https://github.com/RobotechLille/cdf2018-principal
synced 2024-11-14 12:26:06 +01:00
FPGA : Pipelinage du module de communication
This commit is contained in:
parent
68c7223fe4
commit
6013d6c9a9
|
@ -174,11 +174,14 @@ build/%.o: %.vhd
|
||||||
build/%_tb: build/%_tb.o $(addprefix build/,$(subst .vhd,.o,$(VHDSOURCE)))
|
build/%_tb: build/%_tb.o $(addprefix build/,$(subst .vhd,.o,$(VHDSOURCE)))
|
||||||
ghdl -e $(GHDL_FLAGS) --workdir="$(shell dirname "$@")" -o "$(shell echo "$@" | tr A-Z a-z)" "$(basename $(notdir $<))"
|
ghdl -e $(GHDL_FLAGS) --workdir="$(shell dirname "$@")" -o "$(shell echo "$@" | tr A-Z a-z)" "$(basename $(notdir $<))"
|
||||||
|
|
||||||
|
%_test: build/%_tb
|
||||||
|
(cd "$(shell dirname "$<")"; time ghdl -r "$(basename $(notdir $<))")
|
||||||
|
|
||||||
build/%_tb.vcd: build/%_tb
|
build/%_tb.vcd: build/%_tb
|
||||||
(cd "$(shell dirname "$<")"; time ghdl -r "$(basename $(notdir $<))" --vcd="../$@" )
|
(cd "$(shell dirname "$<")"; time ghdl -r "$(basename $(notdir $<))" --vcd="../$@")
|
||||||
|
|
||||||
build/%_tb.ghw: build/%_tb
|
build/%_tb.ghw: build/%_tb
|
||||||
(cd "$(shell dirname "$<")"; time ghdl -r "$(basename $(notdir $<))" --wave="../$@" )
|
(cd "$(shell dirname "$<")"; time ghdl -r "$(basename $(notdir $<))" --wave="../$@")
|
||||||
|
|
||||||
%_wave: build/%_tb.ghw
|
%_wave: build/%_tb.ghw
|
||||||
gtkwave --save "$(notdir $(basename $<)).gtkw" "$<"
|
gtkwave --save "$(notdir $(basename $<)).gtkw" "$<"
|
||||||
|
|
|
@ -9,11 +9,11 @@ entity communication is
|
||||||
reset : in std_logic;
|
reset : in std_logic;
|
||||||
left : in integer;
|
left : in integer;
|
||||||
right : in integer;
|
right : in integer;
|
||||||
zerocoder : out std_logic;
|
zerocoder : out std_logic := '0';
|
||||||
front : in integer;
|
front : in integer;
|
||||||
back : in integer;
|
back : in integer;
|
||||||
txData : out std_logic_vector(7 downto 0);
|
txData : out std_logic_vector(7 downto 0) := x"00";
|
||||||
txStb : out std_logic;
|
txStb : out std_logic := '0';
|
||||||
txAck : in std_logic;
|
txAck : in std_logic;
|
||||||
rxData : in std_logic_vector(7 downto 0);
|
rxData : in std_logic_vector(7 downto 0);
|
||||||
rxStb : in std_logic
|
rxStb : in std_logic
|
||||||
|
@ -30,95 +30,73 @@ architecture Behavioral of communication is
|
||||||
constant F2AI_CAPT : std_logic_vector(7 downto 0) := x"43"; -- 'C'
|
constant F2AI_CAPT : std_logic_vector(7 downto 0) := x"43"; -- 'C'
|
||||||
constant F2AT_CAPT : std_logic_vector(7 downto 0) := x"63"; -- 'c'
|
constant F2AT_CAPT : std_logic_vector(7 downto 0) := x"63"; -- 'c'
|
||||||
|
|
||||||
type readMessages is (none, F2AT_CAPTs);
|
|
||||||
type sendMessages is (none, A2FD_PINGs, F2AI_CODERs, F2AI_CAPTs, F2AD_ERR_UNKNOWN_CODEs);
|
|
||||||
|
|
||||||
constant SENDQUEUE_SIZE : integer := 16;
|
|
||||||
type sendQueueMemorya is array (0 to SENDQUEUE_SIZE - 1) of sendMessages;
|
|
||||||
|
|
||||||
signal frontTrigger : integer := 0;
|
signal frontTrigger : integer := 0;
|
||||||
signal backTrigger : integer := 0;
|
signal backTrigger : integer := 0;
|
||||||
signal triggerSet : std_logic := '0';
|
signal triggerSet : std_logic := '0';
|
||||||
|
|
||||||
signal txStbs : std_logic := '0';
|
type readMessages is (F2AT_CAPTs);
|
||||||
|
signal readMessage : readMessages;
|
||||||
|
signal readSize : integer := 0;
|
||||||
|
signal readOffset : integer := 0;
|
||||||
|
signal readData : std_logic_vector(63 downto 0) := (others => '0'); -- Max message size (will be trimmed down by the synthetizer)
|
||||||
|
|
||||||
|
type sendMessages is (A2FD_PINGs, F2AI_CODERs, F2AI_CAPTs, F2AD_ERR_UNKNOWN_CODEs);
|
||||||
|
constant SENDQUEUE_SIZE : integer := 16;
|
||||||
|
type sendQueueMemorya is array (0 to SENDQUEUE_SIZE - 1) of sendMessages;
|
||||||
|
signal sendQueueMemory : sendQueueMemorya;
|
||||||
|
signal sendTail : integer := 0;
|
||||||
|
signal sendHead : integer := 0;
|
||||||
|
signal sendLooped : std_logic := '0';
|
||||||
|
|
||||||
|
signal sendAvailable: std_logic := '0';
|
||||||
|
signal sendBegun : std_logic := '0';
|
||||||
|
signal sendOffset : integer := 0;
|
||||||
|
signal sendSize : integer := 0;
|
||||||
|
signal sendData : std_logic_vector(63 downto 0) := (others => '0'); -- Max message size (will be trimmed down by the synthetizer)
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
||||||
txStb <= txStbs;
|
|
||||||
|
|
||||||
readsendFA : process(clock, reset)
|
readsendFA : process(clock, reset)
|
||||||
|
|
||||||
variable readMessage : readMessages := none;
|
|
||||||
variable readSize : integer := 0;
|
|
||||||
variable readOffset : integer := 0;
|
|
||||||
variable readData : std_logic_vector(63 downto 0); -- Max message size (will be trimmed down by the synthetizer)
|
|
||||||
|
|
||||||
variable sendMessage : sendMessages := none;
|
|
||||||
variable sendOffset : integer := 0;
|
|
||||||
variable sendSize : integer := 0;
|
|
||||||
variable sendData : std_logic_vector(63 downto 0); -- Max message size (will be trimmed down by the synthetizer)
|
|
||||||
|
|
||||||
-- Send queue
|
|
||||||
variable sendQueueMemory : sendQueueMemorya;
|
|
||||||
variable sendTail : integer := 0;
|
|
||||||
variable sendHead : integer := 0;
|
|
||||||
variable sendLooped : boolean := false;
|
|
||||||
|
|
||||||
procedure pushSend
|
procedure pushSend
|
||||||
(message : in sendMessages) is
|
(message : in sendMessages) is
|
||||||
begin
|
begin
|
||||||
sendQueueMemory(sendHead) := message;
|
sendQueueMemory(sendHead) <= message;
|
||||||
if sendHead < SENDQUEUE_SIZE - 1 then
|
if sendHead < SENDQUEUE_SIZE - 1 then
|
||||||
sendHead := sendHead + 1;
|
sendHead <= sendHead + 1;
|
||||||
else
|
else
|
||||||
sendHead := 0;
|
sendHead <= 0;
|
||||||
sendLooped := true;
|
sendLooped <= '1';
|
||||||
end if;
|
end if;
|
||||||
end pushSend;
|
end pushSend;
|
||||||
|
|
||||||
procedure popSend
|
|
||||||
(message : out sendMessages) is
|
|
||||||
begin
|
|
||||||
if sendTail < sendHead or sendLooped then
|
|
||||||
message := sendQueueMemory(sendTail);
|
|
||||||
if sendTail < SENDQUEUE_SIZE - 1 then
|
|
||||||
sendTail := sendTail + 1;
|
|
||||||
else
|
|
||||||
sendTail := 0;
|
|
||||||
sendLooped := false;
|
|
||||||
end if;
|
|
||||||
else
|
|
||||||
message := none;
|
|
||||||
end if;
|
|
||||||
end popSend;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if reset = '1' then
|
if reset = '1' then
|
||||||
readMessage := none;
|
|
||||||
readOffset := 0;
|
|
||||||
readSize := 0;
|
|
||||||
|
|
||||||
sendMessage := none;
|
|
||||||
sendOffset := 0;
|
|
||||||
sendSize := 0;
|
|
||||||
|
|
||||||
sendTail := 0;
|
|
||||||
sendHead := 0;
|
|
||||||
sendLooped := false;
|
|
||||||
|
|
||||||
frontTrigger <= 0;
|
frontTrigger <= 0;
|
||||||
backTrigger <= 0;
|
backTrigger <= 0;
|
||||||
|
triggerSet <= '0';
|
||||||
|
readSize <= 0;
|
||||||
|
readOffset <= 0;
|
||||||
|
readData <= (others => '0');
|
||||||
|
sendTail <= 0;
|
||||||
|
sendHead <= 0;
|
||||||
|
sendLooped <= '0';
|
||||||
|
sendAvailable<= '0';
|
||||||
|
sendBegun <= '0';
|
||||||
|
sendOffset <= 0;
|
||||||
|
sendSize <= 0;
|
||||||
|
sendData <= (others => '0');
|
||||||
|
txStb <= '0';
|
||||||
zerocoder <= '0';
|
zerocoder <= '0';
|
||||||
txData <= x"00";
|
txData <= x"00";
|
||||||
triggerSet <= '0';
|
|
||||||
else
|
else
|
||||||
if rising_edge(clock) then
|
if rising_edge(clock) then
|
||||||
zerocoder <= '0';
|
zerocoder <= '0';
|
||||||
|
|
||||||
-- If read something
|
-- If read something
|
||||||
if rxStb = '1' then
|
if rxStb = '1' then -- Incomming character
|
||||||
if readSize = 0 then
|
if readSize = 0 then -- Beginning of message
|
||||||
readSize := 0;
|
readSize <= 0;
|
||||||
case rxData is
|
case rxData is
|
||||||
when A2FD_PING =>
|
when A2FD_PING =>
|
||||||
pushSend(A2FD_PINGs);
|
pushSend(A2FD_PINGs);
|
||||||
|
@ -127,80 +105,85 @@ begin
|
||||||
when F2AI_CAPT =>
|
when F2AI_CAPT =>
|
||||||
pushSend(F2AI_CAPTs);
|
pushSend(F2AI_CAPTs);
|
||||||
when F2AT_CAPT =>
|
when F2AT_CAPT =>
|
||||||
readMessage := F2AT_CAPTs;
|
readMessage <= F2AT_CAPTs;
|
||||||
readSize := 4;
|
readSize <= 4;
|
||||||
when others =>
|
when others =>
|
||||||
pushSend(F2AD_ERR_UNKNOWN_CODEs);
|
pushSend(F2AD_ERR_UNKNOWN_CODEs);
|
||||||
end case;
|
end case;
|
||||||
else
|
else -- Rest of message
|
||||||
readData((readOffset + 1) * 8 - 1 downto readOffset * 8) := rxData;
|
if readOffset < readSize then
|
||||||
if readOffset = readSize - 1 then
|
readData((readOffset + 1) * 8 - 1 downto readOffset * 8) <= rxData;
|
||||||
case readMessage is
|
readOffset <= readOffset + 1;
|
||||||
when F2AT_CAPTs =>
|
|
||||||
frontTrigger <= to_integer(unsigned(readData(15 downto 0)));
|
|
||||||
backTrigger <= to_integer(unsigned(readData(31 downto 16)));
|
|
||||||
triggerSet <= '1';
|
|
||||||
when others =>
|
|
||||||
pushSend(F2AD_ERR_UNKNOWN_CODEs);
|
|
||||||
end case;
|
|
||||||
readMessage := none;
|
|
||||||
readOffset := 0;
|
|
||||||
readSize := 0;
|
|
||||||
else
|
|
||||||
readOffset := readOffset + 1;
|
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
end if;
|
end if;
|
||||||
end if;
|
elsif readSize > 0 and readOffset = readSize then -- Rest of message ended
|
||||||
|
case readMessage is
|
||||||
if (triggerSet = '1' and ((front > frontTrigger) or (back > backTrigger))) then
|
when F2AT_CAPTs =>
|
||||||
|
frontTrigger <= to_integer(unsigned(readData(15 downto 0)));
|
||||||
|
backTrigger <= to_integer(unsigned(readData(31 downto 16)));
|
||||||
|
triggerSet <= '1';
|
||||||
|
when others =>
|
||||||
|
pushSend(F2AD_ERR_UNKNOWN_CODEs);
|
||||||
|
end case;
|
||||||
|
readOffset <= 0;
|
||||||
|
readSize <= 0;
|
||||||
|
elsif (triggerSet = '1' and ((front > frontTrigger) or (back > backTrigger))) then
|
||||||
pushSend(F2AI_CAPTs);
|
pushSend(F2AI_CAPTs);
|
||||||
triggerSet <= '0';
|
triggerSet <= '0';
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
-- If what was sent is acknowledged or nothing is being sent atm
|
if sendAvailable = '0' then -- If no message is being sent
|
||||||
if txStbs = '0' or txAck = '1' then
|
if sendTail < sendHead or sendLooped = '1' then -- If there is a message in the queue
|
||||||
if sendSize = 0 then -- If no data to be sent
|
|
||||||
popSend(sendMessage); -- See if there a message in the message queue
|
-- Update tail
|
||||||
case sendMessage is
|
if sendTail < SENDQUEUE_SIZE - 1 then
|
||||||
when none => -- No message available, do nothing
|
sendTail <= sendTail + 1;
|
||||||
|
else
|
||||||
|
sendTail <= 0;
|
||||||
|
sendLooped <= '0';
|
||||||
|
end if;
|
||||||
|
|
||||||
|
sendAvailable <= '1';
|
||||||
|
|
||||||
|
case sendQueueMemory(sendTail) is
|
||||||
when A2FD_PINGs =>
|
when A2FD_PINGs =>
|
||||||
sendData(7 downto 0) := A2FD_PING;
|
sendData(7 downto 0) <= A2FD_PING;
|
||||||
sendSize := 1;
|
sendSize <= 1;
|
||||||
when F2AI_CAPTs =>
|
when F2AI_CAPTs =>
|
||||||
sendData(7 downto 0) := F2AI_CAPT;
|
sendData(7 downto 0) <= F2AI_CAPT;
|
||||||
sendData(23 downto 8) := std_logic_vector(to_signed(front, 16));
|
sendData(23 downto 8) <= std_logic_vector(to_signed(front, 16));
|
||||||
sendData(39 downto 24) := std_logic_vector(to_unsigned(back, 16));
|
sendData(39 downto 24) <= std_logic_vector(to_unsigned(back, 16));
|
||||||
sendSize := 5;
|
sendSize <= 5;
|
||||||
when F2AI_CODERs =>
|
when F2AI_CODERs =>
|
||||||
zerocoder <= '1';
|
zerocoder <= '1';
|
||||||
sendData(7 downto 0) := F2AI_CODER;
|
sendData(7 downto 0) <= F2AI_CODER;
|
||||||
sendData(23 downto 8) := std_logic_vector(to_signed(left, 16));
|
sendData(23 downto 8) <= std_logic_vector(to_signed(left, 16));
|
||||||
sendData(39 downto 24) := std_logic_vector(to_signed(right, 16));
|
sendData(39 downto 24) <= std_logic_vector(to_signed(right, 16));
|
||||||
sendSize := 5;
|
sendSize <= 5;
|
||||||
when others => -- Including F2AD_ERR_UNKNOWN_CODEs
|
when others => -- Including F2AD_ERR_UNKNOWN_CODEs
|
||||||
sendData(7 downto 0) := F2AD_ERR;
|
sendData(7 downto 0) <= F2AD_ERR;
|
||||||
sendData(15 downto 8) := ERR_UNKNOWN_CODE;
|
sendData(15 downto 8) <= ERR_UNKNOWN_CODE;
|
||||||
sendSize := 2;
|
sendSize <= 2;
|
||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
if sendSize > 0 then -- If data to be sent
|
else -- If a message is being sent
|
||||||
txData <= sendData((sendOffset + 1) * 8 - 1 downto sendOffset * 8);
|
if sendBegun = '0' or txAck = '1' then
|
||||||
txStbs <= '1';
|
sendBegun <= '1';
|
||||||
|
if sendOffset < sendSize then -- There is still data to send
|
||||||
if sendOffset = sendSize - 1 then -- If it was the last character sent
|
txData <= sendData((sendOffset + 1) * 8 - 1 downto sendOffset * 8);
|
||||||
sendSize := 0; -- Make next iteration check for send queue
|
txStb <= '1';
|
||||||
sendOffset := 0;
|
sendOffset <= sendOffset + 1;
|
||||||
else -- Still data to be sent after that
|
else -- There is no more data to send
|
||||||
sendOffset := sendOffset + 1;
|
sendOffset <= 0;
|
||||||
|
txStb <= '0';
|
||||||
|
sendBegun <= '0';
|
||||||
|
sendAvailable <= '0';
|
||||||
end if;
|
end if;
|
||||||
else -- If really no data to be sent
|
|
||||||
txStbs <= '0';
|
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
end process;
|
end process;
|
||||||
|
|
||||||
end Behavioral;
|
end Behavioral;
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
[*]
|
[*]
|
||||||
[*] GTKWave Analyzer v3.3.86 (w)1999-2017 BSI
|
[*] GTKWave Analyzer v3.3.86 (w)1999-2017 BSI
|
||||||
[*] Tue Feb 27 20:44:59 2018
|
[*] Wed Feb 28 14:53:10 2018
|
||||||
[*]
|
[*]
|
||||||
[dumpfile] "/home/geoffrey/Documents/Polytech/Robotech/2017-2018/CdF/cdf2018-principal/fpga/build/communication_tb.ghw"
|
[dumpfile] "/home/geoffrey/Documents/Polytech/Robotech/2017-2018/CdF/cdf2018-principal/fpga/build/communication_tb.ghw"
|
||||||
[dumpfile_mtime] "Tue Feb 27 20:44:10 2018"
|
[dumpfile_mtime] "Wed Feb 28 14:51:41 2018"
|
||||||
[dumpfile_size] 6988
|
[dumpfile_size] 7845
|
||||||
[savefile] "/home/geoffrey/Documents/Polytech/Robotech/2017-2018/CdF/cdf2018-principal/fpga/communication_tb.gtkw"
|
[savefile] "/home/geoffrey/Documents/Polytech/Robotech/2017-2018/CdF/cdf2018-principal/fpga/communication_tb.gtkw"
|
||||||
[timestart] 0
|
[timestart] 0
|
||||||
[size] 1600 862
|
[size] 1600 862
|
||||||
[pos] -1 -1
|
[pos] -1 -1
|
||||||
*-29.975166 2184000000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
|
*-30.009827 1783000000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
|
||||||
[treeopen] top.
|
[treeopen] top.
|
||||||
[treeopen] top.communication_tb.
|
[treeopen] top.communication_tb.
|
||||||
[treeopen] top.communication_tb.dut.
|
[treeopen] top.communication_tb.dut.
|
||||||
[sst_width] 213
|
[sst_width] 213
|
||||||
[signals_width] 126
|
[signals_width] 198
|
||||||
[sst_expanded] 1
|
[sst_expanded] 1
|
||||||
[sst_vpaned_height] 200
|
[sst_vpaned_height] 200
|
||||||
@28
|
@28
|
||||||
|
@ -29,6 +29,17 @@ top.communication_tb.reset
|
||||||
@28
|
@28
|
||||||
[color] 5
|
[color] 5
|
||||||
top.communication_tb.dut.rxstb
|
top.communication_tb.dut.rxstb
|
||||||
|
@420
|
||||||
|
[color] 3
|
||||||
|
top.communication_tb.dut.sendhead
|
||||||
|
[color] 3
|
||||||
|
top.communication_tb.dut.sendtail
|
||||||
|
[color] 3
|
||||||
|
top.communication_tb.dut.sendsize
|
||||||
|
[color] 3
|
||||||
|
top.communication_tb.dut.sendavailable
|
||||||
|
[color] 3
|
||||||
|
top.communication_tb.dut.sendbegun
|
||||||
@22
|
@22
|
||||||
[color] 1
|
[color] 1
|
||||||
#{top.communication_tb.txdata[7:0]} top.communication_tb.txdata[7] top.communication_tb.txdata[6] top.communication_tb.txdata[5] top.communication_tb.txdata[4] top.communication_tb.txdata[3] top.communication_tb.txdata[2] top.communication_tb.txdata[1] top.communication_tb.txdata[0]
|
#{top.communication_tb.txdata[7:0]} top.communication_tb.txdata[7] top.communication_tb.txdata[6] top.communication_tb.txdata[5] top.communication_tb.txdata[4] top.communication_tb.txdata[3] top.communication_tb.txdata[2] top.communication_tb.txdata[1] top.communication_tb.txdata[0]
|
||||||
|
@ -44,12 +55,15 @@ top.communication_tb.dut.txack
|
||||||
top.communication_tb.dut.zerocoder
|
top.communication_tb.dut.zerocoder
|
||||||
@420
|
@420
|
||||||
[color] 2
|
[color] 2
|
||||||
|
top.communication_tb.dut.left
|
||||||
|
[color] 2
|
||||||
|
top.communication_tb.dut.right
|
||||||
|
[color] 2
|
||||||
top.communication_tb.dut.fronttrigger
|
top.communication_tb.dut.fronttrigger
|
||||||
[color] 2
|
[color] 2
|
||||||
top.communication_tb.dut.backtrigger
|
top.communication_tb.dut.backtrigger
|
||||||
[color] 2
|
[color] 2
|
||||||
top.communication_tb.dut.front
|
top.communication_tb.dut.front
|
||||||
@421
|
|
||||||
[color] 2
|
[color] 2
|
||||||
top.communication_tb.dut.back
|
top.communication_tb.dut.back
|
||||||
[pattern_trace] 1
|
[pattern_trace] 1
|
||||||
|
|
|
@ -69,10 +69,10 @@ begin
|
||||||
stimuli : process
|
stimuli : process
|
||||||
variable tampon : multipleChar;
|
variable tampon : multipleChar;
|
||||||
begin
|
begin
|
||||||
left <= 0;
|
|
||||||
right <= 0;
|
|
||||||
front <= 0;
|
front <= 0;
|
||||||
back <= 0;
|
back <= 0;
|
||||||
|
left <= 1152;
|
||||||
|
right <= 11614;
|
||||||
txAck <= '0';
|
txAck <= '0';
|
||||||
rxData <= (others => '0');
|
rxData <= (others => '0');
|
||||||
rxStb <= '0';
|
rxStb <= '0';
|
||||||
|
@ -185,24 +185,23 @@ begin
|
||||||
assert txStb = '0' report "Not stopping send" severity error;
|
assert txStb = '0' report "Not stopping send" severity error;
|
||||||
|
|
||||||
-- Test encoder
|
-- Test encoder
|
||||||
left <= 1152;
|
|
||||||
right <= 11614;
|
|
||||||
|
|
||||||
report "TEST Receiving 'D'" severity note;
|
report "TEST Receiving 'D'" severity note;
|
||||||
rxData <= x"44";
|
rxData <= x"44";
|
||||||
rxStb <= '1';
|
rxStb <= '1';
|
||||||
wait for TbPeriod;
|
wait for TbPeriod;
|
||||||
|
rxStb <= '0';
|
||||||
|
wait for TbPeriod;
|
||||||
assert zerocoder = '1' report "Not reseting coder values" severity error;
|
assert zerocoder = '1' report "Not reseting coder values" severity error;
|
||||||
left <= 0;
|
left <= 0;
|
||||||
right <= 0;
|
right <= 0;
|
||||||
rxStb <= '0';
|
|
||||||
wait for TbPeriod;
|
wait for TbPeriod;
|
||||||
assert zerocoder = '0' report "Not stopping reseting coder values" severity error;
|
assert zerocoder = '0' report "Not stopping reseting coder values" severity error;
|
||||||
|
|
||||||
tampon(0 to 4) := (x"44", x"80", x"04", x"5E", x"2D");
|
tampon(0 to 4) := (x"44", x"80", x"04", x"5E", x"2D");
|
||||||
for I in 0 to 4 loop
|
for I in 0 to 4 loop
|
||||||
wait for 100 ns;
|
wait for 100 ns;
|
||||||
assert txData = tampon(I) report "Not sent correct data, got " & integer'image(to_integer(unsigned(txData))) & ", expected " & integer'image(to_integer(unsigned(tampon(I))))severity error;
|
assert txData = tampon(I) report "Not sent correct data, got " & integer'image(to_integer(unsigned(txData))) & ", expected " & integer'image(to_integer(unsigned(tampon(I)))) severity error;
|
||||||
assert txStb = '1' report "Not sending" severity error;
|
assert txStb = '1' report "Not sending" severity error;
|
||||||
|
|
||||||
wait for 100 ns;
|
wait for 100 ns;
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
[*]
|
[*]
|
||||||
[*] GTKWave Analyzer v3.3.86 (w)1999-2017 BSI
|
[*] GTKWave Analyzer v3.3.86 (w)1999-2017 BSI
|
||||||
[*] Wed Feb 28 09:53:14 2018
|
[*] Wed Feb 28 11:47:06 2018
|
||||||
[*]
|
[*]
|
||||||
[dumpfile] "/home/geoffrey/Documents/Polytech/Robotech/2017-2018/CdF/cdf2018-principal/fpga/build/fir_tb.ghw"
|
[dumpfile] "/home/geoffrey/Documents/Polytech/Robotech/2017-2018/CdF/cdf2018-principal/fpga/build/fir_tb.ghw"
|
||||||
[dumpfile_mtime] "Wed Feb 28 09:53:10 2018"
|
[dumpfile_mtime] "Wed Feb 28 11:46:54 2018"
|
||||||
[dumpfile_size] 595494
|
[dumpfile_size] 458919
|
||||||
[savefile] "/home/geoffrey/Documents/Polytech/Robotech/2017-2018/CdF/cdf2018-principal/fpga/fir_tb.gtkw"
|
[savefile] "/home/geoffrey/Documents/Polytech/Robotech/2017-2018/CdF/cdf2018-principal/fpga/fir_tb.gtkw"
|
||||||
[timestart] 0
|
[timestart] 0
|
||||||
[size] 1600 862
|
[size] 1600 862
|
||||||
|
|
Loading…
Reference in a new issue