Перейти к содержанию

lkg47

Участник
  • Публикаций

    35
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о lkg47

  • Звание
    Участник

Посетители профиля

975 просмотров профиля
  1. Здравствуйте, Источник сигнала с логикой CML, имеющий емкостную развязку (SFP модуль), подключен к плате, от которой проложена линия ~ 40см экранированной витой пары до приемника - LVDS CycloneV с включенным терминатором (не XCVR вход). Частоты ~ 400МГц На стороне приемника нет возможности установить смещение резисторами. Планирую выполнить подтягивание линии P через 16,9k к 3.3V и 10к к GND на стороне источника (рядом с разъемом SFP модуля). Имеет ли данный подход какие-либо недостатки?
  2. Цитатаа import package_name::enum_name::* не работает? Нет, не работает: Цитатаpackage_for_fsm.sv(56): near "::": syntax error, unexpected ::, expecting ';' or ',' Код`timescale 1ns / 1ps module top         (         ); //===========================================/ //GEN //===========================================/ logic clk = 'b0; always #10 clk = ~clk; //===========================================/ //TEST UNIT //===========================================/ logic [7:0] out; m1 m1_inst(     .clk(clk),     .out(out)         );   endmodule //===========================================/ //PACKAGE //===========================================/ package pck; typedef enum int unsigned {     a,     b,     c     } state_t; endpackage //===========================================/ //TEST_MODULE //===========================================/ module m1     import //   pck:: state_t,     pck:: state_t::*;      /*     pck:: a, //как исключить эту запись?     pck:: b, //как исключить эту запись?     pck:: c; //как исключить эту запись? */     (     input logic clk,     output logic [7:0] out = 'b0     ); state_t state; always_ff@(posedge clk)     begin     case (state)         a:             begin             state <= b;             out <= "A";             end         b:             begin             state <= c;             out <= "B";             end         c:             begin             state <= a;             out <= "C";             end         default:             begin             state <= a;             out <= "D";             end         endcase     end endmodule
  3. видимо это сделать не возможно, решил пойти путем создания нескольких независимых package с полным импортом через "import package_name::*;"
  4. Здравствуйте, подскажите пожалуйста: Возможно ли импортировать из package(Systemverilog) список состояний enum одним разом? Кодpackage pck; enum int unsigned {     a,     b,     c     } state_t; endpackage module m1     import     pck:: state_t,     pck:: a, //как исключить эту запись?     pck:: b, //как исключить эту запись?     pck:: c; //как исключить эту запись?     (     input logic clk     ); state_t state; always_ff@(posedge clk)     begin     case (state)         a:out <= "A";         b:out <= "B";         c:out <= "C";         default: out <= "D";         endcase     end endmodule Причина: можно использовать запись в виде "import:*;" но в этом случае если модуль большой то не сразу понятно какие параметры задействованы, поэтому хотелось бы импортировать поименно, но с enum выходит вышеуказанная проблема.
  5. Здравствуйте, Прошу помочь: Правильно ли утверждение: если создать одну шину данных,направленную в сторону мастера, и адресную шину, далее соединить шину данных слейвов с мастером напрямую (без применения явного описания мультиплексора по адресам), то компилятор сам формирует мультиплексор? допустим: создаем модуль мастера, перебирающий адреса,создаем слейв, комбинационной логикой мультиплексируем по адресу выходную шину, но если реализовывать слейв следующими способами результаты получаются разными: реализация слейва через интерфейс: 1.мультиплексирование данных по адресу: modelsim - ошибка Цитатаdriven in a combinatorial block, may not be driven by any other process. quartus - полная компиляция выполненяется 2.с отдельным процессом мультиплексирования шины по адресу внутри слейва: modelsim - ошибка Цитатаdriven in a combinatorial block, may not be driven by any other process. quartus - полная компиляция выполненяется реализация слева без интерфейса - портами: 1.мультиплексирование данных по адресу: modelsim - моделирование выполняется с ошибкой передачи шины по одному адресу из четырех [attachment=110207:without_...rect_mux.png] quartus - полная компиляция выполненяется 2.с отдельным процессом мультиплексирования шины по адресу внутри слейва: modelsim - моделирование выполняется без ошибок quartus - полная компиляция выполненяется С чем связаны различные варианты результатов? Как правильно реализовать чтение из множества ведомых модулей по адресу? Код`timescale 1ns / 1ps `define COMB;//COMB or REG module tb();     //===========================================/     //GEN     //===========================================/     logic clk = 'b0;     logic [31:0] data;     always #10 clk <= ~clk;     multi_slave multi_slave_inst(         .*         ); endmodule module multi_slave         (         input logic clk,         output logic [31:0] data         );     logic [31:0] readdata;     logic [7:0] addr;                       master master_inst(         .*         );     slave_1 slave_1_inst(         .*         );     slave_2 slave_2_inst(         .*         );      endmodule module master         (         input logic [31:0] readdata,         input logic clk,         output logic [7:0] addr,         output logic [31:0] data         );     enum int unsigned {         ONE,         TWO,         THREE,         FOUR         } st;     logic delay = 'b0;     always_ff@(posedge clk)         begin         case (st)             ONE:                 begin                 addr <= 1;                 st <= TWO;                 end             TWO:                 begin                 addr <= 2;                 st <= THREE;                 end             THREE:                 begin                 addr <= 3;                 st <= FOUR;                 end             FOUR:                 begin                 addr <= 4;                 st <= ONE;                 end                             default:                 begin                 st <= ONE;                 delay <= 1'b0;                 addr <= 1;                 end             endcase         end              logic [64:0] sreg = 'b0;          always_ff@(posedge clk) sreg <= {sreg[31:0],readdata};     assign data[31:0] = sreg[63:32]; endmodule /*****************COMB*******************/ `ifdef COMB module slave_1         (         input logic clk,         input logic [7:0] addr,         output logic [31:0] readdata         );     logic [31:0] readdata_s1;     always_comb         begin         case(addr)             8'd1: readdata = readdata_s1;             8'd2: readdata = readdata_s1;             default: readdata = 'bZ;             endcase         end     always_comb         begin         case(addr)             8'd1: readdata_s1 = "S1_1";             8'd2: readdata_s1 = "S1_2";              default: readdata_s1 = 'bZ;             endcase         end endmodule module slave_2         (         input logic clk,         input logic [7:0] addr,         output logic [31:0] readdata         );     logic [31:0] readdata_s2;     always_comb         begin         case(addr)             8'd3: readdata = readdata_s2;             8'd4: readdata = readdata_s2;              default: readdata = 'bZ;             endcase         end     always_comb         begin         case(addr)             8'd3: readdata_s2 = "S2_3";             8'd4: readdata_s2 = "S2_4";              default: readdata_s2 = 'bZ;             endcase         end endmodule
  6. получилось использовать две задержки с одного IOE(на железе не проверял, но полагаю должно работать): 1. задаю в assigment editor разные задержки для входного пина: [attachment=108452:assigmen...itor_2dt.png] 2. получаю в chip planner задействованных два блока задержки: [attachment=108453:IOE_2dt_out.png] 3. в TimeQuest проверяю пути: [attachment=108454:TQ_delay0.png] [attachment=108455:TQ_delay1.png] при изменении параметра задержки в assigment editor -е задержки пути соответственно изменяются Код`timescale 1ns / 1ps module ioe_delay_both         (         input logic a,         input logic clk,         output logic c,         output logic c1         ); //===========================================/ // //===========================================/ logic a0; lcell delay0_a(     .in(a),     .out(a0)     ); logic a1; lcell delay1_a(     .in(a),     .out(a1)     );          logic [3:0] cnt = 'b0;     always_ff@(posedge clk)     begin     if(a0) cnt <= cnt + 1'b1;     c <= cnt[3];     end logic [3:0] cnt1 = 'b0;     always_ff@(posedge clk)     begin     if(a1) cnt1 <= cnt1 + 1'b1;     c1 <= cnt1[3];     end               endmodule
  7. Всем привет! Возможно ли на Cyclone IV E реализовать входной элемент IOE так, чтобы забирать с него например и задержанный и прямой и с регистра сигналы?
  8. Цитата(Golikov A. @ Jul 25 2017, 15:53) А потом, если вы уверены что превышения разрядности быть не может, при использовании из него можно брать WIDTH младших бит, или объявить еще 1 параметр в который перенести WIDTH младших бит получается вот так, но слишком громоздко: Кодparameter m = 640; parameter WIDTH = $clog2(m); parameter a = WIDTH'(192); parameter b = WIDTH'(320); parameter c_sub = (WIDTH + 1)'(a + b); parameter c = c_sub[WIDTH - 1:0];
  9. Здравствуйте! подскажите пожалуйста: каким образом правильно сказать квартусу о том, что у меня не будет превышения значения параметра после суммирования? systemverilog Цитатаparameter m = 640; parameter WIDTH = $clog2(m); parameter a = WIDTH'(192); parameter b = WIDTH'(320); parameter c = WIDTH'(a + b );
  10. при попытке синтезировать код описанный выше Quartus выдает следующее сообщение: ЦитатаError (10170): Verilog HDL syntax error at interface.sv(27) near text "interface"; expecting "endmodule" в литературе по SV не нашел примеров с объявлением интерфейса внутри модуля. пока вижу только один выход: -описывать интерфейсы в каждом из топ модулей, при этом выполнять проверку директивы для исключения повторного чтения Код`ifndef def_interface_bus_a `define def_interface_bus_a interface bus_a (input logic reset);       logic clk;       endinterface `endif -отличающиеся порты подключать отдельно наткнулся здесь на форуме на перевод стандарта по интерфейсам, может кому-нибудь пригодится : IEEE Standard for SystemVerilog—Unified Hardware Design,Specification, and Verification Language(Неофициальный перевод)IEEE SV Interface (неофициальный перевод)
  11. Такая же проблема, может нынче кто-нибудь решил этот вопрос? у меня, при тех же настройках что у ТС, byte-ordering работает только с обычными данными (без "comma symbols"), возможно так и должно быть судя по тому где расположен блок byte-ordering, однако это неудобно, т.к. приходится посылать перед byte-ordering символом comma symbol для его предварительного запуска. настройки native Cyclone V PHY: manual byte ordering, управление по линии rx_std_byteorder_ena_port
  12. Цитата(Fitc @ Apr 30 2017, 04:09) я ошибочно полагал, что интерфейс может быть только за модулями, видимо по причине привычки называть инстанс одноименно модулю(в этом случае компилятор ругается созданный экземпляр) в пример добавил общий для всех модуль в итоге: Код////////////TB//////////////     module tb(); logic reset = 'b0;     top1 m1(         .reset(reset)         );     top2 m2(         .reset(reset)         );     endmodule ////////////TOP1////////////////////     module top1(input logic reset);   interface bus_a(input logic reset);       logic clk;       logic clk_b;       endinterface              bus_a bus_a_instance(.reset(reset));     m1_1 m1_1(.bus_a(bus_a_instance));     gen gen_instance(.bus_a(bus_a_instance));          endmodule      /////////////TOP2///////////////// module top2(input logic reset);   interface bus_a(input logic reset);       logic clk;       logic clk_a;       endinterface     bus_a bus_a_instance(.reset(reset));     m2_1 m2_1(.bus_a(bus_a_instance));     gen gen_instance(.bus_a(bus_a_instance));          endmodule ////////////подмодуль TOP1//////////// module m1_1(bus_a bus_a);     logic m1_1_clk = 'b0;     assign bus_a.clk = m1_1_clk;     assign bus_a.clk_b = ~ m1_1_clk;     always #10 m1_1_clk <= ~m1_1_clk;     endmodule ////////////подмодуль TOP2//////////// module m2_1 (bus_a bus_a);     logic m2_1_clk = 'b0;     assign bus_a.clk = m2_1_clk;     assign bus_a.clk_a = ~ m2_1_clk;     always #20 m2_1_clk <= ~m2_1_clk;     endmodule //////////общий модуль///////////// module gen(bus_a bus_a);     endmodule Спасибо за помощь!
  13. ЦитатаНе очень понятно где вы создали инстанс интерфейса, то есть вы его описали - здорово, а где сам интерфейс то создается, где его экземпляр? экземпляр: Код bus_a bus_a(.reset(reset)); ЦитатаНе очень понятно зачем называть одинаково разные интерфейсы? есть два проекта которых необходимо объединить в тестбенче. В Топ модулях проектов используются одинаковые подмодули, в которых используются одинаковые интерфейсы, если я задам в одном из Топ модулей имя интерфейса другим то он не будет стыковаться с его внутренним подмодулем использующим стандартный интерфейс. например так: создаю экземпляр: Кодbus_a bus_X(.reset(reset)); подключаю подмодуль: Кодm2_1 m2_1(.bus_a(bus_X)); в подмодуле имею объявление порта: Кодmodule m2_1(bus_a bus_a) получаю ошибку о не соответствии интерфейсов: ЦитатаModelsim:The interface port 'bus_a' of type 'bus_a' must be passed the same-type interface. Сейчас попробовал использовать объявление интерфейса в подмодуле таким путем: Кодmodule m2_1(interface bus_a) ошибок нет, все работает; Но теперь, судя по Вашей реакции создается впечатление, что я как то неверно использую интерфейсы. Подскажите, как Вы используете интерфейсы в этих случаях, т.е. когда надо объединять несколько топ модулей в тестбенче? или одинаковые интерфейсы Вы не применяете? Цитата(Fitc @ Apr 29 2017, 04:02) Не надо определять в одной области видимости интерфейсы с одинаковыми именами. Modelsim сначала распознал первый интерфейс bus_a, встретив второй интерфейс с тем же именем, он переопределил интерфейс bus_a. Если в разделе "TOP 1" везде поменять bus_a на bus_b все успешно скомпилится и запустится Подскажите пожалуйста, как определять в интерфейсы в разных областях видимости?
  14. Здравствуйте, Прошу помочь с такой проблемой: Имеется два toplvl модуля, с некоторыми одинаковыми подмодулями связываемыми интерфейсами. Интерфейсы в основном имеют одинаковые порты, но есть и отличающиеся. Код////////////TB//////////////     module tb(); logic reset = 'b0;     m1 m1(         .reset(reset)         );     m2 m2(         .reset(reset)         );     endmodule ////////////TOP1////////////////////     interface bus_a(input logic reset);     logic clk;     logic clk_b;     endinterface          module m1(input logic reset);     bus_a bus_a(.reset(reset));     m1_1 m1_1(.bus_a(bus_a));     endmodule      module m1_1(bus_a bus_a);     logic m1_1_clk = 'b0;     assign bus_a.clk = m1_1_clk;     assign bus_a.clk_b = ~ m1_1_clk;     always #10 m1_1_clk <= ~m1_1_clk;     endmodule      /////////////TOP2///////////////// interface bus_a(input logic reset);     logic clk;     logic clk_a;     endinterface      module m2(input logic reset);     bus_a bus_a(.reset(reset));     m2_1 m2_1(.bus_a(bus_a));     endmodule module m2_1(bus_a bus_a);     logic m2_1_clk = 'b0;     assign bus_a.clk = m2_1_clk;     assign bus_a.clk_a = ~ m2_1_clk;     always #20 m2_1_clk <= ~m2_1_clk;     endmodule     //////////////////////////////// ошибка в modelsim:Цитата[CNNODP] - Component name (clk_b) is not on a downward path. Unresolved reference to 'clk_b' in bus_a.clk_b. Можно создать одинаковые интерфейсы, где порты будут одинаковыми для TOP1 и для TOP2, но разве это правильное решение?
  15. Добрый день! Использую плату Terasic C5G с ПЛИС 5GXFC5C6F27C7, QuartusII_15.0, В ходе проверки работы встроенных трансиверов столкнулся с следующей проблемой: Triple-speed ethernet Altera не проходит проверку тестовой записи в MAC контроллер(в Modelsim все работает), решил проверить тактовый вход: Имеются счетчики для мигания светодиодом, которые тактируются подключенными к тактовому входу трансивера частотами 125МГц(LVDS) и 156.25МГц(LVDS), результат: не мигает. Вставляю в проект модуль PLL, подключаю refclk к другому источнику (50МГц) не связанному с трансиверами, выход (333МГц) не подключаю результат: мигает. В чем может быть причина?