FC2カウンター FPGAの部屋 OpenCores.org の I2C controller core をシミュレーションする
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

OpenCores.org の I2C controller core をシミュレーションする

clock stretching でクロックが伸びることがある I2C スレーブを使う予定があって、Xilinx 社の AXI IIC IP がクロック・ストレッチングをサポートしているか?を調べてみたところ、どうやらサポートしていないようなのだ。(”AXI IIC core clock stretching”参照)
clock stretching をサポートするフリーの I2C Master Core を探していたところ、OpenCores.org の I2C controller core を探し当てた。Wishbone インターフェースなのだが、使う際は AXI4 Lite インターフェースに変換すれば良いか?ということで Vivado 2020.2 でプロジェクトを作製して、シミュレーションを行った。素晴らしいことにシミュレーション用のテストベンチやモデルも用意されている。

Vivado 2020.2 の i2c_master_wb プロジェクトを示す。
i2c_master_wb_1_210413.png

論理シミュレーションを行って、$finish までシミュレーションを行った。
i2c_master_wb_2_210413.png

シミュレーションの全体波形を示す。
i2c_master_wb_3_210413.png

シミュレーション波形を拡大すると、Wishbone バスのトランザクションが見えてくる。
最初のトランザクションは 0 番地に 0xfa を Write している。
i2c_master_wb_4_210413.png

Wishbone バスのトランザクションについては、この辺りを参照する。
ぱたへね! ”Wishbone のバスサイクル”
”WishBoneインターフェース・メモ”

I2C Master Core の使用方法を確認するために Wishbone バスのトランザクションと I2C の送受信を表にまとめた。
i2c_master_wb_6_210413.png

I2C Master Core のアドレスマップを”I2C-Master Core Specification”から引用する。
レジスタのマップは”I2C-Master Core Specification”を参照のこと。
i2c_master_wb_5_210413.png

表を CSV で貼っておく。

番号,時刻,アドレス,レジスタ名,R/W,データ,説明
1,46ns,0,PRERlo,W,0xfa,
2,76ns,0,PRERlo,W,0xc8,
3,106ns,1,PRERhi,W,0x00,
4,126ns,0,PRERlo,R,0xc8,
5,146ns,1,PRERhi,R,0x00,
6,176ns,2,CTR,W,0x80,"EN, I2C core enable bit. "
7,206ns,3,TXR,W,0x20,
8,226ns,4,CR,W,0x90,"STA, WR"
9,256ns,4,SR,R,0x03,"TIP, IF"
10,,,,,,0x20出力、ACK
11,"113,386ns",4,SR,R,0x41,"Busy, IF"
12,"113,446ns",3,TXR,W,0x01,
13,"113,466ns",4,CR,W,0x10,WR
14,"113,496ns",4,SR,R,0x43,"Busy, TIP, IF"
15,,,,,,0x01出力、ACK
16,"214,396ns",4,SR,R,0x41,"Busy, IF"
17,"214,426ns",3,TXR,W,0xa5,
18,"214,446ns",4,CR,W,0x10,WR
19,"314,966ns",4,SR,R,0x43,"Busy, TIP, IF"
20,,,,,,"0xa5, ACK"
21,"409,736ns",4,SR,R,0x41,"Busy, IF"
22,"409,766ns",3,TXR,W,0x5a,
23,"409,786ns",4,CR,W,0x50,"STO, WR"
24,"409,816ns",4,SR,R,0x43,"Busy, TIP, IF"
25,,,,,,0x5a出力、ACK、STOP
26,"521,926ns",4,SR,R,0x41,"Busy, IF"
27,"521,956ns",3,TXR,W,0x20,
28,"521,976ns",4,CR,W,0x90,"STA, WR"
29,"522,006ns",4,SR,R,0x43,"Busy, TIP, IF"
30,,,,,,STOP出力
31,"523,506ns",4,SR,R,0x03,"TIP, IF"
32,,,,,,START出力
33,"531,156ns",4,SR,R,0x43,"Busy, TIP, IF"
34,,,,,,0x20出力、ACK
35,"635,136ns",4,SR,R,0x41,"Busy, IF"
36,"635,166ns",3,TXR,W,0x01,
37,"635,186ns",4,CR,W,0x10,WR
38,"635,216ns",4,SR,R,0x43,"Busy, TIP, IF"
39,,,,,,0x01出力、ACK
40,"736,136ns",4,SR,R,0x41,"Busy, IF"
41,"736,166ns",3,TXR,W,0x21,
42,"736,186ns",4,CR,W,0x90,"STA, WR"
43,"736,216ns",4,SR,R,0x43,"Busy, TIP, IF"
44,,,,,,"Repeat Start, 0x21"
45,"850,366ns",4,SR,R,0x41,"Busy, IF"
46,"850,396ns",4,CR,W,0x20,"RD, ACK"
47,"850,426ns",4,SR,R,0x43,"Busy, TIP, IF"
48,,,,,,0xa5入力、ACK
49,"951,346ns",4,SR,R,0x41,"Busy, IF"
50,"951,376ns",3,RXR,R,0xa5,
51,"951,406ns",4,CR,W,0x20,"RD, ACK"
52,"951,436ns",4,SR,R,0x43,"Busy, TIP, IF"
53,,,,,,0x5a入力、ACK
54,"1,052,326ns",4,SR,R,0x41,"Busy, IF"
55,"1,052,356ns",3,RXR,R,0x5a,
56,"1,052,386ns",4,CR,W,0x20,"RD, ACK"
57,"1,052,416ns",4,SR,R,0x43,"Busy, TIP, IF"
58,,,,,,xx入力
59,"1,153,306ns",4,SR,R,0xX1,
60,"1,153,336ns",3,RXR,R,0xXX,
61,"1,153,366ns",4,CR,W,0x28,"RD, NACK"
62,"1,153,396ns",4,SR,R,0xX3,"TIP, IF"
63,,,,,,"xx入力, NACK"
64,"1,254,286ns",4,SR,R,0xX1,
65,"1,254,316ns",3,RXR,R,0xXX,
66,"1,254,346ns",3,TXR,W,0x20,
67,"1,254,366ns",4,CR,W,0x90,"STA, WR"
68,"1,254,396ns",4,SR,R,0xX3,"TIP, IF"
69,"1,265,046ns",4,SR,R,0xc3,"RxACK, Busy, TIP, IF"
70,,,,,,0x20出力、ACK
71,"1,368,516ns",4,SR,R,0x41,"Busy, IF"
72,"1,368,546ns",3,TXR,W,0x10,
73,"1,368,566ns",4,CR,W,0x10,WR
74,"1,368,596ns",4,SR,R,0x43,"Busy, TIP, IF"
75,,,,,,0x10出力、ACK
76,"1,469,516ns",4,SR,R,0xc1,"RxACK, Busy, IF"
77,"1,469,546ns",4,CR,W,0x40,STO

  1. 2021年04月13日 04:15 |
  2. FPGAを使用したシステム
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/5205-d1f674a4
この記事にトラックバックする(FC2ブログユーザー)