我想將值保存在任意時鐘週期的寄存器中。基本上,我想這樣做類似的像一個狀態機的處理:Verilog:將值保存在寄存器中(分配給相同的寄存器)
[email protected] (posedge Clock) begin
if (Reset) CurrentState <= STATE_Initial ;
else CurrentState <= NextState ;
end
[email protected] (*) begin
NextState = CurrentState ;
case (CurrentState)
STATE_Initial : begin
NextState = STATE_1 ;
end
STATE_1 : begin
NextState = STATE_2 ;
end
endcase
end
我的問題是,現在,我想除了這一點,同樣用24位的標準寄存器進行:
[email protected] (posedge Clock) begin
if (Reset)
CurrentState <= STATE_Initial ;
curReg <= 24'd0;
else
CurrentState <= NextState ;
curReg <= nextReg;
end
[email protected] (*) begin
NextState = CurrentState ;
nextReg = curReg;
case (CurrentState)
STATE_Initial : begin
NextState = STATE_1 ;
nextReg = 24'd2048;
end
STATE_1 : begin
NextState = STATE_2 ;
nextReg = 24'd211;
end
endcase
end
對我來說,它似乎是以同樣的方式處理,但我總是收到一些錯誤,時間約束沒有得到滿足。那麼,爲什麼這是一個問題?在if
end
- -
嘿,是的,那只是「僞代碼」。但那不是我所面臨的問題。這是將寄存器賦值給自己的方法嗎? – Ernte1893
@ Ernte1893,那麼你將需要提供更多信息。除了缺少'begin'''end'之外,所提供的代碼沒有任何問題。 – Greg
感謝您的回覆。我也這麼認爲,因爲我是這樣編程的。這裏的問題是時序條件不符合(我們正在使用500 MHz的快速時鐘)。我認爲這個問題可能會發生,因爲24位的大小,我沒有問題,只有3位的狀態。 – Ernte1893