一起游 手游攻略 手游评测 如何使用Modelsim仿真I2C控制器

如何使用Modelsim仿真I2C控制器

时间: 来源:互联网 浏览:0

ModelSim是Model Technology(Mentor Graphics旗下子公司)推出的HDL硬件描述语言仿真软件。该软件可用于仿真设计的VHDL、Verilog HDL或两种语言的混合程序。这里的仿真是对设计进行功能仿真(也称预仿真),其目的是验证电路功能是否满足设计要求。

本文主要对I2C_Controller模块进行功能仿真。 test_bench的核心是模拟FPGA给出数据24'h729803,同时模拟I2C外设接收数据并给出响应反馈。

505e9206-eb67-11f0-92de-92fbcf53809c.png

1、首先使用Quartus打开HDMI_block_move工程(HDMI_block_move工程下载链接:https://pan.baidu.com/s/1XxFFj-3UTfB_Er-yz0f_Cg提取代码: tera),然后在工程路径下新建一个Verilog test bench仿真文件。右键单击File——New,选择Verilog HDL File,然后单击确定:

50c61ad4-eb67-11f0-92de-92fbcf53809c.png

2. 将以下代码复制到新创建的.v 文件中:

`时间刻度1ns/1ps 模块tb_I2C_Controller(); //输出信号定义regCLOCK; reg [23:0]I2C_DATA; regGO;重新设置; //双向信号定义(I2C_SDAT需要上拉电阻来模拟总线特性)wireI2C_SDAT; reg sdat_drive; //用于模拟从机响应的驱动信号//输入信号定义wireI2C_SCLK;线端;线路确认; //上拉电阻模拟(I2C总线默认高电平) allocateI2C_SDAT=sdat_drive?1'bz :1'b0; //实例化被测模块I2C_Controlleruut (.CLOCK(CLOCK),I2C_DATA(I2C_DATA),GO(GO),RESET(RESET),I2C_SDAT(I2C_SDAT),I2C_SCLK(I2C_SCLK),END(END),ACK(ACK));reg [7:0] cnt_I2Clk; //时钟生成(100MHz,周期10ns)初始beginCLOCK=0; forever #5CLOCK=~CLOCK;end//主仿真流程初始begin//初始化信号I2C_DATA=24'h729803; //写入的目标数据GO=0;RESET=0; sdat_驱动器=1; //初始释放总线(上拉高电平) //复位过程#20RESET=1; //20ns后释放复位//等待模块进入空闲状态#50; //启动I2C写入过程GO=1; #10GO=0; //提供一个时钟周期的GO脉冲cnt_I2Cclk=0; //模拟从机响应(在每个字节传输的第9 个时钟周期将SDA 拉低) //监视时钟线,并在需要响应时将SDA 拉低直到永远@(negedgeI2C_SCLK) begin cnt_I2Cclk=cnt_I2Cclk+1; if(cnt_I2Cclk==29) 开始$stop; end if(uut.CNT==8) begin //当第9位发送时,sdat_drive=0; //产生响应信号(低电平) end elsebegin sdat_drive=1; //其他时间释放总线end end endendmodule

3. 单击保存按钮将文件另存为tb_I2C_Controller.v。

4、安装Quartus软件时,记得安装Modelsim工具(这些安装步骤将在后面的文章中发布)。接下来需要设置Modelsim的安装路径,以便仿真时能够自动调用指定的仿真工具。首先,在“工具”菜单下找到“选项”:

513c3e44-eb67-11f0-92de-92fbcf53809c.png

5、在弹出的对话框中选择EDA Tool Options,点击.指定软件路径:D:intelFPGA_lite17.1modelsim_asewin32aloem:

51982fba-eb67-11f0-92de-92fbcf53809c.png

6.接下来设置模拟文件路径。单击Assignments——Settings:

51f5e86c-eb67-11f0-92de-92fbcf53809c.png

7. 单击Simulation,选择ModelSim-Altera作为仿真工具,然后单击Compile test bench圆圈,然后单击Test Benches.

5279a6fc-eb67-11f0-92de-92fbcf53809c.png

8. 单击新建.

52d8e554-eb67-11f0-92de-92fbcf53809c.png

9.然后将Test bench name填写为tb_I2C_Controller,然后点击File name处对应的.按钮:

533111a2-eb67-11f0-92de-92fbcf53809c.png

10. 选择tb_I2C_Controller.v 文件并单击打开:

539dd300-eb67-11f0-92de-92fbcf53809c.png

11、然后点击Add将仿真文件添加到Test Bench中,依次点击OK、OK、Apply、OK退出窗口:

53f9e064-eb67-11f0-92de-92fbcf53809c.png

54574bf0-eb67-11f0-92de-92fbcf53809c.png

54c91c9e-eb67-11f0-92de-92fbcf53809c.png

12、仿真前,点击Start AnalysisSynthesis按钮进行分析综合:

5524db42-eb67-11f0-92de-92fbcf53809c.png

13、然后点击Tools——运行仿真工具_RTL仿真进行仿真:

5586c80c-eb67-11f0-92de-92fbcf53809c.png

14. 单击“Zoom Full”按钮以显示所有波形。

55f96fce-eb67-11f0-92de-92fbcf53809c.png

15. 最终波形生成如下:

5655eeac-eb67-11f0-92de-92fbcf53809c.png

从波形中可以看出,用于触发I2C写操作的GO信号被拉高一个时钟周期后,I2C开始写入数据。现在要写入的数据是24'h729803,二进制值为0111_0010_1001_1000_0000_0011。如果放大波形并截取三个部分的屏幕截图,您将看到以下内容:

56b4aabe-eb67-11f0-92de-92fbcf53809c.png

571e36b4-eb67-11f0-92de-92fbcf53809c.png

5779bc64-eb67-11f0-92de-92fbcf53809c.png

数据传输的状态周期为ST=2ST=3ST=4ST=5ST=2。此周期发送1 位数据,总共9 个周期(8 位数据+ ACK)。第9 位(1'b1) 确保主机在第9 个时钟周期释放SDA 总线。

标题:如何使用Modelsim仿真I2C控制器
链接:https://yqqlyw.com/news/sypc/69017.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
  • 瑞芯微(EASY EAI)RV1126B I2C使用
  • 基于FPGA的I2C通信协议设计
  • 绯红之境兑换码最新2021 礼包兑换码大全

    绯红之境兑换码最新2021 礼包兑换码大全[多图],绯红之境兑换码怎么领取?绯红之境兑换码有哪些?绯红之境在今日

    2026-01-12
    三国群英传7霸王再临攻略 霸王再临攻略技巧开启方法

    三国群英传7霸王再临攻略 霸王再临攻略技巧开启方法[多图],三国群英传7霸王再临怎么玩?三国群英传7霸王再临

    2026-01-12
    妄想山海怎么加好友 加好友方法大全

    妄想山海怎么加好友 加好友方法大全[多图],妄想山海添加好友功能在哪里?妄想山海添加好友的方法是什么?好友添

    2026-01-12
    江南百景图又见桃花村钓鱼位置在哪?又见桃花村钓鱼攻略

    江南百景图又见桃花村钓鱼位置在哪?又见桃花村钓鱼攻略[多图],江南百景图又见桃花村钓鱼怎么钓?又见桃花村钓

    2026-01-12