返回信息流最近编了个Moore型状态机,但是仿真死活出不来,程序如下,哪位前辈能给看看。。
module Moore(A,clk,Z);
input A,clk;
reg [1:0]ST;
parameter ST0=0,ST1=1,ST2=2,ST3=3;
output Z;
reg Z;
always @(negedge clk)
begin
Z=1;
case(ST)
ST0:
begin
Z=1;
if(A)
ST=ST0;
else
ST=ST2;
end
ST1:
begin
Z=0;
if(A)
ST=ST1;
else
ST=ST3;
end
ST2:
begin
Z=0;
if(A)
ST=ST1;
else
ST=ST3;
end
ST3:
begin
Z=1;
if(A)
ST=ST3;
else
ST=ST0;
end
endcase
end
endmodule
现在我已经知道问题是case永远匹配不了,哎搞了好几天了实在摸不着头绪。。
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #11709同步于 2012/2/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
菜鸟求教一个verilog的问题!!
lzh519215
2012/2/8镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
哦对了,测试程序如下:
odule Moore_test;
reg clk,A;
wire Z;
reg [1:0]ST;
parameter dely=4;
Moore Moore(A,clk,Z);
initial
repeat(1000)
#dely clk=~clk;
initial begin
clk=0;
ST=0; //test ST0
A=0;
#(dely*2)
A=1;
#(dely*2) //test ST1
ST=2'b01;
A=0;
#(dely*2)
A=1;
#(dely*2)
ST=2'b10;
A=0;
#(dely*2)
A=1;
#(dely*2)
ST=2'b11;
A=0;
#(dely*2)
A=1;
end
initial $monitor($time,,,"A=%d,ST=%d,Z=%d",A,ST,Z);
endmodule
开发环境是ISE,不过这应该没所谓吧。。应该是个很菜的问题,真心求教啊~~~~~[ema11][ema11][ema11]
我的ST在测试程序中是赋了值的,但是ST和A没能进入case改变Z的值,不知道为啥。。
你看我在case外加了“Z=1”仿真就会有z为1的波形,但是把z=1删了就什么都木有了
【 在 chrischen25 的大作中提到: 】
: 寄存器赋初值,需要用rst 赋初值,你程序里面木有rst信号,Z ST这两个寄存器永远是XX未知状态,所以没有仿真结果
【 在 lzh519215 的大作中提到: 】
: 我的ST在测试程序中是赋了值的,但是ST和A没能进入case改变Z的值,不知道为啥。。
: 你看我在case外加了“Z=1”仿真就会有z为1的波形,但是把z=1删了就什么都木有了
ST 是你程序内部的寄存器,不能在测试程序汇总赋初值,你的测试程序只能对源程序的输入信号赋值。所以你的测试程序所写的ST根本没有用,你传递的参数只有 接口信号的值。
【 在 lzh519215 的大作中提到: 】
: 我的ST在测试程序中是赋了值的,但是ST和A没能进入case改变Z的值,不知道为啥。。
: 你看我在case外加了“Z=1”仿真就会有z为1的波形,但是把z=1删了就什么都木有了
Moore Moore(A,clk,Z); A CLK Z是你的传递参数, ST不是,所以ST不会传递到源程序里面
写个initial也行
不过initial不可综合
【 在 ggjjrrw (ggjjrrw) 的大作中提到: 】
: 写个rst按键吧,让ST寄存器清零,之后就可以验证了