Skip to content
Snippets Groups Projects
Commit fe35cc9c authored by James Talbert's avatar James Talbert
Browse files

Add PWM Recorder kernel module test

This exposed a bug that was causing a pulse-width measurement error for clean signals. It now only does a phase shift (for the debounce filter)
parent b0218782
No related branches found
No related tags found
No related merge requests found
...@@ -247,7 +247,7 @@ ...@@ -247,7 +247,7 @@
<spirit:parameters> <spirit:parameters>
<spirit:parameter> <spirit:parameter>
<spirit:name>POLARITY</spirit:name> <spirit:name>POLARITY</spirit:name>
<spirit:value spirit:id="BUSIFPARAM_VALUE.S_AXI_ARESETN.POLARITY" spirit:choiceRef="choice_list_74b5137e">ACTIVE_LOW</spirit:value> <spirit:value spirit:id="BUSIFPARAM_VALUE.S_AXI_ARESETN.POLARITY" spirit:choiceRef="choice_list_9d8b0d81">ACTIVE_LOW</spirit:value>
</spirit:parameter> </spirit:parameter>
</spirit:parameters> </spirit:parameters>
</spirit:busInterface> </spirit:busInterface>
...@@ -304,7 +304,7 @@ ...@@ -304,7 +304,7 @@
<spirit:parameters> <spirit:parameters>
<spirit:parameter> <spirit:parameter>
<spirit:name>viewChecksum</spirit:name> <spirit:name>viewChecksum</spirit:name>
<spirit:value>3e8b6769</spirit:value> <spirit:value>5df65d36</spirit:value>
</spirit:parameter> </spirit:parameter>
</spirit:parameters> </spirit:parameters>
</spirit:view> </spirit:view>
...@@ -320,7 +320,7 @@ ...@@ -320,7 +320,7 @@
<spirit:parameters> <spirit:parameters>
<spirit:parameter> <spirit:parameter>
<spirit:name>viewChecksum</spirit:name> <spirit:name>viewChecksum</spirit:name>
<spirit:value>3e8b6769</spirit:value> <spirit:value>2533723a</spirit:value>
</spirit:parameter> </spirit:parameter>
</spirit:parameters> </spirit:parameters>
</spirit:view> </spirit:view>
...@@ -366,6 +366,20 @@ ...@@ -366,6 +366,20 @@
</spirit:parameter> </spirit:parameter>
</spirit:parameters> </spirit:parameters>
</spirit:view> </spirit:view>
<spirit:view>
<spirit:name>xilinx_testbench</spirit:name>
<spirit:displayName>Test Bench</spirit:displayName>
<spirit:envIdentifier>:vivado.xilinx.com:simulation.testbench</spirit:envIdentifier>
<spirit:fileSetRef>
<spirit:localName>xilinx_testbench_view_fileset</spirit:localName>
</spirit:fileSetRef>
<spirit:parameters>
<spirit:parameter>
<spirit:name>viewChecksum</spirit:name>
<spirit:value>285dd1e3</spirit:value>
</spirit:parameter>
</spirit:parameters>
</spirit:view>
</spirit:views> </spirit:views>
<spirit:ports> <spirit:ports>
<spirit:port> <spirit:port>
...@@ -712,7 +726,7 @@ ...@@ -712,7 +726,7 @@
<spirit:enumeration>32</spirit:enumeration> <spirit:enumeration>32</spirit:enumeration>
</spirit:choice> </spirit:choice>
<spirit:choice> <spirit:choice>
<spirit:name>choice_list_74b5137e</spirit:name> <spirit:name>choice_list_9d8b0d81</spirit:name>
<spirit:enumeration>ACTIVE_HIGH</spirit:enumeration> <spirit:enumeration>ACTIVE_HIGH</spirit:enumeration>
<spirit:enumeration>ACTIVE_LOW</spirit:enumeration> <spirit:enumeration>ACTIVE_LOW</spirit:enumeration>
</spirit:choice> </spirit:choice>
...@@ -753,6 +767,12 @@ ...@@ -753,6 +767,12 @@
<spirit:name>hdl/pwm_recorder_v1_0.vhd</spirit:name> <spirit:name>hdl/pwm_recorder_v1_0.vhd</spirit:name>
<spirit:fileType>vhdlSource</spirit:fileType> <spirit:fileType>vhdlSource</spirit:fileType>
</spirit:file> </spirit:file>
<spirit:file>
<spirit:name>hdl/kernel_tester.vhd</spirit:name>
<spirit:fileType>vhdlSource</spirit:fileType>
<spirit:userFileType>USED_IN_ipstatic</spirit:userFileType>
<spirit:logicalName>xil_defaultlib</spirit:logicalName>
</spirit:file>
</spirit:fileSet> </spirit:fileSet>
<spirit:fileSet> <spirit:fileSet>
<spirit:name>xilinx_softwaredriver_view_fileset</spirit:name> <spirit:name>xilinx_softwaredriver_view_fileset</spirit:name>
...@@ -802,6 +822,15 @@ ...@@ -802,6 +822,15 @@
<spirit:fileType>tclSource</spirit:fileType> <spirit:fileType>tclSource</spirit:fileType>
</spirit:file> </spirit:file>
</spirit:fileSet> </spirit:fileSet>
<spirit:fileSet>
<spirit:name>xilinx_testbench_view_fileset</spirit:name>
<spirit:file>
<spirit:name>hdl/kernel_tester.vhd</spirit:name>
<spirit:fileType>vhdlSource</spirit:fileType>
<spirit:userFileType>USED_IN_simulation</spirit:userFileType>
<spirit:userFileType>USED_IN_synthesis</spirit:userFileType>
</spirit:file>
</spirit:fileSet>
</spirit:fileSets> </spirit:fileSets>
<spirit:description>Records the incoming pwm signal and assigns to a register</spirit:description> <spirit:description>Records the incoming pwm signal and assigns to a register</spirit:description>
<spirit:parameters> <spirit:parameters>
...@@ -869,20 +898,20 @@ ...@@ -869,20 +898,20 @@
<xilinx:taxonomy>AXI_Peripheral</xilinx:taxonomy> <xilinx:taxonomy>AXI_Peripheral</xilinx:taxonomy>
</xilinx:taxonomies> </xilinx:taxonomies>
<xilinx:displayName>pwm_recorder_v1.0</xilinx:displayName> <xilinx:displayName>pwm_recorder_v1.0</xilinx:displayName>
<xilinx:coreRevision>2</xilinx:coreRevision> <xilinx:coreRevision>3</xilinx:coreRevision>
<xilinx:coreCreationDateTime>2017-12-09T23:55:52Z</xilinx:coreCreationDateTime> <xilinx:coreCreationDateTime>2018-09-27T18:04:22Z</xilinx:coreCreationDateTime>
<xilinx:tags> <xilinx:tags>
<xilinx:tag xilinx:name="user.org:user:pwm_recorder:1.0_ARCHIVE_LOCATION">/local/ucart/MicroCART/quad/ip_repo/pwm_recorder_1.0</xilinx:tag> <xilinx:tag xilinx:name="user.org:user:pwm_recorder:1.0_ARCHIVE_LOCATION">/local/ucart/MicroCART/quad/ip_repo/pwm_recorder_1.0</xilinx:tag>
</xilinx:tags> </xilinx:tags>
</xilinx:coreExtensions> </xilinx:coreExtensions>
<xilinx:packagingInfo> <xilinx:packagingInfo>
<xilinx:xilinxVersion>2017.1</xilinx:xilinxVersion> <xilinx:xilinxVersion>2018.2.1</xilinx:xilinxVersion>
<xilinx:checksum xilinx:scope="busInterfaces" xilinx:value="cebbc925"/> <xilinx:checksum xilinx:scope="busInterfaces" xilinx:value="9a0bb3a5"/>
<xilinx:checksum xilinx:scope="memoryMaps" xilinx:value="59f5074b"/> <xilinx:checksum xilinx:scope="memoryMaps" xilinx:value="c30980da"/>
<xilinx:checksum xilinx:scope="fileGroups" xilinx:value="940b66fe"/> <xilinx:checksum xilinx:scope="fileGroups" xilinx:value="3919f8f0"/>
<xilinx:checksum xilinx:scope="ports" xilinx:value="55925bde"/> <xilinx:checksum xilinx:scope="ports" xilinx:value="266b534b"/>
<xilinx:checksum xilinx:scope="hdlParameters" xilinx:value="1826240f"/> <xilinx:checksum xilinx:scope="hdlParameters" xilinx:value="f9a38560"/>
<xilinx:checksum xilinx:scope="parameters" xilinx:value="dd451e08"/> <xilinx:checksum xilinx:scope="parameters" xilinx:value="4a81a732"/>
</xilinx:packagingInfo> </xilinx:packagingInfo>
</spirit:vendorExtensions> </spirit:vendorExtensions>
</spirit:component> </spirit:component>
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 09/27/2018 12:05:17 PM
-- Design Name:
-- Module Name: kernel_tester - testbench
-- Project Name:
-- Target Devices:
-- Tool Versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
USE ieee.numeric_std.all;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity kernel_tester is
-- Port ( );
end kernel_tester;
architecture testbench of kernel_tester is
component pwm_rec is
port(
clk : in std_logic;
reset_n : in std_logic;
input_signal : in std_logic;
write_o : out std_logic;
count_out : out std_logic_vector(31 downto 0));
end component;
constant CLK_HPER : time := 20 ns;
signal clk : std_logic;
signal pwm : std_logic;
signal reset_n : std_logic;
signal count : std_logic_vector(31 downto 0);
signal write : std_logic;
signal done : std_logic := '0';
begin
UUT: pwm_rec
port map(
clk => clk,
reset_n => reset_n,
input_signal => pwm,
write_o => write,
count_out => count);
test_process: process
variable period : integer;
begin
reset_n <='0';
wait for 2*CLK_HPER;
reset_n <='1';
period := 100;
pwm <= '0';
wait for CLK_HPER*2*20;
pwm <= '1';
wait for period*2*CLK_HPER;
pwm <= '0';
wait until write='1';
ASSERT count=std_logic_vector(to_unsigned(period, 32)) REPORT "Incorrect COUNT result" SEVERITY FAILURE;
period := 200;
pwm <= '0';
wait for CLK_HPER*2*20;
pwm <= '1';
wait for period*2*CLK_HPER;
pwm <= '0';
wait until write='1';
ASSERT count=std_logic_vector(to_unsigned(period, 32)) REPORT "Incorrect COUNT result" SEVERITY FAILURE;
period := 300;
pwm <= '0';
wait for CLK_HPER*2*20;
pwm <= '1';
wait for period*2*CLK_HPER;
pwm <= '0';
wait until write='1';
ASSERT count=std_logic_vector(to_unsigned(period, 32)) REPORT "Incorrect COUNT result" SEVERITY FAILURE;
period := 400;
pwm <= '0';
wait for CLK_HPER*2*20;
pwm <= '1';
wait for period*2*CLK_HPER;
pwm <= '0';
wait until write='1';
ASSERT count=std_logic_vector(to_unsigned(period, 32)) REPORT "Incorrect COUNT result" SEVERITY FAILURE;
period := 10;
pwm <= '0';
wait for CLK_HPER*2*20;
pwm <= '1';
wait for period*2*CLK_HPER;
pwm <= '0';
for t in 0 to 100 loop
wait for 2*CLK_HPER;
ASSERT write='0' REPORT "Glitch not Ignored" SEVERITY FAILURE;
end loop;
-- Run for 45, glitch for 10, then run for 45, expect a result of 100
period := 100;
pwm <= '0';
wait for CLK_HPER*2*20;
pwm <= '1';
wait for 45*2*CLK_HPER;
pwm <= '0';
wait for 10*2*CLK_HPER;
pwm <= '1';
wait for 45*2*CLK_HPER;
pwm <= '0';
wait until write='1';
ASSERT count=std_logic_vector(to_unsigned(period, 32)) REPORT "Incorrect COUNT result" SEVERITY FAILURE;
done <='1';
wait;
end process;
clock_proc: process
begin
clk <= '0';
wait for CLK_HPER;
clk <= '1';
wait for CLK_HPER;
if (done = '1') then wait; end if;
end process;
end testbench;
...@@ -62,6 +62,14 @@ begin ...@@ -62,6 +62,14 @@ begin
counter <= x"00000000"; counter <= x"00000000";
current <= '0'; current <= '0';
write_o <= '0'; write_o <= '0';
-- Neither all high or all low
elsif (current = '1') then
current <= '1';
counter <= counter + 1;
write_o <= '0';
end if; end if;
end if; end if;
end process; end process;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment