这样用verilog写的序列检测器对不??
//序列信号检测器 1100_1011,检测到就输出一拍高电平module sq_check(clk,rst,din,out);
input clk,rst,din;
output out;
reg buf;
always @ (posedge clk or negedge rst)
if(!rst)
buf <= 8'd0;
else
begin
buf <= {buf,din};
end
assign out = (buf == 8'b1100_1011) ? 1 : 0;
endmodule 自顶一发。。 似乎没有问题啊,仿真通过了么? 经典方法是用FSM吧。 cxhy 发表于 2014-8-28 00:12
似乎没有问题啊,仿真通过了么?
仿真了一下 首先是犯了一个语法错误,buf是关键字。。。修改之后 没有问题了。。。 gutao007 发表于 2014-8-28 00:51
经典方法是用FSM吧。
那个稍显麻烦了。。 用fsm貌似还有到底七个状态还是八个状态的分歧。貌似夏雨文的那书上用例是多个状态,有网友少个状态也能正常工作。后有高手指出如少那个状态上个序列结束的lsb可能成为下一序列的msb参与检测 不需要状态机,直接assign out = (buf ^ 8'b1100_1011) ;
7802848 发表于 2014-8-28 13:21
不需要状态机,直接assign out = (buf ^ 8'b1100_1011) ;
楼主这个代码一个时钟周期只会来一个bit的数据,所以需要使用中间变量暂存一下。
页:
[1]