7SEG 8 Digits

今回はこの8桁7segLEDを制御してみます。

このモジュールはシリアル(SPI)でセットしたデータをスタチックに点灯するようになっているので

電源、グランドと3本の信号線だけという少ない配線(合計5本)で点灯させることができます。

http://www.robotshop.com/en/dfrobot-8-character-7-segment-spi-led-module.html

インターフェースはシリアルなので、まず2進→10進変換をおこなって、次に各桁のセグメント情報を

パラレルからシリアル変換して転送すればよいことになります。

32ビット8桁10進数変換処理

b32todig8.v

module b32todig8(input clock, input reset_n, input [31:0]bindata, output reg [3:0] dig_8, output reg [3:0] dig_7, output reg [3:0] dig_6, output reg [3:0] dig_5, output reg [3:0] dig_4, output reg [3:0] dig_3, output reg [3:0] dig_2, output reg [3:0] dig_1);

always@(negedge reset_n or negedge clock)

begin

if (reset_n == 0)

begin

dig_8 = 0;

dig_7 = 0;

dig_6 = 0;

dig_5 = 0;

dig_4 = 0;

dig_3 = 0;

dig_2 = 0;

dig_1 = 0;

end

else

begin

dig_1 = ( bindata / 10 ) % 10;

dig_2 = ( bindata / 100 ) % 10;

dig_3 = ( bindata / 1000 ) % 10;

dig_4 = ( bindata / 10000 ) % 10;

dig_5 = ( bindata / 100000 ) % 10;

dig_6 = ( bindata / 1000000 ) % 10;

dig_7 = ( bindata / 10000000 ) % 10;

dig_8 = ( bindata / 100000000 ) % 10;

end

end

endmodule

64ビットパラレルシリアル変換処理

para2Ser64.v

module para2Ser64(clock_in,reset_n,data_in,clock_out,data_out_n,strobe_out_n);

input clock_in, reset_n;

input [63:0]data_in;

output clock_out, data_out_n, strobe_out_n;

reg clock_out, data_out_n, strobe_out_n;

reg [7:0]counter;

reg [63:0]temp;

always @(posedge clock_in or negedge reset_n)

begin

if (rst_n == 0)

begin

clock_out = 0;

data_out = 0;

strobe_out_n = 1;

counter = 0;

temp = data_in;

end

else

begin

counter = counter + 1;

if (counter < 129)

begin

if (counter[0] == 1)

begin

clock_out = 0;

data_out_n = ~temp[63];

temp = temp << 1;

end

else

begin

clock_out = 1;

end

end

else if (counter < 131)

begin

if (counter[0] == 1 )

begin

strobe_out_n = 0;

end

else

begin

strobe_out_n = 1;

end

end

else

begin

counter = 0;

temp = data_in;

end

end

end

endmodule

アクセスカウンター
アクセスカウンター