RobFPGA 27 9 сентября, 2019 Опубликовано 9 сентября, 2019 · Жалоба Приветствую! 2 hours ago, dxp said: Квеста 10.7с выдаёт ошибку, что де объект 'slon' используемый в одном процедурном блоке, используется в другом. А ошибка при компиляции или при синтезе? Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 32 10 сентября, 2019 Опубликовано 10 сентября, 2019 · Жалоба На симе (квеста же). На vopt. vlog проходит нормально, а на сборке vopt'ом выдаёт ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 10 сентября, 2019 Опубликовано 10 сентября, 2019 · Жалоба 17 hours ago, dxp said: а структура - это просто агрегатный тип. Она же не пакованная. Единственное, гложет сомнение - может я всё-таки что-то делаю не так? Если да, поправьте. Есть такое, для себя я просто запомнил что структура это полноценный тип) и использую их не часто. Я предпочитаю старый стиль, пусть и писать/генерировать много больше. Зато большую часть моего кода, можно легко под чистый верилог перенести) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 32 10 сентября, 2019 Опубликовано 10 сентября, 2019 · Жалоба 5 часов назад, des00 сказал: просто запомнил что структура это полноценный тип Против этого такой аргумент: использование объекта структуры в разных блоках, если задействуются разные поля структуры, не возбраняется. Более того, даже можно обращаться к массиву структур точно так же в разных блоках (если нет пересечения по членам структуры), но только в том случае, если индекс указан явно числом. Если переменная - например, переменная цикла, то всё - ошибка. Казалось бы, какая разница - индексация по переменной не нарушает принципа "один объект, у которого data type == var, можно драйвить только из одного блока" (объектом внимания является член структуры, а сама структура - это просто синтаксическое объединение, чисто для удобства кодирования, это ведь не целостный неделимый объект, каким она была бы в случае пакованной), но нет. Думается, что это косяк квесты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 10 сентября, 2019 Опубликовано 10 сентября, 2019 · Жалоба 1 hour ago, dxp said: . Думается, что это косяк квесты. Да и скорее всего плавающий, от версии к версии. Все зависит от того, как очередной программист понял стандарт) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 12 сентября, 2019 Опубликовано 12 сентября, 2019 · Жалоба On 8/15/2019 at 5:25 PM, RobFPGA said: `define AXI4_SLAVE_IF_MAP(sel, pname, ifname)\ if ((sel)) begin : g_map_``pname \ assign ifname``.awaddr = pname``_awaddr; \ ... assign pname``_awready = ifname``.awready; \ end \ else begin : g_skip_``pname \ assign pname``_awready = 1'b1; \ ... assign pname``_rdata = 'x; \ end А можно ли в интерфейс, к примеру, выходного порта (out) присваивать значение входного порта (input). Вроде как всё сделал, как подсказали и проект собирается как положено, но Цинк упорно не хочет читать с этих интерфейсов... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 12 сентября, 2019 Опубликовано 12 сентября, 2019 · Жалоба Приветствую! 1 hour ago, Nick_K said: А можно ли в интерфейс, к примеру, выходного порта (out) присваивать значение входного порта (input). Не понятен вопрос, свой примерчик приведите - а то перед обедом манна телепатии на нуле . Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 12 сентября, 2019 Опубликовано 12 сентября, 2019 · Жалоба 6 minutes ago, RobFPGA said: Не понятен вопрос, свой примерчик приведите - а то перед обедом манна телепатии на нуле . Я сделал как посоветовали, только порты прописал с направлением. Получилась такая штука: Quote `define AXI4_PORT_SLAVE(name_num) \ input wire [11 : 0] s_axi_``name_num``_s_axi_awaddr,\ input wire [7 : 0] s_axi_``name_num``_s_axi_awlen, \ input wire [2 : 0] s_axi_``name_num``_s_axi_awsize, \ input wire [1 : 0] s_axi_``name_num``_s_axi_awburst,\ input wire s_axi_``name_num``_s_axi_awlock, \ input wire [3 : 0] s_axi_``name_num``_s_axi_awcache,\ input wire [2 : 0] s_axi_``name_num``_s_axi_awprot, \ input wire s_axi_``name_num``_s_axi_awvalid, \ output wire s_axi_``name_num``_s_axi_awready, \ input wire [31 : 0] s_axi_``name_num``_s_axi_wdata, \ input wire [3 : 0] s_axi_``name_num``_s_axi_wstrb, \ input wire s_axi_``name_num``_s_axi_wlast, \ input wire s_axi_``name_num``_s_axi_wvalid, \ output wire s_axi_``name_num``_s_axi_wready, \ output wire [1 : 0] s_axi_``name_num``_s_axi_bresp, \ output wire s_axi_``name_num``_s_axi_bvalid, \ input wire s_axi_``name_num``_s_axi_bready, \ input wire [11 : 0] s_axi_``name_num``_s_axi_araddr,\ input wire [7 : 0] s_axi_``name_num``_s_axi_arlen, \ input wire [2 : 0] s_axi_``name_num``_s_axi_arsize, \ input wire [1 : 0] s_axi_``name_num``_s_axi_arburst,\ input wire s_axi_``name_num``_s_axi_arlock, \ input wire [3 : 0] s_axi_``name_num``_s_axi_arcache,\ input wire [2 : 0] s_axi_``name_num``_s_axi_arprot, \ input wire s_axi_``name_num``_s_axi_arvalid, \ output wire s_axi_``name_num``_s_axi_arready, \ output wire [31 : 0] s_axi_``name_num``_s_axi_rdata,\ output wire [1 : 0] s_axi_``name_num``_s_axi_rresp, \ output wire s_axi_``name_num``_s_axi_rlast, \ output wire s_axi_``name_num``_s_axi_rvalid, \ input wire s_axi_``name_num``_s_axi_rready `define AXI4_SLAVE_IF_MAP(sel, pname, ifname) \ if ((sel)) begin : g_map_``pname \ assign ifname``.s_axi_awaddr = s_axi_``pname``_s_axi_awaddr; \ assign ifname``.s_axi_awlen = s_axi_``pname``_s_axi_awlen; \ assign ifname``.s_axi_awsize = s_axi_``pname``_s_axi_awsize; \ assign ifname``.s_axi_awburst = s_axi_``pname``_s_axi_awburst; \ assign ifname``.s_axi_awlock = s_axi_``pname``_s_axi_awlock; \ assign ifname``.s_axi_awcache = s_axi_``pname``_s_axi_awcache; \ assign ifname``.s_axi_awprot = s_axi_``pname``_s_axi_awprot; \ assign ifname``.s_axi_awvalid = s_axi_``pname``_s_axi_awvalid; \ assign ifname``.s_axi_awready = s_axi_``pname``_s_axi_awready; \ assign ifname``.s_axi_wdata = s_axi_``pname``_s_axi_wdata; \ assign ifname``.s_axi_wstrb = s_axi_``pname``_s_axi_wstrb; \ assign ifname``.s_axi_wlast = s_axi_``pname``_s_axi_wlast; \ assign ifname``.s_axi_wvalid = s_axi_``pname``_s_axi_wvalid; \ assign ifname``.s_axi_wready = s_axi_``pname``_s_axi_wready; \ assign ifname``.s_axi_bresp = s_axi_``pname``_s_axi_bresp; \ assign ifname``.s_axi_bvalid = s_axi_``pname``_s_axi_bvalid; \ assign ifname``.s_axi_bready = s_axi_``pname``_s_axi_bready; \ assign ifname``.s_axi_araddr = s_axi_``pname``_s_axi_araddr; \ assign ifname``.s_axi_arlen = s_axi_``pname``_s_axi_arlen; \ assign ifname``.s_axi_arsize = s_axi_``pname``_s_axi_arsize; \ assign ifname``.s_axi_arburst = s_axi_``pname``_s_axi_arburst; \ assign ifname``.s_axi_arlock = s_axi_``pname``_s_axi_arlock; \ assign ifname``.s_axi_arcache = s_axi_``pname``_s_axi_arcache; \ assign ifname``.s_axi_arprot = s_axi_``pname``_s_axi_arprot; \ assign ifname``.s_axi_arvalid = s_axi_``pname``_s_axi_arvalid; \ assign ifname``.s_axi_arready = s_axi_``pname``_s_axi_arready; \ assign ifname``.s_axi_rdata = s_axi_``pname``_s_axi_rdata; \ assign ifname``.s_axi_rresp = s_axi_``pname``_s_axi_rresp; \ assign ifname``.s_axi_rlast = s_axi_``pname``_s_axi_rlast; \ assign ifname``.s_axi_rvalid = s_axi_``pname``_s_axi_rvalid; \ assign ifname``.s_axi_rready = s_axi_``pname``_s_axi_rready; \ end \ else begin : g_skip_``pname \ assign ifname``.s_axi_awaddr = 'x; \ assign ifname``.s_axi_awlen = 'x; \ assign ifname``.s_axi_awsize = 'x; \ assign ifname``.s_axi_awburst = 'x; \ assign ifname``.s_axi_awlock = 'x; \ assign ifname``.s_axi_awcache = 'x; \ assign ifname``.s_axi_awprot = 'x; \ assign ifname``.s_axi_awvalid = 'x; \ assign ifname``.s_axi_awready = 'x; \ assign ifname``.s_axi_wdata = 'x; \ assign ifname``.s_axi_wstrb = 'x; \ assign ifname``.s_axi_wlast = 'x; \ assign ifname``.s_axi_wvalid = 'x; \ assign ifname``.s_axi_wready = 'x; \ assign ifname``.s_axi_bresp = 'x; \ assign ifname``.s_axi_bvalid = 'x; \ assign ifname``.s_axi_bready = 'x; \ assign ifname``.s_axi_araddr = 'x; \ assign ifname``.s_axi_arlen = 'x; \ assign ifname``.s_axi_arsize = 'x; \ assign ifname``.s_axi_arburst = 'x; \ assign ifname``.s_axi_arlock = 'x; \ assign ifname``.s_axi_arcache = 'x; \ assign ifname``.s_axi_arprot = 'x; \ assign ifname``.s_axi_arvalid = 'x; \ assign ifname``.s_axi_arready = 'x; \ assign ifname``.s_axi_rdata = 'x; \ assign ifname``.s_axi_rresp = 'x; \ assign ifname``.s_axi_rlast = 'x; \ assign ifname``.s_axi_rvalid = 'x; \ assign ifname``.s_axi_rready = 'x; \ end Всё бы хорошо и подмена через макрос вида: assign s_axi4[0].s_axi_awaddr = s_axi_0_s_axi_awaddr; выглядит логично (s_axi_awaddr - input). Но что если сделать так: assign s_axi4[0].s_axi_awready = s_axi_0_s_axi_awready; тогда как s_axi_awready - output? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 12 сентября, 2019 Опубликовано 12 сентября, 2019 · Жалоба Приветствую! 1 hour ago, Nick_K said: Но что если сделать так: assign s_axi4[0].s_axi_awready = s_axi_0_s_axi_awready; тогда как s_axi_awready - output? Quote `define AXI4_SLAVE_IF_MAP(sel, pname, ifname)\ if ((sel)) begin : g_map_``pname \ assign ifname``.awaddr = pname``_awaddr; \ ... assign pname``_awready = ifname``.awready; \ end \ Надо всего лишь быть внимательнее. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 12 сентября, 2019 Опубликовано 12 сентября, 2019 · Жалоба Приветствую! On 9/10/2019 at 3:22 AM, dxp said: На симе (квеста же). На vopt. vlog проходит нормально, а на сборке vopt'ом выдаёт ошибку. Это может лечится "vsim -suppress vsim-12003 ... " (ну или другой номер ошибки) Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 32 13 сентября, 2019 Опубликовано 13 сентября, 2019 · Жалоба 13 часов назад, RobFPGA сказал: Это может лечится "vsim -suppress vsim-12003 ... " Чёт как-то костыльно, имхо, и неизвестно, что скажет на это синтез (проверять особенно не хочется). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться