作者WizardRush (插很大)
看板Electronics
標題Re: [問題] veriog撰寫問題
時間Wed Aug 5 22:37:41 2009
※ 引述《felghana (adol)》之銘言:
: module add_sub(clk,reset,mod_n,incr,decr);
: input clk,incr,decr,reset;
: output[12:0] mod_n;
: reg [1:0] state,next_state;
: reg [12:0] mod_n;
: parameter s0=2'd0,s1=2'd1,s2=2'd2,s3=2'd3;
: always@(posedge clk)
: begin
: if(reset)
: state=s0;
: else
: state=next_state;
: end
: //s0:重置用 s1:增加mod_n s2:減少mod_n s3:維持mod_n
: always@(state)
: begin
: case(state)
: s0:mod_n=13'd2000;
: s1:mod_n=mod_n+13'd10;
: s2:mod_n=mod_n-13'd10;
: default:;
: endcase
: end
以上這個always block 有著語法上的錯誤,
你的default什麼也沒寫,在操作上遇到s3時,
一定會錯...
你的sensitive list也少了mod_n,總之這裡
我看不太明白...
且我自以為的覺得mod_n感覺上應該要是個儲存
元件,不過你不是這樣寫...
: //當incr變為high時增加mod_n
: //當decr變為high時減少mod_n
: always@(state or incr or decr)
: begin
: case(state)
: s0:
: next_state=s3;
: s1:
: if(decr)
: next_state=s1;
: else
: next_state=s3;
: s2:
: if(incr)
: next_state=s2;
: else
: next_state=s3;
: s3:
: if(incr)
: next_state=s2;
: else if(decr)
: next_state=s1;
: else
: next_state=s3;
: default:
: next_state=s0;
: endcase
: end
: endmodule
以上是state transition
控制訊號incr decr沒有寫出很完整的狀況,舉例
s3中,是個有優先順序的電路,萬一發生incr decr同
時為high,第一條件會成立,開始進入s2...但這是你
想要的嗎?
且s0時,next_state直接進入s3,換句話說,在reset時
next_state永遠都是2'b11,這在reset看到有東西是很奇
怪的..
若是我的話
s3感覺是多餘的,直接將s3的東西寫在s0就好了...
當然你需要將控制訊號條件給得更完整..
例如你需要考慮
(incr,decr) 00 01 10 11四種狀態時的各種運作..
在00和11時,跳在s0
在01時,跳到s1
在10時,跳到s2
(條件的優先順序權要搞清楚,不然就不要寫優先順序的電路)
這樣在reset時,我的next_state會永遠指在s0位置,看到的值
會永遠是2'b00,這樣看起來會不會比較符合邏輯...?
以上一點淺見參考一下囉!
--
新id需要一點文章數..
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.103.42
1F:推 felghana:s3和s0不同在於 s0是要重置用 s3是要把mod_n的值固定 08/05 22:42
2F:→ felghana:所以上面那個default沒寫 是希望合出latch 讓mod_n固定 08/05 22:42
3F:→ felghana:{incr,decr}只會有 01 或 10 的情況 其他兩種不會出現 08/05 22:43