verilog01状态检测怎么输出有问题
简单的检测输入序列中 检测序列的状态机,但是输出后不能全部检测,有些 ”01“,输出为 0;大侠帮我看看吧
我的程序:
fsm01.v
//////////////////////////////////////////
module fsm01(rst,clk,din,dout);
input rst,clk;
input din;
output dout;
reg dout;
reg state,nextstate;
parameter A = 2'b00,
B = 2'b11,
IDLE = 2'b01;
always @(posedge clk)
if(!rst)
state <= IDLE;
else
state <= nextstate;
always @(posedge clk)
begin
nextstate = 2'bx;
dout = 1'b0;
case(state)
A: if(din == 1)
begin
dout = 1'b1;
nextstate = B;
end
else
nextstate = A;
B:
if(din == 1)
nextstate = B;
else
nextstate = A;
IDLE:if(din == 0)
nextstate = A;
else
nextstate = IDLE;
endcase
end
endmodule
////////////////////////////////////
testbench
testfsm01.v
//////////////////////////////////////////
`timescale 1ns/1ns
module testfsm01;
reg t_clk,t_rst;
reg data;
wire x,z;
assign x = data;
initial
begin
t_clk = 0;
t_rst = 0;
#45 t_rst = 1;
data = 26'b10011001100101101010010110;
end
always #30 t_clk = ~t_clk;
always @(posedge t_clk)
data = {data,data};//移位
fsm01 DUT(
.clk(t_clk),
.rst(t_rst),
.din(x),
.dout(z)
);
endmodule 高手都哪去啦,帮我看看吧 怎么没有人啊?、我没找到问题再哪,郁闷的哦 dout 输出指定不全,生成了一个锁存器,输出当然会出错。<br>
建议在各个状态下都为 dout 指定输出。 状态机变量state一共有00,01,11,10四个状态,程序中没有说明10状态,也没有default可能也会影响结果吧 这个状态机完全不对,错误之处很多<br>
首先,第二个always语句应该是组合逻辑,敏感表中怎么有时钟信号,而不是输入信号<br>
其次,dout在每个状态下都应该有输出,否则会产生latch<br>
再次,如果是同步复位的话,那么同步复位信号rst释放之后应该在哪个状态?
dout 输出指定不全,生成了一个锁存器,输出当然会出错。<br>
建议在各个状态下都为 dout 指定输出。
页:
[1]