Re: [問題] veriog撰寫問題
看板Electronics作者arclitetank (More than meet the eye!)時間16年前 (2009/08/05 23:33)推噓2(2推 0噓 2→)留言4則, 1人參與討論串3/10 (看更多)
小弟在這裡補上自己的想法
其實這電路應該不需要這麼複雜
除非我會錯意了@@"
module add_sub(clk,reset,mod_n,incr,decr);
input clk,incr,decr,reset;
output [12:0] mod_n;
reg [12:0] mod_n;
always@(posedge clk)
begin
if(reset)
mod_n <= 13'd2000;
else
mod_n <= incr ? mod_n-13'd10 :
decr ? mod_n+13'd10 : mod_n;
end
endmodule
is this you want?
是的話有兩件小東西你需要留意:
1. incr and decr 同時為high 會執行 mod_n - 13'b10.
2. reset可能需要另外做電路和clk synchronize起來
※ 引述《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
: //當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
: 上面是我寫的verilog 程式碼
: 目的是把mod_n傳到除頻器當除頻參數
: 所以藉由控制mod_n可以決定除頻後的頻率
: 我目前的問題是 使用quartus II燒錄至FPGA後
: 電路的動作完全錯誤 和我所撰寫的完全不同
: 想問版上的高手
: 我的code是不是有容易被合成軟體誤解的地方
: 我已經改了很多次還是一樣
: 麻煩好心的高手指點一下 謝謝
--
● NY B D A ¯︶¯ NY S J
⊙ ⊙ ⊙ ⊙ ⊙ ⊙ ⊙ ⊙ ⊙ ⊙ ⊙ ⊙ ⊙ ⊙ ⊙ ⊙ ⊙ ⊙
— — — — — — — — —
郭勇志 勇維拉 寶貝勇 祖馬勇 勇-ROD 勇巴西亞 勇塔那 King勇 勇樂迪
張伯勇 岡島勇樹 勇盾
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.165.98
推
08/05 23:57, , 1F
08/05 23:57, 1F
推
08/06 00:03, , 2F
08/06 00:03, 2F
→
08/06 00:04, , 3F
08/06 00:04, 3F
→
08/06 00:05, , 4F
08/06 00:05, 4F
了解 如果是我的話我給incr和decr加 rising detector
always@(posedge clk)
if (reset)
incr_p0 <= 1'b0;
else
incr_p0 <= incr;
wire incr_trig = incr & ~incr_p0;
同理 decr 也是
mod_n就變成:
mod_n <= incr_trig ? mod_n-13'd10 :
decr_trig ? mod_n+13'd10 : mod_n;
※ 編輯: arclitetank 來自: 118.160.165.98 (08/06 00:11)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 10 篇):