2 use ieee.std_logic_1164.all;
3 use ieee.numeric_std.all;
10 SIM : boolean := false;
11 -- Non-zero to enable log data collection
12 LOG_LENGTH : natural := 0
17 d_in : in Decode2ToCrFileType;
18 d_out : out CrFileToDecode2Type;
20 w_in : in WritebackToCrFileType;
23 sim_dump : in std_ulogic;
25 log_out : out std_ulogic_vector(12 downto 0)
29 architecture behaviour of cr_file is
30 signal crs : std_ulogic_vector(31 downto 0) := (others => '0');
31 signal crs_updated : std_ulogic_vector(31 downto 0);
32 signal xerc : xer_common_t := xerc_init;
33 signal xerc_updated : xer_common_t;
35 cr_create_0: process(all)
36 variable hi, lo : integer := 0;
37 variable cr_tmp : std_ulogic_vector(31 downto 0) := (others => '0');
42 if w_in.write_cr_mask(i) = '1' then
45 cr_tmp(hi downto lo) := w_in.write_cr_data(hi downto lo);
49 crs_updated <= cr_tmp;
51 if w_in.write_xerc_enable = '1' then
52 xerc_updated <= w_in.write_xerc_data;
60 cr_write_0: process(clk)
62 if rising_edge(clk) then
63 if w_in.write_cr_enable = '1' then
64 report "Writing " & to_hstring(w_in.write_cr_data) & " to CR mask " & to_hstring(w_in.write_cr_mask);
67 if w_in.write_xerc_enable = '1' then
68 report "Writing XERC";
75 cr_read_0: process(all)
77 -- just return the entire CR to make mfcrf easier for now
78 if d_in.read = '1' then
79 report "Reading CR " & to_hstring(crs_updated);
81 d_out.read_cr_data <= crs_updated;
82 d_out.read_xerc_data <= xerc_updated;
85 sim_dump_test: if SIM generate
88 if sim_dump = '1' then
89 report "CR 00000000" & to_hstring(crs);
90 assert false report "end of test" severity failure;
95 cf_log: if LOG_LENGTH > 0 generate
96 signal log_data : std_ulogic_vector(12 downto 0);
100 if rising_edge(clk) then
101 log_data <= w_in.write_cr_enable &
102 w_in.write_cr_data(31 downto 28) &
109 end architecture behaviour;