串行数据检测电路Verilog HDL语言描述,(阎石课后题6.35)

`timescale 1 ns/1 ps
module Exercises6_35(CLK,RESET,M1,M2,Y,state);
input CLK;
input RESET;
input M1,M2;
output [1:0]state;
output Y;
//Frequency divide
reg[22:0]cnt1;
reg CLK_c;
always@(posedge CLK or negedge RESET)
if(!RESET)
begin
cnt1<=1’b0;
CLK_c<=1’b0;
end
else
if(cnt110000)
begin
CLK_c<=~CLK_c;
cnt1<=0;
end
else
cnt1<=cnt1+1’b1;
//M1 M2 key eliminate jitter
reg M1_en,M2_en,pos;
reg[8:0]cnt2;
always@(posedge CLK_c or negedge RESET)
if(!RESET)
begin
pos<=0;
M1_en<=0;
M2_en<=0;
cnt2<=0;
end
else
begin
cnt2<=cnt2+1’b1;
if(!M1)
begin
if(cnt2
10 && pos0)
begin
M1_en<=1;
end
else if(cnt2
200)
begin
pos<=1;
end
else if(cnt2202)
begin
M1_en<=0;
end
end
else if(!M2)
begin
if(cnt2
10 && pos0)
begin
M2_en<=1;
end
else if(cnt2
200)
begin
pos<=1;
end
else if(cnt2==202)
begin
M2_en<=0;
end
end
else
begin
pos<=0;
M1_en<=0;
M2_en<=0;
cnt2<=0;
end
end
//4-State Mealy state machine
reg reg_out;
reg[1:0]state;
parameter S0=2’b00,S1=2’b01,S2=2’b10,S3=2’b11;
always@(posedge CLK_c or negedge RESET)
if(!RESET)
begin
state<=S0;
end
else
case(state)
S0:
if(M1_en)
state<=S1;
else
state<=S0;
S1:
if(M1_en)
state<=S2;
else if(M2_en)
state<=S0;
else
state<=S1;
S2:
if(M1_en)
state<=S3;
else if(M2_en)
state<=S0;
else
state<=S2;
S3:
if(M1_en)
state<=S0;
else
state<=S3;
endcase
always@(state or M1_en or pos)
begin
case(state)
S3:
if(M1_en && !pos)
begin
reg_out<=1’b1;
end
default:
begin
reg_out<=1’b0;
end
endcase
end
assign Y=reg_out;
endmodule

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值