|
AXI DataMover (S2MM) сразу после сброса готов принять 4 слова данных из стрима, хотя никакой команды на это ещё не было, как я понимаю, он сразу после сброса не должен держать Ready в 1 |
|
|
|
Dec 3 2014, 04:58
|

Гуру
     
Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271

|
Здравствуйте. Такая вот проблема. AXI DataMover (S2MM) сразу после сброса готов принять 4 слова данных из стрима, хотя никакой команды на это ещё не было, как я понимаю, он сразу после сброса не должен держать Ready в 1, пока не поступит команда. Вот осциллограммы из ChipScope Analyzer:
Так выглядит описание в файле *.mhs: CODE BEGIN axi_datamover PARAMETER INSTANCE = axi_datamover_y PARAMETER HW_VER = 4.02.a PARAMETER C_INCLUDE_MM2S = 0 PARAMETER C_INCLUDE_S2MM = 1 PARAMETER C_INCLUDE_S2MM_DRE = 0 PARAMETER C_S2MM_BTT_USED = 23 PARAMETER C_S2MM_INCLUDE_SF = 0 PARAMETER C_S2MM_BURST_SIZE = 256 PARAMETER C_INCLUDE_S2MM_STSFIFO = 1 PARAMETER C_S2MM_STSCMD_FIFO_DEPTH = 1 PARAMETER C_S2MM_STSCMD_IS_ASYNC = 1 PARAMETER C_M_AXI_S2MM_ID_WIDTH = 3 PARAMETER C_S2MM_ADDR_PIPE_DEPTH = 4 BUS_INTERFACE M_AXI_S2MM = axi4_0 BUS_INTERFACE S_AXIS_S2MM_CMD = axi_dma_ctrl_y_M_AXIS_CMD BUS_INTERFACE M_AXIS_S2MM_STS = axi_datamover_y_M_AXIS_S2MM_STS BUS_INTERFACE S_AXIS_S2MM = axi_stream_fft_core_0_Y_AXIS PORT m_axi_s2mm_aclk = clk_75_0000MHzPLL0 PORT m_axis_s2mm_cmdsts_aresetn = DIP_Switches_4Bits_TRI_I[0] PORT m_axi_s2mm_aresetn = DIP_Switches_4Bits_TRI_I[0] PORT m_axis_s2mm_cmdsts_awclk = axi_dma_ctrl_y_axis_aclk_0
END Я использовал плату SP-605 со SPARTAN-6. Софт - ISE 14.7 (Planahead + XPS). Чтобы нагляднее продемонстрировать проблему я специально перевёл датамувер в режим асинхронных команд, чтобы был дополнительный сброс (на всякий случай). Все сбросы датамувера я подключил к DIP-Switch на отладочной плате, и захватил осциллограммы сразу после снятия сброса. Хотя проблема проявляется и без всего перечисленного, но не так наглядно. Кто-нибудь с таким сталкивался? Как лечить? Пока я делаю программный обход этой проблемы, добавляя в стрим избыточные данные (те самые 4 слова), которые будут потеряны при первой пересылке. При дальнейших пересылках всё работает как положено по датащиту.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
 |
Ответов
|
Dec 22 2014, 03:41
|

Гуру
     
Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271

|
Пытаюсь разобраться по мере возможностей. Дайте пожалуйста *.mhs файл. Или кусок с датамувером, но лучше весь, чтобы не было лишних вопросов. А что за "схемаНтик" Вы упоминаете и используете? Не могу не начать холивар ))) Очень тяжело по этой схеме смотреть, что куда. Я понимаю, что схемы улучшают наглядность, но тогда надо хоть провода между блоками прокинуть, а то без проводов это ещё хуже текстового файла в плане наглядности. По текстовику хоть поиском пробежаться можно и подсветка одинаковых слов есть. А тут чото смотрю в книгу - вижу фигу ))) Ладно, это всё офтопик, не собираюсь Вас учить, как выполнять и оформлять проекты, просто личное мнение. Но, может, тогда выложите текстовый исходник на HDL, который получается в результате разбора схемы средой? Было бы легче анализировать. Разрешение картинки к стати маловато, сложно догадываться, что за сигналы подписаны и размыты, особенно постороннему человеку. Непонятно это: Цитата(farbius @ Dec 19 2014, 12:22)  Однако, если сигнал s2mm valid ноль, Назовите пожалуйста полное имя сигнала, а то их там одинаковых куча - запутаешься. И это непонятно: Цитата(farbius @ Dec 19 2014, 12:22)  а потом перекинуть на один, то картина следующая: Что значит перекинуть на 1. И что за сигналы tkeep (я просто не знаю что это, не работал никогда с ними, у меня без них)? Вам они зачем? Может их не использовать? И я смотрю у интерфейс статуса никуда не подключен? В этом запросто может быть причина. Он должен быть подключен к фифо, при том фифо должно быть действующее, т.е. дающее реади когда надо. Это необязательно в том случае, если фифо есть внутри датамувера, но без *.mhs я не знаю, поставили ли Вы его туда. Короче нужна информация. Пока буду ждать, дальше уже не знаю, чо рыть.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Dec 22 2014, 17:51
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(Krys @ Dec 22 2014, 06:41)  Пытаюсь разобраться по мере возможностей. Дайте пожалуйста *.mhs файл. Или кусок с датамувером, но лучше весь, чтобы не было лишних вопросов. А что за "схемаНтик" Вы упоминаете и используете? Не могу не начать холивар ))) Очень тяжело по этой схеме смотреть, что куда. Приветствую. Большое спасибо за внимание. Продолжаю бороться с ентим датамувером. Пересобрал свой проект. В XPS проект имеет вид
добавил стрим ядро, которое данные берет из фифо и по команде выдает датамуверу для трансфера вот мой .mhs Код # ############################################################################## # Created by Base System Builder Wizard for Xilinx EDK 14.3 Build EDK_P.40xd # Mon Dec 22 18:24:46 2014 # Target Board: xilinx.com ml605 Rev D # Family: virtex6 # Device: xc6vlx240t # Package: ff1156 # Speed Grade: -1 # ############################################################################## PARAMETER VERSION = 2.1.0
PORT ddr_memory_we_n = ddr_memory_we_n, DIR = O PORT ddr_memory_ras_n = ddr_memory_ras_n, DIR = O PORT ddr_memory_odt = ddr_memory_odt, DIR = O PORT ddr_memory_dqs_n = ddr_memory_dqs_n, DIR = IO, VEC = [0:0] PORT ddr_memory_dqs = ddr_memory_dqs, DIR = IO, VEC = [0:0] PORT ddr_memory_dq = ddr_memory_dq, DIR = IO, VEC = [7:0] PORT ddr_memory_dm = ddr_memory_dm, DIR = O, VEC = [0:0] PORT ddr_memory_ddr3_rst = ddr_memory_ddr3_rst, DIR = O PORT ddr_memory_cs_n = ddr_memory_cs_n, DIR = O PORT ddr_memory_clk_n = ddr_memory_clk_n, DIR = O, SIGIS = CLK PORT ddr_memory_clk = ddr_memory_clk, DIR = O, SIGIS = CLK PORT ddr_memory_cke = ddr_memory_cke, DIR = O PORT ddr_memory_cas_n = ddr_memory_cas_n, DIR = O PORT ddr_memory_ba = ddr_memory_ba, DIR = O, VEC = [2:0] PORT ddr_memory_addr = ddr_memory_addr, DIR = O, VEC = [12:0] PORT RESET = RESET, DIR = I, SIGIS = RST, RST_POLARITY = 1 PORT CLK_P = CLK, DIR = I, DIFFERENTIAL_POLARITY = P, SIGIS = CLK, CLK_FREQ = 200000000 PORT CLK_N = CLK, DIR = I, DIFFERENTIAL_POLARITY = N, SIGIS = CLK, CLK_FREQ = 200000000 PORT clk10MHz = clock_generator_0_CLKOUT4, DIR = O, SIGIS = CLK, CLK_FREQ = 10000000 PORT ARESETN = master_strm_0_M_AXIS_ARESETN, DIR = I PORT TREADY = master_strm_0_S_AXIS_TREADY, DIR = O PORT TDATA = master_strm_0_S_AXIS_TDATA, DIR = I, VEC = [31:0] PORT TLAST = master_strm_0_S_AXIS_TLAST, DIR = I PORT TVALID = master_strm_0_S_AXIS_TVALID, DIR = I PORT cmdsts_awclk = axi_datamover_0_m_axis_s2mm_cmdsts_awclk, DIR = I, SIGIS = CLK PORT cmdsts_aresetn = axi_datamover_0_m_axis_s2mm_cmdsts_aresetn, DIR = I, SIGIS = RST PORT cmd_tvalid = axi_datamover_0_s_axis_s2mm_cmd_tvalid, DIR = I PORT cmd_tready = axi_datamover_0_s_axis_s2mm_cmd_tready, DIR = O PORT cmd_tdata = axi_datamover_0_s_axis_s2mm_cmd_tdata, DIR = I, VEC = [71:0] PORT sts_tvalid = axi_datamover_0_m_axis_s2mm_sts_tvalid, DIR = O PORT sts_tready = axi_datamover_0_m_axis_s2mm_sts_tready, DIR = I PORT sts_tdata = axi_datamover_0_m_axis_s2mm_sts_tdata, DIR = O, VEC = [7:0] PORT sts_tkeep = axi_datamover_0_m_axis_s2mm_sts_tkeep, DIR = O PORT sts_tlast = axi_datamover_0_m_axis_s2mm_sts_tlast, DIR = O PORT mm2s_aresetn = axi4_0_S_m_axi_mm2s_aresetn, DIR = I, SIGIS = RST PORT s2mm_aresetn = axi4_0_S_m_axi_s2mm_aresetn, DIR = I, SIGIS = RST PORT clk100MHz = clk_100_0000MHzMMCM0, DIR = O, SIGIS = CLK, CLK_FREQ = 100000000
BEGIN proc_sys_reset PARAMETER INSTANCE = proc_sys_reset_0 PARAMETER HW_VER = 3.00.a PARAMETER C_EXT_RESET_HIGH = 1 PORT Dcm_locked = proc_sys_reset_0_Dcm_locked PORT Slowest_sync_clk = clk_100_0000MHzMMCM0 PORT Interconnect_aresetn = proc_sys_reset_0_Interconnect_aresetn PORT Ext_Reset_In = RESET END
BEGIN clock_generator PARAMETER INSTANCE = clock_generator_0 PARAMETER HW_VER = 4.03.a PARAMETER C_CLKIN_FREQ = 200000000 PARAMETER C_CLKOUT0_FREQ = 100000000 PARAMETER C_CLKOUT0_GROUP = MMCM0 PARAMETER C_CLKOUT1_FREQ = 200000000 PARAMETER C_CLKOUT1_GROUP = MMCM0 PARAMETER C_CLKOUT2_FREQ = 400000000 PARAMETER C_CLKOUT2_GROUP = MMCM0 PARAMETER C_CLKOUT3_FREQ = 400000000 PARAMETER C_CLKOUT3_GROUP = MMCM0 PARAMETER C_CLKOUT3_BUF = FALSE PARAMETER C_CLKOUT3_VARIABLE_PHASE = TRUE PARAMETER C_CLKOUT4_FREQ = 10000000 PORT LOCKED = proc_sys_reset_0_Dcm_locked PORT CLKOUT0 = clk_100_0000MHzMMCM0 PORT RST = RESET PORT CLKOUT3 = clk_400_0000MHzMMCM0_nobuf_varphase PORT CLKOUT2 = clk_400_0000MHzMMCM0 PORT CLKOUT1 = clk_200_0000MHzMMCM0 PORT CLKIN = CLK PORT PSCLK = clk_200_0000MHzMMCM0 PORT PSEN = psen PORT PSINCDEC = psincdec PORT PSDONE = psdone PORT CLKOUT4 = clock_generator_0_CLKOUT4 END
BEGIN axi_interconnect PARAMETER INSTANCE = axi4_0 PARAMETER HW_VER = 1.06.a PORT interconnect_aclk = clk_100_0000MHzMMCM0 PORT INTERCONNECT_ARESETN = proc_sys_reset_0_Interconnect_aresetn END
BEGIN axi_v6_ddrx PARAMETER INSTANCE = DDR3_SDRAM PARAMETER HW_VER = 1.06.a PARAMETER C_MEM_PARTNO = MT41J64M16XX-15E PARAMETER C_DM_WIDTH = 1 PARAMETER C_DQS_WIDTH = 1 PARAMETER C_DQ_WIDTH = 8 PARAMETER C_MMCM_EXT_LOC = MMCM_ADV_X0Y8 PARAMETER C_NDQS_COL0 = 1 PARAMETER C_NDQS_COL1 = 0 PARAMETER C_S_AXI_BASEADDR = 0xa4000000 PARAMETER C_S_AXI_HIGHADDR = 0xa7ffffff PARAMETER C_INTERCONNECT_S_AXI_MASTERS = axi_datamover_0.M_AXI_S2MM BUS_INTERFACE S_AXI = axi4_0 PORT ddr_we_n = ddr_memory_we_n PORT ddr_ras_n = ddr_memory_ras_n PORT ddr_odt = ddr_memory_odt PORT ddr_dqs_n = ddr_memory_dqs_n PORT ddr_dqs_p = ddr_memory_dqs PORT ddr_dq = ddr_memory_dq PORT ddr_dm = ddr_memory_dm PORT ddr_reset_n = ddr_memory_ddr3_rst PORT ddr_cs_n = ddr_memory_cs_n PORT ddr_ck_n = ddr_memory_clk_n PORT ddr_ck_p = ddr_memory_clk PORT ddr_cke = ddr_memory_cke PORT ddr_cas_n = ddr_memory_cas_n PORT ddr_ba = ddr_memory_ba PORT ddr_addr = ddr_memory_addr PORT clk_rd_base = clk_400_0000MHzMMCM0_nobuf_varphase PORT clk_mem = clk_400_0000MHzMMCM0 PORT clk = clk_200_0000MHzMMCM0 PORT clk_ref = clk_200_0000MHzMMCM0 PORT PD_PSEN = psen PORT PD_PSINCDEC = psincdec PORT PD_PSDONE = psdone END
BEGIN axi_datamover PARAMETER INSTANCE = axi_datamover_0 PARAMETER HW_VER = 3.00.a PARAMETER C_INCLUDE_MM2S = 0 PARAMETER C_INCLUDE_S2MM = 1 PARAMETER C_INCLUDE_S2MM_DRE = 0 PARAMETER C_S2MM_BTT_USED = 23 PARAMETER C_S2MM_INCLUDE_SF = 0 PARAMETER C_S2MM_BURST_SIZE = 256 PARAMETER C_S2MM_STSCMD_IS_ASYNC = 1 PARAMETER C_S2MM_STSCMD_FIFO_DEPTH = 4 BUS_INTERFACE M_AXI_S2MM = axi4_0 BUS_INTERFACE S_AXIS_S2MM = master_strm_0_M_AXIS PORT m_axi_s2mm_aclk = clk_100_0000MHzMMCM0 PORT m_axis_s2mm_cmdsts_awclk = axi_datamover_0_m_axis_s2mm_cmdsts_awclk PORT m_axis_s2mm_cmdsts_aresetn = axi_datamover_0_m_axis_s2mm_cmdsts_aresetn PORT s_axis_s2mm_cmd_tvalid = axi_datamover_0_s_axis_s2mm_cmd_tvalid PORT s_axis_s2mm_cmd_tready = axi_datamover_0_s_axis_s2mm_cmd_tready PORT s_axis_s2mm_cmd_tdata = axi_datamover_0_s_axis_s2mm_cmd_tdata PORT m_axis_s2mm_sts_tvalid = axi_datamover_0_m_axis_s2mm_sts_tvalid PORT m_axis_s2mm_sts_tready = axi_datamover_0_m_axis_s2mm_sts_tready PORT m_axis_s2mm_sts_tdata = axi_datamover_0_m_axis_s2mm_sts_tdata PORT m_axis_s2mm_sts_tkeep = axi_datamover_0_m_axis_s2mm_sts_tkeep PORT m_axis_s2mm_sts_tlast = axi_datamover_0_m_axis_s2mm_sts_tlast END
BEGIN master_strm PARAMETER INSTANCE = master_strm_0 PARAMETER HW_VER = 1.00.a BUS_INTERFACE M_AXIS = master_strm_0_M_AXIS PORT ACLK = clk_100_0000MHzMMCM0 PORT S_AXIS_TREADY = master_strm_0_S_AXIS_TREADY PORT S_AXIS_TDATA = master_strm_0_S_AXIS_TDATA PORT S_AXIS_TLAST = master_strm_0_S_AXIS_TLAST PORT S_AXIS_TVALID = master_strm_0_S_AXIS_TVALID END результаты функционального моделирования в modelsim на рисунке виден реади на 4 такта
далее после наполнения фифо считываю данные датамувером
почему сигнал реади (s_axi_s2mm_tready) при появлении сигнала данных (s_axi_s2mm_tvalid) принимает нулевое значение???? То есть при наличии данных и изменении содержимого cmd регистра датамувер пишет после нескольких тактов s_axi_s2mm_tvalid что не готов их принять??? вот картина если я отключаю проверку s_axi_s2mm_tready
стрим пакеты идут, но естественно не далее датамувера, т.к. s_axi_s2mm_tready не проверяется....
|
|
|
|
Сообщений в этой теме
Krys AXI DataMover (S2MM) сразу после сброса готов принять 4 слова данных из стрима, хотя никакой команды на это ещё не было Dec 3 2014, 04:58 farbius Скажите вы данные сразу в порты DM кидаете? Я имею... Dec 5 2014, 08:55 Corvus +1
Тоже недавно наткнулся на эту проблему. И именн... Dec 5 2014, 12:21 Krys Цитата(Corvus @ Dec 5 2014, 18:21) На фор... Dec 5 2014, 13:44 Corvus Цитата(Krys @ Dec 5 2014, 16:44) Покажите... Dec 5 2014, 20:46 farbius Цитата(Krys @ Dec 5 2014, 16:44) Извините... Dec 17 2014, 08:19  Krys Цитата(farbius @ Dec 17 2014, 14:19) подс... Dec 17 2014, 09:16   farbius Цитата(Krys @ Dec 17 2014, 12:16) Ну лучш... Dec 17 2014, 10:41    Krys Цитата(farbius @ Dec 17 2014, 16:41) Вопр... Dec 18 2014, 04:36     farbius Цитата(Krys @ Dec 18 2014, 07:36) С логик... Dec 18 2014, 05:53 Krys Спасибо. Правда в его потоке слов непонятно, как о... Dec 8 2014, 03:06 Corvus Насколько я понял из этого и других обсуждений - с... Dec 8 2014, 08:47  Krys Цитата(Corvus @ Dec 8 2014, 14:47) Но есл... Dec 10 2014, 04:36   Corvus О, как. Спасибо! Dec 10 2014, 17:33 Krys А, нет, потом дописали, мол, глаза разуйте, всё до... Dec 11 2014, 03:56 Krys Всё, признался он, что не документирована эта фича... Dec 12 2014, 02:30 Krys Пожалуйста ) Обращайтесь ) Описанный алгоритм врод... Dec 18 2014, 06:29 farbius Цитата(Krys @ Dec 18 2014, 09:29) Пожалуй... Dec 18 2014, 13:03 Krys Советую снять чипскопом осциллограммы на его ногах... Dec 19 2014, 03:42 farbius Цитата(Krys @ Dec 19 2014, 06:42) Советую... Dec 19 2014, 06:22 farbius просмотрел форум xilinx, ваш пост и сопутствующие ... Dec 22 2014, 19:01 Krys Цитата(farbius @ Dec 23 2014, 01:01) у ме... Dec 23 2014, 05:05  farbius Цитата(Krys @ Dec 23 2014, 08:05) Вот Вы ... Dec 24 2014, 03:11   Krys Цитата(farbius @ Dec 24 2014, 09:11) безу... Dec 24 2014, 04:43    farbius Цитата(Krys @ Dec 24 2014, 07:43) Мне неп... Dec 24 2014, 05:21     Krys Цитата(farbius @ Dec 24 2014, 11:21) для ... Dec 24 2014, 07:23      farbius Цитата(Krys @ Dec 24 2014, 10:23) Как у В... Dec 24 2014, 08:36       Krys Цитата(farbius @ Dec 24 2014, 14:36) я ра... Dec 24 2014, 10:45        farbius Цитата(Krys @ Dec 24 2014, 13:45) Ну фифо... Dec 25 2014, 08:09         Krys Цитата(farbius @ Dec 25 2014, 14:09) Пола... Dec 25 2014, 10:05          farbius Цитата(Krys @ Dec 25 2014, 13:05) Вот и н... Dec 25 2014, 10:13           Krys Цитата(farbius @ Dec 25 2014, 16:13) прям... Dec 25 2014, 11:19            farbius Цитата(Krys @ Dec 25 2014, 14:19) Прямое ... Dec 25 2014, 12:30             Krys Цитата(farbius @ Dec 25 2014, 18:30) всег... Dec 26 2014, 03:02 Krys Ещё бы по ошибке data2mem из первого поста мне кто... Dec 23 2014, 07:03
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|