ModelSim-Altera_6.5仿真入门教程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

平台

软件:ModelSim-Altera 6.5e (Quartus II 10.0) Starter Edition

内容

1 设计流程

使用ModelSim仿真的基本流程为:

图1.1 使用ModelSim仿真的基本流程

2 开始

2.1 新建工程

打开ModelSim后,其画面如图2.1所示。

图2.1 ModelSim画面

1. 选择File>New>Preject创建一个新工程。打开的Create Project对话框窗口,可以指定工程的名称、路径和缺省库名称。一般情况下,设定Default Library Name为work。指定的名称用于创建一个位于工程文件夹内的工作库子文件夹。该对话框如图

2.2所示,此外还允许通过选择.ini文件来映射库设置,或者将其直接拷贝至工程中。

图2.2 创建工程的对话框

2. 按照图2.3所示,设置Project Name为LED_FLOW,Project Location为D:/led_flow。

图2.3 输入工程信息

当单击OK按钮后,在主体窗口的下方将出现Project标签,如图2.4所示。

图2.4 Project标签

3. 之后,将出现Add Items to the Project的对话框,如图2.5所示。

图2.5 在工程中,添加新项目

2.2 在工程中,添加新项目

在Add Items to the Project对话框中,包括以下选项:

•Create New File——使用源文件编辑器创建一个新的Verilog、VHDL、TCL或文本文件•Add Existing File——添加一个已存在的文件

•Create Simulation——创建指定源文件和仿真选项的仿真配置

•Create New Folder——创建一个新的组织文件夹

1. 单击Create New File。打开图

2.6所示窗口。

图2.6 创建工程文件夹

2. 输入文件名称:LED_FLOW,然后选择文件类型为Verilog。

图2.7 输入工程文件信息

3. 单击OK,关闭本对话框。新的工程文件将会在工程窗口显示。单击Close,以关闭Add Items to the Project。

图2.8 新的设计文件LED_FLOW.v

4. 双击打开LED_FLOW.v文件(注意:若是Verilog文件已经关联了其他的文本编辑器,则双击后在关联的文本编辑器中打开)。

图2.9 LED_FLOW代码输入窗口

在LED_FLOW.v输入下面的测试平台代码:

view source

print?

01`timescale1ns/1ns

02module LED_FLOW;

03

04reg CLOCK_50M;

05reg RST_N;

06wire[9:0] LED;

07

08led led_inst

09(

10 .clk_50M(CLOCK_50M),

11 .reset_n(RST_n),

12 .led(LED)

13);

14

15initial

16begin

17 CLOCK_50M = 0;

18 while(1)

19 #10 CLOCK_50M = ~CLOCK_50M; 20end

21

22initial

23begin

24 RST_N = 0;

25 while(1)

26 #10 RST_N = 1;

27end

28

29initial

30begin

31 $display($time,"CLOCK_50M=%d RST_N=%d LED =%d", CLOCK_50M, RST_N, LED);

32end

33

34endmodule

录入完代码后,单击Save。

图2.10 输入testbench代码

5. 选择File>New>Source>Verilog,创建新的Verilog文件,如图2.11所示。

图2.11 创建新的Verilog文件

6. 录入下面的代码,录入画面如图2.12 所示。

view source

print?

1`timescale1ns/1ns

2module led(

3 input clk_50M, // System clock 50MHz

4 input reset_n, // System reset

5 output reg[9:0] led // led

6);

7

8reg[13:0] counter = 0;

9reg[3:0] state = 0;

view source

print?

01always@ (posedge clk_50M, negedge reset_n)

02 if(!reset_n)

03 counter <= 0;

04 else

05 counter <= counter + 1'b1;

06

07always@ (posedge counter[13])

08 if(!reset_n)

09 state <= 0;

10 else

11 begin

12 if(state == 4'b1001)

13 state <= 0;

14 else

15 state <= state + 1'b1;

16 end

17

18always@ (posedge clk_50M, negedge reset_n)

19 if(!reset_n)

20 led <= 0;

21 else

22 begin

23 case(state)

24 4'b0000: led <= 10'b00000_00001;

25 4'b0001: led <= 10'b00000_00010;

26 4'b0010: led <= 10'b00000_00100;

27 4'b0011: led <= 10'b00000_01000;

28 4'b0100: led <= 10'b00000_10000;

29 4'b0101: led <= 10'b00001_00000;

30 4'b0110: led <= 10'b00010_00000;

31 4'b0111: led <= 10'b00100_00000;

32 4'b1000: led <= 10'b01000_00000;

33 4'b1001: led <= 10'b10000_00000;

34 default: led <= 10'b00000_00001;

35 endcase

36 end

37

相关文档
最新文档