2017-02-14 1 views
0

이 방법을 사용하여 신호의 비트를 반전하도록하려면 true입니까?시스템 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을 샘플링 할시기를 결정해야하는 샘플링 프로세스를 설정해야합니다.

a가 일부 표현식에 의해 유도되는 경우 해당 표현식의 역수가되게 할 수 있습니다.

+0

안녕하세요, 샘플링 프로세스의 의미가 궁금합니다. 나는 또한이 코드가'task' 블록 안에 있다는 것을 잊어 버렸습니다. 무한 루프의 문제는'task' 블록이 끝나자 마자 문제가되지 않을 것입니다. 내 이해가 정확하다면 '힘'은 작업이 끝나면 신호를 강제로 중단해야합니다. – TheSprintingEngineer

+0

나는'if' 문이 어떤 지점에서 분기 표현식을 평가해야한다는 것을 의미했는데, 이것은 잊어 버린 작업이 호출 될 때입니다. 'force' 문은 연속적인 할당처럼 동작하는 새로운 프로세스를 설정합니다 : RHS의 신호가 변경 될 때마다 RHS가 재평가되고 할당자가 LHS에 할당됩니다. 그 과정은 또 다른 '힘'이 일어날 때까지 머물러 있거나,'release'가 있습니다. –

+0

오, 그래, 첫 번째 방법은 작업의 끝에'release'를 사용하면 신호는 다른 값이 신호'a'에 덮어 쓸 때까지 값을 유지해야합니다. 그렇지 않으면 그 방법 1이 결코 작동하지 않을 것입니다 어떤 조건 하에서도 나는 방법 2만을 고수해야합니까? – TheSprintingEngineer

관련 문제