Dimidrol 0 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба Спасибо, ответы очень помогли. В голове никак не укладывалось, из каких соображений присваивания переменным могут дать при синтезе последовательную цепочку триггеров. Могут дать, а могут и не дать, смотря в какой последовательности напишете операторы. И кстати process(all) стала только недавно поддерживаться, не все среды такую запись будут поддерживать. https://forums.xilinx.com/t5/General-Techni...all/td-p/720637 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 5 декабря, 2016 Опубликовано 5 декабря, 2016 (изменено) · Жалоба А вот аналога if rising_edge(clk) в Верилоге нет и не может быть из-за отсутствия концепции сигналов, хранящих состояние, бывшее в предыдущем дельта-цикле. Имхо, без концепции хранения предыдущих значений в дельта-циклах невозможно реализовать "принцип однократного присваивания", а это вроде основа SV/VHDL. Порядок операторов неважен, если не нарушается принцип однократного присваивания. Пример. Вычисление: q = ( a + b ) * c + d; разобъем на несколько последовательных: ab = a + b; abc = ab * c; abcd = abc + d; q = abcd; и перемешаем их: module top( input [3:0] a,b,c,d, output [3:0] q ); var [3:0] ab,abc,abcd; always begin q = abcd; abcd = abc+d; abc = ab*c; ab = a+b; end endmodule library ieee; --use ieee.all; entity top is port ( a,b,c,d : in integer range 0 to 15; q : out integer range 0 to 15 ); end entity; architecture rtl of top is begin process(all) variable ab,abc,abcd: integer range 0 to 15; begin q <= abcd; abcd := abc+d; abc := ab*c; ab := a+b; end process; end; Синтезируется правильно. Поленились добавить if rising_edge(clk) в SV ? Или что-то принципиальное мешает этому ? Изменено 5 декабря, 2016 пользователем Leka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewkrot 0 8 декабря, 2016 Опубликовано 8 декабря, 2016 · Жалоба Немного не в тему ТС, но все-таки.. Просматривал тестовый код для одной Spartan-6 платы. Объясните пожалуйста знатоки верилога что есть 3 и 6 строки? Такое там в коде сплошь и рядом. Прошу если чё сильно не пинать ) 1. always @ (posedge vga_clk) 2. begin 3. if(1'b0) hsync_r <= 1'b1; 4. else if(x_cnt == 1) hsync_r <= 1'b0; 5. else if(x_cnt == H_SyncPulse) hsync_r <= 1'b1; 6. if(1'b0) hsync_de <= 1'b0; 7. else if(x_cnt == Hde_start) hsync_de <= 1'b1; 8. else if(x_cnt == Hde_end) hsync_de <= 1'b0; 9. end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 8 декабря, 2016 Опубликовано 8 декабря, 2016 · Жалоба Это условие всегда ложно. Какая-то заглушка. Возможно, для отладки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
soldat_shveyk 3 9 декабря, 2016 Опубликовано 9 декабря, 2016 · Жалоба Доброго дня, коллеги! Существуют ли способы указать в тесбенче на Verilog формат отображения переменных при моделировании? Пользуюсь Modelsim Altera Edition, сигналов в проекте много, и каждый раз при моделировании все они отображаются в бинарном формате. Потом приходится вручную указывать форматы HEX, UNSIGNED, DCIMAL для отдельных сигналов. Хотелось бы сократить эту рутинную операцию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kapsik 0 9 декабря, 2016 Опубликовано 9 декабря, 2016 · Жалоба Доброго дня, коллеги! Существуют ли способы указать в тесбенче на Verilog формат отображения переменных при моделировании? Пользуюсь Modelsim Altera Edition, сигналов в проекте много, и каждый раз при моделировании все они отображаются в бинарном формате. Потом приходится вручную указывать форматы HEX, UNSIGNED, DCIMAL для отдельных сигналов. Хотелось бы сократить эту рутинную операцию. Можно сделать так: достали все нужные сигналы, привели к нужному формату и сохраните wave.do. Потом при запуске симуляции вызывайте ваш wave, там все настройки должны остаться, как в момент сохранения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 9 декабря, 2016 Опубликовано 9 декабря, 2016 · Жалоба Можно сделать так: достали все нужные сигналы, привели к нужному формату и сохраните wave.do. Потом при запуске симуляции вызывайте ваш wave, там все настройки должны остаться, как в момент сохранения. Верно. Только я из wave.do сразу все копирую в основной скрипт *.do и только его запускаю. Либо в нем же пишу do wave.do... и тогда основной скрипт запускает wave.do... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
soldat_shveyk 3 9 декабря, 2016 Опубликовано 9 декабря, 2016 · Жалоба Только я из wave.do сразу все копирую в основной скрипт *.do и только его запускаю. А в какое место основного скрипта надо копировать? Переношу все содержимое wave.do в основной скрипт - не помогает. Содержимое основного скрипта <имя проекта>.do у меня следующее: transcript on if {[file exists rtl_work]} { vdel -lib rtl_work -all } vlib rtl_work vmap work rtl_work vlog -vlog01compat -work work +incdir+F:/Work/XXXXXXXXXXXXXXXXXXX.v} vlog -vlog01compat -work work +incdir+F:/Work/XXXXXXXXXXXXXXX.v} vlog -vlog01compat -work work +incdir+F:/Work/XXXXXXXXXXXXXXXXXXX_tb.v} vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L stratixiv_hssi_ver -L stratixiv_pcie_hip_ver -L stratixiv_ver -L rtl_work -L work -voptargs="+acc" xxxxxxxxxxxxxxxxxxxxxx_tb add wave * view structure view signals run -all Если запускаю wave.do после симуляции, то на экране появляется второй комплект сигналов, но уже в правильном формате, который я задавал до сохранения wave.do Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kapsik 0 9 декабря, 2016 Опубликовано 9 декабря, 2016 · Жалоба vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L stratixiv_hssi_ver -L stratixiv_pcie_hip_ver -L stratixiv_ver -L rtl_work -L work -voptargs="+acc" xxxxxxxxxxxxxxxxxxxxxx_tb add wave * view structure Попробуйте "add wave *" заменить на do wave.do Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 11 декабря, 2016 Опубликовано 11 декабря, 2016 (изменено) · Жалоба module top(oe,din,D1,D2,q1,q2); input oe,din; inout D1,D2; output q1,q2; always_comb begin D1 = oe ? din : 1'bz; q1 = D1; end always_comb begin q2 = D2; D2 = oe ? din : 1'bz; end endmodule Квартус 13.1 Из каких таких соображений q1 должен получить при синтезе выход с 3-я состояниями ? Изменено 11 декабря, 2016 пользователем Leka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 11 декабря, 2016 Опубликовано 11 декабря, 2016 · Жалоба module top(oe,din,D1,D2,q1,q2); input oe,din; inout D1,D2; output q1,q2; always_comb begin D1 = oe ? din : 1'bz; q1 = D1; end always_comb begin q2 = D2; D2 = oe ? din : 1'bz; end endmodule Квартус 13.1 Из каких таких соображений q1 должен получить при синтезе выход с 3-я состояниями ? порядок команд имеет значение. в always_comb в том числе. то, что вы его не объявили как inout, не мешает синтезатору внутри этого модуля рассматривать его как выход с 3 состояниями. ибо всё-таки verilog не только для описания ПЛИС создавался, но в первую очередь для описания любой логики. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 11 декабря, 2016 Опубликовано 11 декабря, 2016 (изменено) · Жалоба порядок команд имеет значение Имхо. Не должен иметь значение, если _все_ переменные в блоке присваиваются однократно. А если имеет, значит в стандарте логическое противоречие (имхо). Еще более странная ситуация, если inout заменить на output. В этом случае непонятно, почему синтезатор D1 = oe ? din : 1'bz; q1 = D1; рассматривает, как D1 = oe ? din : 1'bz; q1 = oe ? din : 1'bz; вместо закорачивания "проводом" q1 и D1. Изменено 11 декабря, 2016 пользователем Leka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 11 декабря, 2016 Опубликовано 11 декабря, 2016 · Жалоба Надеюсь, такое исключение только для 'z, тк это свойство однократного присваивания(независимость от порядка) очень удобно на практике. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 11 декабря, 2016 Опубликовано 11 декабря, 2016 · Жалоба А если имеет, значит в стандарте логическое противоречие (имхо).Не люблю верилог, но даже я знаю, что при блокирующем присваивании порядок важен, при неблокирующем нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 11 декабря, 2016 Опубликовано 11 декабря, 2016 · Жалоба при блокирующем присваивании порядок важен Пример, пожалуйста, для варианта с однократным присваиванием всех переменных в блоке. За исключением присваивания 'z. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться