NSergeevich
Участник-
Постов
102 -
Зарегистрирован
-
Посещение
Весь контент NSergeevich
-
Я думаю у меня сплошная рассинхронщина набегает из-за того, что проект собрался не на BRAM-ах
-
Почему этот код использует BRAM-ы ? localparam DATA_WIDHT = 8; //width of data bus localparam ADDR_WIDTH = 15; //width of address bus localparam MAX_RAM_ADDR = 1 << ADDR_WIDTH; // main clock input clk; // side a input [ADDR_WIDTH-1:0] addr_a; input [DATA_WIDHT-1:0] data_a; input ce_a; input we_a; input oe_a; output reg[DATA_WIDHT-1:0] q_a; // side b input [ADDR_WIDTH-1:0] addr_b; output reg [DATA_WIDHT-1:0] q_b; //memory description reg [DATA_WIDHT-1:0] mem [0:MAX_RAM_ADDR-1]; // side a read/write always @ (posedge clk) begin if (we_a) begin mem[addr_a] <= data_a; end else begin q_a <= mem[addr_a]; end end // side b read only always @ (posedge clk) begin q_b <= mem[addr_b]; end endmodule А этот BRAM-ы игнорирует и делает на рассыпухе ? localparam MEMORY_ADDR_WIDTH = 10; //width of address in bits > 8 bits but < 16 bits localparam MEMORY_ADDR_MAX = 1 << MEMORY_ADDR_WIDTH; //memory description reg [7:0] memory_r[MEMORY_ADDR_MAX-1:0]; //memory array reg [MEMORY_ADDR_WIDTH-1:0] memory_addr_r; //current memory addr reg [7:0] MISO_8b_r; assign MISO_8b[7:0] = MISO_8b_r[7:0]; reg [1:0] done_r; always @(negedge CLK) done_r[1:0] <= {done_r[0:0], DONE_8b}; wire done_risingedge = (done_r[1:0] == 2'b01); //reg [1:0] msg_end_r; //always @(posedge CLK) msg_end_r[1:0] <= {msg_end_r[0], MESSAGE_END}; //wire msg_end_risingedge = (msg_end_r[1:0] == 2'b01); reg [MEMORY_ADDR_MAX-1:0] byte_count_r; reg [0:0] rw_state; //0 - read, 1 - write always @(posedge CLK) begin if (done_risingedge) begin if (FIRST_BYTE) begin byte_count_r <= 0; memory_addr_r[(MEMORY_ADDR_WIDTH-1):8] <= MOSI_8b[(MEMORY_ADDR_WIDTH-9):0]; rw_state <= MOSI_8b[7]; end else begin if (byte_count_r == 0) begin memory_addr_r[7:0] <= MOSI_8b[7:0]; byte_count_r <= byte_count_r + 1; if (rw_state == 0) //read_state MISO_8b_r[7:0] <= memory_r[{memory_addr_r[(MEMORY_ADDR_WIDTH-1):8], MOSI_8b[7:0]}]; end else begin if (rw_state == 0) //read state begin MISO_8b_r[7:0] <= memory_r[memory_addr_r + byte_count_r]; end else //(rw_state == 1) - write state begin memory_r[memory_addr_r + byte_count_r - 1] <= MOSI_8b[7:0]; end byte_count_r <= byte_count_r + 1; end end end /* if (msg_end_risingedge) begin reg_array[reg_idx][7:0] <= reg_val[7:0]; end */ end assign done_RE = done_risingedge; endmodule
-
Я вообще отлаживаюсь осциллографом, но с чипскопом тоже знаком. Вот с временными констрейнами совсем не знаком. Всм где их назначать
-
Spartan 3E xc3s500e, Verilog Мне spi(внешний с STM) передает пакет (в проект плиса) 24бита в 1-ом байте первый бит отвечает за чтение/запись ну и т.д. адрес/дата. Код на Verilog принимает по MOSI и соответственно отдает на MISO, вся логика тактируется клоком 25mhz Как бороться с тем, что когда я начинаю тактировань клоком в 50мгц начинают время от времени появляться ошибки на MISO, а когда перехожу на клок 100мгц ошибки на выходе данных возникают постоянно? С чем это связанно?
-
К сожалению... нужно разобраться как это сделать в айсе вебпаке
-
Вот теперь начинается сомое интересное и не понятное. В проекте я добавляю Embedded Processor (файл XMP) в нем я собственно меняю MIO на EMIO для ethernet-а. На выходе получается файл который я добавляю в ТОП левел проекта. Но этот файл со слишком большим количеством выводов (а мне нужны только для eth Phy), не понятно как этот файл применять в проекте... куда девать все эти выводы? PS instance_name ( .LEDs_4Bits_TRI_IO(LEDs_4Bits_TRI_IO), .GPIO_SW_TRI_IO(GPIO_SW_TRI_IO), .processing_system7_0_MIO(processing_system7_0_MIO), .processing_system7_0_PS_SRSTB(processing_system7_0_PS_SRSTB), .processing_system7_0_PS_CLK(processing_system7_0_PS_CLK), .processing_system7_0_PS_PORB(processing_system7_0_PS_PORB), .processing_system7_0_DDR_Clk(processing_system7_0_DDR_Clk), .processing_system7_0_DDR_Clk_n(processing_system7_0_DDR_Clk_n), .processing_system7_0_DDR_CKE(processing_system7_0_DDR_CKE), .processing_system7_0_DDR_CS_n(processing_system7_0_DDR_CS_n), .processing_system7_0_DDR_RAS_n(processing_system7_0_DDR_RAS_n), .processing_system7_0_DDR_CAS_n(processing_system7_0_DDR_CAS_n), .processing_system7_0_DDR_WEB_pin(processing_system7_0_DDR_WEB_pin), .processing_system7_0_DDR_BankAddr(processing_system7_0_DDR_BankAddr), .processing_system7_0_DDR_Addr(processing_system7_0_DDR_Addr), .processing_system7_0_DDR_ODT(processing_system7_0_DDR_ODT), .processing_system7_0_DDR_DRSTB(processing_system7_0_DDR_DRSTB), .processing_system7_0_DDR_DQ(processing_system7_0_DDR_DQ), .processing_system7_0_DDR_DM(processing_system7_0_DDR_DM), .processing_system7_0_DDR_DQS(processing_system7_0_DDR_DQS), .processing_system7_0_DDR_DQS_n(processing_system7_0_DDR_DQS_n), .processing_system7_0_DDR_VRN(processing_system7_0_DDR_VRN), .processing_system7_0_DDR_VRP(processing_system7_0_DDR_VRP), .processing_system7_0_ENET0_GMII_TX_EN_pin(processing_system7_0_ENET0_GMII_TX_EN_pin), .processing_system7_0_ENET0_GMII_TX_ER_pin(processing_system7_0_ENET0_GMII_TX_ER_pin), .processing_system7_0_ENET0_MDIO_MDC_pin(processing_system7_0_ENET0_MDIO_MDC_pin), .processing_system7_0_ENET0_PTP_DELAY_REQ_RX_pin(processing_system7_0_ENET0_PTP_DELAY_REQ_RX_pin), .processing_system7_0_ENET0_PTP_DELAY_REQ_TX_pin(processing_system7_0_ENET0_PTP_DELAY_REQ_TX_pin), .processing_system7_0_ENET0_PTP_PDELAY_REQ_RX_pin(processing_system7_0_ENET0_PTP_PDELAY_REQ_RX_pin), .processing_system7_0_ENET0_PTP_PDELAY_REQ_TX_pin(processing_system7_0_ENET0_PTP_PDELAY_REQ_TX_pin), .processing_system7_0_ENET0_PTP_PDELAY_RESP_RX_pin(processing_system7_0_ENET0_PTP_PDELAY_RESP_RX_pin), .processing_system7_0_ENET0_PTP_PDELAY_RESP_TX_pin(processing_system7_0_ENET0_PTP_PDELAY_RESP_TX_pin), .processing_system7_0_ENET0_PTP_SYNC_FRAME_RX_pin(processing_system7_0_ENET0_PTP_SYNC_FRAME_RX_pin), .processing_system7_0_ENET0_PTP_SYNC_FRAME_TX_pin(processing_system7_0_ENET0_PTP_SYNC_FRAME_TX_pin), .processing_system7_0_ENET0_SOF_RX_pin(processing_system7_0_ENET0_SOF_RX_pin), .processing_system7_0_ENET0_SOF_TX_pin(processing_system7_0_ENET0_SOF_TX_pin), .processing_system7_0_ENET0_GMII_TXD_pin(processing_system7_0_ENET0_GMII_TXD_pin), .processing_system7_0_ENET0_GMII_COL_pin(processing_system7_0_ENET0_GMII_COL_pin), .processing_system7_0_ENET0_GMII_CRS_pin(processing_system7_0_ENET0_GMII_CRS_pin), .processing_system7_0_ENET0_EXT_INTIN_pin(processing_system7_0_ENET0_EXT_INTIN_pin), .processing_system7_0_ENET0_GMII_RX_CLK_pin(processing_system7_0_ENET0_GMII_RX_CLK_pin), .processing_system7_0_ENET0_GMII_RX_DV_pin(processing_system7_0_ENET0_GMII_RX_DV_pin), .processing_system7_0_ENET0_GMII_RX_ER_pin(processing_system7_0_ENET0_GMII_RX_ER_pin), .processing_system7_0_ENET0_GMII_TX_CLK_pin(processing_system7_0_ENET0_GMII_TX_CLK_pin), .processing_system7_0_ENET0_GMII_RXD_pin(processing_system7_0_ENET0_GMII_RXD_pin), .processing_system7_0_ENET0_MDIO_pin(processing_system7_0_ENET0_MDIO_pin) );
-
Дело в том, что я хочу забиндить порты на плисину.
-
Плата ZedBoard rev.D, ZYNQ. Использую Xilinx ISE WebPack. Прикрутил tri mode ethernet mac v5.4 example designe. Synthesize - XST прошел успешно. А вот на создании ucf файла следующая проблема. Не могу подсоединить выводы проэкта к банку где находятся выводы на phy. Bank 501 PS_MIO. Как открыть разрешение на этот банк, чтобы присоединиться к phy ? Что-то такое пишет: Could not legally place instance rgmii_txd_0_OBUF at IOPAD_X1Y94 since it belongs to a shape containing instance trimac_fifo_block/trimac_block/rgmii_interface/txdata_out_bus[0].rgmii_txd_out. The shape requires relative placement between rgmii_txd_0_OBUF and trimac_fifo_block/trimac_block/rgmii_interface/txdata_out_bus[0].rgmii_txd_out that cannnot be honored because it would result in an invalid location for trimac_fifo_block/trimac_block/rgmii_interface/txdata_out_bus[0].rgmii_txd_out.
-
В случае MII на 100mb интерфейса TXD[3... 0]: Transmit Data — выдается синхронно относительно TX_CLK. А сам TX_CLK: Transmit Clock. Вырабатывается в трансивере и передается в МАС. А как происходит в случае интерфейса RGMII ? Там наоборот? Сам MAC подает синхронно клок GTX с данными TXD[3... 0] ?
-
Может кто-нибудь сталкивался со следующей проблемой?: Если я подтягиваю выводы данных, на ножки phy при помощи команды PULLUP в ucf файле, то у MAC на выходе нету данных которые я на вход пускаю. А если просто "биндю" на ножки (без PULLUP) то MAC выдает данные и дальше они на phy идут. Вот только phy, видимо, без PULLUP не работает.
-
Что за временные ограничения ? Клок пробовал двигать относительно данных конфигурируя регистр - без результатно. А phy у меня в ресете при включении некоторое время.
-
т.е. вот так? [8'h40,8'h00]
-
У меня все так и сделано и MAC все добавляет. Я уже об этом писал. При подключении диоды мигают, а на wireshark следующее: Интерфейс у меня RGMII. В настройке phy на 100% я НЕ уверен, т.к. на 100% не понимаю какой регистр кофигурировать и как правильно это делать. Пробовал и не конфигурируя phy(т.к. где-то вычитал, что конфигурировать не обязательно) и конфигурируя 0-ой регистр control (там я указал скорость передачи и full дуплексный мод). У меня AR8035 AR8035.pdf Я работаю со Spartan-ом 6-ым XC6SLX100
-
подкиньте ресурс, где можно былобы почитать о всех этих хеадерах и чексуммах
-
У меня преамбулу добавляет сама корка мака gosu-art, мне это уже понятно. Теперь не понятно какими данными заполнять : logic [7:0] ip_hdr_ver_hlen; // version - 4 bits; IP hdr len - 4 bits // IPv4 with 20 byte header 0x45 logic [7:0] ip_hdr_tos; // Type of service logic [7:0] ip_hdr_tlen[1:0]; // Size of datagram (header + data) logic [7:0] ip_hdr_id[1:0]; // together with sa, uniequly identifies pkt logic [7:0] ip_hdr_frag_off[1:0]; // flags - 3 bits; fragment offset - 13 bits logic [7:0] ip_hdr_ttl; // time to live logic [7:0] ip_hdr_proto; // protocol UDP_PROTO 0x11 logic [7:0] ip_hdr_csum[1:0]; // header checksum откуда они берутся, в частности вот этот длинный header, как считать checksum и тд И вообще может быть есть у xilinx-а готовые корки на ip/udp, чтобы делали все сами, а я только дату пихал?
-
Я бы и прописал руками, вот только куда? Я так понимаю если в ethernet frame добавлять arp то и будет куда прописать ip.
-
Ага, значит без arp не обойтись. Есть ли дока подробная? Буду разбераться куда его в ethernet frame вставлять и вообще что с ним делать
-
C этим модом тоже самое
-
Что за мод? Где включается? Я на линуксе
-
Всем привет! Мой проект (MAC + Phy) настроен только на отправку пакетов. (никакие ответные я не принимаю и не обрабатываю), также нигде не указываю ip адреса, только маки Отправляю обычный ethernet пакет (со всеми преамбулами, контрольными суммами и т.д.) c указанием DA (мак компа),SA(мак плис),L/T(длина полез данных) и DATA(сами данные) Сам фрейм проверен и соответствует стандарту. Значит, при присоединении напрямую плис к компу. Происходит несколько секунд установка соединения (диоды на eth плис одновременно мигают красный и оранжевый) и после этого, левый зеленый просто горит, а правый оранжевый начинает неистово моргать, а на wireshark-e вижу следующее: Пакеты не доходят? Что там за question? Вот и не понятно, что нужно сделать, чтобы паеты нормально пачками запихивались, а у меня останавливается все на MDNS "QM" question Заранее спасибо за советы.
-
Все так и делаю. MAC адрес приемника также пробовал и по широковещательному запросу (ff:ff:ff:ff:ff:ff). MAC на плис указал (1A:1B:1C:1D:1E:1F) Размер полезной информации, у меня, 64 байта (т.е. чуть больше минимально разрешенной). Размер полезной информации, который указывается в L/T 2byte, там так и прописать 64байта ? (т.е. 0040 ?) Всё остальное преамбулы и т.д. MAC добавляет и это уже поверенно.
-
Вообще как правильно ethernet frame отправлять, что в нем должно быть обязательно, чтобы он принялся любым устройством? Как в него добавить UDP ? В интернете второй день ищу, ничего полезного не нашел.
-
Появился вопрос для всех кто сталкивался. Я формирую ethernet frame с данными "на шару" и пытаюсь поймать их на wareshark-е. Буквально мой фрейм выглядит следующим образом: Preamble-SFD-DestinationMacAdd-SourceMacAdd-EthernetType[0800]-Data[01....01]-PAD-FCS Ключевой момент в следующем! Ethernet Type я указал 0800 это значит, что я идентифицирую протокол. Какой протокол? ipv4? Значит ли это, что я поле Data теперь должен как-то по особенному заполнять? Сейчас у меня просто 01010101....0101(60byte) Как мой фрейм должен выглядить, чтобы wireshark поймал "любой" фрейм. Мне кажется, что он сейчас мои покеты просто отбрасывает. Или может быть, есть какая-нибудь строчка в linux-е прописав которую wireshark начнет все пропускать?=) Спасибо!
-
В данный момент на wareshark-е я вижу Broadcast ARP пакеты, а лампочка постоянно мигает желтым цветом (на ethernet-е плис)
-
Нужна помощь в конфигурировании phy через mdio. Как настроить AR8035 AR8035.pdf чтобы данные которые я подаю на tx появились на выходе (можно было бы например осциллографом посмотреть на витой паре ну или на wireshark) На tx я отправляю ethernet frame IEEE Std 802.3-2008 И в данный момент я не конфигурировал ни один регистр, стало быть, раз на выходе нет данных зничит какой-то регистр/ы надо сконфигурировать. Не понимаю какими играться надо. p.s. состояния регистров читаю успешно.
