ushort[] table = new ushort[256]; ushort value, t,v; ushort temp; for (ushort i = 1; i < table.Length; i++) { value = 0; temp = i; for (byte j = 0; j < 8; j++) { t = (ushort)((value ^ temp) & 0x0001); if (t != 0) { v = (ushort)(value >> 1); value = (ushort)(v ^ polynomial); } else { value >>= 1; } temp >>= 1; } table[i] = value; } где в table[] помещяются результаты таблисы CRC, для дальнейшего применения. На PC все работает . Пробую на VHDL под QuartusII. не ругается но и не формирует масив table[].
текст этого "безобразия"
TYPE RamDim IS ARRAY(0 TO 255) of std_logic_vector(15 downto 0); SIGNAL myArray : RamDim;
crc_tables : process(clk)
variable value_t : BIT_VECTOR(0 TO 15); variable temp : BIT_VECTOR(0 TO 15); variable tv : BIT_VECTOR(0 TO 15); variable m_c : integer range 0 to 255; constant polynomial : BIT_VECTOR(0 TO 15) := "1010000000000001"; begin
if clk'event and clk = '1' then if stst = '0' then myArray <= (myArray'range => "0000000000000000"); stst <= '1'; else
if flag_crc = '0' then for i in 0 to 255 loop value_t := "0000000000000000"; temp := to_bitvector(conv_std_logic_vector(i,16));
for j in 0 to 7 loop tv := (value_t XOR temp ) AND "0000000000000001"; if tv = "0000000000000000" then value_t := value_t SRL 1; else value_t := (value_t SRL 1) XOR polynomial; end if; temp := temp SRL 1; end loop; myArray(i) <= to_stdlogicvector(value_t); end loop; flag_crc <= '1'; end if; end if; end if;
end process crc_tables;
Почему не выполняется заполнение масива. Я пытаюсь его читать и выводить на терминал PC. (Работа всех остальных модулей нормальная)