1
0
SEm-Labos/05-Morse/Morse/hdl/unitCounter_studentVersion.vhd

62 lines
1.7 KiB
VHDL
Raw Normal View History

2024-02-23 13:01:05 +00:00
library Common;
use Common.CommonLib.all;
ARCHITECTURE studentVersion OF unitCounter IS
signal unitCounter: unsigned(requiredBitNb(unitCountDivide)-1 downto 0);
signal unitCountDone: std_ulogic;
signal unitNbCounter: unsigned(unitnB'range);
signal unitNbCountDone: std_ulogic;
BEGIN
-- count unit base period
countUnitDuration: process(reset, clock)
begin
if reset = '1' then
unitCounter <= (others => '0');
elsif rising_edge(clock) then
if unitCounter = 0 then
if (startCounter = '1') or (unitNbCounter > 0) then
unitCounter <= unitCounter + 1;
end if;
else
if unitCountDone = '0' then
unitCounter <= unitCounter + 1;
else
unitCounter <= (others => '0');
end if;
end if;
end if;
end process countUnitDuration;
unitCountDone <= '1' when unitCounter = unitCountDivide
else '0';
-- count unit period number
countPeriods: process(reset, clock)
begin
if reset = '1' then
unitNbCounter <= (others => '0');
elsif rising_edge(clock) then
if unitNbCounter = 0 then
if startCounter = '1' then
unitNbCounter <= unitNbCounter + 1;
end if;
else
if unitNbCountDone = '0' then
if unitCountDone = '1' then
unitNbCounter <= unitNbCounter + 1;
end if;
else
unitNbCounter <= (others => '0');
end if;
end if;
end if;
end process countPeriods;
unitNbCountDone <= '1' when (unitNbCounter = unitNb) and (unitCountDone = '1')
else '0';
done <= unitNbCountDone;
END ARCHITECTURE studentVersion;