|
本帖最后由 UML2011 于 2012-3-23 15:49 编辑
代码如下:
module test(sdram1,sdram2,sdram3,clk,Reset,Gx,Gy,Gxy);
//-------------------------------------------------------------//
input [11:0] sdram1,sdram2,sdram3;
input clk, Reset;
output [13:0] Gxy;
output [12:0] Gx,Gy;
reg [3:0] state_reg,next_state;
parameter s0=4'b0001,s1=4'b0010,s2=4'b0100,s3=4'b1000;
reg [11:0] z1,z2,z3,z4,z5,z6,z7,z8,z9;
reg [12:0] sec1,sec2,sec3,sec4;
reg [12:0] x,y;
reg [13:0] 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的输出是对的。功能仿真图如下:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?我要注册
x
|