заставляет немного сигнал, чтобы переворачивать, используя этот метод действует?System Verilog - заставляя сигнал инвертировать/флип
1.
task
begin
force higher_level.lower_level.a[1] = ~higher_level.lower_level.a[1];
end
Я попытался это со смешанными результатами в лучшем случае. Иногда бит переворачивается, а иногда он остается тем же.
Однако, я также написал менее изящный код для той же цели листать бит, который работает все время, как показано ниже:
2.
task
begin
if(higher_level.lower_level.a[1] == 1'b1)
force higher_level.lower_level.a[1] = 1'b0;
else
force higher_level.lower_level.a[1] = 1'b1;
end
ли первый код не является хорошим способом переворачивания бит? Или есть что-то еще, что я упускаю?
Где higher_level.lower_level.a[51:0]
является 52-битный сигнал
спасибо: D
Привет Дейва, просто интересно, что вы имеете в виду процесс отбора проб? Я также забыл упомянуть, что этот код находится в блоке 'task', поэтому проблема бесконечных циклов не будет проблемой, как только заканчивается блок' task'. «Сила» должна прекратить форсировать сигнал после завершения задачи, если мое понимание правильное. – TheSprintingEngineer
Я имел в виду, что оператор 'if' должен оценивать свое выражение ветвления в какой-то момент, то есть когда вызываемая вами задача вызывает вызов. Оператор 'force' устанавливает новый процесс, который действует как непрерывное присвоение: каждый раз, когда изменяется сигнал на RHS, RHS получает переоценку и присваивается назначение LHS. Этот процесс остается вокруг до тех пор, пока не примет его другая «сила», или существует «релиз». –
Ой хорошо, так что для первого метода, если я использую 'release' в конце задачи, сигнал должен содержать значение, пока другое значение не перезаписывается на сигнал' a', или это, что метод-никогда не будет работать при любом условии, и я должен придерживаться только метода 2? – TheSprintingEngineer