Jump to content
    

jenya7

Участник
  • Posts

    3,631
  • Joined

  • Last visited

Reputation

0 Обычный

About jenya7

  • Rank
    Гуру
    Гуру

Recent Profile Visitors

11,353 profile views
  1. как упомянул topor_topor между CMSIS и HAL есть промежуточный вариант - LL который я нашел вполне приемлимым и пользуюсь им.
  2. я посмотрел. в обоих случаях куча муксов, только разводка отличается. но так чтоб оценить на глаз какой из них лучше это уже не в моей компетенции.
  3. Вопрос что лучше использовать (при тестировании одного сигнала) - case или if-elsif. Читал всякие статьи на этот счёт. Большинство склоняется к case (типа он генерирует один MUX а if-elsif цепочку MUXов). А вы что думаете?
  4. в смысле? также как и все другие. если вместо AXIS_DATA_WIDTH => 8, AXIS_KEEP_ENABLE => AXIS_DATA_WIDTH>8, AXIS_KEEP_WIDTH => AXIS_DATA_WIDTH/8, RX_DROP_OVERSIZE_FRAME => RX_FRAME_FIFO, RX_DROP_BAD_FRAME => RX_DROP_OVERSIZE_FRAME, RX_DROP_WHEN_FULL => RX_DROP_OVERSIZE_FRAME я напишу AXIS_DATA_WIDTH => 8, AXIS_KEEP_ENABLE => 0, AXIS_KEEP_WIDTH => 1, RX_DROP_OVERSIZE_FRAME => 1, RX_DROP_BAD_FRAME => 1, RX_DROP_WHEN_FULL => 1 то всё скомпилируется.
  5. в модуле module eth_mac_1g_rgmii_fifo # ( // target ("SIM", "GENERIC", "XILINX", "ALTERA") parameter TARGET = "GENERIC", // IODDR style ("IODDR", "IODDR2") // Use IODDR for Virtex-4, Virtex-5, Virtex-6, 7 Series, Ultrascale // Use IODDR2 for Spartan-6 parameter IODDR_STYLE = "IODDR2", // Clock input style ("BUFG", "BUFR", "BUFIO", "BUFIO2") // Use BUFR for Virtex-6, 7-series // Use BUFG for Virtex-5, Spartan-6, Ultrascale parameter CLOCK_INPUT_STYLE = "BUFG", // Use 90 degree clock for RGMII transmit ("TRUE", "FALSE") parameter USE_CLK90 = "TRUE", parameter AXIS_DATA_WIDTH = 8, parameter AXIS_KEEP_ENABLE = (AXIS_DATA_WIDTH>8), parameter AXIS_KEEP_WIDTH = (AXIS_DATA_WIDTH/8), parameter ENABLE_PADDING = 1, parameter MIN_FRAME_LENGTH = 64, parameter TX_FIFO_DEPTH = 4096, parameter TX_FIFO_RAM_PIPELINE = 1, parameter TX_FRAME_FIFO = 1, parameter TX_DROP_OVERSIZE_FRAME = TX_FRAME_FIFO, parameter TX_DROP_BAD_FRAME = TX_DROP_OVERSIZE_FRAME, parameter TX_DROP_WHEN_FULL = 0, parameter RX_FIFO_DEPTH = 4096, parameter RX_FIFO_RAM_PIPELINE = 1, parameter RX_FRAME_FIFO = 1, parameter RX_DROP_OVERSIZE_FRAME = RX_FRAME_FIFO, parameter RX_DROP_BAD_FRAME = RX_DROP_OVERSIZE_FRAME, parameter RX_DROP_WHEN_FULL = RX_DROP_OVERSIZE_FRAME ) в компоненте component eth_mac_1g_rgmii_fifo generic ( TARGET : string; IODDR_STYLE : string; CLOCK_INPUT_STYLE : string; USE_CLK90 : string; AXIS_DATA_WIDTH : integer; AXIS_KEEP_ENABLE : integer; AXIS_KEEP_WIDTH : integer; ENABLE_PADDING : integer; MIN_FRAME_LENGTH : integer; TX_FIFO_DEPTH : integer; TX_FIFO_RAM_PIPELINE : integer; TX_FRAME_FIFO : integer; TX_DROP_OVERSIZE_FRAME : integer; TX_DROP_BAD_FRAME : integer; TX_DROP_WHEN_FULL : integer; RX_FIFO_DEPTH : integer; RX_FIFO_RAM_PIPELINE : integer; RX_FRAME_FIFO : integer; RX_DROP_OVERSIZE_FRAME : integer; RX_DROP_BAD_FRAME : integer; RX_DROP_WHEN_FULL : integer ); делаю мап U_ETH_MAC : eth_mac_1g_rgmii_fifo generic map ( TARGET => "GENERIC", IODDR_STYLE => "IODDR", CLOCK_INPUT_STYLE => "BUFR", USE_CLK90 => "TRUE", AXIS_DATA_WIDTH => 8, AXIS_KEEP_ENABLE => AXIS_DATA_WIDTH>8, AXIS_KEEP_WIDTH => AXIS_DATA_WIDTH/8, ENABLE_PADDING => 1, MIN_FRAME_LENGTH => 64, TX_FIFO_DEPTH => 4096, TX_FIFO_RAM_PIPELINE => 1, TX_FRAME_FIFO => 1, TX_DROP_OVERSIZE_FRAME => TX_FRAME_FIFO, TX_DROP_BAD_FRAME => TX_DROP_OVERSIZE_FRAME, TX_DROP_WHEN_FULL => 0, RX_FIFO_DEPTH => 4096, RX_FIFO_RAM_PIPELINE => 1, RX_FRAME_FIFO => 1, RX_DROP_OVERSIZE_FRAME => RX_FRAME_FIFO, RX_DROP_BAD_FRAME => RX_DROP_OVERSIZE_FRAME, RX_DROP_WHEN_FULL => RX_DROP_OVERSIZE_FRAME ) получаю в чём тут дело? я не могу приравнять один генерик к другому? он его не видит?
  6. а как связать модули? ну сперва я взял module eth_mac_1g_rgmii # ( // target ("SIM", "GENERIC", "XILINX", "ALTERA") parameter TARGET = "GENERIC", // IODDR style ("IODDR", "IODDR2") // Use IODDR for Virtex-4, Virtex-5, Virtex-6, 7 Series, Ultrascale // Use IODDR2 for Spartan-6 parameter IODDR_STYLE = "IODDR2", // Clock input style ("BUFG", "BUFR", "BUFIO", "BUFIO2") // Use BUFR for Virtex-6, 7-series // Use BUFG for Virtex-5, Spartan-6, Ultrascale parameter CLOCK_INPUT_STYLE = "BUFG", // Use 90 degree clock for RGMII transmit ("TRUE", "FALSE") parameter USE_CLK90 = "TRUE", parameter ENABLE_PADDING = 1, parameter MIN_FRAME_LENGTH = 64 ) ( input wire gtx_clk, input wire gtx_clk90, input wire gtx_rst, output wire rx_clk, output wire rx_rst, output wire tx_clk, output wire tx_rst, /* * AXI input */ input wire [7:0] tx_axis_tdata, input wire tx_axis_tvalid, output wire tx_axis_tready, input wire tx_axis_tlast, input wire tx_axis_tuser, /* * AXI output */ output wire [7:0] rx_axis_tdata, output wire rx_axis_tvalid, output wire rx_axis_tlast, output wire rx_axis_tuser, /* * RGMII interface */ input wire rgmii_rx_clk, input wire [3:0] rgmii_rxd, input wire rgmii_rx_ctl, output wire rgmii_tx_clk, output wire [3:0] rgmii_txd, output wire rgmii_tx_ctl, /* * Status */ output wire tx_error_underflow, output wire rx_error_bad_frame, output wire rx_error_bad_fcs, output wire [1:0] speed, /* * Configuration */ input wire [7:0] ifg_delay ); для связи с PHY. а следующий модуль? для посылки UDP? module udp_complete #( parameter ARP_CACHE_ADDR_WIDTH = 9, parameter ARP_REQUEST_RETRY_COUNT = 4, parameter ARP_REQUEST_RETRY_INTERVAL = 125000000*2, parameter ARP_REQUEST_TIMEOUT = 125000000*30, parameter UDP_CHECKSUM_GEN_ENABLE = 1, parameter UDP_CHECKSUM_PAYLOAD_FIFO_DEPTH = 2048, parameter UDP_CHECKSUM_HEADER_FIFO_DEPTH = 8 ) ( input wire clk, input wire rst, /* * Ethernet frame input */ input wire s_eth_hdr_valid, output wire s_eth_hdr_ready, input wire [47:0] s_eth_dest_mac, input wire [47:0] s_eth_src_mac, input wire [15:0] s_eth_type, input wire [7:0] s_eth_payload_axis_tdata, input wire s_eth_payload_axis_tvalid, output wire s_eth_payload_axis_tready, input wire s_eth_payload_axis_tlast, input wire s_eth_payload_axis_tuser, /* * Ethernet frame output */ output wire m_eth_hdr_valid, input wire m_eth_hdr_ready, output wire [47:0] m_eth_dest_mac, output wire [47:0] m_eth_src_mac, output wire [15:0] m_eth_type, output wire [7:0] m_eth_payload_axis_tdata, output wire m_eth_payload_axis_tvalid, input wire m_eth_payload_axis_tready, output wire m_eth_payload_axis_tlast, output wire m_eth_payload_axis_tuser, /* * IP input */ input wire s_ip_hdr_valid, output wire s_ip_hdr_ready, input wire [5:0] s_ip_dscp, input wire [1:0] s_ip_ecn, input wire [15:0] s_ip_length, input wire [7:0] s_ip_ttl, input wire [7:0] s_ip_protocol, input wire [31:0] s_ip_source_ip, input wire [31:0] s_ip_dest_ip, input wire [7:0] s_ip_payload_axis_tdata, input wire s_ip_payload_axis_tvalid, output wire s_ip_payload_axis_tready, input wire s_ip_payload_axis_tlast, input wire s_ip_payload_axis_tuser, /* * IP output */ output wire m_ip_hdr_valid, input wire m_ip_hdr_ready, output wire [47:0] m_ip_eth_dest_mac, output wire [47:0] m_ip_eth_src_mac, output wire [15:0] m_ip_eth_type, output wire [3:0] m_ip_version, output wire [3:0] m_ip_ihl, output wire [5:0] m_ip_dscp, output wire [1:0] m_ip_ecn, output wire [15:0] m_ip_length, output wire [15:0] m_ip_identification, output wire [2:0] m_ip_flags, output wire [12:0] m_ip_fragment_offset, output wire [7:0] m_ip_ttl, output wire [7:0] m_ip_protocol, output wire [15:0] m_ip_header_checksum, output wire [31:0] m_ip_source_ip, output wire [31:0] m_ip_dest_ip, output wire [7:0] m_ip_payload_axis_tdata, output wire m_ip_payload_axis_tvalid, input wire m_ip_payload_axis_tready, output wire m_ip_payload_axis_tlast, output wire m_ip_payload_axis_tuser, /* * UDP input */ input wire s_udp_hdr_valid, output wire s_udp_hdr_ready, input wire [5:0] s_udp_ip_dscp, input wire [1:0] s_udp_ip_ecn, input wire [7:0] s_udp_ip_ttl, input wire [31:0] s_udp_ip_source_ip, input wire [31:0] s_udp_ip_dest_ip, input wire [15:0] s_udp_source_port, input wire [15:0] s_udp_dest_port, input wire [15:0] s_udp_length, input wire [15:0] s_udp_checksum, input wire [7:0] s_udp_payload_axis_tdata, input wire s_udp_payload_axis_tvalid, output wire s_udp_payload_axis_tready, input wire s_udp_payload_axis_tlast, input wire s_udp_payload_axis_tuser, /* * UDP output */ output wire m_udp_hdr_valid, input wire m_udp_hdr_ready, output wire [47:0] m_udp_eth_dest_mac, output wire [47:0] m_udp_eth_src_mac, output wire [15:0] m_udp_eth_type, output wire [3:0] m_udp_ip_version, output wire [3:0] m_udp_ip_ihl, output wire [5:0] m_udp_ip_dscp, output wire [1:0] m_udp_ip_ecn, output wire [15:0] m_udp_ip_length, output wire [15:0] m_udp_ip_identification, output wire [2:0] m_udp_ip_flags, output wire [12:0] m_udp_ip_fragment_offset, output wire [7:0] m_udp_ip_ttl, output wire [7:0] m_udp_ip_protocol, output wire [15:0] m_udp_ip_header_checksum, output wire [31:0] m_udp_ip_source_ip, output wire [31:0] m_udp_ip_dest_ip, output wire [15:0] m_udp_source_port, output wire [15:0] m_udp_dest_port, output wire [15:0] m_udp_length, output wire [15:0] m_udp_checksum, output wire [7:0] m_udp_payload_axis_tdata, output wire m_udp_payload_axis_tvalid, input wire m_udp_payload_axis_tready, output wire m_udp_payload_axis_tlast, output wire m_udp_payload_axis_tuser, /* * Status */ output wire ip_rx_busy, output wire ip_tx_busy, output wire udp_rx_busy, output wire udp_tx_busy, output wire ip_rx_error_header_early_termination, output wire ip_rx_error_payload_early_termination, output wire ip_rx_error_invalid_header, output wire ip_rx_error_invalid_checksum, output wire ip_tx_error_payload_early_termination, output wire ip_tx_error_arp_failed, output wire udp_rx_error_header_early_termination, output wire udp_rx_error_payload_early_termination, output wire udp_tx_error_payload_early_termination, /* * Configuration */ input wire [47:0] local_mac, input wire [31:0] local_ip, input wire [31:0] gateway_ip, input wire [31:0] subnet_mask, input wire clear_arp_cache ); этот модуль напрямую не подключается по сигналам. нужно что то промежуточное?
  7. я что то не видел чтоб сигналы PTP выводились на PHY. А ну ок, PTP можно сделать на уровне мака, будет менее точно.
  8. с другой стороны будет свич с PTP. в покупном коре обещают до наносекунд.
  9. а как его вставить в проект? там куча зависимостей. все файлы из rtl и lib включать надо?
  10. я не очень понимаю работу с Nios-II. это же CPU. на нём на С надо писать? и как он сопрягается с MAC IP?
  11. стрёмно как то. а если проблемы какие? поддержки нет если что. кроме того я пишу в VHDL, исходники я могу вставить в проект и на верилоге, не впервой, но примеры он даёт на верилоге. и у него нет PTP 1588.
  12. выглядит неплохо. а что скажете насчёт их родного? он наверно к их мак кору хорошо подойдёт.
  13. это описание. а что ни у кого нет TCP стека купить? я вижу что Triple-Speed Ethernet Intel FPGA IP есть в библиотеке. я его подключил и получил топ entity ETH is port ( clk : in std_logic := '0'; -- control_port_clock_connection.clk reset : in std_logic := '0'; -- reset_connection.reset reg_addr : in std_logic_vector(7 downto 0) := (others => '0'); -- control_port.address reg_data_out : out std_logic_vector(31 downto 0); -- .readdata reg_rd : in std_logic := '0'; -- .read reg_data_in : in std_logic_vector(31 downto 0) := (others => '0'); -- .writedata reg_wr : in std_logic := '0'; -- .write reg_busy : out std_logic; -- .waitrequest tx_clk : in std_logic := '0'; -- pcs_mac_tx_clock_connection.clk rx_clk : in std_logic := '0'; -- pcs_mac_rx_clock_connection.clk set_10 : in std_logic := '0'; -- mac_status_connection.set_10 set_1000 : in std_logic := '0'; -- .set_1000 eth_mode : out std_logic; -- .eth_mode ena_10 : out std_logic; -- .ena_10 rgmii_in : in std_logic_vector(3 downto 0) := (others => '0'); -- mac_rgmii_connection.rgmii_in rgmii_out : out std_logic_vector(3 downto 0); -- .rgmii_out rx_control : in std_logic := '0'; -- .rx_control tx_control : out std_logic; -- .tx_control ff_rx_clk : in std_logic := '0'; -- receive_clock_connection.clk ff_tx_clk : in std_logic := '0'; -- transmit_clock_connection.clk ff_rx_data : out std_logic_vector(7 downto 0); -- receive.data ff_rx_eop : out std_logic; -- .endofpacket rx_err : out std_logic_vector(5 downto 0); -- .error ff_rx_rdy : in std_logic := '0'; -- .ready ff_rx_sop : out std_logic; -- .startofpacket ff_rx_dval : out std_logic; -- .valid ff_tx_data : in std_logic_vector(7 downto 0) := (others => '0'); -- transmit.data ff_tx_eop : in std_logic := '0'; -- .endofpacket ff_tx_err : in std_logic := '0'; -- .error ff_tx_rdy : out std_logic; -- .ready ff_tx_sop : in std_logic := '0'; -- .startofpacket ff_tx_wren : in std_logic := '0'; -- .valid magic_wakeup : out std_logic; -- mac_misc_connection.magic_wakeup magic_sleep_n : in std_logic := '0'; -- .magic_sleep_n ff_tx_crc_fwd : in std_logic := '0'; -- .ff_tx_crc_fwd ff_tx_septy : out std_logic; -- .ff_tx_septy tx_ff_uflow : out std_logic; -- .tx_ff_uflow ff_tx_a_full : out std_logic; -- .ff_tx_a_full ff_tx_a_empty : out std_logic; -- .ff_tx_a_empty rx_err_stat : out std_logic_vector(17 downto 0); -- .rx_err_stat rx_frm_type : out std_logic_vector(3 downto 0); -- .rx_frm_type ff_rx_dsav : out std_logic; -- .ff_rx_dsav ff_rx_a_full : out std_logic; -- .ff_rx_a_full ff_rx_a_empty : out std_logic -- .ff_rx_a_empty ); end entity ETH; для подключения к PHY остальные сигналы надо подключать к транспортному лееру? странно что я не вижу сигналов PTP 1588 хотя заявлено что в коре есть полная поддержка протокола. то есть по сути нужен LWIP но для FPGA.
  14. Мне надо реализовать транспортный протокол UDP, TCP и PTP1588 на Cyclone 5 5CEFA9217I7. В связи с этим возникло два вопроса 1. Этот IP подойдёт? 2. Какой транспортный леер купить?
×
×
  • Create New...