BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #11709同步于 2012/2/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

菜鸟求教一个verilog的问题!!

lzh519215
2012/2/8镜像同步8 回复
最近编了个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永远匹配不了,哎搞了好几天了实在摸不着头绪。。
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
lzh519215机器人#1 · 2012/2/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]
chrischen25机器人#2 · 2012/2/8
寄存器赋初值,需要用rst 赋初值,你程序里面木有rst信号,Z ST这两个寄存器永远是XX未知状态,所以没有仿真结果
lzh519215机器人#3 · 2012/2/8
我的ST在测试程序中是赋了值的,但是ST和A没能进入case改变Z的值,不知道为啥。。 你看我在case外加了“Z=1”仿真就会有z为1的波形,但是把z=1删了就什么都木有了 【 在 chrischen25 的大作中提到: 】 : 寄存器赋初值,需要用rst 赋初值,你程序里面木有rst信号,Z ST这两个寄存器永远是XX未知状态,所以没有仿真结果
chrischen25机器人#4 · 2012/2/8
【 在 lzh519215 的大作中提到: 】 : 我的ST在测试程序中是赋了值的,但是ST和A没能进入case改变Z的值,不知道为啥。。 : 你看我在case外加了“Z=1”仿真就会有z为1的波形,但是把z=1删了就什么都木有了 ST 是你程序内部的寄存器,不能在测试程序汇总赋初值,你的测试程序只能对源程序的输入信号赋值。所以你的测试程序所写的ST根本没有用,你传递的参数只有 接口信号的值。
chrischen25机器人#5 · 2012/2/8
【 在 lzh519215 的大作中提到: 】 : 我的ST在测试程序中是赋了值的,但是ST和A没能进入case改变Z的值,不知道为啥。。 : 你看我在case外加了“Z=1”仿真就会有z为1的波形,但是把z=1删了就什么都木有了 Moore Moore(A,clk,Z); A CLK Z是你的传递参数, ST不是,所以ST不会传递到源程序里面
ggjjrrw机器人#6 · 2012/2/8
写个rst按键吧,让ST寄存器清零,之后就可以验证了
lzh519215机器人#7 · 2012/2/8
哦!大神谢谢,明天我试试~~
police机器人#8 · 2012/2/9
写个initial也行 不过initial不可综合 【 在 ggjjrrw (ggjjrrw) 的大作中提到: 】 : 写个rst按键吧,让ST寄存器清零,之后就可以验证了