UML2011 发表于 2012-3-23 15:38:13

请教一个关于reg寄存器的问题

本帖最后由 UML2011 于 2012-3-23 15:49 编辑

代码如下:
module test(sdram1,sdram2,sdram3,clk,Reset,Gx,Gy,Gxy);
//-------------------------------------------------------------//
input sdram1,sdram2,sdram3;
inputclk, Reset;
output Gxy;
output Gx,Gy;
reg state_reg,next_state;
parameter s0=4'b0001,s1=4'b0010,s2=4'b0100,s3=4'b1000;
reg z1,z2,z3,z4,z5,z6,z7,z8,z9;
reg sec1,sec2,sec3,sec4;
reg x,y;
reg xy;
assign Gx=x;
assign Gy=y;
assign Gxy=xy;
//-------------------------------------------------------------
always@(posedge clk or negedge Reset)
begin
if(!Reset)
state_reg<=s0;
else
state_reg<=next_state;
end
//-------------------------------------------------------------
always@(posedge clk)
begin
case(state_reg)
s0:begin
z3<=z2;z2<=z1;z1<=sdram1;//sdram1->z1->z2->z3
z6<=z5;z5<=z4;z4<=sdram2;//sdram2->z4->z5->z6
z9<=z8;z8<=z7;z7<=sdram3;//sdram3->z7->z8->z9
next_state=s1;                        
   end      
s1:begin
sec1=z7+z8+z8+z9;                  //(z7+2z8+z9)S
sec2=z1+z2+z2+z3;                  //(z1+2z2+z3)N
sec3=z3+z6+z6+z9;                  //(z3+2z6+z9)E
sec4=z1+z4+z4+z7;                  //(z1+2z4+z7)W
next_state=s2;                        
   end
s2:begin
if(sec1>sec2)
x=sec1-sec2;               //|Gx|
else
x=sec2-sec1;
if(sec3>sec4)
y=sec3-sec4;               //|Gy|
else
y=sec4-sec3;               
next_state=s3;                        
   end
s3:begin
xy=x+y;   
   end
default: next_state=s0;
endcase
end
endmodule
向各位请教一下,为什么sec1、sec2、sec3、sec4的值输出的不正确?正确的值应该是21、8、19、16。而且z1、z2、z3、z4、z5、z6、z7、z8、z9的输出是对的。功能仿真图如下:

ChenDongKui 发表于 2012-3-28 13:21:00

因为sec1、sec2、sec3、sec4只在状态机为next_state=s1才改变它们的值;
页: [1]
查看完整版本: 请教一个关于reg寄存器的问题