曼彻斯特编码
曼徹斯特編碼
程式碼
module man(man_clk,input_clk,input_w,output_w,output_r); //freq ratio=>man_clk : input_clk : input_w = 4:2:1
input input_w,man_clk,input_clk;
output output_w,output_r;
wire input_w,output_w,clk;
reg output_r;
assign output_w=(input_clk==1)? ((input_w==0)? 0: 1):((input_w==0)? 1: 0);
always @(negedge man_clk)
begin
output_r<=output_w;
end
endmodule
說明 :
input_clk : 頻率為輸入訊號兩倍的clock,用來作為輸出訊號對照。當input_clk為high時,為輸出訊號的前半週期,此時若輸出訊號同輸入訊號;input_clk為low時為輸出訊號的後半週期,此時輸出訊號為輸入訊號反向。 Man_clk: 頻率為輸入訊號四倍的clock,用來做輸出訊號的delay。使輸出波形與輸入波型有半個Man_clk週期的delay,如此讓輸出波型較為穩定,若不加此
delay,則輸出波行會出現peak而非正常的方波。
曼徹斯特解碼
程式碼
module module (1)catch_deManIn (2)de_man
catch_deManIn(clk_2k,input_clk,deM_out,clk_2kde_man(man_clk,input_clk,input_w,output_w);
_w,input_clk_w,deMan_in); //freq ratio=>man_clk : input_clk : input_w =
4:2:1
input clk_2k,input_clk,deM_out;
output clk_2k_w,input_clk_w,deMan_in; input input_w,man_clk,input_clk; wire output output_w; clk_2k,input_clk,deM_out,clk_2k_w,input_clk_wwire input_w,output_w,clk; ,deMan_in; reg output_r;
reg deM_out_r;
assign output_w=(input_clk==1)? ((input_w==1)?
assign deMan_in=deM_out_r; 0: 1):((input_w==0)? 0: 1); assign clk_2k_w=clk_2k;
assign input_clk_w=input_clk;
always @(posedge clk_2k) always @(negedge man_clk) begin begin
deM_out_r<=deM_out; output_r<=output_w; end end
endmodule endmodule
說明:
(1) catch_deManIn :在曼徹斯特編碼時,為了使輸出穩定,做了1/8輸入訊號週期
的delay,故此輸出訊號經modulator後的訊號與曼徹斯特解碼的clk不同步;
為此將要送進曼徹斯特解碼的輸入訊號在delay同樣的週期,如此就和曼徹
斯特解碼中兩個clk同步。
(2) )de_man : 工作原理類似曼徹斯特編碼,不同在於clk_input 在high時對到的是輸入訊號的後半週期(因為輸入訊號經兩次delay共delay半個clk_input周期),故當clk_input low時,輸出與輸入相同,反之,當clk_input high 時,輸出與輸入相反,同樣的,此輸出訊號亦在經過一個1/8輸入訊號周期的delay後在送出,以保持訊號的穩定。