У меня возникли проблемы с получением простой математики, сделанной в VHDL. Я ужасен на этом языке, поэтому, если мой синтаксис глуп или что-то еще, у меня есть предлог: P. Я пытаюсь реализовать очень простой генератор случайных чисел, который вычисляет псевдослучайные числа по формуле:Операторы векторов битовых векторов VHDL
семян = (семена * 1103515245) + 12345
Как я пытаюсь сделать это:
Signalss здесь
signal seed: std_logic_vector(31 downto 0) := x"2B4C96B9";
signal multiply: std_logic_vector(31 downto 0) := x"41C64E6D";
signal add: std_logic_vector(31 downto 0) := x"00003039";
signal temp1: std_logic_vector(63 downto 0);
signal temp2: std_logic_vector(31 downto 0);
Исчисление здесь (сделано в государстве, в государственной машине)
temp2 <= seed;
temp1 <= std_logic_vector((unsigned(temp2)*unsigned(multiply)));
seed <= std_logic_vector(unsigned(temp1(31 downto 0)) + unsigned(add));
temp2 всегда заканчивается неопределенным. Кроме того, семена заканчиваются и не определены. Я пробовал это несколько разных способов, но все они ошибались в основном из-за размеров и порядка векторов или операций. Я чувствую, что сейчас делаю это правильно, основываясь на том, что я нашел в полуразрушенном Googling, но я просто не могу понять это.
Самое лучшее, что я могу сейчас придумать, это сделать каждый шаг расчета в своем собственном состоянии на конечной машине. Может ли кто-нибудь увидеть, что я здесь делаю неправильно?
Я думаю, что семя должно было быть 32 бита вектора (должен был отметить, что), так что усечение было к сож необходимость. Я просто хочу получить задание, и ваше предложение исправило все мои проблемы! Огромное спасибо! – SkylineAddict
И объявляйте их «неподписанными», видя, как вы так или иначе закончите использовать их, нет смысла, если все время переходите к 'std_logic_vector' ... –