Jump to content

    

Maverick_

Модераторы
  • Content Count

    3478
  • Joined

  • Last visited

Community Reputation

10 Хороший

About Maverick_

  • Rank
    я только учусь...
  • Birthday 01/12/1979

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    Украина

Recent Profile Visitors

20996 profile views
  1. я про работу с hdl описанием в текстовом редакторе... NotePad++ поддерживает синтаксис VHDL/Verilog как предварительный вариант получения файла top level графический редактор подойдет, потом можно сгенерить hdl описание и продолжать уже работать в текстовом редакторе
  2. Пльзуйтесь например NotePad++ там выделяешь сигнал и он подсвечивается. По подсветке можно проверять подключение. Как по мне удобно.
  3. 2 new123 https://forums.intel.com/s/question/0D50P00003yyThQSAU/unexpected-irq-trap-at-vector-xxx-arria-10-soc-linux?language=ru не помогает ссылка на аналогичную проблему у людей...
  4. L1 path development

    des00 Вам скорее всего не ответит MIkler он сам наверное не в теме
  5. Варианты для проб: 1. Попробуйте уменьшить длину соединения (проводов) например в 2 раза и выровнять их по длине 2. Если используете соединение напрямую с пинов FPGA можно поставить микросхему буффера (на входе 3,3В на выходе 5В и наоборот) 3. Уменьшить частоту (SPI) например в 2 раза Например сразу сделать 1 и 3 пункты и посмотреть... PS У меня порядка 10 см SPI работал без ошибок где-то на 6МГц (без буферов)
  6. Какая длина провода соединяющая две платы? или Вы работаете в пределах одной ПЛИС? под сериально это UART или SPI ?
  7. простое описание слейва (vhdl): library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; -- THE SPI SLAVE MODULE SUPPORT ONLY SPI MODE 0 (CPOL=0, CPHA=0)!!! entity SPI_SLAVE is Port ( CLK : in std_logic; -- system clock RST : in std_logic; -- high active synchronous reset -- SPI SLAVE INTERFACE SCLK : in std_logic; CS_N : in std_logic; MOSI : in std_logic; MISO : out std_logic; -- USER INTERFACE READY : out std_logic; -- when READY = 1, SPI slave is ready to accept input data DIN : in std_logic_vector(7 downto 0); -- input data for master DIN_VLD : in std_logic; -- when DIN_VLD = 1, input data are valid and can be accept DOUT : out std_logic_vector(7 downto 0); -- output data from master DOUT_VLD : out std_logic -- when DOUT_VLD = 1, output data are valid ); end SPI_SLAVE; architecture RTL of SPI_SLAVE is signal spi_clk_reg : std_logic; signal spi_clk_redge_en : std_logic; signal spi_clk_fedge_en : std_logic; signal load_data : std_logic; signal data_shreg : std_logic_vector(7 downto 0); signal bit_cnt : unsigned(2 downto 0); signal last_bit_en : std_logic; signal slave_ready : std_logic; signal data_busy_reg : std_logic; signal rx_data_vld : std_logic; begin load_data <= slave_ready and DIN_VLD; READY <= slave_ready; DOUT <= data_shreg; -- ------------------------------------------------------------------------- -- SPI CLOCK REGISTER -- ------------------------------------------------------------------------- spi_clk_reg_p : process (CLK) begin if (rising_edge(CLK)) then if (RST = '1') then spi_clk_reg <= '0'; else spi_clk_reg <= SCLK; end if; end if; end process; -- ------------------------------------------------------------------------- -- SPI CLOCK EDGES FLAGS -- ------------------------------------------------------------------------- spi_clk_fedge_en <= not SCLK and spi_clk_reg; spi_clk_redge_en <= SCLK and not spi_clk_reg; -- ------------------------------------------------------------------------- -- DATA BUSY REGISTER -- ------------------------------------------------------------------------- data_busy_reg_p : process (CLK) begin if (rising_edge(CLK)) then if (RST = '1') then data_busy_reg <= '0'; else if (DIN_VLD = '1' and CS_N = '1') then data_busy_reg <= '1'; elsif (rx_data_vld = '1') then data_busy_reg <= '0'; else data_busy_reg <= data_busy_reg; end if; end if; end if; end process; slave_ready <= CS_N and not data_busy_reg; -- ------------------------------------------------------------------------- -- MISO REGISTER -- ------------------------------------------------------------------------- miso_p : process (CLK) begin if (rising_edge(CLK)) then if (load_data = '1') then MISO <= DIN(7); elsif (spi_clk_fedge_en = '1' and CS_N = '0') then MISO <= data_shreg(7); end if; end if; end process; -- ------------------------------------------------------------------------- -- DATA SHIFT REGISTER -- ------------------------------------------------------------------------- data_shreg_p : process (CLK) begin if (rising_edge(CLK)) then if (load_data = '1') then data_shreg <= DIN; elsif (spi_clk_redge_en = '1' and CS_N = '0') then data_shreg <= data_shreg(6 downto 0) & MOSI; end if; end if; end process; -- ------------------------------------------------------------------------- -- DATA OUT VALID FLAG REGISTER -- ------------------------------------------------------------------------- rx_data_vld <= spi_clk_fedge_en and last_bit_en; dout_vld_reg_p : process (CLK) begin if (rising_edge(CLK)) then if (RST = '1') then DOUT_VLD <= '0'; else DOUT_VLD <= rx_data_vld; end if; end if; end process; -- ------------------------------------------------------------------------- -- BIT COUNTER -- ------------------------------------------------------------------------- bit_cnt_p : process (CLK) begin if (rising_edge(CLK)) then if (RST = '1') then bit_cnt <= (others => '0'); elsif (spi_clk_fedge_en = '1' and CS_N = '0') then if (bit_cnt = "111") then bit_cnt <= (others => '0'); else bit_cnt <= bit_cnt + 1; end if; end if; end if; end process; -- ------------------------------------------------------------------------- -- LAST BIT FLAG REGISTER -- ------------------------------------------------------------------------- last_bit_en_p : process (CLK) begin if (rising_edge(CLK)) then if (RST = '1') then last_bit_en <= '0'; else if (bit_cnt = "111") then last_bit_en <= '1'; else last_bit_en <= '0'; end if; end if; end if; end process; end RTL;
  8. Добрый день. Пытаюсь разобраться с прерываниями. При загруке кернел драйвера пишет: # insmod fpga_uinput.ko [ 57.518705] fpga_uinput: loading out-of-tree module taints kernel. [ 57.525487] irq 43, desc: ef13cd00, depth: 0, count: 0, unhandled: 0 [ 57.531815] ->handle_irq(): c016bc1c, [ 57.531831] handle_bad_irq+0x0/0x288 [ 57.539203] ->irq_data.chip(): c0b4ac00, [ 57.539209] 0xc0b4ac00 [ 57.545543] ->action(): ef39fc40 [ 57.548755] ->action->handler(): bf00010c, [ 57.548769] fpga_uinput_interrupt+0x0/0x84 [fpga_uinput] [ 57.558215] IRQ_NOPROBE set [ 57.561255] unexpected IRQ trap at vector 2b # ./readstate after: 1431655765 after: -1431655766 after: 1431655765 after: -1431655766 after: 1431655765 after: -1431655766 after: 1431655765 after: -1431655766 after: 1431655765 after: -1431655766 Сам кернел драйвер и device tree приложил... Что не так? куда "копать"? может у кого то есть рабочий пример - поделиться пожалуйста... В линуксе я новичок... soc_system.dts fpga_uinput.c
  9. Добрый день есть базовый рабочий проект созданный по https://bitlog.it/hardware/building-embedded-linux-for-the-terasic-de10-nano-and-other-cyclone-v-soc-fpgas/ решил усложнить, для возможности писать/читать несколько регистров для этого я модифицировал верилог описание на module custom_leds ( input logic clk, // clock.clk input logic reset, // reset.reset // Memory mapped read/write slave interface input logic [3:0] avs_s0_address, // avs_s0.address input logic avs_s0_read, // avs_s0.read input logic avs_s0_write, // avs_s0.write output logic [31:0] avs_s0_readdata, // avs_s0.readdata input logic [31:0] avs_s0_writedata, // avs_s0.writedata // The LED outputs output logic [7:0] leds ); logic [31:0] reg0_data; logic [31:0] reg1_data; logic [31:0] reg2_data; // Read operations performed on the Avalon-MM Slave interface always_ff @ (posedge clk) begin if (reset) begin avs_s0_readdata <= 32'h00000000; if (avs_s0_read) begin case (avs_s0_address) 4'b0000 : avs_s0_readdata <= {24'b0, leds}; 4'b0001 : avs_s0_readdata <= 32'h0000000F; 4'b0010 : avs_s0_readdata <= 32'h0000000C; 4'b0011 : avs_s0_readdata <= 32'hAAAAAAAA; 4'b0100 : avs_s0_readdata <= 32'h55555555; 4'b0101 : avs_s0_readdata <= reg0_data; 4'b0110 : avs_s0_readdata <= reg1_data; default : avs_s0_readdata <= reg2_data; endcase end else begin avs_s0_readdata <= 32'h00000000; end end end // Write operations performed on the Avalon-MM Slave interface always_ff @ (posedge clk) begin if (reset) begin leds <= 8'h00; reg0_data <= 32'h00000000; reg1_data <= 32'h00000000; reg2_data <= 32'h00000000; end else if (avs_s0_write) begin case (avs_s0_address) 4'b0000 : leds <= avs_s0_writedata; 4'b0001 : reg0_data <= avs_s0_writedata; 4'b0010 : reg1_data <= avs_s0_writedata; default : reg2_data <= avs_s0_writedata; endcase end end endmodule // custom_leds сгенерровл заново h файл (вложение). Но как по адресу читать/писать для меня загадка - помогите кто знает пожалуйста hps_custom.h
  10. Проблема была в том что rbf файл прошивки надо было сжимать. Источники: https://forums.intel.com/s/question/0D50P00003yyQwmSAE/altera-cyclone-v-development-board-fpga-problem-error-code4 тут коды ошибок расписаны: https://rocketboards.org/foswiki/Documentation/GSRD131ProgrammingFPGA
  11. Разобрался. Вопрос закрыт
  12. Доброго день. на этапе boot во время конфигурации плис rbf файлом линукс/boot выдает ошибку altera_load: Failed with error code -4 как посмотреть с чем эта ошибка связана? Board https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=205&No=1046&PartNo=2
  13. как альтернатива, применить другой ввод данных
  14. Вы б контакты оставили в виде электронной почты. Я например не любитель соц сетей...
  15. Привет 

    Могу поделиться синхронным фифо для FTDI2232H

    И базовой программой для ПК

    1. GAYVER

      GAYVER

      добрый день. только зашел и только увидел предложение. проблему так и не решили, оставили костыль как есть. разбираться более детально уже нет ни времени ни желания.

      не помню писал или нет в теме - начальник в свое время уже сталкивался с этой особенностью то ли наших плат, то ли самого контроллера, то ли ПО - при "установлении линка", после прошивки плисины первое обращение к ней (вычитывание ИД устройства) всегда идет сбойным - вместо 8 байт команды в плисину приходит когда 7, когда 6 байт. все последующий обращения рабочие. даже в нашей внутренней документации это где то было отражено - нажать в оболочке "поиск присоединенных устройств", если устройств не найдено - повторите поиск :)