

jenya7
Участник-
Content Count
3425 -
Joined
-
Last visited
Content Type
Profiles
Forums
Calendar
Everything posted by jenya7
-
Разница между датами в микросекундах. VHDL
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
вы перешли на Верилог? вроде как были приверженец VHDL. :) -
Раньше я делал на уровне VS не заморачиваясь TimeSpan timeSpan = DateTime.UtcNow - new DateTime(1994, 1, 1); ulong totalMicrosec = (ulong)(timeSpan.TotalMilliseconds * 1000); теперь меня озадачили и мне нужно спуститься на уровень ниже. я решил высчитать микросекунды двух дат относительно epoch time и отнять два числа. uint64_t RTC_DateToUnixTimeMicro(RTC *rtc) { uint32_t y; uint32_t m; uint32_t d; uint64_t t; //Year y = rtc->year; //Month of year m = rtc->month; //Day of month d = rtc->day; //January and February are counted as months 13 and 14 of the previous year if(m <= 2) { m += 12; y -= 1; } //Convert years to days t = (365 * y) + (y / 4) - (y / 100) + (y / 400); //Convert months to days t += (30 * m) + (3 * (m + 1) / 5) + d; //Unix time starts on January 1st, 1970 t -= 719561; //Convert days to seconds to microseconds t *= 86400 * 1000000; //Add hours, minutes and seconds - to microseconds t += ((3600 * rtc->hours) + (60 * rtc->minutes) + rtc->seconds) * 1000000; //Return Unix time return t; } Вопрос - как эта математика синтезируется в FPGA, ничего не нужно менять?
-
Функция расчета period и prescaler таймера
jenya7 replied to std's topic in ARM, 32bit
а как вы собираетесь исполнять программу? есть axis manager? -
Сигнал ресет
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
а что значит "снимаем синхронно"? -
Сигнал ресет
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
я понимаю. лично мне нравится второй вариант синхронный. но есть у него какие то преимущества? не хочется переписывать кучу модулей. темплейт дает <optional_label>: process(reset, clk) is -- Declaration(s) begin if(reset = '1') then -- Asynchronous Sequential Statement(s) elsif(rising_edge(clk)) then -- Synchronous Sequential Statement(s) end if; end process; вот я наштамповал а теперь сижу и думаю а правильно ли это. -
Сигнал ресет
jenya7 posted a topic in Языки проектирования на ПЛИС (FPGA)
Есть большая разница как сделать? Так process (CLK, RST) begin if RST = '1' then --do something elsif (rising_edge(CLK)) then --do something end if; end process; Или так process (CLK, RST) begin if (rising_edge(CLK)) then if RST = '1' then --do something elsif --do something end if; end if; end process; -
Применить CRC для массива.
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
конечный вариант Си или VHDL? -
Требуется специалист FPGA (VHDL).
jenya7 posted a topic in Предлагаю работу
Есть несколько проектов для которых надо написать тестбенчи в ModelSim. Язык VHDL. Такое вот предложение. -
Применить CRC для массива.
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
спасибо. так, "в лоб" результаты совпадают. unsigned short crc_res; unsigned char crc_data[3] = {1,2,3}; int main() { crc16_8(1, crc_data[0]); for (int i = 0; i < 3; i++) { crc_res = crc16_8(0, crc_data[i]); } //crc_res = 0x821D } надеюсь меня тапками не закидают на Си стороне. )) -
Применить CRC для массива.
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
Си вариант именно такой CRC algorithm name CRC-16/USB Polynomial formula x16 + x15 + x2 + 1 width 16 Polynomial 8005 Initial value FFFF Results are different or values FFFF Input reverse true Output reverse true -
Применить CRC для массива.
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
vhdl версия результат 0х5А82 Си версия unsigned short crc(unsigned char *ptr, int len) { unsigned int i; unsigned short crc = 0xffff; while(len--) { crc ^= *ptr++; for (i = 0; i < 8; ++i) { if (crc & 1) crc = (crc >> 1) ^ 0xA001; else crc = (crc >> 1); } } return ~crc; } unsigned short crc_res; unsigned char crc_data[3] = {1,2,3}; crc_res = crc(crc_data, 3); результат 0х9Е9Е несостыковочка однако эта строка меняет результат crc = (crc >> 1) ^ 0xA001; откуда взялось 0xA001? ошибся. каждый клок переписывает значение. надо так но всё равно результаты разные. -
Применить CRC для массива.
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
спасибо. мне конечно без таблицы так как VHDL модуль без таблицы. мне си код нужен потому как посылка пакетов между FPGA и CPU. На стороне CPU нужен си аналог вычисления CRC. -
Применить CRC для массива.
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
не знаю. если взять сгенерированный код architecture behavior of CRC16 is signal lfsr_q: std_logic_vector (15 downto 0) := (others => '1'); signal lfsr_c: std_logic_vector (15 downto 0); begin crc_out <= lfsr_q; lfsr_c(0) <= lfsr_q(8) xor lfsr_q(9) xor lfsr_q(10) xor lfsr_q(11) xor lfsr_q(12) xor lfsr_q(13) xor lfsr_q(14) xor lfsr_q(15) xor data_in(0) xor data_in(1) xor data_in(2) xor data_in(3) xor data_in(4) xor data_in(5) xor data_in(6) xor data_in(7); lfsr_c(1) <= lfsr_q(9) xor lfsr_q(10) xor lfsr_q(11) xor lfsr_q(12) xor lfsr_q(13) xor lfsr_q(14) xor lfsr_q(15) xor data_in(1) xor data_in(2) xor data_in(3) xor data_in(4) xor data_in(5) xor data_in(6) xor data_in(7); lfsr_c(2) <= lfsr_q(8) xor lfsr_q(9) xor data_in(0) xor data_in(1); lfsr_c(3) <= lfsr_q(9) xor lfsr_q(10) xor data_in(1) xor data_in(2); lfsr_c(4) <= lfsr_q(10) xor lfsr_q(11) xor data_in(2) xor data_in(3); lfsr_c(5) <= lfsr_q(11) xor lfsr_q(12) xor data_in(3) xor data_in(4); lfsr_c(6) <= lfsr_q(12) xor lfsr_q(13) xor data_in(4) xor data_in(5); lfsr_c(7) <= lfsr_q(13) xor lfsr_q(14) xor data_in(5) xor data_in(6); lfsr_c(8) <= lfsr_q(0) xor lfsr_q(14) xor lfsr_q(15) xor data_in(6) xor data_in(7); lfsr_c(9) <= lfsr_q(1) xor lfsr_q(15) xor data_in(7); lfsr_c(10) <= lfsr_q(2); lfsr_c(11) <= lfsr_q(3); lfsr_c(12) <= lfsr_q(4); lfsr_c(13) <= lfsr_q(5); lfsr_c(14) <= lfsr_q(6); lfsr_c(15) <= lfsr_q(7) xor lfsr_q(8) xor lfsr_q(9) xor lfsr_q(10) xor lfsr_q(11) xor lfsr_q(12) xor lfsr_q(13) xor lfsr_q(14) xor lfsr_q(15) xor data_in(0) xor data_in(1) xor data_in(2) xor data_in(3) xor data_in(4) xor data_in(5) xor data_in(6) xor data_in(7); process (CLK, RST) begin if RST = '1' then lfsr_q <= (others => '1'); elsif rising_edge(CLK) then if CRC_EN = '1' then lfsr_q <= lfsr_c; end if; end if; end process; то ближайший что я нашел unsigned short crc16(const unsigned char* data_p, unsigned char length) { unsigned char x; unsigned short crc = 0xFFFF; while (length--) { x = crc >> 8 ^ *data_p++; x ^= x>>4; crc = (crc << 8) ^ ((unsigned short)(x << 12)) ^ ((unsigned short)(x <<5)) ^ ((unsigned short)x); } return crc; } как то не особо похож. -
Применить CRC для массива.
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
в смысле подходящий? алгоритмы передающего и принимающего должны совпадать. -
Применить CRC для массива.
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
Возник такой вопрос. Нужно проверить сгенерированный CRC на стороне CPU. Начал делать Си аналог модуля - выходит как то монструозно. Есть какой то Си аналог для этого модуля? -
Применить CRC для массива.
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
спасибо. это я как раз не понимал. -
Применить CRC для массива.
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
спасибо. но что делать с результатом? entity crc is port ( data_in : in std_logic_vector (7 downto 0); crc_en , rst, clk : in std_logic; crc_out : out std_logic_vector (15 downto 0) ); end crc; это CRC на байт. а что делать с массивом? на данный момент я делаю в цикле crc_result <= crc_result xor crc_out; -
Применить CRC для массива.
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
мне даже рисовать не надо. RTL Viewer прекрасно это делает за меня. но понятней от этого не стало. -
Применить CRC для массива.
jenya7 posted a topic in Языки проектирования на ПЛИС (FPGA)
Есть модуль CRC entity CRC is port ( CLK: in std_logic; RST: in std_logic; DATA_IN: in std_logic_vector (7 downto 0); CRC_EN: in std_logic; CRC_OUT: out std_logic_vector (15 downto 0) ); end CRC; architecture behavior of CRC is signal lfsr_q: std_logic_vector (15 downto 0) := (others => '1'); signal lfsr_c: std_logic_vector (15 downto 0); begin crc_out <= lfsr_q; lfsr_c(0) <= lfsr_q(8) xor lfsr_q(9) xor lfsr_q(10) xor lfsr_q(11) xor lfsr_q(12) xor lfsr_q(13) xor lfsr_q(14) xor lfsr_q(15) xor data_in(0) xor data_in(1) xor data_in(2) xor data_in(3) xor data_in(4) xor data_in(5) xor data_in(6) xor data_in(7); lfsr_c(1) <= lfsr_q(9) xor lfsr_q(10) xor lfsr_q(11) xor lfsr_q(12) xor lfsr_q(13) xor lfsr_q(14) xor lfsr_q(15) xor data_in(1) xor data_in(2) xor data_in(3) xor data_in(4) xor data_in(5) xor data_in(6) xor data_in(7); lfsr_c(2) <= lfsr_q(8) xor lfsr_q(9) xor data_in(0) xor data_in(1); lfsr_c(3) <= lfsr_q(9) xor lfsr_q(10) xor data_in(1) xor data_in(2); lfsr_c(4) <= lfsr_q(10) xor lfsr_q(11) xor data_in(2) xor data_in(3); lfsr_c(5) <= lfsr_q(11) xor lfsr_q(12) xor data_in(3) xor data_in(4); lfsr_c(6) <= lfsr_q(12) xor lfsr_q(13) xor data_in(4) xor data_in(5); lfsr_c(7) <= lfsr_q(13) xor lfsr_q(14) xor data_in(5) xor data_in(6); lfsr_c(8) <= lfsr_q(0) xor lfsr_q(14) xor lfsr_q(15) xor data_in(6) xor data_in(7); lfsr_c(9) <= lfsr_q(1) xor lfsr_q(15) xor data_in(7); lfsr_c(10) <= lfsr_q(2); lfsr_c(11) <= lfsr_q(3); lfsr_c(12) <= lfsr_q(4); lfsr_c(13) <= lfsr_q(5); lfsr_c(14) <= lfsr_q(6); lfsr_c(15) <= lfsr_q(7) xor lfsr_q(8) xor lfsr_q(9) xor lfsr_q(10) xor lfsr_q(11) xor lfsr_q(12) xor lfsr_q(13) xor lfsr_q(14) xor lfsr_q(15) xor data_in(0) xor data_in(1) xor data_in(2) xor data_in(3) xor data_in(4) xor data_in(5) xor data_in(6) xor data_in(7); process (CLK, RST) begin if RST = '1' then lfsr_q <= (others => '1'); elsif rising_edge(CLK) then if CRC_EN = '1' then lfsr_q <= lfsr_c; end if; end if; end process; end behavior; Но это CRC на один байт. А если мне нужен CRC на массив байтов, что я делаю с промежуточным результатом? и как вообще перебрать массив, в for i in 0 to x loop? -
Использовать только один канал ADC на MAX10.
jenya7 replied to jenya7's topic in Работаем с ПЛИС, области применения, выбор
спасибо. печально конечно. мягко говоря. -
Использовать только один канал ADC на MAX10.
jenya7 replied to jenya7's topic in Работаем с ПЛИС, области применения, выбор
я же могу галкой выбрать - "Use channel х" на каждый канал. -
Есть ADC core component adc_qsys is port ( adc_1_command_valid : in std_logic := '0'; -- adc_1_command.valid adc_1_command_channel : in std_logic_vector(4 downto 0) := (others => '0'); -- .channel adc_1_command_startofpacket : in std_logic := '0'; -- .startofpacket adc_1_command_endofpacket : in std_logic := '0'; -- .endofpacket adc_1_command_ready : out std_logic; -- .ready adc_1_response_valid : out std_logic; -- adc_1_response.valid adc_1_response_channel : out std_logic_vector(4 downto 0); -- .channel adc_1_response_data : out std_logic_vector(11 downto 0); -- .data adc_1_response_startofpacket : out std_logic; -- .startofpacket adc_1_response_endofpacket : out std_logic; -- .endofpacket clk_clk : in std_logic := '0'; -- clk.clk reset_reset_n : in std_logic := '0' -- reset.reset_n ); end component adc_qsys; U_ADC_SYS : adc_qsys port map ( clk_clk => s_pll_clk_10M, reset_reset_n => '1', adc_1_command_valid => adc1_com_valid, adc_1_command_channel => adc1_com_channel, adc_1_command_startofpacket => adc1_com_startofpacket, adc_1_command_endofpacket => adc1_com_endofpacket, adc_1_command_ready => adc1_com_ready, adc_1_response_valid => adc1_resp_valid, adc_1_response_channel => adc1_resp_channel, adc_1_response_data => adc1_resp_data, adc_1_response_startofpacket => adc1_resp_startofpacket, adc_1_response_endofpacket => adc1_resp_endofpacket ); раньше я использовал весь порт ADC1_IN1 - ADC1_IN8 и проблем не было. Теперь мне нужен только один аналоговый вход - ADC1_IN1. Остальные пины заняты другими задачами. Иду в кор и разрешаю только один канал, остальные галки снимаю. Но при компиляции вываливаются ошибки Кор всё равно видит пины как активные. Как разрешить проблему?
-
Защёлкнуть значение счётчика.
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
спасибо. -
Защёлкнуть значение счётчика.
jenya7 replied to jenya7's topic in Языки проектирования на ПЛИС (FPGA)
а когда flag_edge = '1' ? -
Не подскажете защитный элемент?
jenya7 replied to artemkad's topic in В помощь начинающему
ну вы всё равно не захотите жестко коротить бас на землю. поставте PTC последовательно. или poly fuse.