Maverick_ 15 1 июля, 2022 Опубликовано 1 июля, 2022 · Жалоба Добрый день Что-то я не могу придумать как сделать. Мне надо принимать паралельно 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; Подскажите пожалуйста как такое реализовать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 1 июля, 2022 Опубликовано 1 июля, 2022 · Жалоба эмм, собрать за 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 1 июля, 2022 Опубликовано 1 июля, 2022 · Жалоба В 01.07.2022 в 13:49, Maverick_ сказал: Мне надо принимать паралельно 2 байта, а выдавать паралельно 3 байта Элементарно: data2_out <= (others => '0'); :))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 1 июля, 2022 Опубликовано 1 июля, 2022 · Жалоба 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 Спасибо, попробую Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 1 июля, 2022 Опубликовано 1 июля, 2022 · Жалоба В 01.07.2022 в 14:30, Maverick_ сказал: Не понял Вас ... Если можно поясните пожалуйста Просто намек на некорректно поставленную задачу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 1 июля, 2022 Опубликовано 1 июля, 2022 · Жалоба des00 за намек спасибо. Ниже скрин симуляции: файлы реализации и тестбенча во вложении wave.do c.do receiver_data.vhd receiver_data_vhd_tst.vhd 2 часа назад, Самурай сказал: Просто намек на некорректно поставленную задачу... Решение я уже привел, я не знаю как по другому пояснить задачу, которую мне надо было реализовать... Сформулируйте Вы - интересна Ваша формулировка моей задачи... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 1 июля, 2022 Опубликовано 1 июля, 2022 · Жалоба С записью в буфер кратного размера очень здравая мысль была предложена des00, как-то приходилось пользоваться подобной схемой. Вряд ли можно придумать что-то более подходящее. Есть готовые корки фифо с несимметричными выходами или конвертеры ширины данных, но так мы теряем переносимость и универсальность решения, а внутри скорее всего сделано что-то такое же Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 1 июля, 2022 Опубликовано 1 июля, 2022 · Жалоба On 7/1/2022 at 5:13 PM, Tausinov said: ... Вряд ли можно придумать что-то более подходящее Вообще то для такого достаточно буфера на 2 байта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 1 июля, 2022 Опубликовано 1 июля, 2022 · Жалоба 1 hour ago, RobFPGA said: Вообще то для такого достаточно буфера на 2 байта. Можно, но рождается мультиплексор для сбора выходного слова. А решение с кратным буфером помимо того что там только сдвиговые регистры, может использоваться еще для CDC частот 2/3 рожденных с одной PLL без какого либо FIFO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 3 июля, 2022 Опубликовано 3 июля, 2022 · Жалоба On 7/1/2022 at 8:31 PM, des00 said: Можно, но рождается мультиплексор для сбора выходного слова. А решение с кратным буфером помимо того что там только сдвиговые регистры, может использоваться еще для CDC частот 2/3 рожденных с одной PLL без какого либо FIFO. Моя реализация не позволит обеспечивать CDC... Надо немного по другому описать/добавить логику... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 4 июля, 2022 Опубликовано 4 июля, 2022 · Жалоба On 7/3/2022 at 11:21 PM, Maverick_ said: Моя реализация не позволит обеспечивать CDC... Надо немного по другому описать/добавить логику... ну да, там на каждой стороне нужно родить "генератор" общей кратной "частоты" и переложить данные) Похожее я часто в полифазной обработке делаю) А вот если одна из сторон может изменять количество элементов массива динамически, вот там самое веселье начинается) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 5 июля, 2022 Опубликовано 5 июля, 2022 · Жалоба On 7/4/2022 at 8:19 AM, des00 said: ну да, там на каждой стороне нужно родить "генератор" общей кратной "частоты" и переложить данные) Похожее я часто в полифазной обработке делаю) А вот если одна из сторон может изменять количество элементов массива динамически, вот там самое веселье начинается) Интересная у Вас работа) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 5 июля, 2022 Опубликовано 5 июля, 2022 · Жалоба On 7/4/2022 at 7:19 AM, des00 said: А вот если одна из сторон может изменять количество элементов массива динамически, вот там самое веселье начинается) А еще веселее когда это делают обе стороны. Но как раз в таком случае бывает выгодно один большой мукс на входе регистра разбить на 2 более мелких, на входе и выходе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 6 июля, 2022 Опубликовано 6 июля, 2022 · Жалоба 14 hours ago, Maverick_ said: Интересная у Вас работа) ну а как по другому когда надо "слова" декодера разрядностью 8/16/32 собирать из BPSK...QAM4096 символов) 5 hours ago, RobFPGA said: А еще веселее кода это делают обе стороны. Но как раз в таком случае бывает выгодно один большой мукс на входе регистра разбить на 2 более мелких, на входе и выходе. плавали, знаем, а если еще и на символьной под 300 так там начинаются выкрутасы) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться