曼彻斯特编码的verilog实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

module bianma(din,rst,clk16x,clk96,start,tx,sr,state,clk_en,man);

input rst,clk16x,start;

input[7:0] din;

output tx,clk96,sr,state,clk_en,man;

reg clk_en;

reg[7:0] sr;

reg clk96;

reg tx,man;

reg[3:0] state;

reg[2:0] cnt;

always @(posedge clk16x)

begin cnt<=cnt+1;

if(cnt==7) clk96<=~clk96;

end

always @(negedge clk16x or negedge start or posedge rst)

begin if(rst) begin clk_en<=1'd0;end

else if(!start) begin clk_en<=1'b1;end

else if(state==4'd12) begin clk_en<=1'b0;end

end

always @(negedge clk96 or posedge rst)

begin if(rst) begin tx<=1'b1;sr<=8'b0;end

else if(state==4'd1) begin sr<=din;end

else if(state==4'd2) begin tx<=1'b0;end

else if((state>=4'd3)&&(state<=4'd10)) begin tx<=sr[0]; sr[6:0]<=sr[7:1];sr[7]<=1'b1;end

else if(state==4'd11) begin tx<=1'b1;end

else tx<=1'b1;

end

always begin if((state>=4'd3)&&(state<=4'd10))

begin man<=tx^clk96;end

else man<=1'b0;

end

always @(posedge clk96 or posedge rst or negedge clk_en)

begin if(rst) state<=4'b0000;

else if(!clk_en) state<=4'b0000;

else state<=state+1;

end

endmodule

相关文档
最新文档