FPGA活用回路&サンプル記述集(4) ―― 安定動作のための回路
tag: 半導体 電子回路 ディジタル・デザイン
技術解説 2009年4月 6日
input si ; ←シリアル・データ入力
output [7:0] pout ; ←パラレル・データ出力
output rcvd ; ←受信終了パルス出力
output ferr ; ←フレーミング・エラーパルス出力
input [10:0] div ; ←※1
input clk ;
input nreset ;
reg [4:0] stat ;
reg [10:0] dc ;
reg [7:0] pout ;
reg rcvd ;
reg ferr ;
always @( posedge clk or negedge nreset )
begin
if( !nreset ) begin
stat <= 0 ;←リセット時の各レジスタの初期化
pout <= 0 ;
dc <= 0 ;
rcvd <= 0 ;
ferr <= 0 ;
end
else begin
if( dc == 0 ) begin←※2
dc <= div ;
if( stat != 0 )
stat <= stat + 5'd01 ;
end
else
if( stat != 5'd00 )
dc <= dc - 1 ; ←分周カウンタのデクリメント
case( stat )
0: begin
stat <= { 4'b0000,~si } ; ←スタート・ビット待ち
ferr <= 0 ;
rcvd <= 0 ;
end
2,4,6,8,10,12,14,16,18,20:
;
1: begin
if( si != 0 )
stat <= 0 ;
end
3,5,7,9,11,13,15,17:←※3
if( dc == 0 ) begin
pout[7:0] <= { si,pout[7:1] } ;
end
19:
if( dc == 0 ) begin←※4
rcvd <= 1 ;
stat <= 0 ;
if( si == 0 )
ferr <= 1 ;
end
21,22,23,24,25,26,27,28,29,30,31:
stat <= 0 ;
endcase
end
end
endmodule
module sciout( so, pi, div, xmit, rdy, clk, nreset );
output so ; ←シリアル・データ出力
input [7:0] pi ; ←パラレル・データ入力
input [10:0] div ; ←※5
input xmit ; ←フレーミング送信開始、パルス入力
output rdy ; ←送信中表示(送信中'0'になる)
input clk ;
input nreset ;
reg [7:0] ps8 ;
reg so ;
reg [4:0] stat ;
reg [10:0] dc ;
reg rdy ;
always @( posedge clk or negedge nreset )
begin
if( !nreset ) begin←リセット時の各レジスタの初期化
ps8 <= 8'h00 ;
stat <= 5'h00 ;
dc <= 16'h0000 ;
rdy <= 1'b1 ;
so <= 1'b1 ;
end
else begin
if( dc == 16'h0000 )
dc <= div ;
else
if( stat != 5'h00 )
dc <= dc - 1 ;
if( dc == 16'h0000 && stat != 5'h00 )
stat <= stat + 5'h01 ;
case( stat )
5'd00: begin
if( xmit == 1'b1 ) begin
rdy <= 1'b0 ;←送信開始.スタート・ビット送出
ps8 <= pi ;
stat <= 5'h01 ;
so <= 1'b0 ;
end
else
rdy <= 1'b1 ;
end
5'd01:
rdy <= 0 ;
5'd02,5'd04,5'd06,5'd08,5'd10,←データを送出
5'd12,5'd14,5'd16:
if( dc == 16'h0000 ) begin
so <= ps8[0] ;
ps8[6:0] <= ps8[7:1] ;
end
5'd03,5'd05,5'd07,5'd09,5'd11,
5'd13,5'd15,5'd17:
;
5'd18, 5'd19: begin
so <= 1'b1 ; ←ストップ・ビットを送出
end
default: begin
stat <= 5'd00 ;
rdy <= 1'b1 ;
end
endcase
end
end
endmodule
リスト2-1 シリアル通信のためのVerilog HDL記述
注1;ボー・レート分周比.分周比はボー・レートの分周比の半分にする
注2;分周カウンタが0になったらステートを進める
注3;シリアル・データの取り込み
注4;ストップ・ビットの確認
注5;ボー・レート分周比.分周比はボー・レートの分周比の半分にする
tag: FPGA