Перейти к содержанию
    

Maverick_

Модератор
  • Постов

    3 865
  • Зарегистрирован

Весь контент Maverick_


  1. Варианты для проб: 1. Попробуйте уменьшить длину соединения (проводов) например в 2 раза и выровнять их по длине 2. Если используете соединение напрямую с пинов FPGA можно поставить микросхему буффера (на входе 3,3В на выходе 5В и наоборот) 3. Уменьшить частоту (SPI) например в 2 раза Например сразу сделать 1 и 3 пункты и посмотреть... PS У меня порядка 10 см SPI работал без ошибок где-то на 6МГц (без буферов)
  2. Какая длина провода соединяющая две платы? или Вы работаете в пределах одной ПЛИС? под сериально это UART или SPI ?
  3. простое описание слейва (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;
  4. Добрый день. Пытаюсь разобраться с прерываниями. При загруке кернел драйвера пишет: # 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
  5. Добрый день есть базовый рабочий проект созданный по 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
  6. Проблема была в том что rbf файл прошивки надо было сжимать. Источники: https://forums.intel.com/s/question/0D50P00003yyQwmSAE/altera-cyclone-v-development-board-fpga-problem-error-code4 тут коды ошибок расписаны: https://rocketboards.org/foswiki/Documentation/GSRD131ProgrammingFPGA
  7. Доброго день. на этапе 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
  8. Вы б контакты оставили в виде электронной почты. Я например не любитель соц сетей...
  9. Привет 

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

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

    1. GAYVER

      GAYVER

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

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

  10. Доброго времени суток. У меня сейчас нет матлаба. Может кто-то может помочь(если не сложно) получить файлы. https://www.mathworks.com/help/hdlverifier/examples/verify-hdl-implementation-of-pid-controller-using-fpga-in-the-loop.html Controller.vhd D_component.vhd I_component.vhd это в "Step 6: Specify HDL Files in the FIL Wizard" Заранее спасибо.
  11. не могу в device tree прописать клоки для ip core dma axi_dma_0: dma@40400000 { #dma-cells = <1>; clock-names = "s_axi_lite_aclk m_axi_sg_aclk m_axi_mm2s_aclk m_axi_s2mm_aclk"; clocks = "clkc 15>, <&clkc 15>, <&clkc 15>, <&clkc 15"; compatible = "xlnx,axi-dma-1.00.a"; interrupt-parent = <&intc>; interrupts = <0 29 4 0 30 4>; reg = <0x40400000 0x10000>; xlnx,addrwidth = <0x20>; xlnx,include-sg ; dma-channel@40400000 { compatible = "xlnx,axi-dma-mm2s-channel"; dma-channels = <0x1>; interrupts = <0 29 4>; xlnx,datawidth = <0x20>; xlnx,device-id = <0x0>; }; dma-channel@40400030 { compatible = "xlnx,axi-dma-s2mm-channel"; dma-channels = <0x1>; interrupts = <0 30 4>; xlnx,datawidth = <0x20>; xlnx,device-id = <0x0>; }; dmesg: [ 0.770049] xilinx-vdma 40400000.dma: failed to get axi_aclk (-2) [ 0.774806] xilinx-vdma: probe of 40400000.dma failed with error -2 что не так?
  12. MaxV это cpld настоящее Max10 это FPGA https://www.xilinx.com/products/silicon-devices/cpld/cpld.html
  13. Провода витые? По длине равны? Не обязательно, но желательно... https://link.springer.com/article/10.1186/s13173-015-0026-z https://www.intel.com/content/www/us/en/programmable/support/support-resources/design-examples/design-software/verilog/ver-highspeed_io.html
  14. Попробуйте использовать кодирование 8b/10b или другое аналогичное
  15. Помогите пожалуйста найти и скачать данные книги1. РМВОК® Guidе – Siхth Еdition - oн же Pукoвoдствo РМВOК ® или Cвод знаний по управлению прoектам 6-е издание2. Аgilе Practicе Guidе онo же Пpaктичecкоe руковoдcтвo Agilе (дополнение чaсть РМВОК 6 Заранее благодарен за помощь.
  16. Спасибо,. Жаль что так мало людей деляться опытом...
  17. собственно сабж в теме прошу поделиться опытом
×
×
  • Создать...