Здравствуйте! Смысл проблемы в следующем: я реализую алгоритм на языке Verilog. Два 32-х битных числа складываются по модулю 2 в степени 32. Тридцатидухбитный результат разбивается на восемь четрехбитных блоков. Каждый из четырехбитных блоков представляет собой число от 0 до 15. Есть таблица из одной строки и 15 столбцов. Так вот значение числа(четырехбитного блока) указывает на номер столбца, в котором записано еще одно число, которое должно быть на выходе алгоритма. Например, табица - 4 10 9 2 13 8 0 14 6 11 1 12 7 15 5 3 если в четырех битном блоке число 7 (0111), то на выходе будет 14 (1110) и т.д. Вот код программы:
module XXX ( . . . reg [31:0] N1; reg [31:0] X0,X1,X2,X3,X4,X5,X6,X7; reg [63:0] K0,K1,K2,K3,K4,K5,K6,K7; reg [3:0] K0_o,K1_o,K2_o,K3_o,K4_o,K5_o,K6_o,K7_o; reg [31:0] R; reg [31:0] CM1; . . always ... K0=64'h4A92_D80E_6B1C_7F53; K1=64'hEB4C_6DFA_2381_0759; . . . CM1=((N1+X0)%33'h1_0000_0000); K0_o=K0[(4*CM1[31:28]+3):(4*CM1[31:28])]; K1_o=K1[(4*CM1[27:24]+3):(4*CM1[27:24])]; K2_o=K2[(4*CM1[23:20]+3):(4*CM1[23:20])]; K3_o=K3[(4*CM1[19:16]+3):(4*CM1[19:16])]; K4_o=K4[(4*CM1[15:12]+3):(4*CM1[15:12])]; K5_o=K5[(4*CM1[11:8]+3):(4*CM1[11:8])]; K6_o=K6[(4*CM1[7:4]+3):(4*CM1[7:4])]; K7_o=K7[(4*CM1[3:0]+3):(4*CM1[3:0])];
При компиляции выдается следующая ошибка:
Illegal operand for constant expression [4(IEE)] K0_o=K0[(4*CM1[31:28]+3):(4*CM1[31:28])];
И так для всех К.._o. Подскажите, пожалуйста, как можно исправить эту ошибку!!!! Жизненно необходимо!
|