Поиск
Показаны результаты для тегов 'encoder'.
-
Здравствуйте, настал тут у меня момент отупения (всю неделю). Нужно реализовать асинхронный энкодер для параметризируемого регистра сдвига. Нужно контролировать фронт сигнала - то есть перепад подряд идущих единиц, пока не встретится стабильный ноль. Я написал такую функцию для преобразования входного потока, но она синтезируется в какую-то ерунду: function logic my_encoder( input logic [6 : 0] i_encode ); casez (i_encode) // приоритетный выбор "до первого ноля" 7'b??????1: return 3'b000; 7'b?????10: return 3'b001; 7'b????100: return 3'b010; 7'b???1000: return 3'b011; 7'b??10000: return 3'b100; 7'b?100000: return 3'b101; 7'b1000000: return 3'b110; default: return 3'b111; endcase Так как функции не параметризируются, а входной регистр может быть разной длинны, приходится по-рагульному встраивать в код: parameter p_length = 3; // анализ 3-х бит данных logic [3 : 0] r_data; // иходной вектор wire logic [1 : 0] r_data_encoded; // выходные декодированные данные assign {r_data_encoded} = my_encoder(r_data[p_length - 1 : 0]); Приоритетный перебор "менял местами" - ничего не помогло (перечисление наоборот). Подскажите возможное решение. А лучше почему данный Кейс финтезируется в какой-то бред (у меня всегда 1-й бит r_data_encoded подтянут на землю). З.Ы. Так же пробовал абстрагироваться от остальных значений и детектировать только наиболее раннее значение фронта, результат таков же: casez (i_encode) 7'b??????1: return 3'b000; 7'b?????10: return 3'b001; 7'b????10?: return 3'b010; 7'b???10??: return 3'b011; 7'b??10???: return 3'b100; 7'b?10????: return 3'b101; 7'b10?????: return 3'b110; default: return 3'b111; endcase
-
Энкодер Volkswagen
Fch опубликовал тема в Метрология, датчики, измерительная техника
Помогите пожалуйста разобраться по какому принципу оно работает. Фото энкодера