永发信息网

verilog语言实现0001 1011 1101 0000 1010 0010序列检测,并功能仿真

答案:2  悬赏:20  手机版
解决时间 2021-03-17 01:51
  • 提问者网友:几叶到寒
  • 2021-03-16 12:55
急!用verilog语言实现0001 1011 1101 0000 1010 0010序列检测,并功能仿真,在网上查了一下,都是用状态机做,可是这要有多少种状态啊!有没有简单的程序,只有实现检测功能就行,谢谢了~
最佳答案
  • 五星知识达人网友:神的生死簿
  • 2019-11-24 18:41
如果固定为这个序列的话你可以直接看成检测6个16进制的数只需要6个状态就可以了。
always@(posedge clk)
if(rst) begin
state<= 0;
right<= 0; end
else begin
case(state)
0:begin
if(input==4'h1) state<=1;
else state<= 0; end
1: begin
if(input==4'hb) state<= 2;
esle state<= 0; end
... ...
5: begin
if(input==4'h2)begin
state<= 0;
right<= 1; end
else state<= 0; end
endcase end

当然这只是用于你上面列的序列。
全部回答
  • 1楼网友:归鹤鸣
  • 2020-08-28 14:59
这种写法是不可综合的.因为cnt会始终接地. 从仿真语意上中间部分的语意是: 遇到in的上升沿cnt就递增.但是如果cnt等于4的时候就会清零,并且翻转out的取值. 这里并未对out做初始化所以是x 作者想要完成的是一个倍频器 in跳变5次out就会翻转一次,out的周期是in的10倍. 正确的做法是: module fen10(in,rst,out);//10fen input in; input rst; output reg out; reg [2:0] cnt; always@(posedge in or posedge rst) begin if(rst) begin cnt <= 3'd0; out <= 1'b0; end else begin if(cnt<3'd4) cnt<=cnt+3'd1; else begin out<=~out; cnt<=3'd0; end end end endmodule
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯