文档库 最新最全的文档下载
当前位置:文档库 › 曼彻斯特编码译码

曼彻斯特编码译码

module mcst(clk, databin, datamout); //曼彻斯特模块

input clk; //时钟信号
input databin; //数据输入

output datamout; //曼彻斯特编码输出

reg datamout;
reg flag; //标志信号
reg [1:0] com;

always @(posedge clk)
begin
if(flag == 1'b0)
begin
if(databin == 1'b0) //当数据为"0"时,转换为"01"
begin
com <= 2'b01;
end
else //当数据为"1"时,转换为"10"
begin
com <= 2'b10;
end
end
end

always @(posedge clk) //曼彻斯特编码输出进程
begin
if(flag == 1'b1)
begin
datamout <= com[1];
flag <= ~flag;
end
else
begin
datamout <= com[0];
flag <= ~flag;
end
end

endmodule



module mdecode(clk, datamin, databout);

input clk; //时钟输入
input datamin; //曼彻斯特编码输入

output databout; //曼彻斯特译码输出

reg databout;
reg [1:0] com;
reg flag;
reg syn;

always @(posedge clk)
begin
com <= {com[0], datamin};
end

always @(posedge clk)
begin
if((com == 2'b11) || (com == 2'b00)) //检测"11"和"00"
begin
flag <= 2'b11;
syn <= 1'b1;
end
else
begin
syn <= 1'b0;
end
end

always @(posedge clk) //曼彻斯特译码输出进程
begin
if((syn == 1'b1) || (flag == 2'b11))
begin
case(com)
2'b01:
databout <= 1'b0;
2'b10:
databout <= 1'b1;
default:
databout <= databout;
endcase
end
end

endmodule





相关文档