2014-12-25 3 views
0

나는 combinational 회로가 주어진다. 그리고 나는 그 회로를위한 Verilog 코드를 디자인 할 것이다. 그것은 상태 기계에 관한 것입니다. 방정식은 다음과 같습니다.상태 머신을위한 Verilog 코드

A(t+1)=A(t)+B(t); 
B(t+1)=A(t)'+B(t); 

다른 출력이나 입력이 없습니다. 몇 가지 코드를 시도했지만 작동하지 않았습니다. 나는 입력, 출력 및 와이어로 assignig A, B, A_next, B_next에 대해 혼란스러워합니다. 아무도 내가 다시 시도 할 수 있도록 약간의 단서를 줄 수 있습니까?

module statemac_posed(clk,a,b); 
input clk; 
output a,b; 
reg a_next,b_next; 

[email protected](posedge clk) 
begin 
a=a_next; 
b=b_next; 
a_next=a|b; 
b_next=~a|b; 

end 

endmodule 
+0

회로에는 3 개의 입력 (Ain, Bin, clock), 2 개의 상태 (Ast, Bst) 및 2 개의 출력 (Aout, Bout)이 있습니다. 'A (t) '는'무엇을 의미합니까? – kestasx

+0

저는 이것을 "not", ~ A (t)를 의미하도록했습니다. –

+0

A_next는 첫 번째 DFF의 입력이고 두 번째 DFF의 B_next입니다. –

답변

2

플립 플롭의 출력은 그냥 쓸 수있는 동기 논리로, 다음 값입니다

FPGA intial를 들어

을 사용하는 ASIC 액티브 로우 리셋을위한 초기 값을 설정하는 데 사용할 수 있습니다 할당

module statemac_posed(
    input  clk, 
    output reg a, 
    output reg b 
); 
    reg a_next; 
    reg b_next; 

//Combinatorial take outputs from flip-flops and combinatorial define next value 
always @* begin 
    a_next = a|b; 
    b_next = ~a|b; 
end 

initial begin 
    a = 'b0; 
    b = 'b0; 
end 

//on Clock edge take the next values 
always @(posedge clk) begin 
    a <= a_next; 
    b <= b_next; 
end 

endmodule 

상관 변수를

module statemac_posed(
    input  clk, 
    output reg a, 
    output reg b 
); 

initial begin 
    a = 'b0; 
    b = 'b0; 
end 

//On clock edge update a &b with new values based on previous a & b value 
[email protected](posedge clk) begin 
    a <= a|b; 
    b <= ~a|b; 
end 

endmodule 

이 는 동등 initial 또는 always의 내부에는 reg이 있어야합니다. logic은 SystemVerilog를 사용하는 경우에도 유효합니다. 이 작업을 수행하지 않은 것은 주석에서 언급 한 오류의 원인입니다.

이것은 Verilog 사용법에 대한 통찰력을 제공합니다.
주의 : 조합 (@*)을 사용하여 차단 (=)을 사용하십시오. 비 블로킹 (<=) 에지가 트리거 된 (@(posedge clk)) 하드웨어를 올바르게 설명합니다.