2014-09-24 3 views
1

다음 concat = {concat[7:0],clk}를 아래와 같이 영원히 루프 내부 :연결 연산자 내가 할 노력하고 있어요

bit [7:0] concat; 
    concat = 0; 
    forever begin 
     @(posedge clk); 
     concat = {concat[7:0],clk}; 
    end 

내가 그것을 어떤 시점에서 8 클럭 반복 한 후이 포함됩니다 어떤 값을 알고 싶어 시간의 초기 값이 concat = 0 인 경우.

언제든지 'hAA 또는 'h55과 다를 수 있습니까?

답변

0

할당의 RHS를 평가할 때 @(posdege clk)이므로 clk은 항상 1 (또는 x)입니다. 따라서 concat은 'h00, h01,'h03, h07, h17, ...

다른 스레드가 clk의 동일한 양의 가장자리에서 concat을 읽으려고하면, 경쟁 상태가됩니다. NBA를 사용하여 과제를 작성하십시오.

1

당신은 단지 concat = 0; 쓸 수 없습니다 당신이해야 하나 assign concat = 0; 또는 영원히 그런 식으로 사용할 수 없습니다

initial begin 
    concat = 0; 
end 

, 당신이 사용할 수있는 두 최고 수준 initialalways 있습니다. 당신은 원하는 시뮬레이션에 대해 다음과 같은 몇 가지 일 :

initial begin 
    forever begin 
    @(posedge clk); 
    concat = {concat[6:0],clk}; 
    end 
end 

당신이 합성 작성하는 경우 다음 플립 플롭 (flip-flop)을 의미 할 수 있습니다 : 그것은해야

always @(posedge clk) begin 
    concat = {concat[6:0],clk}; 
end 

당신이 해결 한 후 당신의 RTL 시험 사용하기 쉬운 EDA Playground.

+0

Morgan에게 회신 해 주셔서 감사합니다. UVM 테스트 벤치에서 위의 (유사한) 코드가 모두 사용된다고 가정하십시오. 나는 단지 uvm_info 매크로를 사용하여 이것을 디버그 할 수 없기 때문에 출력이 어떻게 될지 알고 싶었다. if가 발생하지 않는 조건에서 사용되기 때문이다. 어떤 포인터라도 감사 할 것이다 – user3714538

+0

@ user3714538 블록은'posedge of clk '에 대해서만 트리거하거나 기다린다. 즉 clk는 1이다. 따라서 concat은 1로 채우고, 8 클럭은 항상 FF이다. – Morgan

관련 문제