2017-02-14 11 views
0

заставляет немного сигнал, чтобы переворачивать, используя этот метод действует?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

ответ

0

Нет, что первый метод не будет работать. Если бы это было так, это было бы как бесконечный контурный генератор.

Второй метод требует, чтобы настроить процесс отбора проб, где вы должны решить, когда образец a.

Если гонют какое-то выражение, вы можете заставить его быть инверсией этого выражения.

+0

Привет Дейва, просто интересно, что вы имеете в виду процесс отбора проб? Я также забыл упомянуть, что этот код находится в блоке 'task', поэтому проблема бесконечных циклов не будет проблемой, как только заканчивается блок' task'. «Сила» должна прекратить форсировать сигнал после завершения задачи, если мое понимание правильное. – TheSprintingEngineer

+0

Я имел в виду, что оператор 'if' должен оценивать свое выражение ветвления в какой-то момент, то есть когда вызываемая вами задача вызывает вызов. Оператор 'force' устанавливает новый процесс, который действует как непрерывное присвоение: каждый раз, когда изменяется сигнал на RHS, RHS получает переоценку и присваивается назначение LHS. Этот процесс остается вокруг до тех пор, пока не примет его другая «сила», или существует «релиз». –

+0

Ой хорошо, так что для первого метода, если я использую 'release' в конце задачи, сигнал должен содержать значение, пока другое значение не перезаписывается на сигнал' a', или это, что метод-никогда не будет работать при любом условии, и я должен придерживаться только метода 2? – TheSprintingEngineer