]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/lx-rocon.git/commitdiff
Major refactorization in hw
authorMartin Meloun <meloumar@cmp.felk.cvut.cz>
Wed, 2 Oct 2013 10:01:09 +0000 (12:01 +0200)
committerMartin Meloun <meloumar@cmp.felk.cvut.cz>
Wed, 2 Oct 2013 10:01:09 +0000 (12:01 +0200)
25 files changed:
hw/bus_calibration.vhd
hw/bus_irc.vhd
hw/bus_tumbl.vhd
hw/calibration_read_register.vhd
hw/calibration_write_register.vhd
hw/dff.vhd
hw/dff2.vhd
hw/irc_reader.vhd
hw/irc_register.vhd
hw/lx-rocon_firmware/start.S
hw/lx-rocon_tumbl/lx_rocon_dmem.vhd
hw/lx-rocon_tumbl/lx_rocon_gprf_abd.vhd
hw/lx-rocon_tumbl/lx_rocon_imem.vhd
hw/lx-rocon_tumbl/lx_rocon_tumbl.vhd
hw/lx-rocon_tumbl/tb/lx_rocon_tumbl_tb.vhd [deleted file]
hw/lx_rocon_pkg.vhd
hw/lx_rocon_top.prj
hw/lx_rocon_top.vhd
hw/memory_region.vhd [deleted file]
hw/qcounter.vhd
hw/tb/irc_reader_tb.vhd [deleted file]
hw/tb/irc_region_tb.vhd [deleted file]
hw/tb/irc_register_tb.vhd [deleted file]
hw/tb/qcounter_tb.vhd [deleted file]
submodule/tumbl

index a7bddf58a438fa1d0eeb44d677364d8afa237fd8..2c63a6a83f28093c6de9c5b06f5b2cf22e2bdc4c 100644 (file)
@@ -12,44 +12,39 @@ entity bus_calibration is
        port
        (
                -- Clock
-               clk         : in std_logic;
-
+               clk_i     : in std_logic;
                -- Reset
-               reset       : in std_logic;
-
+               reset_i   : in std_logic;
                -- Chip enable
-               ce          : in std_logic;
-
+               ce_i      : in std_logic;
                -- Address
-               address     : in std_logic_vector(1 downto 0);
-
+               address_i : in std_logic_vector(1 downto 0);
                -- Data bus
-               data_in     : in std_logic_vector(31 downto 0);
-               data_out    : out std_logic_vector(31 downto 0);
-
+               data_i    : in std_logic_vector(31 downto 0);
+               data_o    : out std_logic_vector(31 downto 0);
                -- Bus signals
-               rd          : in std_logic;
-               bls         : in std_logic_vector(3 downto 0);
-               ta          : out std_logic
+               rd_i      : in std_logic;
+               bls_i     : in std_logic_vector(3 downto 0);
+               ta_o      : out std_logic
        );
 end bus_calibration;
 
 architecture Behavioral of bus_calibration is
 
        -- Wiring
-       signal read1_out : std_logic_vector(31 downto 0);
-       signal read1_ta : std_logic;
+       signal read1_out_s  : std_logic_vector(31 downto 0);
+       signal read1_ta_s   : std_logic;
 
-       signal read2_out : std_logic_vector(31 downto 0);
-       signal read2_ta : std_logic;
+       signal read2_out_s  : std_logic_vector(31 downto 0);
+       signal read2_ta_s   : std_logic;
 
-       signal write1_out : std_logic_vector(31 downto 0);
-       signal write1_ta : std_logic;
-       signal write1_ce : std_logic;
+       signal write1_out_s : std_logic_vector(31 downto 0);
+       signal write1_ta_s  : std_logic;
+       signal write1_ce_s  : std_logic;
 
-       signal write2_out : std_logic_vector(31 downto 0);
-       signal write2_ta : std_logic;
-       signal write2_ce : std_logic;
+       signal write2_out_s : std_logic_vector(31 downto 0);
+       signal write2_ta_s  : std_logic;
+       signal write2_ce_s  : std_logic;
 
 begin
 
@@ -57,90 +52,89 @@ begin
        memory_bus_calib_read1: calibration_read_register
        generic map
        (
-               id => "10101010101010101010101010101010"
+               id_g   => "10101010101010101010101010101010"
        )
        port map
        (
-               rd => rd,
-               ta => read1_ta,
-               data_out => read1_out
+               rd_i   => rd_i,
+               ta_o   => read1_ta_s,
+               data_o => read1_out_s
        );
 
        -- Second read calibration register (=0x55555555)
        memory_bus_calib_read2: calibration_read_register
        generic map
        (
-               id => "01010101010101010101010101010101"
+               id_g   => "01010101010101010101010101010101"
        )
        port map
        (
-               rd => rd,
-               ta => read2_ta,
-               data_out => read2_out
+               rd_i   => rd_i,
+               ta_o   => read2_ta_s,
+               data_o => read2_out_s
        );
 
        -- First write calibration register
        memory_bus_calib_write1: calibration_write_register
        port map
        (
-               clk => clk,
-               ce => write1_ce,
-               reset => reset,
-               rd => rd,
-               bls => bls,
-               ta => write1_ta,
-               data_in => data_in,
-               data_out => write1_out
+               clk_i   => clk_i,
+               ce_i    => write1_ce_s,
+               reset_i => reset_i,
+               rd_i    => rd_i,
+               bls_i   => bls_i,
+               ta_o    => write1_ta_s,
+               data_i  => data_i,
+               data_o  => write1_out_s
        );
 
        -- Second write calibration register
        memory_bus_calib_write2: calibration_write_register
        port map
        (
-               clk => clk,
-               ce => write2_ce,
-               reset => reset,
-               rd => rd,
-               bls => bls,
-               ta => write2_ta,
-               data_in => data_in,
-               data_out => write2_out
+               clk_i   => clk_i,
+               ce_i    => write2_ce_s,
+               reset_i => reset_i,
+               rd_i    => rd_i,
+               bls_i   => bls_i,
+               ta_o    => write2_ta_s,
+               data_i  => data_i,
+               data_o  => write2_out_s
        );
 
        -- Processes
-       update: process (clk)
+update:
+       process (clk_i)
        begin
 
-               if clk = '1' and clk'event then
+               if clk_i = '1' and clk_i'event then
 
                        -- Defaults
-                       write1_ce <= '1';
-                       write2_ce <= '1';
-
-                       ta <= '1';
-                       data_out <= (others => 'X');
+                       write1_ce_s <= '0';
+                       write2_ce_s <= '0';
+                       ta_o        <= '0';
+                       data_o      <= (others => 'X');
 
                        -- Chip Enable
                        -- This will delay the register read / write
-                       if ce = '0' then
-                               case address is
-                                       when "00" => -- Read1
-                                               ta <= read1_ta;
-                                               data_out <= read1_out;
-                                       when "01" => -- Read2
-                                               ta <= read2_ta;
-                                               data_out <= read2_out;
+                       if ce_i = '1' then
+                               case address_i is
+                                       when "00" =>  -- Read1
+                                               ta_o        <= read1_ta_s;
+                                               data_o      <= read1_out_s;
+                                       when "01" =>  -- Read2
+                                               ta_o        <= read2_ta_s;
+                                               data_o      <= read2_out_s;
                                        when "10" => -- Write1
-                                               write1_ce <= '0';
-                                               ta <= write1_ta;
-                                               data_out <= write1_out;
-                                       when "11" => -- Write2
-                                               write2_ce <= '0';
-                                               ta <= write2_ta;
-                                               data_out <= write2_out;
+                                               write1_ce_s <= '1';
+                                               ta_o        <= write1_ta_s;
+                                               data_o      <= write1_out_s;
+                                       when "11" =>  -- Write2
+                                               write2_ce_s <= '1';
+                                               ta_o        <= write2_ta_s;
+                                               data_o      <= write2_out_s;
                                        when others =>
-                                               ta <= '1';
-                                               data_out <= (others => 'X');
+                                               null;
                                end case;
                        end if;
 
index 8e93b3f63e8adf4f2242ff2a1d0790996c07b924..4f835f0d1546ccc9e3c0525f61568533b1927f5a 100644 (file)
@@ -10,64 +10,59 @@ use work.lx_rocon_pkg.all;
 entity bus_irc is
        port
        (
-               clk         : in std_logic;
-               reset       : in std_logic;
-
+               clk_i        : in std_logic;
+               reset_i      : in std_logic;
                -- Address (needs just last 4 bits, rest is wired to CE)
-               address     : in std_logic_vector(3 downto 0);
-               ce          : in std_logic;
-
+               address_i    : in std_logic_vector(3 downto 0);
+               ce_i         : in std_logic;
                -- Data bus
-               data_in     : in std_logic; -- 1 bit input
-               data_out    : out std_logic_vector(31 downto 0);
-
+               data_i       : in std_logic; -- 1 bit input
+               data_o       : out std_logic_vector(31 downto 0);
                -- Bus signals
-               rd          : in std_logic;
-               ta          : out std_logic;
-               wr          : in std_logic;
-
+               rd_i         : in std_logic;
+               ta_o         : out std_logic;
+               wr_i         : in std_logic;
                -- Signals for IRC
-               irc1_a      : in std_logic;
-               irc1_b      : in std_logic;
-               irc1_index  : in std_logic;
-               irc1_mark   : in std_logic;
-
-               irc2_a      : in std_logic;
-               irc2_b      : in std_logic;
-               irc2_index  : in std_logic;
-               irc2_mark   : in std_logic;
-
-               irc3_a      : in std_logic;
-               irc3_b      : in std_logic;
-               irc3_index  : in std_logic;
-               irc3_mark   : in std_logic;
-
-               irc4_a      : in std_logic;
-               irc4_b      : in std_logic;
-               irc4_index  : in std_logic;
-               irc4_mark   : in std_logic
-
+               irc1_a_i     : in std_logic;
+               irc1_b_i     : in std_logic;
+               irc1_index_i : in std_logic;
+               irc1_mark_i  : in std_logic;
+               --
+               irc2_a_i     : in std_logic;
+               irc2_b_i     : in std_logic;
+               irc2_index_i : in std_logic;
+               irc2_mark_i  : in std_logic;
+               --
+               irc3_a_i     : in std_logic;
+               irc3_b_i     : in std_logic;
+               irc3_index_i : in std_logic;
+               irc3_mark_i  : in std_logic;
+               --
+               irc4_a_i     : in std_logic;
+               irc4_b_i     : in std_logic;
+               irc4_index_i : in std_logic;
+               irc4_mark_i  : in std_logic
        );
 end bus_irc;
 
 architecture Behavioral of bus_irc is
 
        -- Multiplexer signals
-       signal irc1_out : std_logic_vector(31 downto 0);
-       signal irc1_ta : std_logic;
-       signal irc1_ce : std_logic_vector(1 downto 0);
+       signal irc1_out_s : std_logic_vector(31 downto 0);
+       signal irc1_ta_s  : std_logic;
+       signal irc1_ce_s  : std_logic_vector(1 downto 0);
 
-       signal irc2_out : std_logic_vector(31 downto 0);
-       signal irc2_ta : std_logic;
-       signal irc2_ce : std_logic_vector(1 downto 0);
+       signal irc2_out_s : std_logic_vector(31 downto 0);
+       signal irc2_ta_s  : std_logic;
+       signal irc2_ce_s  : std_logic_vector(1 downto 0);
 
-       signal irc3_out : std_logic_vector(31 downto 0);
-       signal irc3_ta : std_logic;
-       signal irc3_ce : std_logic_vector(1 downto 0);
+       signal irc3_out_s : std_logic_vector(31 downto 0);
+       signal irc3_ta_s  : std_logic;
+       signal irc3_ce_s  : std_logic_vector(1 downto 0);
 
-       signal irc4_out : std_logic_vector(31 downto 0);
-       signal irc4_ta : std_logic;
-       signal irc4_ce : std_logic_vector(1 downto 0);
+       signal irc4_out_s : std_logic_vector(31 downto 0);
+       signal irc4_ta_s  : std_logic;
+       signal irc4_ce_s  : std_logic_vector(1 downto 0);
 
 begin
 
@@ -75,120 +70,120 @@ begin
        irc1: irc_register
        port map
        (
-               clk => clk,
-               reset => reset,
-               a0 => irc1_a,
-               b0 => irc1_b,
-               index0 => irc1_index,
-               mark0 => irc1_mark,
-               data_in => data_in,
-               data_out => irc1_out,
-               ce => irc1_ce,
-               rd => rd,
-               ta => irc1_ta,
-               wr => wr
+               clk_i    => clk_i,
+               reset_i  => reset_i,
+               a0_i     => irc1_a_i,
+               b0_i     => irc1_b_i,
+               index0_i => irc1_index_i,
+               mark0_i  => irc1_mark_i,
+               data_i   => data_i,
+               data_o   => irc1_out_s,
+               ce_i     => irc1_ce_s,
+               rd_i     => rd_i,
+               ta_o     => irc1_ta_s,
+               wr_i     => wr_i
        );
 
        -- IRC for second axis
        irc2: irc_register
        port map
        (
-               clk => clk,
-               reset => reset,
-               a0 => irc2_a,
-               b0 => irc2_b,
-               index0 => irc2_index,
-               mark0 => irc2_mark,
-               data_in => data_in,
-               data_out => irc2_out,
-               ce => irc2_ce,
-               rd => rd,
-               ta => irc2_ta,
-               wr => wr
+               clk_i    => clk_i,
+               reset_i  => reset_i,
+               a0_i     => irc2_a_i,
+               b0_i     => irc2_b_i,
+               index0_i => irc2_index_i,
+               mark0_i  => irc2_mark_i,
+               data_i   => data_i,
+               data_o   => irc2_out_s,
+               ce_i     => irc2_ce_s,
+               rd_i     => rd_i,
+               ta_o     => irc2_ta_s,
+               wr_i     => wr_i
        );
 
        -- IRC for thrid axis
        irc3: irc_register
        port map
        (
-               clk => clk,
-               reset => reset,
-               a0 => irc3_a,
-               b0 => irc3_b,
-               index0 => irc3_index,
-               mark0 => irc3_mark,
-               data_in => data_in,
-               data_out => irc3_out,
-               ce => irc3_ce,
-               rd => rd,
-               ta => irc3_ta,
-               wr => wr
+               clk_i    => clk_i,
+               reset_i  => reset_i,
+               a0_i     => irc3_a_i,
+               b0_i     => irc3_b_i,
+               index0_i => irc3_index_i,
+               mark0_i  => irc3_mark_i,
+               data_i   => data_i,
+               data_o   => irc3_out_s,
+               ce_i     => irc3_ce_s,
+               rd_i     => rd_i,
+               ta_o     => irc3_ta_s,
+               wr_i     => wr_i
        );
 
        -- IRC for fourth axis
        irc4: irc_register
        port map
        (
-               clk => clk,
-               reset => reset,
-               a0 => irc4_a,
-               b0 => irc4_b,
-               index0 => irc4_index,
-               mark0 => irc4_mark,
-               data_in => data_in,
-               data_out => irc4_out,
-               ce => irc4_ce,
-               rd => rd,
-               ta => irc4_ta,
-               wr => wr
+               clk_i    => clk_i,
+               reset_i  => reset_i,
+               a0_i     => irc4_a_i,
+               b0_i     => irc4_b_i,
+               index0_i => irc4_index_i,
+               mark0_i  => irc4_mark_i,
+               data_i   => data_i,
+               data_o   => irc4_out_s,
+               ce_i     => irc4_ce_s,
+               rd_i     => rd_i,
+               ta_o     => irc4_ta_s,
+               wr_i     => wr_i
        );
 
        -- Bus update
-       memory_bus_update: process(ce, address, irc1_out, irc1_ta, irc2_out, irc2_ta,
-                                  irc3_out, irc3_ta, irc4_out, irc4_ta)
+       memory_bus_update: process(ce_i, address_i, irc1_out_s, irc1_ta_s, irc2_out_s, irc2_ta_s,
+                                  irc3_out_s, irc3_ta_s, irc4_out_s, irc4_ta_s)
        begin
 
                -- Reset signals
-               irc1_ce <= "11";
-               irc2_ce <= "11";
-               irc3_ce <= "11";
-               irc4_ce <= "11";
+               -- 11 is the inactive address here
+               irc1_ce_s <= "11";
+               irc2_ce_s <= "11";
+               irc3_ce_s <= "11";
+               irc4_ce_s <= "11";
 
-               ta <= '1';
-               data_out <= (others => 'X');
+               ta_o      <= '0';
+               data_o    <= (others => 'X');
 
-               if ce = '0' then
+               if ce_i = '1' then
 
                        -- We have 4-bit address, and IRC module has 3 registers
                        -- Higher bits choose which IRC module, lower bits are for registers of the module
-                       case address(3 downto 2) is
+                       case address_i(3 downto 2) is
                                when "00" =>
-                                       irc1_ce <= address(1 downto 0);
-                                       data_out <= irc1_out;
-                                       ta <= irc1_ta;
+                                       irc1_ce_s <= address_i(1 downto 0);
+                                       data_o    <= irc1_out_s;
+                                       ta_o      <= irc1_ta_s;
 
                                when "01" =>
-                                       irc2_ce <= address(1 downto 0);
-                                       data_out <= irc2_out;
-                                       ta <= irc2_ta;
+                                       irc2_ce_s <= address_i(1 downto 0);
+                                       data_o    <= irc2_out_s;
+                                       ta_o      <= irc2_ta_s;
 
                                when "10" =>
-                                       irc3_ce <= address(1 downto 0);
-                                       data_out <= irc3_out;
-                                       ta <= irc3_ta;
+                                       irc3_ce_s <= address_i(1 downto 0);
+                                       data_o    <= irc3_out_s;
+                                       ta_o      <= irc3_ta_s;
 
                                when "11" =>
-                                       irc4_ce <= address(1 downto 0);
-                                       data_out <= irc4_out;
-                                       ta <= irc4_ta;
+                                       irc4_ce_s <= address_i(1 downto 0);
+                                       data_o    <= irc4_out_s;
+                                       ta_o      <= irc4_ta_s;
 
-                               when others => NULL;
+                               when others =>
+                                       NULL;
 
                        end case;
-
                end if;
 
        end process;
 
 end Behavioral;
-
index c4405022b2d3269184efef34bdfa26cde975517e..2b028207bd1cc69831fe90a89679dece7fcb9f36 100644 (file)
@@ -13,58 +13,72 @@ entity bus_tumbl is
        port
        (
                -- Clock
-               clk_100m : in std_logic;
-               clk_50m  : in std_logic;
-
+               clk_100m_i      : in std_logic;
+               clk_50m_i       : in std_logic;
                -- Chip enable
-               ce       : in std_logic;
-
+               ce_100m_i       : in std_logic;
                -- Global Reset
-               reset    : in std_logic;
-
+               reset_100m_i    : in std_logic;
                -- Master CPU bus for the memory
-    rd       : in std_logic;
-    bls      : in std_logic_vector(3 downto 0);
-    address  : in std_logic_vector(11 downto 0);
-    data_in  : in std_logic_vector(31 downto 0);
-    data_out : out std_logic_vector(31 downto 0);
-               ta       : out std_logic;
-
+    rd_100m_i       : in std_logic;
+    bls_100m_i      : in std_logic_vector(3 downto 0);
+    address_100m_i  : in std_logic_vector(11 downto 0);
+    data_100m_i     : in std_logic_vector(31 downto 0);
+    data_100m_o     : out std_logic_vector(31 downto 0);
+               ta_100m_o       : out std_logic;
                -- Tumbl extrenal memory bus
-               XMEMB_sel_o :  out std_logic;
-               XMEMB_i     :  in DMEMB2CORE_Type;
-               XMEMB_o     :  out CORE2DMEMB_Type
+               XMEMB_sel_50m_o : out std_logic;
+               XMEMB_50m_i     : in DMEMB2CORE_Type;
+               XMEMB_50m_o     : out CORE2DMEMB_Type
   );
 end bus_tumbl;
 
 architecture Behavioral of bus_tumbl is
 
        -- Internal state
-       signal tumbl_reset : std_logic;
-       signal tumbl_halt : std_logic;
-       signal tumbl_int : std_logic;
-       signal tumbl_trace : std_logic;
-       signal tumbl_trace_kick : std_logic; -- driven by 50M clock
-       signal tumbl_trace_kick_ack : std_logic; -- driven by 50M clock
-       signal tumbl_trace_kick_req : std_logic; -- driven by 100M clock
-       signal tumbl_bad_op : std_logic; -- driven by 50M clock
+       -- The following signals are driven by 100M clock
+       signal tumbl_reset_100m_s : std_logic;
+       signal tumbl_halt_100m_s  : std_logic;
+       signal tumbl_int_100m_s   : std_logic;
+       signal tumbl_trace_100m_s : std_logic;
+
+       -- The following signals kick in at 50M clock
+       signal tumbl_reset_50m_s : std_logic;
+       signal tumbl_halt_50m_s  : std_logic;
+       signal tumbl_int_50m_s   : std_logic;
+       signal tumbl_trace_50m_s : std_logic;
+
+       -- Trace kick (since this is "one cycle command", it needs req / ack)
+       signal tumbl_trace_kick_50m_s      : std_logic;
+       signal tumbl_trace_kick_ack_50m_s  : std_logic;
+       signal tumbl_trace_kick_req_100m_s : std_logic;
 
        -- Tumbl PC (copy it with cpu clock and then wire further)
-       signal tumbl_pc : std_logic_vector(31 downto 0); -- driven by 50M clock
+       signal tumbl_pc_50m_s         : std_logic_vector(31 downto 0);
 
        -- Halting using halt instruction
-       signal tumbl_halted : std_logic;
-       signal tumbl_halt_code : std_logic_vector(4 downto 0);
+       -- Driven by 50M clock
+       signal tumbl_halted_50m_s     : std_logic;
+       signal tumbl_halt_code_50m_s  : std_logic_vector(4 downto 0);
+
+       -- Tumbl signals under 100M domain
+       -- Driven by 100M clock
+       -- TODO: Maybe filtered? It still may happen to read them when switching
+       -- despite the 2x clock when going from faster to slower domain.
+       signal tumbl_pc_100m_s        : std_logic_vector(31 downto 0);
+       signal tumbl_halted_100m_s    : std_logic;
+       signal tumbl_halt_code_100m_s : std_logic_vector(4 downto 0);
 
        -- Internal memory signals
-       signal imem_en : std_logic;
-       signal dmem_en : std_logic;
+       -- Driven by 100M clock
+       signal imem_en_100m_s     : std_logic;
+       signal dmem_en_100m_s     : std_logic;
 
-       signal imem_we : std_logic_vector(3 downto 0);
-       signal dmem_we : std_logic_vector(3 downto 0);
+       signal imem_we_100m_s     : std_logic_vector(3 downto 0);
+       signal dmem_we_100m_s     : std_logic_vector(3 downto 0);
 
-       signal imem_dout : std_logic_vector(31 downto 0);
-       signal dmem_dout : std_logic_vector(31 downto 0);
+       signal imem_data_o_100m_s : std_logic_vector(31 downto 0);
+       signal dmem_data_o_100m_s : std_logic_vector(31 downto 0);
 
        -- Internal bus structure
        -- 12 address bits: 2 bits for selection, 10 bits for address
@@ -78,16 +92,14 @@ architecture Behavioral of bus_tumbl is
        -- Registers
        -- 0x000
        --
-       -- Bit 0: R/W - Reset
-       -- Bit 1: R/W - Interrupt
-       -- Bit 2: R/W - Halt
-       -- Bit 3: R/W - Trace
-       -- Bit 4: R - Halted
-       -- Bit 5: R - Done
-       -- Bit 6: R - Bad Op (halts the core until reset)
+       -- Bit 0: RW - Reset
+       -- Bit 1: RW - Interrupt
+       -- Bit 2: RW - Halt
+       -- Bit 3: RW - Trace
+       -- Bit 4: R  - Halted
 
        -- 0x001
-       -- Bit 0: W - Write 1 for trace kick, R - Read internal signals
+       -- Bit 0: W - Write 1 for trace kick
 
        -- 0x002
        -- Tumbl program counter (R)
@@ -110,145 +122,147 @@ begin
        )
        port map
        (
-               clk_i => clk_50m,
-               rst_i => tumbl_reset,
-               halt_i => tumbl_halt,
-               int_i => tumbl_int,
-               trace_i => tumbl_trace,
-               trace_kick_i => tumbl_trace_kick,
+               clk_i        => clk_50m_i,
+               rst_i        => tumbl_reset_50m_s,
+               halt_i       => tumbl_halt_50m_s,
+               int_i        => tumbl_int_50m_s,
+               trace_i      => tumbl_trace_50m_s,
+               trace_kick_i => tumbl_trace_kick_50m_s,
 
-               pc_o => tumbl_pc,
-               halted_o => tumbl_halted,
-               halt_code_o => tumbl_halt_code,
+               pc_o        => tumbl_pc_50m_s,
+               halted_o    => tumbl_halted_50m_s,
+               halt_code_o => tumbl_halt_code_50m_s,
 
                -- Internal memory (instruction)
-               imem_clk => clk_100m,
-    imem_en => imem_en,
-    imem_we => imem_we,
-    imem_addr => address(8 downto 0),
-    imem_din => data_in,
-    imem_dout => imem_dout,
+               imem_clk_i  => clk_100m_i,
+    imem_en_i   => imem_en_100m_s,
+    imem_we_i   => imem_we_100m_s,
+    imem_addr_i => address_100m_i(8 downto 0),
+    imem_data_i => data_100m_i,
+    imem_data_o => imem_data_o_100m_s,
 
                -- Internal memory (data)
-               dmem_clk => clk_100m,
-    dmem_en => dmem_en,
-    dmem_we => dmem_we,
-    dmem_addr => address(9 downto 0),
-    dmem_din => data_in,
-    dmem_dout => dmem_dout,
+               dmem_clk_i  => clk_100m_i,
+    dmem_en_i   => dmem_en_100m_s,
+    dmem_we_i   => dmem_we_100m_s,
+    dmem_addr_i => address_100m_i(9 downto 0),
+    dmem_data_i => data_100m_i,
+    dmem_data_o => dmem_data_o_100m_s,
 
                -- External memory bus
-               XMEMB_sel_o => XMEMB_sel_o,
-               XMEMB_i => XMEMB_i,
-               XMEMB_o => XMEMB_o,
-               --
-               bad_op_o => tumbl_bad_op
+               XMEMB_sel_o => XMEMB_sel_50m_o,
+               XMEMB_i     => XMEMB_50m_i,
+               XMEMB_o     => XMEMB_50m_o
        );
 
        -- Enabling
-       enabling: process(ce, address)
+       enabling: process(ce_100m_i, address_100m_i)
        begin
 
-               if ce = '0' and address(11 downto 10) = "00" then
-                       imem_en <= '1';
+               if ce_100m_i = '1' and address_100m_i(11 downto 10) = "00" then
+                       imem_en_100m_s <= '1';
                else
-                       imem_en <= '0';
+                       imem_en_100m_s <= '0';
                end if;
 
-               if ce = '0' and address(11 downto 10) = "01" then
-                       dmem_en <= '1';
+               if ce_100m_i = '1' and address_100m_i(11 downto 10) = "01" then
+                       dmem_en_100m_s <= '1';
                else
-                       dmem_en <= '0';
+                       dmem_en_100m_s <= '0';
                end if;
 
        end process;
 
        -- Wiring
-       wiring: process(ce, rd, bls, address, imem_en, imem_dout, dmem_en, dmem_dout,
-                       tumbl_reset, tumbl_int, tumbl_halt, tumbl_trace,
-                                                                       tumbl_halted, tumbl_halt_code, tumbl_bad_op, tumbl_pc)
+       -- NOTE: This is only modifying signals inside 100m domain
+       wiring: process(ce_100m_i, rd_100m_i, bls_100m_i, address_100m_i, imem_en_100m_s, imem_data_o_100m_s, dmem_en_100m_s,
+                                                                       dmem_data_o_100m_s, tumbl_reset_100m_s, tumbl_int_100m_s, tumbl_halt_100m_s, tumbl_trace_100m_s,
+                                                                       tumbl_halted_100m_s, tumbl_halt_code_100m_s, tumbl_pc_100m_s)
        begin
 
-               if imem_en = '1' and tumbl_reset = '1' then
-                       imem_we <= not bls;
+               if imem_en_100m_s = '1' then
+                       imem_we_100m_s <= bls_100m_i;
                else
-                       imem_we <= "0000";
+                       imem_we_100m_s <= "0000";
                end if;
 
-               if dmem_en = '1' and tumbl_reset = '1' then
-                       dmem_we <= not bls;
+               if dmem_en_100m_s = '1' then
+                       dmem_we_100m_s <= bls_100m_i;
                else
-                       dmem_we <= "0000";
+                       dmem_we_100m_s <= "0000";
                end if;
 
-               if imem_en = '1' then
-                       data_out <= imem_dout;
-               elsif dmem_en = '1' then
-                       data_out <= dmem_dout;
-               elsif ce = '0' and rd = '0' and address(11 downto 10) = "11" then
-                       if address(9 downto 0) = "0000000000" then
-                               data_out(0) <= tumbl_reset;
-                               data_out(1) <= tumbl_int;
-                               data_out(2) <= tumbl_halt;
-                               data_out(3) <= tumbl_trace;
-                               data_out(4) <= tumbl_halted;
-                               data_out(5) <= tumbl_bad_op;
-                               data_out(31 downto 6) <= (others => '0');
-                       elsif address(9 downto 0) = "0000000010" then
-                               data_out <= tumbl_pc;
-                       elsif address(9 downto 0) = "0000000011" then
-                               data_out(4 downto 0) <= tumbl_halt_code;
-                               data_out(31 downto 5) <= (others => '0');
+               if imem_en_100m_s = '1' then
+                       data_100m_o <= imem_data_o_100m_s;
+               elsif dmem_en_100m_s = '1' then
+                       data_100m_o <= dmem_data_o_100m_s;
+               elsif ce_100m_i = '1' and rd_100m_i = '1' and address_100m_i(11 downto 10) = "11" then
+                       if address_100m_i(9 downto 0) = "0000000000" then
+                               data_100m_o(0) <= tumbl_reset_100m_s;
+                               data_100m_o(1) <= tumbl_int_100m_s;
+                               data_100m_o(2) <= tumbl_halt_100m_s;
+                               data_100m_o(3) <= tumbl_trace_100m_s;
+                               data_100m_o(4) <= tumbl_halted_100m_s;
+                               data_100m_o(31 downto 5) <= (others => '0');
+                       elsif address_100m_i(9 downto 0) = "0000000010" then
+                               data_100m_o <= tumbl_pc_100m_s;
+                       elsif address_100m_i(9 downto 0) = "0000000011" then
+                               data_100m_o(4 downto 0)  <= tumbl_halt_code_100m_s;
+                               data_100m_o(31 downto 5) <= (others => '0');
                        else
-                               data_out <= (others => 'X');
+                               data_100m_o <= (others => 'X');
                        end if;
                else
-                       data_out <= (others => 'X');
+                       data_100m_o <= (others => 'X');
                end if;
 
        end process;
 
        -- Transaction acknowledge and writing to registers
        -- The clock are synchronous!
-       update: process(clk_100m)
+       update: process(clk_100m_i)
        begin
 
                -- Update on the 100 MHz clock
-               if clk_100m = '1' and clk_100m'event then
-                       ta <= '1';
+               if clk_100m_i = '1' and clk_100m_i'event then
+                       ta_100m_o <= '0';
 
-                       if imem_en = '1' or dmem_en = '1' then
-                               ta <= '0';
+                       -- Copy the 50M driven signals to 100M domain
+                       tumbl_pc_100m_s        <= tumbl_pc_50m_s;
+                       tumbl_halted_100m_s    <= tumbl_halted_50m_s;
+                       tumbl_halt_code_100m_s <= tumbl_halt_code_50m_s;
+
+                       if imem_en_100m_s = '1' or dmem_en_100m_s = '1' then
+                               ta_100m_o <= '1';
                        end if;
 
-                       if reset = '1' then
-                               tumbl_reset <= '1';
-                               tumbl_int <= '0';
-                               tumbl_halt <= '0';
-                               tumbl_trace <= '0';
-                               tumbl_trace_kick_req <= '0';
+                       if reset_100m_i = '1' then
+                               tumbl_reset_100m_s            <= '1';
+                               tumbl_int_100m_s              <= '0';
+                               tumbl_halt_100m_s             <= '0';
+                               tumbl_trace_100m_s            <= '0';
+                               tumbl_trace_kick_req_100m_s   <= '0';
                        else
-
-                               if tumbl_trace_kick_ack = '1' then
-                                       tumbl_trace_kick_req <= '0';
+                               if tumbl_trace_kick_ack_50m_s = '1' then
+                                       tumbl_trace_kick_req_100m_s <= '0';
                                end if;
 
-                               if ce = '0' and address(11 downto 10) = "11" then
-                                       if bls(0) = '0' then
-                                               if address(9 downto 0) = "0000000000" then
-                                                       tumbl_reset <= data_in(0);
-                                                       tumbl_int <= data_in(1);
-                                                       tumbl_halt <= data_in(2);
-                                                       tumbl_trace <= data_in(3);
-                                               elsif address(9 downto 0) = "0000000001" then
-                                                       if data_in(0) = '1' and tumbl_trace_kick = '0' then
-                                                               tumbl_trace_kick_req <= '1';
+                               if ce_100m_i = '1' and address_100m_i(11 downto 10) = "11" then
+                                       if bls_100m_i(0) = '1' then
+                                               if address_100m_i(9 downto 0) = "0000000000" then
+                                                       tumbl_reset_100m_s      <= data_100m_i(0);
+                                                       tumbl_int_100m_s        <= data_100m_i(1);
+                                                       tumbl_halt_100m_s       <= data_100m_i(2);
+                                                       tumbl_trace_100m_s      <= data_100m_i(3);
+                                               elsif address_100m_i(9 downto 0) = "0000000001" then
+                                                       if data_100m_i(0) = '1' then
+                                                               tumbl_trace_kick_req_100m_s <= '1';
                                                        end if;
                                                end if;
                                        end if;
 
-                                       if rd = '0' then
-                                               ta <= '0';
+                                       if rd_100m_i = '1' then
+                                               ta_100m_o <= '1';
                                        end if;
                                end if;
                        end if;
@@ -257,26 +271,33 @@ begin
        end process;
 
        -- Update tracing
-       tumbl: process(clk_50m)
+       tumbl: process(clk_50m_i)
        begin
 
                -- Update on the 50 MHz clock
-               if clk_50m = '1' and clk_50m'event then
-
-                       if reset = '1' then
-                               tumbl_trace_kick <= '0';
-                               tumbl_trace_kick_ack <= '0';
+               if clk_50m_i = '1' and clk_50m_i'event then
+
+                       -- Copy the 100M driven signals to their 50M domain
+                       -- and then route them further
+                       tumbl_reset_50m_s <= tumbl_reset_100m_s;
+                       tumbl_int_50m_s   <= tumbl_int_100m_s;
+                       tumbl_halt_50m_s  <= tumbl_halt_100m_s;
+                       tumbl_trace_50m_s <= tumbl_trace_100m_s;
+
+                       if reset_100m_i = '1' then
+                               tumbl_trace_kick_50m_s       <= '0';
+                               tumbl_trace_kick_ack_50m_s   <= '0';
                        else
-                               if tumbl_trace_kick = '0' and tumbl_trace_kick_req = '1' then
-                                       tumbl_trace_kick <= '1';
-                                       tumbl_trace_kick_ack <= '1';
+                               if tumbl_trace_kick_50m_s = '0' and tumbl_trace_kick_req_100m_s = '1' then
+                                       tumbl_trace_kick_50m_s     <= '1';
+                                       tumbl_trace_kick_ack_50m_s <= '1';
                                else
-                                       tumbl_trace_kick <= '0';
+                                       tumbl_trace_kick_50m_s     <= '0';
                                end if;
                        end if;
 
-                       if tumbl_trace_kick_req <= '0' then
-                               tumbl_trace_kick_ack <= '0';
+                       if tumbl_trace_kick_req_100m_s = '0' then
+                               tumbl_trace_kick_ack_50m_s   <= '0';
                        end if;
 
                end if;
@@ -284,4 +305,3 @@ begin
        end process;
 
 end Behavioral;
-
index 86af59466a51feed3665d642e6fa2552c07d1b85..09f07f29434d3b5fb48f7f43c8abf769c42ec005 100644 (file)
@@ -10,28 +10,26 @@ use ieee.numeric_std.all;
 entity calibration_read_register is
   generic
        (
-               id          : std_logic_vector(31 downto 0) := (others => '0')
+               id_g   : std_logic_vector(31 downto 0) := (others => '0')
        );
        port
        (
                -- Data bus (read only)
-               data_out    : out std_logic_vector(31 downto 0);
-
+               data_o : out std_logic_vector(31 downto 0);
                -- Bus signals
-               rd          : in std_logic;
-               ta          : out std_logic
+               rd_i   : in std_logic;
+               ta_o   : out std_logic
        );
 end calibration_read_register;
 
 architecture Behavioral of calibration_read_register is
 begin
 
-       memory_bus: process(rd)
+memory_bus:
+       process(rd_i)
        begin
-
-               ta <= rd;
-               data_out <= id;
-
+               ta_o     <= rd_i;
+               data_o   <= id_g;
        end process;
 
 end Behavioral;
index 4dd7330e397ea9202a112ee6bb6f68ae7addd914..33922fbafc58a7963fc3ad7b2d3b9254912f0120 100644 (file)
@@ -11,72 +11,59 @@ entity calibration_write_register is
        port
        (
                -- Clock
-               clk         : in std_logic;
-
+               clk_i   : in std_logic;
                -- Reset
-               reset       : in std_logic;
-
+               reset_i : in std_logic;
                -- Chip enable
-               ce          : in std_logic;
-
+               ce_i    : in std_logic;
                -- Data bus
-               data_in     : in std_logic_vector(31 downto 0);
-               data_out    : out std_logic_vector(31 downto 0);
-
+               data_i  : in std_logic_vector(31 downto 0);
+               data_o  : out std_logic_vector(31 downto 0);
                -- Bus signals
-               rd          : in std_logic;
-               bls         : in std_logic_vector(3 downto 0);
-               ta          : out std_logic
+               rd_i    : in std_logic;
+               bls_i   : in std_logic_vector(3 downto 0);
+               ta_o    : out std_logic
        );
 end calibration_write_register;
 
 architecture Behavioral of calibration_write_register is
-       signal value : std_logic_vector(31 downto 0);
+       signal value_s : std_logic_vector(31 downto 0);
 begin
 
        -- Read is immideate
-       memory_bus_read: process(rd, value)
+       memory_bus_read: process(rd_i, value_s)
        begin
-
-               ta <= rd;
-               data_out <= value;
-
+               ta_o   <= rd_i;
+               data_o <= value_s;
        end process;
 
        -- Write waits for clock
-       memory_bus_write: process(clk)
+       memory_bus_write: process(clk_i)
        begin
 
-               if clk = '1' and clk'event then
+               if clk_i = '1' and clk_i'event then
 
-                       if reset = '1' then
-                               value <= (others => '0');
-                       end if;
+                       if reset_i = '1' then
+                               value_s <= (others => '0');
+                       else
 
-                       if ce = '0' then
+                               if ce_i = '1' and bls_i /= "0000" then
 
-                               if reset = '0' and bls /= "1111" then
-
-                                       if bls(0) = '0' then
-                                               value(7 downto 0) <= data_in(7 downto 0);
+                                       if bls_i(0) = '1' then
+                                               value_s(7 downto 0)   <= data_i(7 downto 0);
                                        end if;
-
-                                       if bls(1) = '0' then
-                                               value(15 downto 8) <= data_in(15 downto 8);
+                                       if bls_i(1) = '1' then
+                                               value_s(15 downto 8)  <= data_i(15 downto 8);
                                        end if;
-
-                                       if bls(2) = '0' then
-                                               value(23 downto 16) <= data_in(23 downto 16);
+                                       if bls_i(2) = '1' then
+                                               value_s(23 downto 16) <= data_i(23 downto 16);
                                        end if;
-
-                                       if bls(3) = '0' then
-                                               value(31 downto 24) <= data_in(31 downto 24);
+                                       if bls_i(3) = '1' then
+                                               value_s(31 downto 24) <= data_i(31 downto 24);
                                        end if;
 
                                end if;
-
                        end if;
-
                end if;
 
        end process;
index 34e187bf21f2befa0bd67eb20c42122b426c0577..10da173b797ac3ad61bf33a45bcb97d97606c9d4 100644 (file)
@@ -9,25 +9,24 @@ use ieee.numeric_std.all;
 entity dff is
   port
        (
-    clk   : in std_logic;
-               reset : in std_logic;
-    d     : in std_logic;
-    q     : out std_logic
+    clk_i   : in std_logic;
+               reset_i : in std_logic;
+    d_i     : in std_logic;
+    q_o     : out std_logic
   );
-end dff;
+end dff2;
 
 architecture behavioral of dff is
-  signal data: std_logic;
 begin
-  q <= data;
 
-  seq: process(clk)
-  begin
-    if clk = '1' and clk'event then
-                       if reset = '1' then
-                               data <= '0';
+seq:
+       process(clk_i)
+       begin
+    if clk_i = '1' and clk_i'event then
+                       if reset_i = '1' then
+                               q_o <= '0';
                        else
-                               data <= d;
+                               q_o <= d_i;
                        end if;
                end if;
   end process;
index 28d92b4d137b42b8bcbd85c33340f05764aea0c0..c0d62dde99e4eb1a35505e2467bd77d1a805480d 100644 (file)
@@ -9,32 +9,33 @@ use ieee.numeric_std.all;
 entity dff2 is
   port
        (
-    clk   : in std_logic;
-               reset : in std_logic;
-    d     : in std_logic;
-    q     : out std_logic
+    clk_i   : in std_logic;
+               reset_i : in std_logic;
+    d_i     : in std_logic;
+    q_o     : out std_logic
   );
 end dff2;
 
 architecture behavioral of dff2 is
-       signal last_d : std_logic;
-  signal data: std_logic;
+       signal last_d_s : std_logic;
+  signal data_s : std_logic;
 begin
-  q <= data;
+  q_o <= data_s;
 
-  seq: process(clk)
-  begin
-    if clk = '1' and clk'event then
-                       if reset = '1' then
-                               last_d <= '0';
-                               data <= '0';
+seq:
+       process(clk_i)
+       begin
+    if clk_i = '1' and clk_i'event then
+                       if reset_i = '1' then
+                               last_d_s <= '0';
+                               data_s <= '0';
                        else
-                               if d = last_d then
-                                       data <= d;
+                               if d_i = last_d_s then
+                                       data_s <= d_i;
                                end if;
                        end if;
 
-                       last_d <= d;
+                       last_d_s <= d_i;
                end if;
   end process;
 
index b4cd1776e92b15d335d06638815aadbeeec70609..e31ac1c327a3443e383fcdb658b94cd18589c21a 100644 (file)
@@ -10,17 +10,17 @@ use work.lx_rocon_pkg.all;
 entity irc_reader is
        port
        (
-    clk          : in std_logic;
-    reset        : in std_logic;
-    a0, b0       : in std_logic;
-               index0       : in std_logic;
-               mark0        : in std_logic;
-
-    qcount       : out std_logic_vector (31 downto 0);
-               qcount_index : out std_logic_vector (31 downto 0);
-    ab_event     : out std_logic;
-    ab_error     : out std_logic;
-               out_mark     : out std_logic
+               -- Inputs
+    clk_i          : in std_logic;
+    reset_i        : in std_logic;
+    a0_i, b0_i     : in std_logic;
+               index0_i       : in std_logic;
+               mark0_i        : in std_logic;
+               -- Outputs
+    qcount_o       : out std_logic_vector (31 downto 0);
+               qcount_index_o : out std_logic_vector (31 downto 0);
+    ab_error_o     : out std_logic;
+               mark_o         : out std_logic
   );
 end irc_reader;
 
@@ -31,28 +31,28 @@ architecture rtl of irc_reader is
        dff_mark: dff2
        port map
        (
-               clk => clk,
-               reset => '0',
-               d => mark0,
-               q => out_mark
+               clk_i   => clk_i,
+               reset_i => '0',
+               d_i     => mark0_i,
+               q_o     => mark_o
        );
 
        qctr: qcounter
        port map
        (
-               clk => clk,
-               reset => reset,
-               a0 => a0,
-               b0 => b0,
-               index0 => index0,
-               qcount => qcount,
-               qcount_index => qcount_index,
-               ab_event => ab_event,
-               ab_error => ab_error,
-               a_rise => open,
-               a_fall => open,
-               b_rise => open,
-               b_fall => open
+               clk_i          => clk_i,
+               reset_i        => reset_i,
+               a0_i           => a0_i,
+               b0_i           => b0_i,
+               index0_i       => index0_i,
+               qcount_o       => qcount_o,
+               qcount_index_o => qcount_index_o,
+               ab_error_o     => ab_error_o,
+               ab_event_o     => open,
+               a_rise_o       => open,
+               a_fall_o       => open,
+               b_rise_o       => open,
+               b_fall_o       => open
        );
 
 end rtl;
index 50a215c0af69ded8730ff2e47fbb532d984cc442..b1e81db84f7607b68c214367d325d507289a1f69 100644 (file)
@@ -10,104 +10,83 @@ use work.lx_rocon_pkg.all;
 entity irc_register is
        port
        (
-               clk         : in std_logic;
-               reset       : in std_logic;
-               a0, b0      : in std_logic;
-               index0      : in std_logic;
-               mark0       : in std_logic;
-
+               clk_i       : in std_logic;
+               reset_i     : in std_logic;
+               a0_i, b0_i  : in std_logic;
+               index0_i    : in std_logic;
+               mark0_i     : in std_logic;
                -- Data bus for Master CPU
-               data_in    : in std_logic; -- 1 bit input
-               data_out   : out std_logic_vector(31 downto 0);
-
+               data_i      : in std_logic; -- 1 bit input
+               data_o      : out std_logic_vector(31 downto 0);
                -- Chip Enable signal (two registers; one for IRC counter (readonly) other for status (R/W))
-               ce         : in std_logic_vector(1 downto 0);
-
+               ce_i        : in std_logic_vector(1 downto 0);
                -- Reading / writing signals (needs only one byte for writing)
-               rd         : in std_logic;
-               ta         : out std_logic;
-               wr         : in std_logic
+               rd_i        : in std_logic;
+               ta_o        : out std_logic;
+               wr_i        : in std_logic
        );
 end irc_register;
 
 architecture Behavioral of irc_register is
-       signal qcount_error      : std_logic;
-       signal qcount            : std_logic_vector (31 downto 0);
-       signal qcount_index      : std_logic_vector (31 downto 0);
-       signal ab_event          : std_logic;
-       signal ab_error          : std_logic;
-       signal out_mark          : std_logic;
-
-       component irc_reader
-       port
-       (
-               clk          : in std_logic;
-               reset        : in std_logic;
-               a0, b0       : in std_logic;
-               index0       : in std_logic;
-               mark0        : in std_logic;
-
-               qcount       : out std_logic_vector (31 downto 0);
-               qcount_index : out std_logic_vector (31 downto 0);
-               ab_event     : out std_logic;
-               ab_error     : out std_logic;
-               out_mark     : out std_logic
-       );
-       end component;
+
+       signal qcount_error_s    : std_logic;
+       signal qcount_s          : std_logic_vector (31 downto 0);
+       signal qcount_index_s    : std_logic_vector (31 downto 0);
+       signal ab_event_s        : std_logic;
+       signal ab_error_s        : std_logic;
+       signal mark_s            : std_logic;
 
 begin
 
        reader: irc_reader
        port map
        (
-               clk => clk,
-               reset => reset,
-               a0 => a0,
-               b0 => b0,
-               index0 => index0,
-               mark0 => mark0,
-               qcount => qcount,
-               qcount_index => qcount_index,
-               ab_event => ab_event,
-               ab_error => ab_error,
-               out_mark => out_mark
+               clk_i          => clk_i,
+               reset_i        => reset_i,
+               a0_i           => a0_i,
+               b0_i           => b0_i,
+               index0_i       => index0_i,
+               mark0_i        => mark0_i,
+               qcount_o       => qcount_s,
+               qcount_index_o => qcount_index_s,
+               ab_error_o     => ab_error_s,
+               mark_o         => mark_s
        );
 
-       update: process(clk)
+update:
+       process(clk_i)
        begin
-               if clk = '1' and clk'event then
+               if clk_i = '1' and clk_i'event then
                        -- Latches using it's own value - requires synchronous handling
-                       if (reset = '1') or (ce = "10" and wr = '0' and data_in = '0') then
-                               qcount_error <= '0';
+                       if (reset_i = '1') or (ce_i = "10" and wr_i = '1' and data_i = '1') then
+                               qcount_error_s <= '0';
                        else
-                               qcount_error <= qcount_error or ab_error;
+                               qcount_error_s <= qcount_error_s or ab_error_s;
                        end if;
                end if;
 
        end process;
 
-
-       memory_bus: process(ce, rd, qcount, qcount_index, qcount_error, ab_event, ab_error, out_mark)
+memory_bus:
+       process(ce_i, rd_i, qcount_s, qcount_index_s, qcount_error_s, ab_error_s, mark_s)
        begin
 
                -- Reset signals
-               ta <= rd;
-               data_out <= (others => 'X');
+               ta_o   <= rd_i;
+               data_o <= (others => 'X');
 
                -- Check chip enable
-               case ce is
+               case ce_i is
                        when "00" =>
-                               data_out <= qcount;
+                               data_o              <= qcount_s;
 
                        when "01" =>
-                               data_out <= qcount_index;
+                               data_o              <= qcount_index_s;
 
                        when "10" =>
-                               data_out(0) <= ab_event;
-                               data_out(1) <= ab_error;
-                               data_out(2) <= qcount_error;
-                               data_out(3) <= out_mark;
-                               data_out(31 downto 4) <= (others => '0');
+                               data_o(0)           <= qcount_error_s;
+                               data_o(1)           <= mark_s;
+                               data_o(31 downto 2) <= (others => '0');
 
                        when others => NULL;
 
@@ -116,4 +95,3 @@ begin
        end process;
 
 end Behavioral;
-
index 90903b43c5675979d48e516273e8320373ae7670..136809fd647ff907d26737242a24b38b1073995b 100644 (file)
@@ -52,10 +52,10 @@ _main:
        bgti     r18, .Lloopdata
 .Lenddata:
        /* Init default values */
-       brli    r15, init_defvals
+       brli     r15, init_defvals
 
        /* Run program */
-       brli    r15, main
+       brli     r15, main
 
        /* End of program */
        halt     0
index b9e3f58a58d905127ab99b484bcb17caf66d9570..f03b256bc4e72a0b587ddbed4de9b29d7eedac6a 100644 (file)
@@ -21,7 +21,6 @@ entity lx_rocon_dmem is
                bsel_i : in std_logic_vector(3 downto 0);
                dat_i  : in std_logic_vector(31 downto 0);
                dat_o  : out std_logic_vector(31 downto 0);
-
                -- Memory wiring for Master CPU
                clk_m  : in std_logic;
     en_m   : in std_logic;
@@ -29,7 +28,6 @@ entity lx_rocon_dmem is
     addr_m : in std_logic_vector(9 downto 0);
     din_m  : in std_logic_vector(31 downto 0);
     dout_m : out std_logic_vector(31 downto 0)
-
        );
 end lx_rocon_dmem;
 
index 3e825a6fa205b7a4d6048edd4fe0f9248293e3ed..1defbed3285d3d59f33e7cbf5a3db394beb454dd 100644 (file)
@@ -16,7 +16,7 @@ entity lx_rocon_gprf_abd is
                clk_i        :  in std_logic;
                rst_i        :  in std_logic;
                clken_i      :  in std_logic;
-
+               --
                ID2GPRF_i    :  in ID2GPRF_Type;
                MEM_WRB_i    :  in WRB_Type;
                GPRF2EX_o    :  out GPRF2EX_Type
index fc61dc648340862b8e594f82860d79b3e02e2387..ce26361c61e4addb3581bd67320f1f9b39290c38 100644 (file)
@@ -14,11 +14,10 @@ entity lx_rocon_imem is
        port
        (
                -- Memory wiring for Tumbl
-               clk_i : in std_logic;
-               cs_i  : in std_logic;
-               adr_i : in std_logic_vector(10 downto 2);
-               dat_o : out std_logic_vector(31 downto 0);
-
+               clk_i  : in std_logic;
+               cs_i   : in std_logic;
+               adr_i  : in std_logic_vector(10 downto 2);
+               dat_o  : out std_logic_vector(31 downto 0);
                -- Memory wiring for Master CPU
                clk_m  : in std_logic;
     en_m   : in std_logic;
@@ -26,7 +25,6 @@ entity lx_rocon_imem is
     addr_m : in std_logic_vector(8 downto 0);
     din_m  : in std_logic_vector(31 downto 0);
     dout_m : out std_logic_vector(31 downto 0)
-
        );
 end lx_rocon_imem;
 
index 8e7d7f59af503fc2f5c02051249bb4e1c31898c8..a0957ec19aa118a94d42b82e51a4fde28ca12ecb 100644 (file)
@@ -13,11 +13,11 @@ use work.lx_rocon_pkg.all;
 entity lx_rocon_tumbl is
        generic
        (
-               IMEM_ABITS_g : positive := 11;
-               DMEM_ABITS_g : positive := 12;
+               IMEM_ABITS_g         : positive := 11;
+               DMEM_ABITS_g         : positive := 12;
                --
-               USE_HW_MUL_g  boolean := true;
-               USE_BARREL_g  boolean := true;
+               USE_HW_MUL_g         : boolean := true;
+               USE_BARREL_g         : boolean := true;
                COMPATIBILITY_MODE_g : boolean := false
        );
        port
@@ -28,36 +28,29 @@ entity lx_rocon_tumbl is
                int_i        :  in std_logic;
                trace_i      :  in std_logic;
                trace_kick_i :  in std_logic;
-
                -- Program counter
                pc_o         : out std_logic_vector(31 downto 0);
-
                -- Internal halt (remove with trace kick)
                halted_o     : out std_logic;
                halt_code_o  : out std_logic_vector(4 downto 0);
-
                -- Internal memory (instruction)
-               imem_clk  : in std_logic;
-    imem_en   : in std_logic;
-    imem_we   : in std_logic_vector(3 downto 0);
-    imem_addr : in std_logic_vector(8 downto 0);
-    imem_din  : in std_logic_vector(31 downto 0);
-    imem_dout : out std_logic_vector(31 downto 0);
-
+               imem_clk_i   : in std_logic;
+    imem_en_i    : in std_logic;
+    imem_we_i    : in std_logic_vector(3 downto 0);
+    imem_addr_i  : in std_logic_vector(8 downto 0);
+    imem_data_i  : in std_logic_vector(31 downto 0);
+    imem_data_o  : out std_logic_vector(31 downto 0);
                -- Internal memory (data)
-               dmem_clk  : in std_logic;
-    dmem_en   : in std_logic;
-    dmem_we   : in std_logic_vector(3 downto 0);
-    dmem_addr : in std_logic_vector(9 downto 0);
-    dmem_din  : in std_logic_vector(31 downto 0);
-    dmem_dout : out std_logic_vector(31 downto 0);
-
+               dmem_clk_i   : in std_logic;
+    dmem_en_i    : in std_logic;
+    dmem_we_i    : in std_logic_vector(3 downto 0);
+    dmem_addr_i  : in std_logic_vector(9 downto 0);
+    dmem_data_i  : in std_logic_vector(31 downto 0);
+    dmem_data_o  : out std_logic_vector(31 downto 0);
                -- External memory bus
-               XMEMB_sel_o :  out std_logic;
-               XMEMB_i     :  in DMEMB2CORE_Type;
-               XMEMB_o     :  out CORE2DMEMB_Type;
-               --
-               bad_op_o    :  out std_logic
+               XMEMB_sel_o  : out std_logic;
+               XMEMB_i      : in DMEMB2CORE_Type;
+               XMEMB_o      : out CORE2DMEMB_Type
        );
 end entity lx_rocon_tumbl;
 
@@ -81,6 +74,7 @@ architecture rtl of lx_rocon_tumbl is
 
        signal IF2ID_s,      IF2ID_r      : IF2ID_Type;
        signal ID2EX_s,      ID2EX_r      : ID2EX_Type;
+       signal delay_bit_r                : std_logic;
        signal ID2GPRF_s                  : ID2GPRF_Type;
        signal GPRF2EX_s                  : GPRF2EX_Type;
        signal EX2IF_s,      EX2IF_r      : EX2IF_Type;
@@ -94,7 +88,6 @@ architecture rtl of lx_rocon_tumbl is
        signal MSR2EX_s                   : MSR_Type;
        signal MEM_REG_s,    MEM_REG_r    : MEM_REG_Type;
        signal dmem_sel_s,   dmem_sel_r   : std_logic;
-       signal bad_op_s                   : std_logic;
        signal HALT_s                     : HALT_Type;
        signal ext_halt_s                 : std_logic;
 
@@ -112,7 +105,6 @@ begin
        pc_o        <= ID2EX_r.program_counter; -- Program counter for EXEQ
        halted_o    <= HALT_s.halt;
        halt_code_o <= HALT_s.halt_code;
-       bad_op_o    <= bad_op_s;
        ext_halt_s  <= halt_i;
 
        imem_really_clken_s <= imem_clken_s and core_clken_s;
@@ -122,17 +114,17 @@ begin
        I_IMEM: lx_rocon_imem
        port map
        (
-               clk_i => clk_i,
-               cs_i  => imem_really_clken_s,
-               adr_i => imem_addr_s((IMEM_ABITS_g-1) downto 2),
-               dat_o => imem_data_s,
+               clk_i  => clk_i,
+               cs_i   => imem_really_clken_s,
+               adr_i  => imem_addr_s((IMEM_ABITS_g-1) downto 2),
+               dat_o  => imem_data_s,
 
-               clk_m => imem_clk,
-               en_m => imem_en,
-               we_m => imem_we,
-               addr_m => imem_addr,
-               din_m => imem_din,
-               dout_m => imem_dout
+               clk_m  => imem_clk_i,
+               en_m   => imem_en_i,
+               we_m   => imem_we_i,
+               addr_m => imem_addr_i,
+               din_m  => imem_data_i,
+               dout_m => imem_data_o
        );
 
        I_DMEM: lx_rocon_dmem
@@ -146,12 +138,12 @@ begin
                dat_i  => c2dmemb_s.data,
                dat_o  => dmem_data_s,
 
-               clk_m => dmem_clk,
-               en_m => dmem_en,
-               we_m => dmem_we,
-               addr_m => dmem_addr,
-               din_m => dmem_din,
-               dout_m => dmem_dout
+               clk_m  => dmem_clk_i,
+               en_m   => dmem_en_i,
+               we_m   => dmem_we_i,
+               addr_m => dmem_addr_i,
+               din_m  => dmem_data_i,
+               dout_m => dmem_data_o
        );
 
        I_FETCH: fetch
@@ -174,9 +166,7 @@ begin
                ID2EX_o     => ID2EX_s,
                --
                INT_CTRL_i  => INT_CTRL_s,
-               ID2CTRL_o   => ID2CTRL_s,
-               --
-               noLiteOpc_o => bad_op_s
+               ID2CTRL_o   => ID2CTRL_s
        );
 
        I_GPRF: lx_rocon_gprf_abd
@@ -195,7 +185,10 @@ begin
        generic map(USE_HW_MUL_g, USE_BARREL_g, COMPATIBILITY_MODE_g)
        port map
        (
+               IF2ID_i      => IF2ID_r,
+               --
                ID2EX_i      => ID2EX_r,
+               delayBit_i   => delay_bit_r,
                GPRF2EX_i    => GPRF2EX_s,
                EX2IF_o      => EX2IF_s,
                EX2CTRL_o    => EX2CTRL_s,
@@ -245,7 +238,6 @@ begin
                clk_i           => clk_i,
                rst_i           => rst_i,
                halt_i          => ext_halt_s,
-               bad_op_i        => bad_op_s,
                int_i           => int_i,
                trace_i         => trace_i,
                trace_kick_i    => trace_kick_i,
@@ -260,6 +252,7 @@ begin
                -- decode to exeq pipeline registers
                ID2EX_REG_i     => ID2EX_s,
                ID2EX_REG_o     => ID2EX_r,
+               delay_bit_o     => delay_bit_r,
                -- GPRF control
                gprf_clken_o    => gprf_clken_s,
                -- exeq to fetch feedback registers
diff --git a/hw/lx-rocon_tumbl/tb/lx_rocon_tumbl_tb.vhd b/hw/lx-rocon_tumbl/tb/lx_rocon_tumbl_tb.vhd
deleted file mode 100644 (file)
index b25f986..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-LIBRARY ieee;
-USE ieee.std_logic_1164.ALL;
-USE ieee.numeric_std.ALL;
-USE work.mbl_Pkg.ALL;
-USE work.lx_rocon_pkg.ALL;
-
--- Tumbl core testbench
-
-ENTITY lx_rocon_tumbl_tb IS
-END lx_rocon_tumbl_tb;
-
-ARCHITECTURE behavior OF lx_rocon_tumbl_tb IS
-
-    -- Component Declaration for the Unit Under Test (UUT)
-
-    COMPONENT lx_rocon_tumbl
-    PORT(
-         clk_i : IN  std_logic;
-         rst_i : IN  std_logic;
-         halt_i : IN  std_logic;
-         int_i : IN  std_logic;
-         trace_i :  IN std_logic;
-         trace_kick_i :  IN std_logic;
-         pc_o  : OUT  std_logic_vector(31 downto 0);
-         imem_clk : IN  std_logic;
-         imem_en : IN  std_logic;
-         imem_we : IN  std_logic_vector(3 downto 0);
-         imem_addr : IN  std_logic_vector(8 downto 0);
-         imem_din : IN  std_logic_vector(31 downto 0);
-         imem_dout : OUT  std_logic_vector(31 downto 0);
-         dmem_clk : IN  std_logic;
-         dmem_en : IN  std_logic;
-         dmem_we : IN  std_logic_vector(3 downto 0);
-         dmem_addr : IN  std_logic_vector(9 downto 0);
-         dmem_din : IN  std_logic_vector(31 downto 0);
-         dmem_dout : OUT  std_logic_vector(31 downto 0);
-         XMEMB_sel_o : OUT  std_logic;
-         XMEMB_i :  IN  DMEMB2CORE_Type;
-                    XMEMB_o :  OUT  CORE2DMEMB_Type;
-         bad_op_o : OUT  std_logic;
-         done_o : OUT  std_logic
-        );
-    END COMPONENT;
-
-
-   --Inputs
-   signal clk_i : std_logic := '0';
-   signal rst_i : std_logic := '0';
-   signal halt_i : std_logic := '0';
-   signal int_i : std_logic := '0';
-        signal trace_i : std_logic := '0';
-        signal trace_kick_i : std_logic := '0';
-   signal imem_clk : std_logic := '0';
-   signal imem_en : std_logic := '0';
-   signal imem_we : std_logic_vector(3 downto 0) := (others => '0');
-   signal imem_addr : std_logic_vector(8 downto 0) := (others => '0');
-   signal imem_din : std_logic_vector(31 downto 0) := (others => '0');
-   signal dmem_clk : std_logic := '0';
-   signal dmem_en : std_logic := '0';
-   signal dmem_we : std_logic_vector(3 downto 0) := (others => '0');
-   signal dmem_addr : std_logic_vector(9 downto 0) := (others => '0');
-   signal dmem_din : std_logic_vector(31 downto 0) := (others => '0');
-   signal XMEMB_i : DMEMB2CORE_Type := (clken => '0', data => (others => '0'), int => '0');
-
-        --Outputs
-        signal pc_o : std_logic_vector(31 downto 0);
-   signal imem_dout : std_logic_vector(31 downto 0);
-   signal dmem_dout : std_logic_vector(31 downto 0);
-   signal XMEMB_sel_o : std_logic;
-   signal XMEMB_o : CORE2DMEMB_Type;
-   signal bad_op_o : std_logic;
-   signal done_o : std_logic;
-
-   -- Clock period definitions
-   constant clk_i_period : time := 20 ns; -- 50 MHz
-   constant imem_clk_period : time := 13.8 ns; -- 72 MHz
-   constant dmem_clk_period : time := 13.8 ns; -- 72 MHz
-
-BEGIN
-
-       -- Instantiate the Unit Under Test (UUT)
-   uut: lx_rocon_tumbl PORT MAP (
-          clk_i => clk_i,
-          rst_i => rst_i,
-          halt_i => halt_i,
-          int_i => int_i,
-                                       trace_i => trace_i,
-                                       trace_kick_i => trace_kick_i,
-                                       pc_o => pc_o,
-          imem_clk => imem_clk,
-          imem_en => imem_en,
-          imem_we => imem_we,
-          imem_addr => imem_addr,
-          imem_din => imem_din,
-          imem_dout => imem_dout,
-          dmem_clk => dmem_clk,
-          dmem_en => dmem_en,
-          dmem_we => dmem_we,
-          dmem_addr => dmem_addr,
-          dmem_din => dmem_din,
-          dmem_dout => dmem_dout,
-          XMEMB_sel_o => XMEMB_sel_o,
-          XMEMB_i => XMEMB_i,
-          XMEMB_o => XMEMB_o,
-          bad_op_o => bad_op_o,
-          done_o => done_o
-        );
-
-   -- Clock process definitions
-   clk_i_process :process
-   begin
-               clk_i <= '0';
-               wait for clk_i_period/2;
-               clk_i <= '1';
-               wait for clk_i_period/2;
-   end process;
-
-   imem_clk_process :process
-   begin
-               imem_clk <= '0';
-               wait for imem_clk_period/2;
-               imem_clk <= '1';
-               wait for imem_clk_period/2;
-   end process;
-
-   dmem_clk_process :process
-   begin
-               dmem_clk <= '0';
-               wait for dmem_clk_period/2;
-               dmem_clk <= '1';
-               wait for dmem_clk_period/2;
-   end process;
-
-
-   -- Stimulus process
-   stim_proc: process
-   begin
-      -- External ModelSim script
-
-      wait;
-   end process;
-
-END;
index a160aecad295ecca1a0748c8183f3e8d8b0422a0..e256ad0b8ee41baaef04906379816e9c7d3ee9f1 100644 (file)
@@ -13,76 +13,80 @@ package lx_rocon_pkg is
        component irc_register
        port
        (
-               clk      : in std_logic;
-               reset    : in std_logic;
-               a0, b0   : in std_logic;
-               index0   : in std_logic;
-               mark0    : in std_logic;
-               data_in  : in std_logic;
-               data_out : out std_logic_vector(31 downto 0);
-               ce       : in std_logic_vector(1 downto 0);
-               rd       : in std_logic;
-               ta       : out std_logic;
-               wr       : in std_logic
+               clk_i       : in std_logic;
+               reset_i     : in std_logic;
+               a0_i, b0_i  : in std_logic;
+               index0_i    : in std_logic;
+               mark0_i     : in std_logic;
+               -- Data bus for Master CPU
+               data_i      : in std_logic; -- 1 bit input
+               data_o      : out std_logic_vector(31 downto 0);
+               -- Chip Enable signal (two registers; one for IRC counter (readonly) other for status (R/W))
+               ce_i        : in std_logic_vector(1 downto 0);
+               -- Reading / writing signals (needs only one byte for writing)
+               rd_i        : in std_logic;
+               ta_o        : out std_logic;
+               wr_i        : in std_logic
        );
        end component;
 
-       -- BCD counter
-       component bcd
-       generic
-       (
-               width      : integer
-       );
+       -- IRC reader
+       component irc_reader
        port
        (
-               reset      : in std_logic;
-               en         : in std_logic;
-               clk        : in std_logic;
-               value      : out std_logic_vector((width-1) downto 0)
-       );
+               -- Inputs
+    clk_i          : in std_logic;
+    reset_i        : in std_logic;
+    a0_i, b0_i     : in std_logic;
+               index0_i       : in std_logic;
+               mark0_i        : in std_logic;
+               -- Outputs
+    qcount_o       : out std_logic_vector (31 downto 0);
+               qcount_index_o : out std_logic_vector (31 downto 0);
+    ab_error_o     : out std_logic;
+               mark_o         : out std_logic
+  );
        end component;
 
        -- Quadcount
        component qcounter
        port
        (
-               clk          : in std_logic;
-               reset        : in std_logic;
-               a0, b0       : in std_logic;
-               index0       : in std_logic;
-
-               a_rise       : out std_logic;
-               a_fall       : out std_logic;
-               b_rise       : out std_logic;
-               b_fall       : out std_logic;
-
-               qcount       : out std_logic_vector (31 downto 0);
-               qcount_index : out std_logic_vector (31 downto 0);
-               ab_event     : out std_logic;
-               ab_error     : out std_logic
-       );
+               -- Inputs
+    clk_i              : in std_logic;
+    reset_i            : in std_logic;
+    a0_i, b0_i         : in std_logic;
+               index0_i           : in std_logic;
+               -- Outputs
+    qcount_o           : out std_logic_vector (31 downto 0);
+               qcount_index_o     : out std_logic_vector (31 downto 0);
+    a_rise_o, a_fall_o : out std_logic;
+               b_rise_o, b_fall_o : out std_logic;
+               ab_event_o         : out std_logic;
+    ab_error_o         : out std_logic
+  );
        end component;
 
        -- D sampler
        component dff
        port
        (
-               clk   : in std_logic;
-               reset : in std_logic;
-               d     : in std_logic;
-               q     : out std_logic
-       );
+    clk_i   : in std_logic;
+               reset_i : in std_logic;
+    d_i     : in std_logic;
+    q_o     : out std_logic
+  );
   end component;
 
        -- D sampler (filtered)
        component dff2
        port
        (
-               clk   : in std_logic;
-               reset : in std_logic;
-               d     : in std_logic;
-               q     : out std_logic
-       );
+    clk_i   : in std_logic;
+               reset_i : in std_logic;
+    d_i     : in std_logic;
+    q_o     : out std_logic
+  );
   end component;
 
        --------------------------------------------------------------------------------
@@ -92,63 +96,69 @@ package lx_rocon_pkg is
        component lx_rocon_tumbl
        generic
        (
-               IMEM_ABITS_g : positive := 12;
-               DMEM_ABITS_g : positive := 12;
+               IMEM_ABITS_g         : positive := 11;
+               DMEM_ABITS_g         : positive := 12;
                --
-               USE_HW_MUL_g  boolean := true;
-               USE_BARREL_g  boolean := true;
-               COMPATIBILITY_MODE_g :  boolean := false
+               USE_HW_MUL_g         : boolean := true;
+               USE_BARREL_g         : boolean := true;
+               COMPATIBILITY_MODE_g : boolean := false
        );
        port
        (
                clk_i        :  in std_logic;
                rst_i        :  in std_logic;
-               halt_i       :  in std_logic;
+         halt_i       :  in std_logic;
                int_i        :  in std_logic;
                trace_i      :  in std_logic;
                trace_kick_i :  in std_logic;
-               pc_o         :  out std_logic_vector(31 downto 0);
+               -- Program counter
+               pc_o         : out std_logic_vector(31 downto 0);
+               -- Internal halt (remove with trace kick)
                halted_o     : out std_logic;
                halt_code_o  : out std_logic_vector(4 downto 0);
-               imem_clk  : in std_logic;
-    imem_en   : in std_logic;
-    imem_we   : in std_logic_vector(3 downto 0);
-    imem_addr : in std_logic_vector(8 downto 0);
-    imem_din  : in std_logic_vector(31 downto 0);
-    imem_dout : out std_logic_vector(31 downto 0);
-               dmem_clk  : in std_logic;
-    dmem_en   : in std_logic;
-    dmem_we   : in std_logic_vector(3 downto 0);
-    dmem_addr : in std_logic_vector(9 downto 0);
-    dmem_din  : in std_logic_vector(31 downto 0);
-    dmem_dout : out std_logic_vector(31 downto 0);
-               XMEMB_sel_o :  out std_logic;
-               XMEMB_i     :  in DMEMB2CORE_Type;
-               XMEMB_o     :  out CORE2DMEMB_Type;
-               bad_op_o    :  out std_logic
+               -- Internal memory (instruction)
+               imem_clk_i   : in std_logic;
+    imem_en_i    : in std_logic;
+    imem_we_i    : in std_logic_vector(3 downto 0);
+    imem_addr_i  : in std_logic_vector(8 downto 0);
+    imem_data_i  : in std_logic_vector(31 downto 0);
+    imem_data_o  : out std_logic_vector(31 downto 0);
+               -- Internal memory (data)
+               dmem_clk_i   : in std_logic;
+    dmem_en_i    : in std_logic;
+    dmem_we_i    : in std_logic_vector(3 downto 0);
+    dmem_addr_i  : in std_logic_vector(9 downto 0);
+    dmem_data_i  : in std_logic_vector(31 downto 0);
+    dmem_data_o  : out std_logic_vector(31 downto 0);
+               -- External memory bus
+               XMEMB_sel_o  : out std_logic;
+               XMEMB_i      : in DMEMB2CORE_Type;
+               XMEMB_o      : out CORE2DMEMB_Type
        );
        end component;
 
        component lx_rocon_imem
        port
        (
-               clk_i : in std_logic;
-               cs_i  : in std_logic;
-               adr_i : in std_logic_vector(10 downto 2);
-               dat_o : out std_logic_vector(31 downto 0);
+               -- Memory wiring for Tumbl
+               clk_i  : in std_logic;
+               cs_i   : in std_logic;
+               adr_i  : in std_logic_vector(10 downto 2);
+               dat_o  : out std_logic_vector(31 downto 0);
+               -- Memory wiring for Master CPU
                clk_m  : in std_logic;
     en_m   : in std_logic;
     we_m   : in std_logic_vector(3 downto 0);
     addr_m : in std_logic_vector(8 downto 0);
     din_m  : in std_logic_vector(31 downto 0);
     dout_m : out std_logic_vector(31 downto 0)
-
        );
        end component;
 
        component lx_rocon_dmem
        port
        (
+    -- Memory wiring for Tumbl
                clk_i  : in std_logic;
                ce_i   : in std_logic;
                adr_i  : in std_logic_vector(11 downto 2);
@@ -156,6 +166,7 @@ package lx_rocon_pkg is
                bsel_i : in std_logic_vector(3 downto 0);
                dat_i  : in std_logic_vector(31 downto 0);
                dat_o  : out std_logic_vector(31 downto 0);
+               -- Memory wiring for Master CPU
                clk_m  : in std_logic;
     en_m   : in std_logic;
     we_m   : in std_logic_vector(3 downto 0);
@@ -171,6 +182,7 @@ package lx_rocon_pkg is
                clk_i        :  in std_logic;
                rst_i        :  in std_logic;
                clken_i      :  in std_logic;
+               --
                ID2GPRF_i    :  in ID2GPRF_Type;
                MEM_WRB_i    :  in WRB_Type;
                GPRF2EX_o    :  out GPRF2EX_Type
@@ -185,13 +197,15 @@ package lx_rocon_pkg is
        component calibration_read_register
        generic
        (
-               id          : std_logic_vector(31 downto 0)
+               id_g   : std_logic_vector(31 downto 0) := (others => '0')
        );
        port
        (
-               data_out    : out std_logic_vector(31 downto 0);
-               rd          : in std_logic;
-               ta          : out std_logic
+               -- Data bus (read only)
+               data_o : out std_logic_vector(31 downto 0);
+               -- Bus signals
+               rd_i   : in std_logic;
+               ta_o   : out std_logic
        );
        end component;
 
@@ -199,14 +213,19 @@ package lx_rocon_pkg is
        component calibration_write_register
        port
        (
-               clk         : in std_logic;
-               reset       : in std_logic;
-               ce          : in std_logic;
-               data_in     : in std_logic_vector(31 downto 0);
-               data_out    : out std_logic_vector(31 downto 0);
-               rd          : in std_logic;
-               bls         : in std_logic_vector(3 downto 0);
-               ta          : out std_logic
+               -- Clock
+               clk_i   : in std_logic;
+               -- Reset
+               reset_i : in std_logic;
+               -- Chip enable
+               ce_i    : in std_logic;
+               -- Data bus
+               data_i  : in std_logic_vector(31 downto 0);
+               data_o  : out std_logic_vector(31 downto 0);
+               -- Bus signals
+               rd_i    : in std_logic;
+               bls_i   : in std_logic_vector(3 downto 0);
+               ta_o    : out std_logic
        );
        end component;
 
@@ -214,15 +233,21 @@ package lx_rocon_pkg is
        component bus_calibration
        port
        (
-               clk         : in std_logic;
-               reset       : in std_logic;
-               ce          : in std_logic;
-               address     : in std_logic_vector(1 downto 0);
-               data_in     : in std_logic_vector(31 downto 0);
-               data_out    : out std_logic_vector(31 downto 0);
-               rd          : in std_logic;
-               bls         : in std_logic_vector(3 downto 0);
-               ta          : out std_logic
+               -- Clock
+               clk_i     : in std_logic;
+               -- Reset
+               reset_i   : in std_logic;
+               -- Chip enable
+               ce_i      : in std_logic;
+               -- Address
+               address_i : in std_logic_vector(1 downto 0);
+               -- Data bus
+               data_i    : in std_logic_vector(31 downto 0);
+               data_o    : out std_logic_vector(31 downto 0);
+               -- Bus signals
+               rd_i      : in std_logic;
+               bls_i     : in std_logic_vector(3 downto 0);
+               ta_o      : out std_logic
        );
        end component;
 
@@ -230,51 +255,38 @@ package lx_rocon_pkg is
        component bus_irc
        port
        (
-               clk         : in std_logic;
-               reset       : in std_logic;
-
-               address     : in std_logic_vector(3 downto 0);
-               ce          : in std_logic;
-
-               data_in     : in std_logic;
-               data_out    : out std_logic_vector(31 downto 0);
-
-               rd          : in std_logic;
-               wr          : in std_logic;
-               ta          : out std_logic;
-
-               irc1_a      : in std_logic;
-               irc1_b      : in std_logic;
-               irc1_index  : in std_logic;
-               irc1_mark   : in std_logic;
-
-               irc2_a      : in std_logic;
-               irc2_b      : in std_logic;
-               irc2_index  : in std_logic;
-               irc2_mark   : in std_logic;
-
-               irc3_a      : in std_logic;
-               irc3_b      : in std_logic;
-               irc3_index  : in std_logic;
-               irc3_mark   : in std_logic;
-
-               irc4_a      : in std_logic;
-               irc4_b      : in std_logic;
-               irc4_index  : in std_logic;
-               irc4_mark   : in std_logic
-       );
-       end component;
-
-       -- BCD interconnect
-       component bus_bcd
-       port
-       (
-               reset      : in std_logic;
-               en         : in std_logic;
-               clk        : in std_logic;
-               data_out   : out std_logic_vector(31 downto 0);
-               rd         : in std_logic;
-               ta         : out std_logic
+               clk_i        : in std_logic;
+               reset_i      : in std_logic;
+               -- Address (needs just last 4 bits, rest is wired to CE)
+               address_i    : in std_logic_vector(3 downto 0);
+               ce_i         : in std_logic;
+               -- Data bus
+               data_i       : in std_logic; -- 1 bit input
+               data_o       : out std_logic_vector(31 downto 0);
+               -- Bus signals
+               rd_i         : in std_logic;
+               ta_o         : out std_logic;
+               wr_i         : in std_logic;
+               -- Signals for IRC
+               irc1_a_i     : in std_logic;
+               irc1_b_i     : in std_logic;
+               irc1_index_i : in std_logic;
+               irc1_mark_i  : in std_logic;
+               --
+               irc2_a_i     : in std_logic;
+               irc2_b_i     : in std_logic;
+               irc2_index_i : in std_logic;
+               irc2_mark_i  : in std_logic;
+               --
+               irc3_a_i     : in std_logic;
+               irc3_b_i     : in std_logic;
+               irc3_index_i : in std_logic;
+               irc3_mark_i  : in std_logic;
+               --
+               irc4_a_i     : in std_logic;
+               irc4_b_i     : in std_logic;
+               irc4_index_i : in std_logic;
+               irc4_mark_i  : in std_logic
        );
        end component;
 
@@ -282,19 +294,24 @@ package lx_rocon_pkg is
        component bus_tumbl
        port
        (
-               clk_100m : in std_logic;
-               clk_50m  : in std_logic;
-               ce       : in std_logic;
-               reset    : in std_logic;
-    rd       : in std_logic;
-    bls      : in std_logic_vector(3 downto 0);
-    address  : in std_logic_vector(11 downto 0);
-    data_in  : in std_logic_vector(31 downto 0);
-    data_out : out std_logic_vector(31 downto 0);
-               ta       : out std_logic;
-               XMEMB_sel_o :  out std_logic;
-               XMEMB_i     :  in DMEMB2CORE_Type;
-               XMEMB_o     :  out CORE2DMEMB_Type
+               -- Clock
+               clk_100m_i      : in std_logic;
+               clk_50m_i       : in std_logic;
+               -- Chip enable
+               ce_100m_i       : in std_logic;
+               -- Global Reset
+               reset_100m_i    : in std_logic;
+               -- Master CPU bus for the memory
+    rd_100m_i       : in std_logic;
+    bls_100m_i      : in std_logic_vector(3 downto 0);
+    address_100m_i  : in std_logic_vector(11 downto 0);
+    data_100m_i     : in std_logic_vector(31 downto 0);
+    data_100m_o     : out std_logic_vector(31 downto 0);
+               ta_100m_o       : out std_logic;
+               -- Tumbl extrenal memory bus
+               XMEMB_sel_50m_o : out std_logic;
+               XMEMB_50m_i     : in DMEMB2CORE_Type;
+               XMEMB_50m_o     : out CORE2DMEMB_Type
   );
        end component;
 
@@ -305,25 +322,25 @@ package lx_rocon_pkg is
        component xilinx_dualport_bram
        generic
        (
-               byte_width : positive := 8;
+               byte_width    : positive := 8;
                address_width : positive := 8;
-               we_width : positive := 4
+               we_width      : positive := 4
        );
        port
        (
-               clka : in std_logic;
-               rsta : in std_logic;
-               ena : in std_logic;
-               wea : in std_logic_vector((we_width-1) downto 0);
+               clka  : in std_logic;
+               rsta  : in std_logic;
+               ena   : in std_logic;
+               wea   : in std_logic_vector((we_width-1) downto 0);
                addra : in std_logic_vector((address_width-1) downto 0);
-               dina : in std_logic_vector(((byte_width*we_width)-1) downto 0);
+               dina  : in std_logic_vector(((byte_width*we_width)-1) downto 0);
                douta : out std_logic_vector(((byte_width*we_width)-1) downto 0);
-               clkb : in std_logic;
-               rstb : in std_logic;
-               enb : in std_logic;
-               web : in std_logic_vector((we_width-1) downto 0);
+               clkb  : in std_logic;
+               rstb  : in std_logic;
+               enb   : in std_logic;
+               web   : in std_logic_vector((we_width-1) downto 0);
                addrb : in std_logic_vector((address_width-1) downto 0);
-               dinb : in std_logic_vector(((byte_width*we_width)-1) downto 0);
+               dinb  : in std_logic_vector(((byte_width*we_width)-1) downto 0);
                doutb : out std_logic_vector(((byte_width*we_width)-1) downto 0)
        );
        end component;
@@ -332,5 +349,4 @@ end lx_rocon_pkg;
 
 package body lx_rocon_pkg is
 
-
 end lx_rocon_pkg;
index 42a5741f75873cfb690b86472809c755b023aa4e..cdfca3d8c582ab3e0fe55a7dc9fd1c36afda02c1 100644 (file)
@@ -1,6 +1,8 @@
 vhdl work "tumbl/mbl_Pkg.vhd"
 vhdl work "lx_rocon_pkg.vhd"
+vhdl work "dff2.vhd"
 vhdl work "xilinx_dualport_bram.vhd"
+vhdl work "qcounter.vhd"
 vhdl work "tumbl/mem.vhd"
 vhdl work "tumbl/fetch.vhd"
 vhdl work "tumbl/exeq.vhd"
@@ -9,9 +11,12 @@ vhdl work "tumbl/core_ctrl.vhd"
 vhdl work "lx-rocon_tumbl/lx_rocon_imem.vhd"
 vhdl work "lx-rocon_tumbl/lx_rocon_gprf_abd.vhd"
 vhdl work "lx-rocon_tumbl/lx_rocon_dmem.vhd"
+vhdl work "irc_reader.vhd"
 vhdl work "lx-rocon_tumbl/lx_rocon_tumbl.vhd"
+vhdl work "irc_register.vhd"
 vhdl work "calibration_write_register.vhd"
 vhdl work "calibration_read_register.vhd"
 vhdl work "bus_tumbl.vhd"
+vhdl work "bus_irc.vhd"
 vhdl work "bus_calibration.vhd"
 vhdl work "lx_rocon_top.vhd"
index 1062e29c2c02e0d82e8cc648615549ad0ca792a2..a4ba836c0d2d30898231f63a696942cf2511a1e6 100644 (file)
@@ -34,15 +34,15 @@ entity lx_rocon_top is
        port
        (
                -- External
-               --clk_cpu   : in std_logic;
-               clk_50m   : in std_logic;
+               --clk_cpu    : in std_logic;
+               clk_50m    : in std_logic;
 
-               cs0_xc   : in std_logic;
+               cs0_xc     : in std_logic;
 
-               rd       : in std_logic;
-               bls      : in std_logic_vector(3 downto 0);
-               address  : in std_logic_vector(15 downto 0);
-               data     : inout std_logic_vector(31 downto 0);
+               rd         : in std_logic;
+               bls        : in std_logic_vector(3 downto 0);
+               address    : in std_logic_vector(15 downto 0);
+               data       : inout std_logic_vector(31 downto 0);
 
                irc1_a     : in std_logic;
                irc1_b     : in std_logic;
@@ -71,35 +71,31 @@ end lx_rocon_top;
 architecture Behavioral of lx_rocon_top is
 
        -- Reset signal
-       signal reset : std_logic;
-       signal neg_init : std_logic;
-
+       signal reset_s           : std_logic;
+       signal neg_init_s        : std_logic;
        -- 100 MHz clock
-       signal clk_100m : std_logic;
-       signal clk_100m_fb : std_logic;
-       signal clk_100m_locked : std_logic;
-
+       signal clk_100m_s        : std_logic;
+       signal clk_100m_fb_s     : std_logic;
+       signal clk_100m_locked_s : std_logic;
        -- Peripherals on the memory bus
-       signal tumbl_out : std_logic_vector(31 downto 0);
-       signal tumbl_ta : std_logic;
-       signal tumbl_ce : std_logic;
-
-       signal irc_reg_out : std_logic_vector(31 downto 0);
-       signal irc_reg_ta : std_logic;
-       signal irc_reg_ce : std_logic;
-
-       signal calib_out : std_logic_vector(31 downto 0);
-       signal calib_ta : std_logic;
-       signal calib_ce : std_logic;
-
+       signal tumbl_out_s       : std_logic_vector(31 downto 0);
+       signal tumbl_ta_s        : std_logic;
+       signal tumbl_ce_s        : std_logic;
+       --
+       signal irc_reg_out_s     : std_logic_vector(31 downto 0);
+       signal irc_reg_ta_s      : std_logic;
+       signal irc_reg_ce_s      : std_logic;
+       --
+       signal calib_out_s       : std_logic_vector(31 downto 0);
+       signal calib_ta_s        : std_logic;
+       signal calib_ce_s        : std_logic;
        -- Signals for external bus transmission
-       signal data_in_bus : std_logic_vector(31 downto 0);
-       signal data_out_bus : std_logic_vector(31 downto 0);
-
+       signal data_i_s          : std_logic_vector(31 downto 0);
+       signal data_o_s          : std_logic_vector(31 downto 0);
        -- Signals for internal transaction
-       signal last_address : std_logic_vector(15 downto 0);
-       signal last_rd : std_logic;
-       signal last_bls : std_logic_vector(3 downto 0);
+       signal last_address_s    : std_logic_vector(15 downto 0);
+       signal last_rd_s         : std_logic;
+       signal last_bls_s        : std_logic_vector(3 downto 0);
 
        -- Reading logic:
        -- Broadcast rd only till ta (transaction acknowledge)
@@ -109,22 +105,21 @@ architecture Behavioral of lx_rocon_top is
        -- Data latching is synchronous - it's purpose is to
        -- provide stable data for CPU on the bus on high rise
        -- of trans. ack signal
-       signal rd_f : std_logic;
-       signal rd_d : std_logic;
-
-       signal data_read : std_logic_vector(31 downto 0);
-
-       signal i_ta : std_logic;
-       signal i_rd : std_logic;
-       signal acked : std_logic;
+       signal rd_f_s            : std_logic; -- Filtered RD
+       signal rd_d_s            : std_logic; -- D over RD
+       signal i_ta_s            : std_logic; -- Internal bus TA (active 1)
+       signal i_rd_s            : std_logic; -- Internal bus RD (active 1)
+       --
+       signal data_read_s       : std_logic_vector(31 downto 0); -- Latched read data
+       --
+       signal acked_s           : std_logic;
 
        -- Writing logic:
-       signal bls_f : std_logic_vector(3 downto 0);
-       signal bls_d : std_logic_vector(3 downto 0);
-
-       signal data_write : std_logic_vector(31 downto 0);
-
-       signal i_bls : std_logic_vector(3 downto 0);
+       signal bls_f_s : std_logic_vector(3 downto 0); -- Filtered BLS
+       signal bls_d_s : std_logic_vector(3 downto 0); -- D over BLS
+       signal i_bls_s : std_logic_vector(3 downto 0); -- Internal BLS (active 1)
+       --
+       signal data_write_s : std_logic_vector(31 downto 0); -- Data broadcasted to write
 
 begin
 
@@ -132,141 +127,146 @@ begin
        clk_100m_dcm_sp : DCM_SP
        generic map
        (
-               clkdv_divide => 2.0,
-               clkfx_divide => 1,
-               clkfx_multiply => 2,
-               clkin_divide_by_2 => false,
-               clkin_period => 20.0, -- 50 MHz
-               clkout_phase_shift => "NONE",
-               clk_feedback => "1X",
-               deskew_adjust => "SYSTEM_SYNCHRONOUS",
-               dfs_frequency_mode => "LOW",
-               dll_frequency_mode => "LOW",
-               dss_mode => "NONE",
+               clkdv_divide          => 2.0,
+               clkfx_divide          => 1,
+               clkfx_multiply        => 2,
+               clkin_divide_by_2     => false,
+               clkin_period          => 20.0, -- 50 MHz
+               clkout_phase_shift    => "NONE",
+               clk_feedback          => "1X",
+               deskew_adjust         => "SYSTEM_SYNCHRONOUS",
+               dfs_frequency_mode    => "LOW",
+               dll_frequency_mode    => "LOW",
+               dss_mode              => "NONE",
                duty_cycle_correction => true,
-               factory_jf => X"c080",
-               phase_shift => 0,
-               startup_wait => false
+               factory_jf            => X"c080",
+               phase_shift           => 0,
+               startup_wait          => false
        )
        port map
        (
-               clk0 => clk_100m_fb,
-               clk180 => open,
-               clk270 => open,
-               clk2x => clk_100m,
-               clk2x180 => open,
-               clk90 => open,
-               clkdv => open,
-               clkfx => open,
-               clkfx180 => open,
-               locked => clk_100m_locked,
-               psdone => open,
-               status => open,
-               clkfb => clk_100m_fb,
-               clkin => clk_50m,
-               dssen => '0',
-               psclk => '0',
-               psen => '0',
-               psincdec => '0',
-               rst => neg_init
+               clk0                  => clk_100m_fb_s,
+               clk180                => open,
+               clk270                => open,
+               clk2x                 => clk_100m_s,
+               clk2x180              => open,
+               clk90                 => open,
+               clkdv                 => open,
+               clkfx                 => open,
+               clkfx180              => open,
+               locked                => clk_100m_locked_s,
+               psdone                => open,
+               status                => open,
+               clkfb                 => clk_100m_fb_s,
+               clkin                 => clk_50m,
+               dssen                 => '0',
+               psclk                 => '0',
+               psen                  => '0',
+               psincdec              => '0',
+               rst                   => neg_init_s
        );
 
        -- IRC interconnect
        memory_bus_irc: bus_irc
        port map
        (
-               clk => clk_100m,
-               reset => reset,
-               address => address(3 downto 0),
-               ce => irc_reg_ce,
-               data_in => data_in_bus(0),
-               data_out => irc_reg_out,
-               rd => i_rd,
-               wr => i_bls(0),
-               ta => irc_reg_ta,
-
-               irc1_a => irc1_a,
-               irc1_b => irc1_b,
-               irc1_index => irc1_index,
-               irc1_mark => irc1_mark,
-
-               irc2_a => irc2_a,
-               irc2_b => irc2_b,
-               irc2_index => irc2_index,
-               irc2_mark => irc2_mark,
-
-               irc3_a => irc3_a,
-               irc3_b => irc3_b,
-               irc3_index => irc3_index,
-               irc3_mark => irc3_mark,
-
-               irc4_a => irc4_a,
-               irc4_b => irc4_b,
-               irc4_index => irc4_index,
-               irc4_mark => irc4_mark
+               clk_i        => clk_100m_s,
+               reset_i      => reset_s,
+               address_i    => address(3 downto 0),
+               ce_i         => irc_reg_ce_s,
+               data_i       => data_i_s(0),
+               data_o       => irc_reg_out_s,
+               rd_i         => i_rd_s,
+               wr_i         => i_bls_s(0),
+               ta_o         => irc_reg_ta_s,
+               --
+               irc1_a_i     => irc1_a,
+               irc1_b_i     => irc1_b,
+               irc1_index_i => irc1_index,
+               irc1_mark_i  => irc1_mark,
+               --
+               irc2_a_i     => irc2_a,
+               irc2_b_i     => irc2_b,
+               irc2_index_i => irc2_index,
+               irc2_mark_i  => irc2_mark,
+               --
+               irc3_a_i     => irc3_a,
+               irc3_b_i     => irc3_b,
+               irc3_index_i => irc3_index,
+               irc3_mark_i  => irc3_mark,
+               --
+               irc4_a_i     => irc4_a,
+               irc4_b_i     => irc4_b,
+               irc4_index_i => irc4_index,
+               irc4_mark_i  => irc4_mark
        );
 
        -- Tumbl coprocessor
        memory_bus_tumbl: bus_tumbl
        port map
        (
-               clk_100m => clk_100m,
-               clk_50m => clk_50m,
-               reset => reset,
-               ce => tumbl_ce,
-               ta => tumbl_ta,
-               rd => i_rd,
-               bls => i_bls,
-               address => address(11 downto 0),
-               data_in => data_in_bus,
-               data_out => tumbl_out,
-
-               XMEMB_o => open,
-               XMEMB_i.clken => '1',
-               XMEMB_i.data => (others => '1'),
-               XMEMB_i.int => '0',
-               XMEMB_sel_o => open
+               clk_100m_i        => clk_100m_s,
+               clk_50m_i         => clk_50m,
+               reset_100m_i      => reset_s,
+               ce_100m_i         => tumbl_ce_s,
+               ta_100m_o         => tumbl_ta_s,
+               rd_100m_i         => i_rd_s,
+               bls_100m_i        => i_bls_s,
+               address_100m_i    => address(11 downto 0),
+               data_100m_i       => data_i_s,
+               data_100m_o       => tumbl_out_s,
+               --
+               XMEMB_50m_o       => open,
+               XMEMB_50m_i.clken => '1',
+               XMEMB_50m_i.data  => (others => '1'),
+               XMEMB_50m_i.int   => '0',
+               XMEMB_sel_50m_o   => open
        );
 
        -- Calibration
        memory_bus_calibration: bus_calibration
        port map
        (
-               clk => clk_100m,
-               reset => reset,
-               ce => calib_ce,
-               address => address(1 downto 0),
-               rd => i_rd,
-               bls => i_bls,
-               ta => calib_ta,
-               data_in => data_in_bus,
-               data_out => calib_out
+               clk_i     => clk_100m_s,
+               reset_i   => reset_s,
+               ce_i      => calib_ce_s,
+               address_i => address(1 downto 0),
+               rd_i      => i_rd_s,
+               bls_i     => i_bls_s,
+               ta_o      => calib_ta_s,
+               data_i    => data_i_s,
+               data_o    => calib_out_s
        );
 
        -- Filters
        --bls_f <= bls when bls = bls_d else "1111";
-       bls_f(0) <= bls(0) when bls(0) = bls_d(0) else '1';
-       bls_f(1) <= bls(2) when bls(2) = bls_d(2) else '1';
-       bls_f(2) <= bls(2) when bls(2) = bls_d(2) else '1';
-       bls_f(3) <= bls(3) when bls(3) = bls_d(3) else '1';
-       rd_f <= rd when rd = rd_d else '1';
+       bls_f_s(0) <= bls(0) when bls(0) = bls_d_s(0) else '1';
+       bls_f_s(1) <= bls(2) when bls(2) = bls_d_s(2) else '1';
+       bls_f_s(2) <= bls(2) when bls(2) = bls_d_s(2) else '1';
+       bls_f_s(3) <= bls(3) when bls(3) = bls_d_s(3) else '1';
+       rd_f_s     <= rd when rd = rd_d_s else '1';
 
        -- Bus update
-       memory_bus_update: process(clk_100m)
+memory_bus_update:
+       process(clk_100m_s)
        begin
 
-               if clk_100m = '1' and clk_100m'event then
+               if clk_100m_s = '1' and clk_100m_s'event then
 
                        -- Set every signal to inactive state here
-                       irc_reg_ce <= '1';
-                       tumbl_ce <= '1';
-                       calib_ce <= '1';
-                       i_rd <= '1';
-                       i_bls <= (others => '1');
-                       data_in_bus <= (others => 'X');
+                       irc_reg_ce_s  <= '0';
+                       tumbl_ce_s    <= '0';
+                       calib_ce_s    <= '0';
+                       i_rd_s        <= '0';
+                       i_bls_s       <= (others => '0');
+                       data_i_s      <= (others => 'X');
 
                        -- Check if we have chip select
-                       if cs0_xc = '0' then
+                       if reset_s = '1' then
+                               acked_s     <= '1';
+                               i_ta_s      <= '0';
+                               data_read_s <= (others => '0');
+                       elsif cs0_xc = '0' then
 
                                -- Memory Map (16-bit address @ 32-bit each)
 
@@ -275,72 +275,72 @@ begin
                                -- 0x8000 - 0x800F: IRC registers
                                -- 0xFFFC - 0xFFFF: Calibration
 
-                               if address < "0001000000000000" then -- Tumbl
-                                       tumbl_ce <= '0';
-                                       i_ta <= tumbl_ta;
-                                       data_out_bus <= tumbl_out;
-                               elsif address(15 downto 4) = "100000000000" then -- IRC
-                                       irc_reg_ce <= '0';
-                                       i_ta <= irc_reg_ta;
-                                       data_out_bus <= irc_reg_out;
+                               if address < "0001000000000000" then               -- Tumbl
+                                       tumbl_ce_s   <= '1';
+                                       i_ta_s       <= tumbl_ta_s;
+                                       data_o_s     <= tumbl_out_s;
+                               elsif address(15 downto 4) = "100000000000" then   -- IRC
+                                       irc_reg_ce_s <= '1';
+                                       i_ta_s       <= irc_reg_ta_s;
+                                       data_o_s     <= irc_reg_out_s;
                                elsif address(15 downto 2) = "11111111111111" then -- Calibration
-                                       calib_ce <= '0';
-                                       i_ta <= calib_ta;
-                                       data_out_bus <= calib_out;
+                                       calib_ce_s   <= '1';
+                                       i_ta_s       <= calib_ta_s;
+                                       data_o_s     <= calib_out_s;
                                end if;
 
                                -- Reading
-                               if rd_f = '0' then
-                                       if last_rd = '1' or last_address /= address then
+                               if rd_f_s = '0' then
+                                       if last_rd_s = '1' or last_address_s /= address then
                                                -- Getting something new
                                                -- Set internal RD to active and reset ack and latched data
-                                               acked <= '0';
-                                               i_rd <= '0';
+                                               acked_s      <= '0';
+                                               i_rd_s       <= '1';
                                                -- Data latching - synchronous
-                                               data_read <= (others => 'X');
-                                       elsif i_rd = '0' and acked = '0' and i_ta = '0' then
+                                               data_read_s  <= (others => 'X');
+                                       elsif i_rd_s = '1' and acked_s = '0' and i_ta_s = '1' then
                                                -- Got acknowledge, latch data
-                                               acked <= '1';
-                                               data_read <= data_out_bus;
-                                       elsif acked = '0' then
-                                               -- Ongoing read, keep the signal low
-                                               i_rd <= '0';
-                                               data_read <= (others => 'X');
+                                               acked_s      <= '1';
+                                               data_read_s  <= data_o_s;
+                                       elsif acked_s = '0' then
+                                               -- Ongoing read, keep the signal active
+                                               i_rd_s       <= '1';
+                                               data_read_s  <= (others => 'X');
                                        end if;
 
-                                       last_address <= address;
+                                       last_address_s <= address;
                                else
                                        -- Not reading, anything goes
-                                       data_read <= (others => 'X');
+                                       data_read_s    <= (others => 'X');
                                end if;
 
-                               last_rd <= rd_f;
+                               last_rd_s        <= rd_f_s;
 
-                               -- Writing (BLS is filtered due to bus error otherwise)
-                               if bls_f /= "1111" then
+                               -- Writing
+                               if bls_f_s /= "1111" then
 
-                                       if last_bls /= bls_f or last_address /= address then
+                                       if last_bls_s /= bls_f_s or last_address_s /= address then
                                                -- Broadcast BLS for once cycle to write the data
-                                               i_bls <= bls_f;
-                                               data_in_bus <= data_write;
+                                               i_bls_s      <= not bls_f_s;
+                                               data_i_s     <= data_write_s;
                                        end if;
 
-                                       last_address <= address;
+                                       last_address_s <= address;
                                end if;
 
-                               last_bls <= bls_f;
+                               last_bls_s       <= bls_f_s;
 
                        else
 
                                -- Set last read / bls to '1' if CS0 is not asserted
-                               last_rd <= '1';
-                               last_bls <= (others => '1');
+                               last_rd_s        <= '1';
+                               last_bls_s       <= (others => '1');
 
                        end if;
 
                        -- Filters
-                       bls_d <= bls;
-                       rd_d <= rd;
+                       bls_d_s <= bls;
+                       rd_d_s  <= rd;
 
                end if;
 
@@ -348,27 +348,30 @@ begin
 
        -- If RD and BLS is not high, we must keep DATA at high impedance
        -- or the FPGA collides with SDRAM (damaging each other)
-       memory_bus_out: process(cs0_xc, rd, data, data_read)
+memory_bus_out:
+       process(cs0_xc, rd, data, data_read_s)
        begin
 
                -- CS0 / RD / BLS are active LOW
                if cs0_xc = '0' and rd = '0' then
-                       data <= data_read;
+                       data <= data_read_s;
                else
                        -- IMPORTANT!!!
                        data <= (others => 'Z');
                end if;
 
-               data_write <= data;
+               data_write_s <= data;
 
        end process;
 
        -- Reset
-       initialization: process(init, clk_100m_locked)
+initialization:
+       process(init, clk_100m_locked_s)
        begin
 
-               neg_init <= not init;
-               reset <= (not init) or (not clk_100m_locked);
+               -- TODO: Proper reset (lacks filter and propagation with ack as we use PLL)
+               neg_init_s <= not init;
+               reset_s <= (not init) or (not clk_100m_locked_s);
 
        end process;
 
diff --git a/hw/memory_region.vhd b/hw/memory_region.vhd
deleted file mode 100644 (file)
index 8d76bb9..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.std_logic_arith.all;
-use ieee.std_logic_unsigned.all;
-use ieee.numeric_std.all;
-
-entity memory_region is
-end memory_region;
-
-architecture Behavioral of memory_region is
-
-begin
-
-
-end Behavioral;
-
index 408d54e29f9a41fbbf51db5a01a947fab86d02fd..78925d1feae178d8b0fba06dc0d3519c1c70104b 100644 (file)
@@ -10,143 +10,147 @@ use work.lx_rocon_pkg.all;
 entity qcounter is
   port
        (
-    clk      : in std_logic;
-    reset    : in std_logic;
-    a0, b0   : in std_logic;
-               index0   : in std_logic;
-
-    qcount   : out std_logic_vector (31 downto 0);
-               qcount_index : out std_logic_vector (31 downto 0);
-    a_rise, a_fall, b_rise, b_fall, ab_event: out std_logic;
-    ab_error : out std_logic
+               -- Inputs
+    clk_i              : in std_logic;
+    reset_i            : in std_logic;
+    a0_i, b0_i         : in std_logic;
+               index0_i           : in std_logic;
+               -- Outputs
+    qcount_o           : out std_logic_vector (31 downto 0);
+               qcount_index_o     : out std_logic_vector (31 downto 0);
+    a_rise_o, a_fall_o : out std_logic;
+               b_rise_o, b_fall_o : out std_logic;
+               ab_event_o         : out std_logic;
+    ab_error_o         : out std_logic
   );
 end qcounter;
 
 architecture behavioral of qcounter is
 
-       signal last_reset: std_logic;
-  signal a, b, a_prev, b_prev: std_logic;
-       signal index: std_logic;
-  signal count_prev: std_logic_vector (29 downto 0);
-  signal count: std_logic_vector (29 downto 0);
-       signal count_index_prev: std_logic_vector (31 downto 0);
-  signal count_index: std_logic_vector (31 downto 0);
+       signal last_reset_s       : std_logic;
+  signal a_s, b_s           : std_logic;
+       signal a_prev_s, b_prev_s : std_logic;
+       signal index_s            : std_logic;
+  signal count_prev_s       : std_logic_vector (29 downto 0);
+  signal count_s            : std_logic_vector (29 downto 0);
+       signal count_index_prev_s : std_logic_vector (31 downto 0);
+  signal count_index_s      : std_logic_vector (31 downto 0);
 
 begin
        dff_a: dff2
        port map
        (
-               clk => clk,
-               reset => '0',
-               d => a0,
-               q => a
+               clk_i   => clk_i,
+               reset_i => '0',
+               d_i     => a0_i,
+               q_o     => a_s
        );
 
   dff_b: dff2
        port map
        (
-               clk => clk,
-               reset => '0',
-               d => b0,
-               q => b
+               clk_i   => clk_i,
+               reset_i => '0',
+               d_i     => b0_i,
+               q_o     => b_s
        );
 
        dff_index: dff2
        port map
        (
-               clk => clk,
-               reset => '0',
-               d => index0,
-               q => index
+               clk_i   => clk_i,
+               reset_i => '0',
+               d_i     => index0_i,
+               q_o     => index_s
        );
 
-       qcount(0) <= a xor b;
-       qcount(1) <= b;
-       qcount(31 downto 2) <= count;
+       qcount_o(0)           <= a_s xor b_s;
+       qcount_o(1)           <= b_s;
+       qcount_o(31 downto 2) <= count_s;
 
-       qcount_index <= count_index;
+       qcount_index_o        <= count_index_s;
 
-  comb_event: process (reset, last_reset, a_prev, b_prev, a, b)
-  begin
-    a_rise <= '0';
-    a_fall <= '0';
-    b_rise <= '0';
-    b_fall <= '0';
-    ab_event <= '0';
-    ab_error <= '0';
+comb_event:
+       process (reset_i, last_reset_s, a_prev_s, b_prev_s, a_s, b_s)
+       begin
+    a_rise_o   <= '0';
+    a_fall_o   <= '0';
+    b_rise_o   <= '0';
+    b_fall_o   <= '0';
+    ab_event_o <= '0';
+    ab_error_o <= '0';
 
-               if reset = '0' and last_reset = '0' then
-                       if ((a xor a_prev) and (b xor b_prev)) = '1' then
+               if reset_i = '0' and last_reset_s = '0' then
+                       if ((a_s xor a_prev_s) and (b_s xor b_prev_s)) = '1' then
                                -- forbidden double transition
-                               ab_error <= '1';
+                               ab_error_o <= '1';
                        else
-                               a_rise <= (a xor a_prev) and a;
-                               a_fall <= (a xor a_prev) and not a;
-                               b_rise <= (b xor b_prev) and b;
-                               b_fall <= (b xor b_prev) and not b;
-                               ab_event <= (a xor a_prev) or (b xor b_prev);
+                               a_rise_o   <= (a_s xor a_prev_s) and a_s;
+                               a_fall_o   <= (a_s xor a_prev_s) and (not a_s);
+                               b_rise_o   <= (b_s xor b_prev_s) and b_s;
+                               b_fall_o   <= (b_s xor b_prev_s) and (not b_s);
+                               ab_event_o <= (a_s xor a_prev_s) or (b_s xor b_prev_s);
                        end if;
                end if;
   end process;
 
-  comb_count: process (reset, last_reset, a_prev, b_prev, a, b, index, count_prev, count_index_prev)
-  begin
-               if reset = '1' or last_reset = '1' then
-                       count <= count_prev;
-                       count_index <= count_index_prev;
-
-               elsif (a_prev = '0') and (b_prev = '1') and (a = '0') and (b = '0') then
-      count <= count_prev + 1;
-
-                       if index = '1' then
-                               count_index(0) <= a xor b;
-                               count_index(1) <= b;
-                               count_index(31 downto 2) <= count_prev + 1;
+comb_count:
+       process (reset_i, last_reset_s, a_prev_s, b_prev_s, a_s, b_s,
+                                               index_s, count_prev_s, count_index_prev_s)
+       begin
+               if reset_i = '1' or last_reset_s = '1' then
+                       count_s                      <= count_prev_s;
+                       count_index_s                <= count_index_prev_s;
+               elsif (a_prev_s = '0') and (b_prev_s = '1') and (a_s = '0') and
+                                               (b_s = '0') then
+      count_s                      <= count_prev_s + 1;
+                       if index_s = '1' then
+                               count_index_s(0)           <= a_s xor b_s;
+                               count_index_s(1)           <= b_s;
+                               count_index_s(31 downto 2) <= count_prev_s + 1;
                        else
-                               count_index <= count_index_prev;
+                               count_index_s              <= count_index_prev_s;
                        end if;
-
-    elsif (a_prev = '0') and (b_prev = '0') and (a = '0') and (b = '1') then
-      count <= count_prev - 1;
-
-                       if index = '1' then
-                               count_index(0) <= a xor b;
-                               count_index(1) <= b;
-                               count_index(31 downto 2) <= count_prev - 1;
+    elsif (a_prev_s = '0') and (b_prev_s = '0') and (a_s = '0') and
+                                               (b_s = '1') then
+      count_s                      <= count_prev_s - 1;
+
+                       if index_s = '1' then
+                               count_index_s(0)           <= a_s xor b_s;
+                               count_index_s(1)           <= b_s;
+                               count_index_s(31 downto 2) <= count_prev_s - 1;
                        else
-                               count_index <= count_index_prev;
+                               count_index_s              <= count_index_prev_s;
                        end if;
-
     else
-      count <= count_prev;
-
-                       if index = '1' then
-                               count_index(0) <= a xor b;
-                               count_index(1) <= b;
-                               count_index(31 downto 2) <= count_prev;
+      count_s                      <= count_prev_s;
+                       if index_s = '1' then
+                               count_index_s(0)           <= a_s xor b_s;
+                               count_index_s(1)           <= b_s;
+                               count_index_s(31 downto 2) <= count_prev_s;
                        else
-                               count_index <= count_index_prev;
+                               count_index_s              <= count_index_prev_s;
                        end if;
-
     end if;
 
   end process;
 
-  seq: process (clk)
-  begin
+seq:
+       process (clk_i)
+       begin
                -- Reset for qcounter is synchronous and lasts at least one more cycle
                -- to prevent hazardous states after releasing it
-               if clk = '1' and clk'event then
-                       if reset = '0' then
-                               count_prev <= count;
-                               count_index_prev <= count_index;
+               if clk_i = '1' and clk_i'event then
+                       if reset_i = '0' then
+                               count_prev_s       <= count_s;
+                               count_index_prev_s <= count_index_s;
                        else
-                               count_prev <= (others => '0');
-                               count_index_prev <= (others => '0');
+                               count_prev_s       <= (others => '0');
+                               count_index_prev_s <= (others => '0');
                        end if;
-                       a_prev <= a;
-                       b_prev <= b;
-                       last_reset <= reset;
+                       a_prev_s             <= a_s;
+                       b_prev_s             <= b_s;
+                       last_reset_s         <= reset_i;
                end if;
   end process;
 
diff --git a/hw/tb/irc_reader_tb.vhd b/hw/tb/irc_reader_tb.vhd
deleted file mode 100644 (file)
index b44cd99..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-LIBRARY ieee;
-USE ieee.std_logic_1164.ALL;
-
-ENTITY irc_reader_tb IS
-END irc_reader_tb;
-
-ARCHITECTURE behavior OF irc_reader_tb IS
-
-    -- Component Declaration for the Unit Under Test (UUT)
-
-    COMPONENT irc_reader
-    PORT(
-         clk : IN  std_logic;
-         reset : IN  std_logic;
-         a0 : IN  std_logic;
-         b0 : IN  std_logic;
-         index0 : IN  std_logic;
-         mark0 : IN  std_logic;
-         qcount : OUT  std_logic_vector(31 downto 0);
-         ab_event : OUT  std_logic;
-         ab_error : OUT  std_logic;
-         out_index : OUT  std_logic;
-         out_mark : OUT  std_logic
-        );
-    END COMPONENT;
-
-
-   --Inputs
-   signal clk : std_logic := '0';
-   signal reset : std_logic := '0';
-   signal a0 : std_logic := '0';
-   signal b0 : std_logic := '0';
-   signal index0 : std_logic := '0';
-   signal mark0 : std_logic := '0';
-
-       --Outputs
-   signal qcount : std_logic_vector(31 downto 0);
-   signal ab_event : std_logic;
-   signal ab_error : std_logic;
-   signal out_index : std_logic;
-   signal out_mark : std_logic;
-
-   -- Clock period definitions
-   constant clk_period : time := 20 ns;
-
-BEGIN
-
-       -- Instantiate the Unit Under Test (UUT)
-   uut: irc_reader PORT MAP (
-          clk => clk,
-          reset => reset,
-          a0 => a0,
-          b0 => b0,
-          index0 => index0,
-          mark0 => mark0,
-          qcount => qcount,
-          ab_event => ab_event,
-          ab_error => ab_error,
-          out_index => out_index,
-          out_mark => out_mark
-        );
-
-   -- Clock process definitions
-   clk_process :process
-   begin
-               clk <= '0';
-               wait for clk_period/2;
-               clk <= '1';
-               wait for clk_period/2;
-   end process;
-
-
-   -- Stimulus process
-   stim_proc: process
-   begin
-      -- hold reset state for 100 ns.
-      reset <= '0';
-      wait for 100 ns;
-                       reset <= '1';
-
-      wait for clk_period*10;
-
-      -- insert stimulus here
-
-      wait;
-   end process;
-
-END;
diff --git a/hw/tb/irc_region_tb.vhd b/hw/tb/irc_region_tb.vhd
deleted file mode 100644 (file)
index 3436137..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-LIBRARY ieee;
-USE ieee.std_logic_1164.ALL;
-
-ENTITY irc_region_tb IS
-END irc_region_tb;
-
-ARCHITECTURE behavior OF irc_region_tb IS
-
-    -- Component Declaration for the Unit Under Test (UUT)
-
-    COMPONENT irc_region
-    PORT(
-         clk : IN  std_logic;
-         reset : IN  std_logic;
-         address : IN  std_logic_vector(3 downto 0);
-         ce : IN  std_logic;
-         data_in : IN  std_logic;
-         data_out : OUT  std_logic_vector(31 downto 0);
-         rd : IN  std_logic;
-         ta : OUT  std_logic;
-         wr : IN  std_logic;
-         irc1_a : IN  std_logic;
-         irc1_b : IN  std_logic;
-         irc1_index : IN  std_logic;
-         irc1_mark : IN  std_logic;
-         irc2_a : IN  std_logic;
-         irc2_b : IN  std_logic;
-         irc2_index : IN  std_logic;
-         irc2_mark : IN  std_logic;
-         irc3_a : IN  std_logic;
-         irc3_b : IN  std_logic;
-         irc3_index : IN  std_logic;
-         irc3_mark : IN  std_logic;
-         irc4_a : IN  std_logic;
-         irc4_b : IN  std_logic;
-         irc4_index : IN  std_logic;
-         irc4_mark : IN  std_logic
-        );
-    END COMPONENT;
-
-
-   --Inputs
-   signal clk : std_logic := '0';
-   signal reset : std_logic := '0';
-   signal address : std_logic_vector(3 downto 0) := (others => '0');
-   signal ce : std_logic := '1';
-   signal data_in : std_logic := '0';
-   signal rd : std_logic := '1';
-   signal wr : std_logic := '1';
-   signal irc1_a : std_logic := '0';
-   signal irc1_b : std_logic := '0';
-   signal irc1_index : std_logic := '0';
-   signal irc1_mark : std_logic := '0';
-   signal irc2_a : std_logic := '0';
-   signal irc2_b : std_logic := '0';
-   signal irc2_index : std_logic := '0';
-   signal irc2_mark : std_logic := '0';
-   signal irc3_a : std_logic := '0';
-   signal irc3_b : std_logic := '0';
-   signal irc3_index : std_logic := '0';
-   signal irc3_mark : std_logic := '0';
-   signal irc4_a : std_logic := '0';
-   signal irc4_b : std_logic := '0';
-   signal irc4_index : std_logic := '0';
-   signal irc4_mark : std_logic := '0';
-
-       --Outputs
-   signal data_out : std_logic_vector(31 downto 0);
-   signal ta : std_logic;
-
-   -- Clock period definitions
-   constant clk_period : time := 20 ns;
-
-BEGIN
-
-       -- Instantiate the Unit Under Test (UUT)
-   uut: irc_region PORT MAP (
-          clk => clk,
-          reset => reset,
-          address => address,
-          ce => ce,
-          data_in => data_in,
-          data_out => data_out,
-          rd => rd,
-          ta => ta,
-          wr => wr,
-          irc1_a => irc1_a,
-          irc1_b => irc1_b,
-          irc1_index => irc1_index,
-          irc1_mark => irc1_mark,
-          irc2_a => irc2_a,
-          irc2_b => irc2_b,
-          irc2_index => irc2_index,
-          irc2_mark => irc2_mark,
-          irc3_a => irc3_a,
-          irc3_b => irc3_b,
-          irc3_index => irc3_index,
-          irc3_mark => irc3_mark,
-          irc4_a => irc4_a,
-          irc4_b => irc4_b,
-          irc4_index => irc4_index,
-          irc4_mark => irc4_mark
-        );
-
-   -- Clock process definitions
-   clk_process :process
-   begin
-               clk <= '0';
-               wait for clk_period/2;
-               clk <= '1';
-               wait for clk_period/2;
-   end process;
-
-
-   -- Stimulus process
-   stim_proc: process
-   begin
-      -- hold reset state for 100 ns.
-      reset <= '0';
-      wait for 100 ns;
-                       reset <= '1';
-
-      wait for clk_period*10;
-
-      -- insert stimulus here
-
-                       -- Set some values to the IRC
-                       irc1_a <= '1';
-                       irc1_b <= '1';
-
-                       irc2_a <= '1';
-                       irc3_a <= '1';
-                       irc4_a <= '1';
-                       wait for clk_period;
-
-                       irc1_b <= '0';
-                       irc2_b <= '1';
-                       irc3_b <= '1';
-                       irc4_b <= '1';
-                       wait for clk_period;
-
-                       irc3_a <= '0';
-                       irc4_a <= '0';
-                       wait for clk_period;
-
-                       irc3_index <= '1';
-                       wait for clk_period/2;
-
-                       irc4_b <= '1';
-                       wait for clk_period/2;
-
-                       irc3_index <= '0';
-                       wait for clk_period;
-
-                       -- Try to read something
-
-                       -- IRC1 - value
-                       ce <= '0';
-                       rd <= '0';
-                       address <= "0000";
-                       wait for clk_period*2;
-
-                       ce <= '1';
-                       rd <= '1';
-                       wait for clk_period;
-
-                       -- IRC1 - state
-                       ce <= '0';
-                       rd <= '0';
-                       address <= "0010";
-                       wait for clk_period*2;
-
-                       ce <= '1';
-                       rd <= '1';
-                       wait for clk_period;
-
-                       -- IRC3 - index value
-                       ce <= '0';
-                       rd <= '0';
-                       address <= "1001";
-                       wait for clk_period*2;
-
-                       ce <= '1';
-                       rd <= '1';
-                       wait for clk_period;
-
-                       -- Try to write something (reset IRC1 error)
-                       ce <= '0';
-                       wr <= '0';
-                       address <= "0010";
-                       data_in <= '0';
-                       wait for clk_period*2;
-
-                       ce <= '1';
-                       wr <= '1';
-                       wait for clk_period;
-
-                       -- Read it again
-                       ce <= '0';
-                       rd <= '0';
-                       address <= "0010";
-                       wait for clk_period*2;
-
-                       ce <= '1';
-                       rd <= '1';
-                       wait for clk_period;
-
-      wait;
-   end process;
-
-END;
diff --git a/hw/tb/irc_register_tb.vhd b/hw/tb/irc_register_tb.vhd
deleted file mode 100644 (file)
index 723d886..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-LIBRARY ieee;
-USE ieee.std_logic_1164.ALL;
-
-ENTITY irc_register_tb IS
-END irc_register_tb;
-
-ARCHITECTURE behavior OF irc_register_tb IS
-
-    -- Component Declaration for the Unit Under Test (UUT)
-
-    COMPONENT irc_register
-    PORT(
-         clk : IN  std_logic;
-         reset : IN  std_logic;
-         a0 : IN  std_logic;
-         b0 : IN  std_logic;
-         index0 : IN  std_logic;
-         mark0 : IN  std_logic;
-         data_in : IN  std_logic;
-         data_out : OUT  std_logic_vector(31 downto 0);
-         ce : IN  std_logic_vector(1 downto 0);
-         rd : IN  std_logic;
-         ta : OUT  std_logic;
-         wr : IN  std_logic
-        );
-    END COMPONENT;
-
-
-   --Inputs
-   signal clk : std_logic := '0';
-   signal reset : std_logic := '0';
-   signal a0 : std_logic := '0';
-   signal b0 : std_logic := '0';
-   signal index0 : std_logic := '0';
-   signal mark0 : std_logic := '0';
-   signal data_in : std_logic := '0';
-   signal ce : std_logic_vector(1 downto 0) := (others => '1');
-   signal rd : std_logic := '1';
-   signal wr : std_logic := '1';
-
-       --Outputs
-   signal data_out : std_logic_vector(31 downto 0);
-   signal ta : std_logic;
-
-   -- Clock period definitions
-   constant clk_period : time := 20 ns;
-
-BEGIN
-
-       -- Instantiate the Unit Under Test (UUT)
-   uut: irc_register PORT MAP (
-          clk => clk,
-          reset => reset,
-          a0 => a0,
-          b0 => b0,
-          index0 => index0,
-          mark0 => mark0,
-          data_in => data_in,
-          data_out => data_out,
-          ce => ce,
-          rd => rd,
-          ta => ta,
-          wr => wr
-        );
-
-   -- Clock process definitions
-   clk_process :process
-   begin
-               clk <= '0';
-               wait for clk_period/2;
-               clk <= '1';
-               wait for clk_period/2;
-   end process;
-
-
-   -- Stimulus process
-   stim_proc: process
-   begin
-      -- hold reset state for 100 ns.
-      reset <= '0';
-      wait for 100 ns;
-                       reset <= '1';
-
-      wait for clk_period*10;
-
-      -- insert stimulus here
-
-      wait;
-   end process;
-
-END;
diff --git a/hw/tb/qcounter_tb.vhd b/hw/tb/qcounter_tb.vhd
deleted file mode 100644 (file)
index 57e528d..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-LIBRARY ieee;
-USE ieee.std_logic_1164.ALL;
-
-ENTITY qcounter_tb IS
-END qcounter_tb;
-
-ARCHITECTURE behavior OF qcounter_tb IS
-
-    -- Component Declaration for the Unit Under Test (UUT)
-
-    COMPONENT qcounter
-    PORT(
-         clk : IN  std_logic;
-         reset : IN  std_logic;
-         a0 : IN  std_logic;
-         b0 : IN  std_logic;
-         qcount : OUT  std_logic_vector(31 downto 0);
-         a_rise : OUT  std_logic;
-         a_fall : OUT  std_logic;
-         b_rise : OUT  std_logic;
-         b_fall : OUT  std_logic;
-         ab_event : OUT  std_logic;
-         ab_error : OUT  std_logic
-        );
-    END COMPONENT;
-
-
-   --Inputs
-   signal clk : std_logic := '0';
-   signal reset : std_logic := '1';
-   signal a0 : std_logic := '0';
-   signal b0 : std_logic := '0';
-
-       --Outputs
-   signal qcount : std_logic_vector(31 downto 0);
-   signal a_rise : std_logic;
-   signal a_fall : std_logic;
-   signal b_rise : std_logic;
-   signal b_fall : std_logic;
-   signal ab_event : std_logic;
-   signal ab_error : std_logic;
-
-   -- Clock period definitions
-        constant clk_period : time := 20 ns;
-
-BEGIN
-
-       -- Instantiate the Unit Under Test (UUT)
-   uut: qcounter PORT MAP (
-          clk => clk,
-          reset => reset,
-          a0 => a0,
-          b0 => b0,
-          qcount => qcount,
-          a_rise => a_rise,
-          a_fall => a_fall,
-          b_rise => b_rise,
-          b_fall => b_fall,
-          ab_event => ab_event,
-          ab_error => ab_error
-        );
-
-   -- Clock process definitions
-   clk_process :process
-   begin
-               clk <= '0';
-               wait for clk_period/2;
-               clk <= '1';
-               wait for clk_period/2;
-   end process;
-
-
-   -- Stimulus process
-   stim_proc: process
-   begin
-      -- hold reset state for 100 ns.
-                       reset <= '0';
-      wait for 100 ns;
-                       reset <= '1';
-
-      wait for clk_period*10;
-
-      -- insert stimulus here
-
-      wait;
-   end process;
-
-END;
index b4ac16f8af94e83dcf1af5caf7b54a9335f41dd1..d5b585f31816dac12117f828b2c06f2fdefd092d 160000 (submodule)
@@ -1 +1 @@
-Subproject commit b4ac16f8af94e83dcf1af5caf7b54a9335f41dd1
+Subproject commit d5b585f31816dac12117f828b2c06f2fdefd092d