Maverick_ 17 July 1, 2022 Posted July 1, 2022 · Report post Добрый день Что-то я не могу придумать как сделать. Мне надо принимать паралельно 2 байта, а выдавать паралельно 3 байта: library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity receiver_data is generic ( BYTE_WIDTH : integer := 8; BYTES : natural := 1 ); Port ( clk : in std_logic; rst : in std_logic; valid_in : in std_logic; data0_in : in std_logic_vector((BYTE_WIDTH*BYTES-1) downto 0); data1_in : in std_logic_vector((BYTE_WIDTH*BYTES-1) downto 0); valid_out : out std_logic; data0_out : out std_logic_vector((BYTE_WIDTH*BYTES-1) downto 0); data1_out : out std_logic_vector((BYTE_WIDTH*BYTES-1) downto 0); data2_out : out std_logic_vector((BYTE_WIDTH*BYTES-1) downto 0); ); end receiver_data; Подскажите пожалуйста как такое реализовать? Quote Share this post Link to post Share on other sites More sharing options...
des00 27 July 1, 2022 Posted July 1, 2022 · Report post эмм, собрать за 3 порции 6 байт и выдать за 2 порции по 3 байта? Если поток не выровнен по границе 3-х байт, то в конце потребуется еще коррекция положения последнего байта. вот нечто похожее, если нет входной валидностии и синхронизации always_ff @(posedge clk) begin cnt_in <= (cnt_in == 2) ? 0 : (cnt_int + 1'b1); data_in <= (data_in << 16) | idata[0 +: 16]; // pipa <= (cnt_in == 2); // val_out <= pipa ? 2'b11 : (val_out << 1); data_out <= pipa ? data_in : (data_out << 24); // oval <= val_out[2]; odata <= data_out[24 +: 24]; end Quote Share this post Link to post Share on other sites More sharing options...
Самурай 13 July 1, 2022 Posted July 1, 2022 · Report post В 01.07.2022 в 13:49, Maverick_ сказал: Мне надо принимать паралельно 2 байта, а выдавать паралельно 3 байта Элементарно: data2_out <= (others => '0'); :))) Quote Share this post Link to post Share on other sites More sharing options...
Maverick_ 17 July 1, 2022 Posted July 1, 2022 · Report post On 7/1/2022 at 2:14 PM, Самурай said: Элементарно: data2_out <= (others => '0'); :))) Не понял Вас ... Если можно поясните пожалуйста On 7/1/2022 at 2:13 PM, des00 said: эмм, собрать за 3 порции 6 байт и выдать за 2 порции по 3 байта? Если поток не выровнен по границе 3-х байт, то в конце потребуется еще коррекция положения последнего байта. вот нечто похожее, если нет входной валидностии и синхронизации always_ff @(posedge clk) begin cnt_in <= (cnt_in == 2) ? 0 : (cnt_int + 1'b1); data_in <= (data_in << 16) | idata[0 +: 16]; // pipa <= (cnt_in == 2); // val_out <= pipa ? 2'b11 : (val_out << 1); data_out <= pipa ? data_in : (data_out << 24); // oval <= val_out[2]; odata <= data_out[24 +: 24]; end Спасибо, попробую Quote Share this post Link to post Share on other sites More sharing options...
Самурай 13 July 1, 2022 Posted July 1, 2022 · Report post В 01.07.2022 в 14:30, Maverick_ сказал: Не понял Вас ... Если можно поясните пожалуйста Просто намек на некорректно поставленную задачу... Quote Share this post Link to post Share on other sites More sharing options...
Maverick_ 17 July 1, 2022 Posted July 1, 2022 · Report post des00 за намек спасибо. Ниже скрин симуляции: файлы реализации и тестбенча во вложении wave.do c.do receiver_data.vhd receiver_data_vhd_tst.vhd 2 часа назад, Самурай сказал: Просто намек на некорректно поставленную задачу... Решение я уже привел, я не знаю как по другому пояснить задачу, которую мне надо было реализовать... Сформулируйте Вы - интересна Ваша формулировка моей задачи... Quote Share this post Link to post Share on other sites More sharing options...
Tausinov 0 July 1, 2022 Posted July 1, 2022 · Report post С записью в буфер кратного размера очень здравая мысль была предложена des00, как-то приходилось пользоваться подобной схемой. Вряд ли можно придумать что-то более подходящее. Есть готовые корки фифо с несимметричными выходами или конвертеры ширины данных, но так мы теряем переносимость и универсальность решения, а внутри скорее всего сделано что-то такое же Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 105 July 1, 2022 Posted July 1, 2022 · Report post On 7/1/2022 at 5:13 PM, Tausinov said: ... Вряд ли можно придумать что-то более подходящее Вообще то для такого достаточно буфера на 2 байта. Quote Share this post Link to post Share on other sites More sharing options...
des00 27 July 1, 2022 Posted July 1, 2022 · Report post 1 hour ago, RobFPGA said: Вообще то для такого достаточно буфера на 2 байта. Можно, но рождается мультиплексор для сбора выходного слова. А решение с кратным буфером помимо того что там только сдвиговые регистры, может использоваться еще для CDC частот 2/3 рожденных с одной PLL без какого либо FIFO. Quote Share this post Link to post Share on other sites More sharing options...
Maverick_ 17 July 3, 2022 Posted July 3, 2022 · Report post On 7/1/2022 at 8:31 PM, des00 said: Можно, но рождается мультиплексор для сбора выходного слова. А решение с кратным буфером помимо того что там только сдвиговые регистры, может использоваться еще для CDC частот 2/3 рожденных с одной PLL без какого либо FIFO. Моя реализация не позволит обеспечивать CDC... Надо немного по другому описать/добавить логику... Quote Share this post Link to post Share on other sites More sharing options...
des00 27 July 4, 2022 Posted July 4, 2022 · Report post On 7/3/2022 at 11:21 PM, Maverick_ said: Моя реализация не позволит обеспечивать CDC... Надо немного по другому описать/добавить логику... ну да, там на каждой стороне нужно родить "генератор" общей кратной "частоты" и переложить данные) Похожее я часто в полифазной обработке делаю) А вот если одна из сторон может изменять количество элементов массива динамически, вот там самое веселье начинается) Quote Share this post Link to post Share on other sites More sharing options...
Maverick_ 17 July 5, 2022 Posted July 5, 2022 · Report post On 7/4/2022 at 8:19 AM, des00 said: ну да, там на каждой стороне нужно родить "генератор" общей кратной "частоты" и переложить данные) Похожее я часто в полифазной обработке делаю) А вот если одна из сторон может изменять количество элементов массива динамически, вот там самое веселье начинается) Интересная у Вас работа) Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 105 July 5, 2022 Posted July 5, 2022 · Report post On 7/4/2022 at 7:19 AM, des00 said: А вот если одна из сторон может изменять количество элементов массива динамически, вот там самое веселье начинается) А еще веселее когда это делают обе стороны. Но как раз в таком случае бывает выгодно один большой мукс на входе регистра разбить на 2 более мелких, на входе и выходе. Quote Share this post Link to post Share on other sites More sharing options...
des00 27 July 6, 2022 Posted July 6, 2022 · Report post 14 hours ago, Maverick_ said: Интересная у Вас работа) ну а как по другому когда надо "слова" декодера разрядностью 8/16/32 собирать из BPSK...QAM4096 символов) 5 hours ago, RobFPGA said: А еще веселее кода это делают обе стороны. Но как раз в таком случае бывает выгодно один большой мукс на входе регистра разбить на 2 более мелких, на входе и выходе. плавали, знаем, а если еще и на символьной под 300 так там начинаются выкрутасы) Quote Share this post Link to post Share on other sites More sharing options...