2016-12-01 3 views
0

Verilog에서 강제로 강제로 사용하는 것과 강제없이 사용하는 것의 차이점은 무엇입니까?Verilog에서 신호를 강제로 사용하는 힘과 힘을 사용하지 않는 것의 차이점은 무엇입니까?

여기

top(); 

wire temp; 
reg temp2; 

endmodule 

을 Verilog에 샘플입니다 그리고 다음과 같이 그 온도 및 TEMP2 신호를 강제로합니다.

이 경우 경우 1

top(); 

wire temp; 
reg temp2; 

initial begin 
top.temp = 1'b1;  
top.temp2 = 1'b1; 
end 

endmodule 

, 나는 다음과 같은 몇 가지 오류가있어.

top.slwr_w = 1'b1; | ncvlog : * E, WANOTL :이 컨텍스트에서는 네트가 법적 lvalue가 아닙니다 [9.3.1 (IEEE)].

'힘없이'이런 식으로 사용하고 싶다면 강제로 '철수'가 아닌 'reg'만 강제해야합니까? 강제로 무단으로 강제 연결하려면 어떻게해야합니까?

이 경우 2

top(); 

wire temp; 
reg temp2; 

initial begin 
force  top.temp = 1'b1;  
force  top.temp2 = 1'b1; 
end 

endmodule 

경우, 나는 '힘'와 함께 사용 어떤 오류가 없다.

질문 1. 먼저 케이스 1과 케이스 2의 차이점을 강제 방식으로 알고 싶습니다.

Q2. 그리고 어떤 경우에 좋을까요?

답변

1

Verilog에는 연결을 나타내는 두 가지 구조가 있습니다. 그물은 보통 wire이고 변수는 보통 reg입니다. 변수는 initial 또는 always 블록으로 할당되어야합니다. 네츠는 assign 문 또는 module 출력으로 구동되어야합니다. 케이스 1의 경우 initial 블록에서 네트 (wire)를 구동하려고합니다. 이것은 허용되지 않습니다.

force은 값을 네트워크 (예 : wire) 또는 변수 (예 : reg)로 오버 드라이브하는 데 사용됩니다. 이는 테스트 용으로 만 사용되므로 테스트 벤치에서 설계의 내부 신호를 과도하게 (예 : 특정 조건에서 강제로 오류를 일으키거나 특정 모드로 강제로) 오버 드라이브 할 수 있습니다.

force순차 진술으로 실행할 수 있습니다. 순차 명령문은 initial 또는 always 블록 내부 또는 function 또는 task 블록 내부의 명령문입니다. 이것이 case 2가 오류없이 컴파일되는 이유입니다. (A force 문이 연속 될 수 있다는 사실은 중요한 동작입니다 - 당신은 아마 특정 시간에 force에 값을 원하는 것이 나중에 아마 release를.) 그래서

, 당신의 테스트 벤치에서 사용 force. 테스트 목적을 위해 보통 다른 방법으로 구동되는 일부 신호를 오버 드라이브 할 때만이 신호를 사용하십시오. 을 사용하지 마십시오. force을 디자인에 사용하십시오.따라서

  • 케이스 1 만 사용해야합니다.

  • 당신은 당신의 테스트 벤치에 대한 두 경우 모두 1 또는 케이스 2를 사용하지만 (아마 당신의 디자인에 약간의 내부 연결 에) 값을 오버 드라이브 경우 2를 사용할 수 있습니다.

관련 문제