作者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