FPGA学习笔记Project基于Quartus Prime和ModelSim任务task的使用
发布日期:2021-07-01 03:12:26 浏览次数:2 分类:技术文章

本文共 2404 字,大约阅读时间需要 8 分钟。

FPGA学习笔记Project基于Quartus Prime和ModelSim任务task的使用

一、Verilog HDL中任务:

任务的关键字是task,利用任务可以把一个大的程序模块分解成很多小的子模块,方便调试,并且能使结构清晰。

###任务(task)定义与调用的格式分别如下:

task <任务名>; //注意无端口列表

端口及数据类型声明语句;
其他语句;
endtask

任务调用的格式为

<任务名>(端口1,端口2,······);

任务调用时和定义时的端口变量应是一一对应的

二、实例:定义一个完成两个操作数按位与操作的任务,然后在后面的算术逻辑单元的描述中,调用该任务完成与操作。

(一) 使用Verilog HDL语言对电路进行描述

  • 新建工程:File—New Project Wizard在这里插入图片描述
  • 设置当前工作目录及工程保存路径(路径中不能有中文及空格,可使用下划线’_’);第二栏中填写工程名字;第三栏是顶层文件的实体名,一般与工程名相同。(工程名的命名一般得符合标识符的命名原则)
    在这里插入图片描述
  • 无相关文件需要加入,跳过即可
    无相关文件需要加入,跳过即可
  • 选择目标器件:按照实际需求选择合适的器件即可。在这里插入图片描述
  • 选择综合器和仿真器:在Simulation一行,选择ModelSim-Altera,表示选择该仿真器进行仿真;Format一栏选择Verilog HDL。在这里插入图片描述
  • 结束设置:出现工程信息汇总窗口(Summary)。在这里插入图片描述
  • 在当前工程内新建Verilog HDL文件:File—New—Verilog HDL File在这里插入图片描述
    在这里插入图片描述
  • 输入程序在这里插入图片描述
    代码示例:(CSDN的Markdown编辑器好像并不支持Verilog HDL语言的高亮,借用javascript)
module alutask(code,a,b,c);input[1:0] code; input[3:0] a,b;output reg[4:0] c;task my_and;input[3:0] a,b;output[4:0] out;integer i; begin for(i=3;i>=0;i=i-1)		out[i]=a[i]&b[i];endendtaskalways@(code or a or b)		begin case(code)		2'b00:my_and(a,b,c);		2'b01:c=a|b;		2'b10:c=a-b;		2'b11:c=a+b;		endcase		endendmodule
  • 保存后将alutask.v文件设置为顶层实体;设置完成后可在Settings—General中查看。
    -在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
  • 编译:Processing—Start Compilation;修改至零错误即可。在这里插入图片描述
  • RTL级综合及门级综合:可在Tools—Netlist Viewers中选择进行RTL级综合或者门级综合。通过综合器,能将文本描述的转化为电路网表结构,并以原理图的形式呈现出来。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

(二)、使用ModelSim进行仿真

  • Test Bench仿真脚本的建立:Processing—Start—Start Test Bench Template Writer在这里插入图片描述
  • 在底部信息栏中可以看到Test Bench仿真脚本的保存路径;再通过File—Open打开在这里插入图片描述

在这里插入图片描述

  • 程序编写

在这里插入图片描述

代码示例:

`timescale 100 ps/ 1 psmodule alutask_vlg_tst();parameter DELY=100;reg eachvec;reg [3:0] a;reg [3:0] b;reg [1:0] code; wire [4:0]  c;                  alutask i1 (	         .a(a),	         .b(b),	         .c(c),	         .code(code)           );initial                                                begin  code=4'd0;a=4'b0000;b=4'b1111;                                                                   #DELY  code=4'd0;a=4'b0111;b=4'b1101; #DELY  code=4'd1;a=4'b0001;b=4'b0011; #DELY  code=4'd2;a=4'b1001;b=4'b0011; #DELY  code=4'd3;a=4'b0011;b=4'b0001; #DELY  code=4'd3;a=4'b0111;b=4'b1001;   $display("Running testbench");                       end                                                    always                                                    begin                                                  @eachvec;                                              end                                                    endmodule
  • 保存后,再对脚本做进一步设置:
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    上图中的Test bench name必须与模块名(即下图红框中)相同
    在这里插入图片描述
  • 仿真:Tools—Run Simulation Tool—RTL Simulation:可以通过左上角的放大与缩小的到合适的图形。在这里插入图片描述

转载地址:https://methadone-no1.blog.csdn.net/article/details/106044604 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Matlab基础部分第一章 MATLAB概述
下一篇:tf.multinomial()/tf.random.categorical()用法解析

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月08日 02时41分05秒