Jump to content

    

Lutovid

Свой
  • Content Count

    149
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Lutovid

  • Rank
    Частый гость
  • Birthday 05/17/1992

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

1653 profile views
  1. Возникла старая проблема, которую пока накак не получается решить. Вставил emc в дизайн согласно примеру.(картинка) Код rtl блока просто выдран из примера(у них он вставлен во враппер, я вынес отдельно) library IEEE; use IEEE.STD_LOGIC_1164.ALL; library UNISIM; use UNISIM.VCOMPONENTS.ALL; use unisim.vcomponents.STARTUPE3; entity Linear_flash_interface is port ( Clk_out: in STD_LOGIC; Linear_Flash_address_in : in STD_LOGIC_VECTOR ( 25 downto 0 ); Linear_Flash_address : out STD_LOGIC_VECTOR ( 25 downto 0 ); Linear_Flash_adv_ldn_in : in STD_LOGIC; Linear_Flash_adv_ldn : out STD_LOGIC; Linear_Flash_ce_n : in std_logic_vector (0 downto 0); Linear_Flash_wait : in STD_LOGIC_VECTOR ( 0 to 0 ); Linear_Flash_wait_out : out STD_LOGIC_VECTOR ( 0 to 0 ); Linear_Flash_oe_n_in : in STD_LOGIC_VECTOR ( 0 to 0 ); Linear_Flash_oe_n : out STD_LOGIC_VECTOR ( 0 to 0 ); Linear_Flash_we_n_in : in STD_LOGIC; Linear_Flash_we_n : out STD_LOGIC; RESET : in STD_LOGIC; mem_dq_io : inout STD_LOGIC_VECTOR ( 0 to 11 ); mem_dq_t : in STD_LOGIC_VECTOR ( 15 downto 0 ); mem_dq_i : out STD_LOGIC_VECTOR ( 0 to 15 ); mem_dq_o : in STD_LOGIC_VECTOR ( 15 downto 0 ) ); end Linear_flash_interface; architecture STRUCTURE of Linear_flash_interface is signal dq_o : std_logic_vector (3 downto 0); signal dq_o_e, dq_i_e_int : std_logic_vector (15 downto 0); signal dq_t : std_logic_vector (3 downto 0); signal dq_t_e : std_logic_vector (15 downto 0); signal dq_i : std_logic_vector (3 downto 0); signal dq_i_e : std_logic_vector (0 to 11); --------------------------------------------- constant ADD_PIPELINTE : integer := 8; signal pipe_signal : std_logic_vector(ADD_PIPELINTE-1 downto 0); signal PREQ_int : std_logic; signal PACK_int : std_logic; signal cnt : integer := 0; signal div_temp : std_logic := '0'; signal startupe3_eos : std_logic; signal GPIO_LED_0_LS: STD_LOGIC; signal GPIO_LED_1_LS: STD_LOGIC; signal GPIO_LED_2_LS: STD_LOGIC; signal GPIO_LED_3_LS: STD_LOGIC; signal GPIO_LED_4_LS: STD_LOGIC; signal GPIO_LED_5_LS: STD_LOGIC; signal GPIO_LED_6_LS: STD_LOGIC; signal GPIO_LED_7_LS: STD_LOGIC; --------------------------------------------- begin PREQ_REG_P:process(Clk_out)is begin if(Clk_out'event and Clk_out = '1') then if(reset = '1')then pipe_signal(0) <= '0'; elsif(PREQ_int = '1')then pipe_signal(0) <= '1'; end if; end if; end process PREQ_REG_P; PIPE_PACK_P:process(Clk_out)is begin if(Clk_out'event and Clk_out = '1') then if(reset = '1')then pipe_signal(ADD_PIPELINTE-1 downto 1) <= (others => '0'); else pipe_signal(1) <= pipe_signal(0); pipe_signal(2) <= pipe_signal(1); pipe_signal(3) <= pipe_signal(2); pipe_signal(4) <= pipe_signal(3); pipe_signal(5) <= pipe_signal(4); pipe_signal(6) <= pipe_signal(5); pipe_signal(7) <= pipe_signal(6); if (cnt >= 50000000) then div_temp <= not(div_temp); cnt <= 0; else cnt <= (cnt + 1); end if; GPIO_LED_0_LS <= not(div_temp); GPIO_LED_1_LS <= '0'; GPIO_LED_2_LS <= '0'; GPIO_LED_3_LS <= '0'; GPIO_LED_4_LS <= '0'; --startupe3_eos; GPIO_LED_5_LS <= '0'; GPIO_LED_6_LS <= '0'; GPIO_LED_7_LS <= not (startupe3_eos); end if; end if; end process PIPE_PACK_P; PACK_int <= pipe_signal(7); Linear_Flash_address(25 downto 0) <= Linear_Flash_address_in(25 downto 0); Linear_Flash_adv_ldn <= Linear_Flash_adv_ldn_in; Linear_Flash_oe_n(0) <= Linear_Flash_oe_n_in(0); Linear_Flash_we_n <= Linear_Flash_we_n_in; Linear_Flash_wait_out(0) <= Linear_Flash_wait(0); dq_t_e(15 downto 0) <= mem_dq_t(15 downto 0); mem_dq_i <= dq_i_e( 0 to 11) & dq_i; dq_o_e(15 downto 0) <= mem_dq_o; STARTUPE3_inst : component STARTUPE3 ----------------------- generic map ( PROG_USR => "FALSE", -- Activate program event security feature. SIM_CCLK_FREQ => 0.0 -- Set the Configuration Clock Frequency(ns) for simulation. ) port map ( CFGCLK => open, -- 1-bit output: Configuration main clock output CFGMCLK => open, -- 1-bit output: Configuration internal oscillator clock output DI => dq_i, -- 4-bit output: Allow receiving on the D input pin EOS => startupe3_eos, -- 1-bit output: Active-High output signal indicating the End Of Startup PREQ => open, -- 1-bit output: PROGRAM request to fabric output DO => dq_o_e(3 downto 0), -- 4-bit input: Allows control of the D pin output DTS => dq_t_e(3 downto 0), -- 4-bit input: Allows tristate of the D pin FCSBO => Linear_Flash_ce_n(0), -- 1-bit input: Contols the FCS_B pin for flash access FCSBTS => '0', -- 1-bit input: Tristate the FCS_B pin GSR => '0', -- 1-bit input: Global Set/Reset input (GSR cannot be used for the port) GTS => '0', -- 1-bit input: Global 3-state input (GTS cannot be used for the port name) KEYCLEARB => '1', -- 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM) PACK => PACK_int, -- 1-bit input: PROGRAM acknowledge input USRCCLKO => Clk_out, -- 1-bit input: User CCLK input USRCCLKTS => '0', -- 1-bit input: User CCLK 3-state enable input USRDONEO => '1', -- 1-bit input: User DONE pin output control USRDONETS => '1' -- 1-bit input: User DONE 3-state enable output ); mem_dq_iobuf_4 : IOBUF port map ( I => dq_o_e(4), IO => mem_dq_io(0), O => dq_i_e(11), T => dq_t_e(4) ); mem_dq_iobuf_5 : IOBUF port map ( I => dq_o_e(5), IO => mem_dq_io(1), O => dq_i_e(10), T => dq_t_e(5) ); mem_dq_iobuf_6 : IOBUF port map ( I => dq_o_e(6), IO => mem_dq_io(2), O => dq_i_e(9), T => dq_t_e(6) ); mem_dq_iobuf_7 : IOBUF port map ( I => dq_o_e(7), IO => mem_dq_io(3), O => dq_i_e(8), T => dq_t_e(7) ); mem_dq_iobuf_8 : IOBUF port map ( I => dq_o_e(8), IO => mem_dq_io(4), O => dq_i_e(7), T => dq_t_e(8) ); mem_dq_iobuf_9 : IOBUF port map ( I => dq_o_e(9), IO => mem_dq_io(5), O => dq_i_e(6), T => dq_t_e(9) ); mem_dq_iobuf_10 : IOBUF port map ( I => dq_o_e(10), IO => mem_dq_io(6), O => dq_i_e(5), T => dq_t_e(10) ); mem_dq_iobuf_11 : IOBUF port map ( I => dq_o_e(11), IO => mem_dq_io(7), O => dq_i_e(4), T => dq_t_e(11) ); mem_dq_iobuf_12 : IOBUF port map ( I => dq_o_e(12), IO => mem_dq_io(8), O => dq_i_e(3), T => dq_t_e(12) ); mem_dq_iobuf_13 : IOBUF port map ( I => dq_o_e(13), IO => mem_dq_io(9), O => dq_i_e(2), T => dq_t_e(13) ); mem_dq_iobuf_14 : IOBUF port map ( I => dq_o_e(14), IO => mem_dq_io(10), O => dq_i_e(1), T => dq_t_e(14) ); mem_dq_iobuf_15 : IOBUF port map ( I => dq_o_e(15), IO => mem_dq_io(11), O => dq_i_e(0), T => dq_t_e(15) ); end STRUCTURE; Дальше ноги идут непосредственно на выход. В такой конфигурации все работает хорошо, но как только я убираю ila читаться из флешки перестает... В превую очередь я грешил на констрэйнты, но они заданы согласно даташиту #### Max Tco -- Clock to input delay for flash set tco_max 5.5 set tco_min 5.5 #### Trace delays for VCU108 board set tdata_trace_delay_max 0.25 set tdata_trace_delay_min 0.25 set tclk_trace_delay_max 0.2 set tclk_trace_delay_min 0.2 set startup_delay_max 7.000 set startup_delay_min 1.350 set board_del_max 1.000 set board_del_min 0.500 set_input_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -max [expr $tco_max + $tdata_trace_delay_max+ $tclk_trace_delay_max + $startup_delay_max + $board_del_max] [get_ports {mem_dq_io[*]}] set_input_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -min [expr $tco_min + $tdata_trace_delay_min+ $tclk_trace_delay_min + $startup_delay_min + $board_del_min] [get_ports {mem_dq_io[*]}] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -max [expr $tdata_trace_delay_max -$tclk_trace_delay_min + $startup_delay_max + $board_del_max] [get_ports {mem_dq_io[*]}] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -min [expr $tdata_trace_delay_min -$tclk_trace_delay_max + $startup_delay_min + $board_del_min] [get_ports {mem_dq_io[*]}] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -max [expr $tdata_trace_delay_max -$tclk_trace_delay_min + $board_del_max] [get_ports {Linear_Flash_address[*]}] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -min [expr $tdata_trace_delay_min -$tclk_trace_delay_max + $board_del_min] [get_ports {Linear_Flash_address[*]}] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -max [expr $tdata_trace_delay_max -$tclk_trace_delay_min + $board_del_max] [get_ports {Linear_Flash_oe_n[0]}] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -min [expr $tdata_trace_delay_min -$tclk_trace_delay_max + $board_del_min] [get_ports {Linear_Flash_oe_n[0]}] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -max [expr $tdata_trace_delay_max -$tclk_trace_delay_min + $board_del_max] [get_ports Linear_Flash_we_n] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -min [expr $tdata_trace_delay_min -$tclk_trace_delay_max + $board_del_min] [get_ports Linear_Flash_we_n] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -max [expr $tdata_trace_delay_max -$tclk_trace_delay_min + $board_del_max] [get_ports Linear_Flash_adv_ldn] set_output_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -min [expr $tdata_trace_delay_min -$tclk_trace_delay_max + $board_del_min] [get_ports Linear_Flash_adv_ldn] #### Input delay constraints (max/min) for Linear_flash_wait[0] set_input_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -max [expr $tco_max + $tdata_trace_delay_max + $tclk_trace_delay_max + $board_del_max] [get_ports {Linear_Flash_wait[0]}] set_input_delay -clock [get_clocks clk_50MHz_vzr_top_clk_wiz_0_0] -min [expr $tco_min + $tdata_trace_delay_min + $tclk_trace_delay_min + $board_del_min] [get_ports {Linear_Flash_wait[0]}] set_input_delay -max [expr $tdata_trace_delay_max + $tclk_trace_delay_max + $board_del_max] [get_ports RESET] set_input_delay -min [expr $tdata_trace_delay_min - $tclk_trace_delay_max + $board_del_min] [get_ports RESET] Так же я с такими проблемами сталкивался когда есть кривые комбинационные схемы или есть тайминг игнор на некоторые цепи и он некорректен. Но в данном случае этого нет. Попробовал зафиксировать положение блока в констрейнтах - это так же результата не дало. Так же попробовал перейти на более новую вивадо - тоже без результата. Частоты выставил как в примере - так что тут тоже проблем вроде не должно быть. Подскажите пожалуйста, где может быть проблема?
  2. Я посмотрел в стандартах на ограничение размера берста и не посмотрел на максимальный объем данных в берсте спасибо, глупо получилось
  3. Здравствуйте! Появилась необходимость верифицировать самописный AXI мастер, хочу научться работать с AXI Verification IP. Попробовал покопаться в примерах. В итоге написал такой модуль: `timescale 1ns / 1ps import axi_vip_v1_0_1_pkg::*; import axi_vip_0_pkg::*; module tb_vip_top( ); tb_with_vip DUT ( ); axi_vip_0_slv_t slv_agent; initial begin //Create an agent slv_agent = new("slave vip agent",DUT_wrapped_bd.axi_vip_0_inst.inst.IF); // set tag for agents for easy debug slv_agent.set_agent_tag("Slave VIP"); // set print out verbosity level. slv_agent.set_verbosity(0); //Start the agent slv_agent.start_slave(); end endmodule у него дочерний модуль это `timescale 1ns / 1ps module tb_with_vip( ); parameter PERIOD = 4; reg clk; always begin clk = 1'b0; #(PERIOD/2) clk = 1'b1; #(PERIOD/2); end wire [31 : 0] s_axi_awaddr; wire [7 : 0] s_axi_awlen; wire [2 : 0] s_axi_awsize; wire [1 : 0] s_axi_awburst; wire [0 : 0] s_axi_awlock; wire [3 : 0] s_axi_awcache; wire [2 : 0] s_axi_awprot; wire [3 : 0] s_axi_awqos; wire s_axi_awvalid; wire s_axi_awready; wire [511 : 0] s_axi_wdata; wire [63 : 0] s_axi_wstrb; wire s_axi_wlast; wire s_axi_wvalid; wire s_axi_wready; wire [1 : 0] s_axi_bresp; wire s_axi_bvalid; wire s_axi_bready; wire [31 : 0] s_axi_araddr; wire [7 : 0] s_axi_arlen; wire [2 : 0] s_axi_arsize; wire [1 : 0] s_axi_arburst; wire [0 : 0] s_axi_arlock; wire [3 : 0] s_axi_arcache; wire [2 : 0] s_axi_arprot; wire [3 : 0] s_axi_arqos; wire s_axi_arvalid; wire s_axi_arready; wire [511 : 0] s_axi_rdata; wire [1 : 0] s_axi_rresp; wire s_axi_rlast; wire s_axi_rvalid; wire s_axi_rready; reg m00_axi_init_axi_txn; wire [639 : 0] tdata; wire tready; wire tlast; wire tvalid; input_data_emulator input_data_emulator_inst ( .clk(clk), .rst(m00_axi_init_axi_txn), .data_size(32'h50), .zeros(0), .dv_in(tready), .data_out(tdata), .dv_out(tvalid), .tlast_out(tlast) ); initial begin m00_axi_init_axi_txn <= 1; #50; m00_axi_init_axi_txn <= 0; #50; m00_axi_init_axi_txn <= 1; end // Add user logic here axi_ddr_data_master # ( .INTERFACE_NUMBER(0) ) axi_ddr_data_master_inst ( //INPUT AXIS INTERFACE .s_axis_DSP_tdata(tdata), .s_axis_DSP_tvalid(tvalid), .s_axis_DSP_tready(tready), .s_axis_DSP_tlast(tlast), //INPUT AXIS INTERFACE .m_axis_out_tdata(), .m_axis_out_tvalid(), .m_axis_out_tready(1), .m_axis_out_tlast(), // User ports ends // Do not modify the ports beyond this line // Ports of Axi Master Bus Interface M00_AXI .m00_axi_aclk(clk), .m00_axi_aresetn(m00_axi_init_axi_txn), .m00_axi_awaddr(s_axi_awaddr), .m00_axi_awlen(s_axi_awlen), .m00_axi_awsize(s_axi_awsize), .m00_axi_awburst(s_axi_awburst), .m00_axi_awlock(s_axi_awlock), .m00_axi_awcache(s_axi_awcache), .m00_axi_awprot(s_axi_awprot), .m00_axi_awqos(s_axi_awqos), .m00_axi_awvalid(s_axi_awvalid), .m00_axi_awready(s_axi_awready), .m00_axi_wdata(s_axi_wdata), .m00_axi_wstrb(s_axi_wstrb), .m00_axi_wlast(s_axi_wlast), .m00_axi_wvalid(s_axi_wvalid), .m00_axi_wready(s_axi_wready), .m00_axi_bresp(s_axi_bresp), .m00_axi_bvalid(s_axi_bvalid), .m00_axi_bready(s_axi_bready), .m00_axi_araddr(s_axi_araddr), .m00_axi_arlen(s_axi_arlen), .m00_axi_arsize(s_axi_arsize), .m00_axi_arburst(s_axi_arburst), .m00_axi_arlock(s_axi_arlock), .m00_axi_arcache(s_axi_arcache), .m00_axi_arprot(s_axi_arprot), .m00_axi_arqos(s_axi_arqos), .m00_axi_arvalid(s_axi_arvalid), .m00_axi_arready(s_axi_arready), .m00_axi_rdata(s_axi_rdata), .m00_axi_rresp(s_axi_rresp), .m00_axi_rlast(s_axi_rlast), .m00_axi_rvalid(s_axi_rvalid), .m00_axi_rready(s_axi_rready) ); axi_vip_0 axi_vip_0_inst ( .aclk(clk), // input wire aclk .aresetn(1'b1), // input wire aresetn .s_axi_awaddr(s_axi_awaddr), // input wire [31 : 0] s_axi_awaddr .s_axi_awlen(s_axi_awlen), // input wire [7 : 0] s_axi_awlen .s_axi_awsize(s_axi_awsize), // input v .s_axi_awburst(s_axi_awburst), // input wire [1 : 0] s_axi_awburst .s_axi_awlock(s_axi_awlock), // input wire [0 : 0] s_axi_awlock .s_axi_awcache(s_axi_awcache), // input wire [3 : 0] s_axi_awcache .s_axi_awprot(s_axi_awprot), // input wire [2 : 0] s_axi_awprot .s_axi_awqos(s_axi_awqos), // input wire [3 : 0] s_axi_awqos .s_axi_awvalid(s_axi_awvalid), // input wire s_axi_awvalid .s_axi_awready(s_axi_awready), // output wire s_axi_awready .s_axi_wdata(s_axi_wdata), // input wire [31 : 0] s_axi_wdata .s_axi_wstrb(s_axi_wstrb), // input wire [3 : 0] s_axi_wstrb .s_axi_wlast(s_axi_wlast), // input wire s_axi_wlast .s_axi_wvalid(s_axi_wvalid), // input wire s_axi_wvalid .s_axi_wready(s_axi_wready), // output wire s_axi_wready .s_axi_bresp(s_axi_bresp), // output wire [1 : 0] s_axi_bresp .s_axi_bvalid(s_axi_bvalid), // output wire s_axi_bvalid .s_axi_bready(s_axi_bready), // input wire s_axi_bready .s_axi_araddr(s_axi_araddr), // input wire [31 : 0] s_axi_araddr .s_axi_arlen(s_axi_arlen), // input wire [7 : 0] s_axi_arlen .s_axi_arsize(s_axi_arsize), // input wire [2 : 0] s_axi_arsize .s_axi_arburst(s_axi_arburst), // input wire [1 : 0] s_axi_arburst .s_axi_arlock(s_axi_arlock), // input wire [0 : 0] s_axi_arlock .s_axi_arcache(s_axi_arcache), // input wire [3 : 0] s_axi_arcache .s_axi_arprot(s_axi_arprot), // input wire [2 : 0] s_axi_arprot .s_axi_arqos(s_axi_arqos), // input wire [3 : 0] s_axi_arqos .s_axi_arvalid(s_axi_arvalid), // input wire s_axi_arvalid .s_axi_arready(s_axi_arready), // output wire s_axi_arready .s_axi_rdata(s_axi_rdata), // output wire [31 : 0] s_axi_rdata .s_axi_rresp(s_axi_rresp), // output wire [1 : 0] s_axi_rresp .s_axi_rlast(s_axi_rlast), // output wire s_axi_rlast .s_axi_rvalid(s_axi_rvalid), // output wire s_axi_rvalid .s_axi_rready(s_axi_rready) // input wire s_axi_rready ); endmodule По сути это подобие DMA Симуляция запускается, проходит до начала первой транзакции в слэйв и останавливается со следующим сообщением: XilinxAXIVIP: Found at Path: tb_vip_top.DUT_wrapped_bd.axi_vip_0_inst.inst Fatal: [AXI_WMON0_0] (axi_vip_v1_0_1_pkg.axi_transaction::create_data_array) 462000 : Attempted to generate a DATA array greater than 4K in size ( 4416) Time: 462 ns Iteration: 0 Process: /axi_vip_v1_0_1_pkg/axi_monitor(C_AXI_WDATA_WIDTH=512,C_AXI_RDATA_WIDTH=512,C_AXI_HAS_REGION=0)::aw_channel/AW_LOOP File: /wrk/2017.1/nightly/2017_04_14_1846317/packages/customer/vivado/data/ip/xilinx/axi_vip_v1_0/hdl/axi_vip_v1_0_vl_rfs.sv $finish called at time : 462 ns : File "/wrk/2017.1/nightly/2017_04_14_1846317/packages/customer/vivado/data/ip/xilinx/xil_common_vip_v1_0/hdl/xil_common_vip_v1_0_vl_rfs.sv" Line 100 WARNING: [Simulator 45-29] Cannot open source file /wrk/2017.1/nightly/2017_04_14_1846317/packages/customer/vivado/data/ip/xilinx/xil_common_vip_v1_0/hdl/xil_common_vip_v1_0_vl_rfs.sv: file does not exist. INFO: [USF-XSim-96] XSim completed. Design snapshot 'tb_vip_top_behav' loaded. INFO: [USF-XSim-97] XSim simulation ran for 1000ns launch_simulation: Time (s): cpu = 00:00:11 ; elapsed = 00:00:07 . Memory (MB): peak = 6378.914 ; gain = 10.691 ; free physical = 23880 ; free virtual = 61100 Я так понял размер транзакции слишком большой для дефолтного буфера, но покопавшись в автогенерируемых файлах исходников мне показалось, что resize должен быть автоматический. Параметры у меня такие: parameter integer C_M00_AXI_BURST_LEN = 128; parameter integer C_M00_AXI_ID_WIDTH = 1; parameter integer C_M00_AXI_ADDR_WIDTH = 32; parameter integer C_M00_AXI_DATA_WIDTH = 512; parameter integer C_M00_AXI_AWUSER_WIDTH = 0; parameter integer C_M00_AXI_ARUSER_WIDTH = 0; parameter integer C_M00_AXI_WUSER_WIDTH = 0; parameter integer C_M00_AXI_RUSER_WIDTH = 0; parameter integer C_M00_AXI_BUSER_WIDTH = 0; Подскажите пожалуйста куда копать?
  4. Спасибо, он тоже на очереди. ЗЫ Что-то я не понял - если генератор норм, хотя там то же самое блокирующее присвоение, почему в остальных местах не норм... Но видимо стоит сначала изучить описанные вами материалы, перед тем как задавать такие вопросы:) + как тогда использовать fork join any или join all если блокирующих операций нет в теле...
  5. В учебнике расписана разница блокирующего и не блокирующего и почему они так называются. Представленный файл - не синтезируемый и в нем я решил использовать этот тип присвоений исходя из логики работы симулятора. Вполне мог ошибиться, но если вы про тезис - что во всех модулях always должны использоваться неблокирующие присвоения, то в синтезируемых модулях у меня так и есть. про clocking block мне ничего не известно и в учебнике такого не припомню=/ Аааа, если вы про initial, который генерит клок, то это из ксаевского language template Я не использовал, но хочу попробовать, все это эксперимент, который я провожу в свободное от работы время
  6. Да, эта книга. Я читал ее с целью - структурировать свои знания и узнать новые возможности, про которые я не знал. Очевидные ошибки ака опечатки я в этой книге встречал, как и в любой другой. Подскажите пожалуйста какие принципиальные ошибки вы там увидели? Или вы увидели их у меня в коде? P/S об ошибках кстати можно написать в издательство - они как раз об этом упоминают в книге, если бы я увидел - я бы наверное написал бы им:)
  7. Я осваиваю этот функционал по учебнику Дональда Томаса - здесь представлено довольно удобно - если есть задача протестировать именно интерфейс, то можно поступить так как описано. То есть внутри интерфейса есть таск по его проверке/
  8. Привет всем! Осваиваю новые конструкции языка и столкнулся с проблемой Написал Вот такой блок симуляции Если в нем закомментить строку gmii_interface_io_outer gmii_flow_1(clk[1], gmii_interface_io_port1); То симуляция стартует без ошибок, при том, что строка gmii_interface_io_outer gmii_flow_0(clk[0], gmii_interface_io_port0); останется Но если присутствуют обе эти строки, то появляется ошибка: INFO: [Vivado 12-4795] Using compiled simulation libraries for IPs INFO: [SIM-utils-51] Simulation object is 'sim_1' INFO: [USF-XSim-7] Finding pre-compiled libraries... INFO: [USF-XSim-11] File '/home/xakstreet/XilinxDistr/Vivado/2017.1/data/xsim/ip/xsim_ip.ini' copied to run dir:'/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/xproject/gmii_switch.sim/sim_1/behav' INFO: [SIM-utils-54] Inspecting design source files for 'TestBench' in fileset 'sim_1'... INFO: [USF-XSim-97] Finding global include files... INFO: [USF-XSim-98] Fetching design files from 'sim_1'... INFO: [USF-XSim-2] XSim::Compile design INFO: [USF-XSim-61] Executing 'COMPILE and ANALYZE' step in '/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/xproject/gmii_switch.sim/sim_1/behav' xvlog -m64 --relax -L xil_defaultlib -prj TestBench_vlog.prj INFO: [VRFC 10-2263] Analyzing Verilog file "/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/src/ip/data_combiner_fifo/sim/data_combiner_fifo.v" into library xil_defaultlib INFO: [VRFC 10-311] analyzing module data_combiner_fifo INFO: [VRFC 10-2263] Analyzing Verilog file "/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/src/ip/mac_info_clock_converter/sim/mac_info_clock_converter.v" into library xil_defaultlib INFO: [VRFC 10-311] analyzing module mac_info_clock_converter INFO: [VRFC 10-2263] Analyzing SystemVerilog file "/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/src/rtl/gmii_router_definitions.sv" into library xil_defaultlib INFO: [VRFC 10-2263] Analyzing SystemVerilog file "/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/src/rtl/MAC_table_writer.sv" into library xil_defaultlib INFO: [VRFC 10-311] analyzing module MAC_table_writer INFO: [VRFC 10-2263] Analyzing SystemVerilog file "/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/src/rtl/gmii_data_combiner.sv" into library xil_defaultlib INFO: [VRFC 10-311] analyzing module gmii_data_combiner INFO: [VRFC 10-2263] Analyzing SystemVerilog file "/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/src/rtl/gmii_router.sv" into library xil_defaultlib INFO: [VRFC 10-311] analyzing module gmii_router INFO: [VRFC 10-2263] Analyzing SystemVerilog file "/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/src/rtl/gmii_switch.sv" into library xil_defaultlib INFO: [VRFC 10-311] analyzing module gmii_switch_2x2 INFO: [VRFC 10-2263] Analyzing SystemVerilog file "/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/src/rtl/mac_source_parser.sv" into library xil_defaultlib INFO: [VRFC 10-311] analyzing module mac_source_parser INFO: [VRFC 10-2263] Analyzing SystemVerilog file "/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/src/rtl/TestBench.sv" into library xil_defaultlib WARNING: [VRFC 10-2167] variable fT must explicitly be declared as automatic or static [/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/src/rtl/TestBench.sv:80] INFO: [VRFC 10-311] analyzing module TestBench INFO: [VRFC 10-2263] Analyzing Verilog file "/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/xproject/gmii_switch.sim/sim_1/behav/glbl.v" into library xil_defaultlib INFO: [VRFC 10-311] analyzing module glbl xvhdl -m64 --relax -prj TestBench_vhdl.prj INFO: [USF-XSim-69] 'compile' step finished in '0' seconds INFO: [USF-XSim-3] XSim::Elaborate design INFO: [USF-XSim-61] Executing 'ELABORATE' step in '/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/xproject/gmii_switch.sim/sim_1/behav' Vivado Simulator 2017.1 Copyright 1986-1999, 2001-2016 Xilinx, Inc. All Rights Reserved. Running: /home/xakstreet/XilinxDistr/Vivado/2017.1/bin/unwrapped/lnx64.o/xelab -wto 9b9d5eb16de34b8c975b93350c2304c7 --debug typical --relax --mt 8 -L fifo_generator_v13_1_4 -L xil_defaultlib -L axis_infrastructure_v1_1_0 -L axis_data_fifo_v1_1_13 -L axis_clock_converter_v1_1_13 -L unisims_ver -L unimacro_ver -L secureip -L xpm --snapshot TestBench_behav xil_defaultlib.TestBench xil_defaultlib.glbl -log elaborate.log Using 8 slave threads. Starting static elaboration WARNING: [VRFC 10-278] actual bit length 10 differs from formal bit length 16 for port s_axis_tdata [/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/src/rtl/gmii_data_combiner.sv:82] WARNING: [VRFC 10-278] actual bit length 10 differs from formal bit length 16 for port m_axis_tdata [/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/src/rtl/gmii_data_combiner.sv:86] WARNING: [VRFC 10-1783] select index 2 into rrst_reg is out of bounds [/wrk/2017.1/nightly/2017_04_14_1846317/packages/customer/vivado/data/ip/xilinx/fifo_generator_v13_1/simulation/fifo_generator_vlog_beh.v:4885] WARNING: [VRFC 10-597] element index -1 into num_read_words_dc is out of bounds [/wrk/2017.1/nightly/2017_04_14_1846317/packages/customer/vivado/data/ip/xilinx/fifo_generator_v13_1/simulation/fifo_generator_vlog_beh.v:5490] WARNING: [VRFC 10-597] element index -1 into num_write_words_dc is out of bounds [/wrk/2017.1/nightly/2017_04_14_1846317/packages/customer/vivado/data/ip/xilinx/fifo_generator_v13_1/simulation/fifo_generator_vlog_beh.v:5540] Completed static elaboration Starting simulation data flow analysis Completed simulation data flow analysis ERROR: [XSIM 43-3316] Signal SIGSEGV received. Printing stacktrace... [0] /home/xakstreet/XilinxDistr/Vivado/2017.1/bin/unwrapped/lnx64.o/xelab() [0x6fd754] [1] /home/xakstreet/XilinxDistr/Vivado/2017.1/bin/unwrapped/lnx64.o/xelab() [0x75e249] [2] /home/xakstreet/XilinxDistr/Vivado/2017.1/bin/unwrapped/lnx64.o/xelab() [0x75e377] [3] /home/xakstreet/XilinxDistr/Vivado/2017.1/bin/unwrapped/lnx64.o/xelab() [0x75e377] [4] /home/xakstreet/XilinxDistr/Vivado/2017.1/bin/unwrapped/lnx64.o/xelab() [0x76a21b] [5] /home/xakstreet/XilinxDistr/Vivado/2017.1/bin/unwrapped/lnx64.o/xelab() [0x71838b] [6] /home/xakstreet/XilinxDistr/Vivado/2017.1/bin/unwrapped/lnx64.o/xelab() [0x46783c] [7] /home/xakstreet/XilinxDistr/Vivado/2017.1/bin/unwrapped/lnx64.o/xelab() [0x476c54] [8] /home/xakstreet/XilinxDistr/Vivado/2017.1/bin/unwrapped/lnx64.o/xelab() [0x44b9ef] [9] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7) [0x7ffa5160db97] [10] /home/xakstreet/XilinxDistr/Vivado/2017.1/bin/unwrapped/lnx64.o/xelab() [0x465621] Done INFO: [USF-XSim-69] 'elaborate' step finished in '1' seconds INFO: [USF-XSim-99] Step results log file:'/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/xproject/gmii_switch.sim/sim_1/behav/elaborate.log' ERROR: [USF-XSim-62] 'elaborate' step failed with error(s). Please check the Tcl console output or '/home/xakstreet/Documents/Xilinx_projects/Vivado17_1/gmii_switch/xproject/gmii_switch.sim/sim_1/behav/elaborate.log' file for more information. ERROR: [Vivado 12-4473] Detected error while running simulation. Please correct the issue and retry this operation. ERROR: [Common 17-39] 'launch_simulation' failed due to earlier errors. Я вот не пойму - это вивадо симулятор (17.1) так не дружит с систем верилогом или я что-то не так делаю В файле лога продублирована информация про SIGSEGV - я не знаю что это за сигнал =/ (https://github.com/xakstreet/gmii_switch - вот сам проект для которого этот файл симуляции) как-то я много понаписал лишнего - суть вопроса в том - использует ли кто в вивадо task в интерфейсах и вызывал ли параллельно 2 task через 2 interface одного типа? Ест ли это симулятор вивадо или надо перейти на моделсим? P/S Проблема выявлена - нельзя class.randomize делать внутри процесса, который внутри интерфейса. Если вынести класс из task, а операцию randomize проделывать отдельно не в interface, то вроде как все работает interface gmii_interface_io_outer (input clk, gmii_interface_io.master port); frameParameters fT = new; modport sendData(import send_rx_frame); task send_rx_frame(input logic [47:0] MAC_SRC_VAL, input logic [47:0] MAC_DST_VAL); $display("Shrinked = %d, Size = %d", fT.shrinked_preamble, fT.frame_length); port.rx_dv = 0; port.rx_err = 0; port.rxd = 8'h00; for(int i=0;i<12;i++)begin : send_interframe @(posedge clk); port.rx_dv = 0; port.rx_err = 0; port.rxd = 8'h55; end for(int i=0;i<(6+fT.shrinked_preamble);i++)begin : send_preamble @(posedge clk); port.rx_dv = 1; port.rx_err = 0; port.rxd = 8'h55; end @(posedge clk);//end of preamble port.rx_dv = 1; port.rx_err = 0; port.rxd = 8'hD5; for(int i=0;i<6;i++)begin : send_MAC_dst @(posedge clk); port.rx_dv = 1; port.rx_err = 0; if (fT.frame_type==BROADCAST_P) begin port.rxd = 8'hFF; end else begin port.rxd = MAC_DST_VAL[i*8+:8]; end end for(int i=0;i<6;i++)begin : send_MAC_src @(posedge clk); port.rx_dv = 1; port.rx_err = 0; port.rxd = MAC_SRC_VAL[i*8+:8]; end for(int i=0;i<fT.frame_length;i++)begin : send_payload @(posedge clk); port.rx_dv = 1; port.rx_err = 0; port.rxd = $urandom(); end @(posedge clk);//end of packet port.rx_dv = 0; port.rx_err = 0; port.rxd = 8'h55; endtask : send_rx_frame endinterface: gmii_interface_io_outer initial begin : sender_0 @clk_start;//wait phase initialize gmii_flow_0.fT.randomize; gmii_flow_0.sendData.send_rx_frame(20,40); end initial begin : sender_1 @clk_start;//wait phase initialize gmii_flow_1.fT.randomize; gmii_flow_1.fT.randomize; gmii_flow_1.sendData.send_rx_frame(20,40); end Извиняюсь за сумбур, проблему-то решил, но причины возникновения не понял
  9. Это этап разработки с которым возникли проблемы, еще много всего есть и baremetal нам не подходит. Но к счастью вроде понимание как и что надо делать пришло.
  10. ну на данный момент у меня нет и u-boot, если имеется в виду что можно было оставить u-boot из первого примера, на который я сослался, то я этого не сделал просто потому, что он из другого примера)
  11. В процессе генерации uImage я полагаю, просто на мой взгляд проблема не в самом итоговом dtb, а именно в том как создавать u-boot. Я лучше пройдусь еще раз по всему и тогда сформулирую ответ корректнее
  12. Спасибо, пытался пройтись по той инструкции, но где-то налажал, и показалось что с петалинуксом проще, но не тут то было, попробую еще раз по нему пройтись
  13. Ниже приведено содержание этих логов(он печетался в консоль) - например для 18.3, гуглить - естественно гуглил, но пока информации не нашел. А из лога видно, что не был найден axi_sysid_0 - но где он не был найден и почему - это мне не понятно. Но я Вас в общем понял - с такой постановкой вопроса я тут ответа не найду, спасибо Log data follows: | DEBUG: Executing shell function do_compile | Error: /home/xakstreet/Documents/Projects/VivadoProj_18_2/zc702_hdmi/hdl/projects/adv7511/zc702/Linux_data/PetaProj/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/device-tree/xilinx+gitAUTOINC+b7466bbeee-r0/pl-delete-nodes-zynq-zc702-adv7511.dtsi:13.15-27 Label or path axi_sysid_0 not found | FATAL ERROR: Syntax error parsing input tree | WARNING: /home/xakstreet/Documents/Projects/VivadoProj_18_2/zc702_hdmi/hdl/projects/adv7511/zc702/Linux_data/PetaProj/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/device-tree/xilinx+gitAUTOINC+b7466bbeee-r0/temp/run.do_compile.22688:1 exit 1 from 'dtc -I dts -O dtb -R 8 -p 0x1000 -b 0 -i /home/xakstreet/Documents/Projects/VivadoProj_18_2/zc702_hdmi/hdl/projects/adv7511/zc702/Linux_data/PetaProj/build/../components/plnx_workspace/device-tree/device-tree -i /home/xakstreet/Documents/Projects/VivadoProj_18_2/zc702_hdmi/hdl/projects/adv7511/zc702/Linux_data/PetaProj/build/tmp/work-shared/plnx-zynq7/kernel-source/include -i /home/xakstreet/Documents/Projects/VivadoProj_18_2/zc702_hdmi/hdl/projects/adv7511/zc702/Linux_data/PetaProj/build/tmp/work-shared/plnx-zynq7/kernel-source/include -i /home/xakstreet/Documents/Projects/VivadoProj_18_2/zc702_hdmi/hdl/projects/adv7511/zc702/Linux_data/PetaProj/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/device-tree/xilinx+gitAUTOINC+b7466bbeee-r0 -i/home/xakstreet/Documents/Projects/VivadoProj_18_2/zc702_hdmi/hdl/projects/adv7511/zc702/Linux_data/PetaProj/build/tmp/work-shared/plnx-zynq7/kernel-source/arch/arm/boot/dts -o ${DTS_NAME}.dtb `basename ${DTS_FILE}`.pp' | ERROR: Function failed: do_compile (log file is located at /home/xakstreet/Documents/Projects/VivadoProj_18_2/zc702_hdmi/hdl/projects/adv7511/zc702/Linux_data/PetaProj/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/device-tree/xilinx+gitAUTOINC+b7466bbeee-r0/temp/log.do_compile.22688)
  14. не работал, но я не понимаю почему должно быть сложно просто собрать готовый пример - есть общее представление как что работает, но как говорится, куда и в какой последовательности нажимать не совсем понятно, так как я уже привел пример в теме как делая по инструкции можно не добиться ничего