реклама на сайте
подробности

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


Гуру
******

Группа: Свой
Сообщений: 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 слова), которые будут потеряны при первой пересылке. При дальнейших пересылках всё работает как положено по датащиту.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Krys
сообщение Dec 22 2014, 03:41
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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 я не знаю, поставили ли Вы его туда.
Короче нужна информация.
Пока буду ждать, дальше уже не знаю, чо рыть.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Dec 22 2014, 17:51
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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 не проверяется....

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 14:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01452 секунд с 7
ELECTRONIX ©2004-2016