Jump to content

    
Sign in to follow this  
haker_fox

Какой язык, плис, среда?

Recommended Posts

15 минут назад, Nick_K сказал:

насколько порты, модпорты и регулярная логика, синтезируемы?

Выше написал, повторю: прекрасно синтезируются. Например, вот есть у меня проброс сигнала через AXI4-Stream интерфейс, в модулях это выглядит:

module master
    ...
(
   
    axis_if.master      tlp_data,
    ...
);

...
  
endmodule  
  
...
  
module slave
    ...
(
   
    axis_if.slave      tlp_data,
    ...
);

...
  
endmodule  
    
  

А сам интерфейс:

interface axis_if
    #(
        parameter   DATA_W    = 64,
        localparam  KEEP_W    = DATA_W/8
    )
(
);

logic              TVALID;
logic              TREADY;
logic [DATA_W-1:0] TDATA;
logic [KEEP_W-1:0] TKEEP;
logic              TLAST;

modport master    
(
    output TVALID,
    input  TREADY,
    output TDATA,
    output TKEEP,  
    output TLAST
);

modport slave
(
    input  TVALID,
    output TREADY,
    input  TDATA,
    input  TKEEP,
    input  TLAST
);

endinterface

 

Тут ничего хитрого нет, просто упаковали сигналы в один объект, а при использовании в списке портов - всего одна строчка. Но дальше интереснее - времянка в проекте оказалась напряжённой, и потребовалось вставить регистр в тракт следования этого сигнала. При этом оказалось, что достаточно доработать только сам интерфейс:

interface axis_if
    #(
        parameter   DATA_W    = 64,
        localparam  KEEP_W    = DATA_W/8
    )
(
    input logic ACLK,
    input logic ARESETn
);

//  objects
logic              TVALID;
logic              TREADY;
logic [DATA_W-1:0] TDATA;
logic [KEEP_W-1:0] TKEEP;
logic              TLAST;

logic [DATA_W-1:0] tdata;    
logic [KEEP_W-1:0] tkeep;
logic              tlast = 0;
logic              ready;  // ready to get data from input
logic              valid;  // valid data for output
logic              full = 0;
logic              wr_en;
logic              rd_en;

//  logic 
assign ready = !full || rd_en;
assign valid = full;

always_ff @(posedge ACLK) begin
    if(!full) begin
        if(wr_en) begin
            full <= 1;
        end
    end
    else begin
        if(!wr_en && rd_en) begin
            full <= 0;
        end
    end
end

always_ff @(posedge ACLK) begin
    if(wr_en && ready) begin  // input handshake
        tdata <= TDATA;
        tkeep <= TKEEP;
        tlast <= TLAST;
    end
end

//  modports
modport master    
(
    output .TVALID  ( wr_en ),
    input  .TREADY  ( ready ),
    output TDATA,
    output TKEEP,  
    output TLAST
);

modport slave
(
    input  .TVALID ( valid ),
    output .TREADY ( rd_en ),
    input  .TDATA  ( tdata ),
    input  .TKEEP  ( tkeep ),
    input  .TLAST  ( tlast )
);

endinterface

 

Всё остальное использование совершенно не изменилось. Наглядный пример инкапсуляции и абстракции (отделения интерфейса от реализации).

 

Замечательно синтезируется Vivado 2018.2.

Share this post


Link to post
Share on other sites
17 hours ago, dxp said:

Замечательно синтезируется Vivado 2018.2.

Спасибо огромное! меня просто наличие логики как раз несколько и смущало. Отдельная благодарность за пример!

Share this post


Link to post
Share on other sites

Это все очень красиво выглядит. Когда нужно соединить 50 блоков AXI-интерфейсами. Но если нужно подключить 300 портов трансивера к логическому ядру (оба - готовые модули, никаких интерфейсов, pure verilog), то жизнь поворачивается совсем другой стороной.

Share this post


Link to post
Share on other sites

Так речь про V или таки про SV?

 

Если возникает много такой рутинной работы, то хороший редактор и скрипты рулят. Только это к языкам отношения уже не имеет.

Share this post


Link to post
Share on other sites
Just now, dxp said:

Так речь про V или таки про SV?

 

Если возникает много такой рутинной работы, то хороший редактор и скрипты рулят. Только это к языкам отношения уже не имеет.

Это к вопросу зачем нужен .*

Share this post


Link to post
Share on other sites

Я понял. Возможно, это вопрос предпочтений. Лично я не доверяю этой автоматизации, предпочитаю, чтобы было явно. 

 

Ну, и справедливости ради, часто возникают такие задачи? Когда с подобным столкнулся (PCIe корка, где эн экранов список портов), просто написал обёртку вокруг этого модуля, внутри которой замапил нативные порты на сигналы интерфейсов, в итоге на прикладной уровень торчит всего четыре интерфейса (четыре строчки). Жизнь изрядно упростилась. 

Share this post


Link to post
Share on other sites
В 14.05.2019 в 15:58, RobFPGA сказал:

Это по началу - у меня тоже такой период был - а сейчас меня назад на ISE палкой не загонишь (только рублем :biggrin: ).   

А если не секрет где в Vivado старый добрый FPGA Editor?

Share this post


Link to post
Share on other sites
59 minutes ago, MegaVolt said:

А если не секрет где в Vivado старый добрый FPGA Editor?

Его там нет. Всё решается немного кривее в Implementation Design (для привыкших к эдитору). Но оно и вроде быстрее/красивее работает.

Share this post


Link to post
Share on other sites
6 минут назад, Nick_K сказал:

Его там нет. Всё решается немного кривее в Implementation Design (для привыкших к эдитору). Но оно и вроде быстрее/красивее работает.

Ну вот... я старый эдитор использовал как последнее слово когда нужно было понять в чём глюк  и как физически лёг сигнал  в плис. Эх...

Share this post


Link to post
Share on other sites
Just now, MegaVolt said:

Ну вот... я старый эдитор использовал как последнее слово когда нужно было понять в чём глюк  и как физически лёг сигнал  в плис. Эх...

Ааа. Так посмотреть что и куда - это осталось. и даже ИМХО удобнее и красивее. А вот эдитить неты и релокейтить стало просто непривычнее

Share this post


Link to post
Share on other sites
5 минут назад, Nick_K сказал:

Ааа. Так посмотреть что и куда - это осталось. и даже ИМХО удобнее и красивее. А вот эдитить неты и релокейтить стало просто непривычнее

А где если не секрет? Именно с путями чтобы было видно. 

Share this post


Link to post
Share on other sites

Приветствую!

1 minute ago, MegaVolt said:

А где если не секрет? Именно с путями чтобы было видно. 

Скрыт от шаловливых ручек под кнопкой  RoutingResorce  при просмотре Layout 

Удачи! Rob.

Share this post


Link to post
Share on other sites
5 минут назад, RobFPGA сказал:

Скрыт от шаловливых ручек под кнопкой  RoutingResorce  при просмотре Layout 

Бедные новички. Они даже не знаю что такое где то должно быть но спрятано :))))
Спасибо :)

Share this post


Link to post
Share on other sites
2 часа назад, lexx сказал:

Новички то как раз найдут это, а вот со стариками разговор уже будет на разных языках, возможны расхождения.

+1 Точно так - сразу нашёл в процессе знакомства с возможностями окна Device.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this