Z393072 发表于 2014-8-27 22:22:59

这样用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

Z393072 发表于 2014-8-27 22:31:30

自顶一发。。

cxhy 发表于 2014-8-28 00:12:54

似乎没有问题啊,仿真通过了么?

gutao007 发表于 2014-8-28 00:51:21

经典方法是用FSM吧。

Z393072 发表于 2014-8-28 10:46:11

cxhy 发表于 2014-8-28 00:12
似乎没有问题啊,仿真通过了么?

仿真了一下 首先是犯了一个语法错误,buf是关键字。。。修改之后 没有问题了。。。

Z393072 发表于 2014-8-28 10:46:44

gutao007 发表于 2014-8-28 00:51
经典方法是用FSM吧。

那个稍显麻烦了。。

zzj0329 发表于 2014-8-28 11:50:12

用fsm貌似还有到底七个状态还是八个状态的分歧。貌似夏雨文的那书上用例是多个状态,有网友少个状态也能正常工作。后有高手指出如少那个状态上个序列结束的lsb可能成为下一序列的msb参与检测

7802848 发表于 2014-8-28 13:21:25

不需要状态机,直接assign out = (buf ^ 8'b1100_1011) ;

cxhy 发表于 2014-8-28 14:28:29

7802848 发表于 2014-8-28 13:21
不需要状态机,直接assign out = (buf ^ 8'b1100_1011) ;

楼主这个代码一个时钟周期只会来一个bit的数据,所以需要使用中间变量暂存一下。
页: [1]
查看完整版本: 这样用verilog写的序列检测器对不??