Pavia 0 17 июля, 2019 Опубликовано 17 июля, 2019 · Жалоба Смешивать в одном блоке блокирующее и неблокирующее присвоение не допускается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 17 июля, 2019 Опубликовано 17 июля, 2019 · Жалоба Приветствую! 5 minutes ago, Pavia said: Смешивать в одном блоке блокирующее и неблокирующее присвоение не допускается. Это более актуально для Verilog. А тут пример на VHDL . Да и фразу надо полную приводить "... для одной переменной ... не допускается" - А для разных переменных мешайте на здоровье (с пониманием того что делаете). Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 17 июля, 2019 Опубликовано 17 июля, 2019 · Жалоба 1 час назад, RobFPGA сказал: "... для одной переменной ... не допускается" Сам компилятор не даст вам прострелить ногу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 17 июля, 2019 Опубликовано 17 июля, 2019 · Жалоба Приветствую! 12 minutes ago, andrew_b said: Сам компилятор не даст вам прострелить ногу. Да как же не даст! - Смотря какой компилятор. Может просто поворчать для вежливости warning-ом a потом еще и контрольный в голову добавит . module shot_to_legs ( input wire Clk, input wire [1:0] a, b, c, d, output logic [1:0] ou ); always_ff @(posedge Clk) begin ou = '0; case (a) 2'b00: begin ou <= b; end 2'b01: begin ou = c; end 2'b10: begin ou <= d; end default: begin // end endcase // a end endmodule // Vivado WARNING: [Synth 8-6090] variable 'ou' is written by both blocking and non-blocking assignments, entire logic could be removed [..../src/test.sv:12] WARNING: [Synth 8-6090] variable 'ou' is written by both blocking and non-blocking assignments, entire logic could be removed [..../src/test.sv:18] .... Synthesis finished with 0 errors, 0 critical warnings and 0 warnings. // !!! Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZwergNase 0 17 июля, 2019 Опубликовано 17 июля, 2019 · Жалоба 23 hours ago, Nick_K said: Во-вторых, если пролистать чуточку выше, то найдёте забавный комментарий в тексте: ... --wait for 60 ns; del := del + 1; if (del = 6) then del := 0; ... Из чего следует, что: 1. Нужно синтезировать задержку, а значит это клоковый модуль. 2. Частота работы блока 100MHz С этим я не соглашусь. Во-первых, этот код: On 7/16/2019 at 8:44 AM, jenya7 said: Вопрос можно ли сделать так when ST_CHIP_ERASE_2 => while(ready='0') loop --read until rdy_by=1 wb_stb_i <='1'; wb_we_i <='0'; --read wb_addr_i <= "0100"; --rdy_by register address --wait for 60 ns; del := del + 1; if (del = 6) then del := 0; ready <= wb_dat_o(0); wb_stb_i <= '0'; end if; end loop; не синтезируемый, по крайней мере в FPGA, т.к. , например, Вивада вообще не поддерживает синтез while-loop, а только for-loop (см. https://www.xilinx.com/support/documentation/sw_manuals/xilinx2019_1/ug901-vivado-synthesis.pdf), а Квартус поддерживает, но только если кол-во итераций задано константой (см. https://www.intel.com/content/www/us/en/programmable/quartushelp/current/index.htm#hdl/vhdl/vhdl_list_support_d1537e1623.htm). А в данном случае (while(ready='0')) кол-во итераций совсем не константа. Я полагаю, что --wait for 60 ns; это закоментированная задержка типа wait for time_expression, потому что только с ней этот код имеет смысл, например в тетстбенче для симуляции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 17 июля, 2019 Опубликовано 17 июля, 2019 · Жалоба 7 минут назад, RobFPGA сказал: Да как же не даст! - Смотря какой компилятор. Вроде бы речь идёт о коде на VHDL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться