Jump to content

    

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

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

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now