zombi 0 Posted July 24, 2020 · Report post ? вот так описал. Гляньте пжл правильно ли? module decode (input [14:12] D,input [7:0] S, output reg [7:0] R); always @* R = &D ? S : {5'h0,D}; endmodule Quote Ответить с цитированием Share this post Link to post Share on other sites
RadiatoR 0 Posted July 24, 2020 · Report post Я новичек в фпга. Я бы сделал почти то же самое: module Decode (input wire [7 : 0] S, input wire [14 : 12] D, output wire [7 : 0] R); assign R = &D ? S : {5'b0, D}; endmodule Quote Ответить с цитированием Share this post Link to post Share on other sites
zombi 0 Posted July 24, 2020 · Report post 1 hour ago, RadiatoR said: Я новичек в фпга. Аналогично. Ох уж и странный этот верилох, хош так пиши хош эдак! Просто прелесть! Quote Ответить с цитированием Share this post Link to post Share on other sites
new123 0 Posted July 25, 2020 · Report post А она в верилог не сохраняется? Quote Ответить с цитированием Share this post Link to post Share on other sites
zombi 0 Posted July 25, 2020 · Report post Кто она, схема? Понятия не имею как это сделать. А в RTL вьювере можно посмотреть во что её компилятор превращает. По два AND и одному OR для каждого выходного бита. Писать такое на верилоге как-то не комильфо. Вот и поинтересовался у знатоков как лаконичнее записать. Кстати, в RTL код на верилоге выглядит по другому, а работает и то и то одинаково. Quote Ответить с цитированием Share this post Link to post Share on other sites
dimka76 0 Posted July 25, 2020 · Report post 2 minutes ago, zombi said: Кто она, схема? Понятия не имею как это сделать. Поищите, в Квартусе точно есть такая функция. Эту вашу схему надо сделать как блок и уже блок конвертируется в HDL. Quote Ответить с цитированием Share this post Link to post Share on other sites
zombi 0 Posted July 25, 2020 · Report post Агааа... Сделать эту схему отдельным файлом .bdf и уже его конвертировать в верилог. Понял. Спасибо. Вот, конвертировал module Block1( D, S, R ); input wire [14:12] D; input wire [7:0] S; output wire [7:0] R; wire 0; wire SYNTHESIZED_WIRE_0; wire [7:0] GDFX_TEMP_SIGNAL_0; assign GDFX_TEMP_SIGNAL_0 = {0,0,0,0,0,D[14:12]}; assign SYNTHESIZED_WIRE_0 = D[14] & D[13] & D[12]; lpm_mux0 b2v_inst1( .sel(SYNTHESIZED_WIRE_0), .data0x(GDFX_TEMP_SIGNAL_0), .data1x(S), .result(R)); endmodule Quote Ответить с цитированием Share this post Link to post Share on other sites
Yuri124 0 Posted July 27, 2020 (edited) · Report post On 7/24/2020 at 9:50 PM, zombi said: always @* R = &D ? S : {5'h0,D}; Без always, простым ? описывается мультиплексор: r = (& d [14:12]) ? s : {5'b0, d[14:12]}; где wire [7:0] s, r; // или reg [7:0] s; Если описывать каждый мультиплексор в отдельном модуле, так можно и запутаться - что же в конце концов делает всё устройство :) Edited July 27, 2020 by Yuri124 Quote Ответить с цитированием Share this post Link to post Share on other sites
Sergey_Bekrenyov 0 Posted July 27, 2020 · Report post Можно еще короче. r = (& d [14:12]) ? s : 8'h07; Quote Ответить с цитированием Share this post Link to post Share on other sites
RadiatoR 0 Posted July 28, 2020 · Report post А в чем смысл в данном случае указывать диапазон? r = (& d [14:12]) ? s : 8'h07; Quote Ответить с цитированием Share this post Link to post Share on other sites
Sergey_Bekrenyov 0 Posted July 28, 2020 · Report post 1 hour ago, RadiatoR said: А в чем смысл в данном случае указывать диапазон? r = (& d [14:12]) ? s : 8'h07; Нету смысла. Так же как и в исходной схеме. Upd! r = (& d [14:12]) ? d[14:12] : s; Quote Ответить с цитированием Share this post Link to post Share on other sites
zombi 0 Posted July 28, 2020 · Report post 9 hours ago, Sergey_Bekrenyov said: Можно еще короче. r = (& d [14:12]) ? s : 8'h7; Э нет. Так не пойдёт. Если не все разряды D в единице, то в младших разрядах R должно быть D, а не 7 ! Quote Ответить с цитированием Share this post Link to post Share on other sites
Nick_K 0 Posted July 28, 2020 · Report post 8 minutes ago, zombi said: А еще короче? Можно записать всё в один рядок. Тогда присутствующая нечитабельность взлетит на невероятные высоты! Quote Ответить с цитированием Share this post Link to post Share on other sites
zombi 0 Posted July 28, 2020 · Report post Поменял своё мнение, см выше Quote Ответить с цитированием Share this post Link to post Share on other sites
RadiatoR 0 Posted July 28, 2020 · Report post 12 minutes ago, zombi said: Э нет. Так не пойдёт. Если не все разряды D в единице, то в младших разрядах R должно быть D, а не 7 ! В этом случае AND не сработает и на выходе будет S Quote Ответить с цитированием Share this post Link to post Share on other sites