⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 manch_en.txt

📁 1553B曼彻斯特编解码程序,用于总线通信
💻 TXT
字号:
module manch_en(rst,clk16x,wrn,din,tbre,mdo) ;
input rst ;
input clk16x ;
input wrn ;
input [7:0] din ;
output tbre ;
output mdo ;

wire clk1x ;
reg clk1x_enable ;
wire clk1x_disable ;
reg [3:0] clkdiv ;
reg [3:0] no_bits_sent ;
wire mdo ;
reg tbre ;
reg [7:0] tsr ;
reg [7:0] tbr ;
reg parity ;
reg wrn1 ;
reg wrn2 ;

always @(posedge rst or posedge clk16x)
if (rst)
begin
wrn2 <= 1'b1 ;
wrn1 <= 1'b1 ;
end
else
begin
wrn2 <= wrn1 ;
wrn1 <= wrn ;
end

always @(posedge rst or posedge clk16x)
begin
if (rst)
clk1x_enable <= 1'b0 ;
else if (wrn1 == 1'b1 && wrn2 == 1'b0)
clk1x_enable <= 1'b1 ;
else if (no_bits_sent == 4'b1111)
clk1x_enable <= 1'b0 ;
end

always @(posedge rst or posedge clk16x)
begin
if (rst)
tbre <= 1'b1 ;
else if (wrn1 == 1'b1 && wrn2 == 1'b0)
tbre <= 1'b0 ;
else if (no_bits_sent == 4'b1010) 
tbre <= 1'b1 ;
else
tbre <= 1'b0 ;
end

always @(posedge rst or posedge clk16x)
begin
if (rst)
tbr <= 8'h0 ;
else if (wrn1 == 1'b1 && wrn2 == 1'b0)
tbr <= din ;
end

always @(posedge rst or posedge clk16x)
begin
if (rst)
clkdiv <= 4'b0000 ;
else if (clk1x_enable == 1'b1)
clkdiv <= clkdiv + 1 ;
end

assign clk1x = clkdiv[3] ;

always @(posedge rst or posedge clk1x)
begin
if (rst)
tsr <= 8'h0 ;
else if (no_bits_sent == 4'b0001)
tsr <= tbr ;
else if (no_bits_sent >= 4'b0010 && no_bits_sent < 4'b1010)
begin
tsr[7:1] <= tsr[6:0] ;
tsr[0] <= 1'b0 ;
end
end

assign mdo = tsr[7] ^ clk1x ;

always @(posedge rst or posedge clk1x)
begin
if (rst)
parity <= 1'b0 ;
else 
parity <= parity ^ tsr[7] ;
end

always @(posedge rst or posedge clk1x)
begin
if (rst)
no_bits_sent <= 4'b0000 ;
else if (clk1x_enable)
no_bits_sent <= no_bits_sent + 1 ;

else if (clk1x_disable)
no_bits_sent <= 4'b0000 ;
end

assign clk1x_disable = !clk1x_enable ;

endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -