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
当然这只是用于你上面列的序列。
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
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯