芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 8324|回复: 0

1.1 IP核应用之计数器

[复制链接]
  • TA的每日心情
    慵懒
    2021-2-24 10:16
  • 428

    主题

    811

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    16107
    QQ
    发表于 2019-6-13 16:50:47 | 显示全部楼层 |阅读模式
    本节导读
    在第二章中提到当前FPGA的开发方式主要分为三种,分别是:原理图、Verilog HDL以及IP核。本节将了解FPGA的IP核相关知识并以计数器IP核为例学习基本IP使用的方法。
    Altera IP核既包括了诸如逻辑和算术运算等简单的IP核,也包括了诸如数字信号处理器、以太网MAC、PCI/PCIE等接口比较复杂的系统模块。Quartus Prime中使用IP Catalog可以用以修改和创建包含定制IP核的设计文件,然后在设计文件中例化IP核。在 IP Catalog中可以创建、定制和例化 Altera IP 核以及参数化模型库(LPM)。
    3.3.1 IP核创建流程
    新建一个以名为counter_ip的工程保存在prj下,然后单击Tools→IP Catalog来启动IP Catalog,如图 3.3 1所示。
    3.3-1.png
    图 3.3 1 启动Mega Wizard插件管理器
    启动后可在主界面的右端看到IP Catalog。这与之前版本不同,这里IP Catalog替代了早期版本的Mega Wizard Plug-In Manager。
    在图 3.3 2IP Catalog界面中,在搜索框中输入counter即可找到LPM_COUNTER并将其选中,并将输出目录修改为工程文件夹下的ip文件夹,并以counter保存,单击Next。
    3.3-2.png
    图 3.3 2 参数设置界面第二页
            选择实现IP的语言类型,此处选择常用的Verilog格式,如图 3.3 3所示。
    3.3-3.png
    图 3.3 3 选择语言类型
    在弹出的图 3.3 4将计数器位数设置为4位、计数方式为递增计数,这里可以最大支持256位输出,单击Next。
    3.3-4.png
    图 3.3 4参数设置界面第三页
    在弹出的图 3.3 5中,发现可选计数使能、时钟使能输入以及支持可选进位输入和进位输出,二进制计数(从0开始递增或者从255开始递减)和计数值(计数器递增计数到用户指定的计数值或者从用户指定的计数值开始递减计数并重复)。这里先配置为计数值计数且为10d,有进位输入以及输出,单击Next。
    3.3-5.png
    图 3.3 5参数设置界面第四页
    在弹出的图 3.3 6中,发现本IP支持可选同步(异步)复位、加载和设置输入。这里先不进行选择,直接单击Next。
    3.3-6.png
    图 3.3 6参数设置界面第五页
            在弹出的图 3.3 7生成的仿真库,使用默认设置直接单击Next。
    3.3-7.png
    图 3.3 7 生成仿真库
    在弹出的图 3.3 8中汇总了可选生成的文件。其中第一个是VHDL源文件,对于本设计是必选的;AHDL包含文件,可以在文本设计文件(.tdf)中使用;VHDL组件声明文件,可以在VHDL设计文件中使用;Quartus II符号文件可以在原理图设计中使用;例化模板文件以及VerilogHDL黑盒文件供给第三方综合工具使用。这里仅勾选黑盒文件点击Finish。
    3.3-8.png
    图 3.3 8 可生成文件汇总界面
            在弹出的图 3.3 9中提示是否将生成的IP核加入工程,这里单击Yes,即可在工程下看到加入的IP核文件。
       3.3-9  1.png 3.3-9  2.png
    图 3.3 9 生成的IP核加入工程
    3.3.2 仿真及板级验证
    进行分析和综合直至没有错误以及警告。为了测试仿真编写测试激励文件,新建counter_tb.v保存到testbench文件夹下。。这里生成了一个周期为20ns的时钟clk,并且例化了需要测试的counter.v,产生了20次占空比为1:5的脉冲信号
      
    `timescale 1ns/1ns
      
    `define clock_period 20
      
    module counter_tb;
      
      
        reg cin;    //进位输入
      
        reg clk;    //计数基准时钟
      
       
      
        wire cout;//进位输出
      
        wire [3:0  q;
      
      
        counter counter0(
      
            .cin(cin),
      
            .clock(clk),
      
            .cout(cout),
      
            .q(q)
      
        );
      
       
      
        initial  clk = 1;
      
        always #(`clock_period/2)clk = ~clk;
      
       
      
        initial begin
      
            repeat(20)begin
      
                cin = 0;
      
                #(`clock_period*5)cin = 1;
      
                #(`clock_period)cin = 0;        
      
            end
      
            #(`clock_period*200);
      
            $stop;
      
        end
      
      
    endmodule
      
    设置好仿真脚本后进行功能仿真,可以看到如图 3.3‑10所示的波形文件。将q的显示切换为无符号十进制,可以看出每当cin输入一次高电平,输出q自加一直至加满到9d(从0开始加)自动清零并开始下一轮计数。符合预期设计,对于此时功能仿真出现毛刺,可先不深究。
    3.3-10.png
    图 3.3‑10计数值为10的功能仿真
    3.3.3 已生成IP核参数的修改
    现在将IP核位数进行更改为二进制计数,在项目导航中选择IP组件,并选中先前生成的counter.v右键编辑IP参数,也可以双击,如图 3.3‑11所示。
    3.3-11.png
    图 3.3‑11 编辑现有的IP核
    重新分析和综合后,再次进行功能仿真。出现如图 3.3‑12的波形文件,可以看到输出q在输入cin的控制下进行自加一次直至加满到15d(4位计数器)后自动清零并开始下一轮计数。
    3.3-12.png
    图 3.3‑12 二进制计数功能仿真波形
    若现在想修改设计为8bit计数器,可以再次修改IP核设置,此外还可以将两个4bit计数器进行级联,即前一级的进位输出连接到下一级的输入端,最终将两个4bit输出拼接为一个8bit总的输出。

    在本工程目录的rtl文件夹下新建Verilog File文件在此文件下输入以下内容并以counter_top.v保存,并将该文件设置为顶层文件。这里实现例化两个4bit计数器IP核,且将其进行两级级联。
      
    module counter_top(cin,clk,cout,q);
      
      
        input cin;
      
        input clk;
      
       
      
        output cout;
      
        output [7:0]q;
      
       
      
        wire cout0;
      
       
      
        counter  counter0(
      
            .cin(cin),
      
            .clock(clk),
      
            .cout(cout0),
      
            .q(q[3:0])
      
        );
      
       
      
        counter  counter1(
      
            .cin(cout0),
      
            .clock(clk),
      
            .cout(cout),
      
            .q(q[7:4])
      
        );  
      
      
    endmodule
      
    分析综合无误后点击RTL Viewer可以看如图 3.3‑13所示的原理图,第一级的进位输出端连接到了第二级计数器的输入端,数据输出端为两级计数器拼接而成
    3.3-13.png
    图 3.3‑13 两级级联的计数器原理图
    为了测试仿真编写测试激励文件,新建counter_top_tb.v文件并输入以下内容再次进行分析和综合直至没有错误以及警告,保存到testbench文件夹下。这里除产生了系统时钟以及复位信号还需生成了占空比为1:5的cin信号(其他占空比也可)。
      
    `timescale 1ns/1ns
      
    `define clock_period 20
      
    module counter_top_tb;
      
      
        reg cin;    //进位输入
      
        reg clk;    //计数基准时钟
      
       
      
        wire cout;//进位输出
      
        wire [7:0  q;
      
      
        counter_top counter0(
      
            .cin(cin),
      
            .clk(clk),
      
            .cout(cout),
      
            .q(q)
      
        );
      
       
      
        initial  clk = 1;
      
        always #(`clock_period/2)clk = ~clk;
      
       
      
        initial begin
      
            repeat(300)begin
      
                cin = 0;
      
                #(`clock_period*5)cin = 1;
      
                #(`clock_period)cin = 0;        
      
            end
      
            #(`clock_period*200);
      
            $stop;
      
        end
      
      
    endmodule
      
    设置好仿真脚本后进行功能仿真,可以看到如图 3.3‑14所示的波形文件,可以看出输出q在输入cin的控制下进行自加一次直至加满到255d(8位计数器)后自动清零且产生一个系统时钟周期的cout高电平并开始下一轮计数。这里在cout高电平后,出现了一个毛刺信号,这里为IP核本身问题,此处不做讨论。
    3.3-14.png
    图 3.3‑14 两级级联4位计数器功能仿真波形图
    现在再次将计数值改为10d 后再仿真,发现功能仿真波形图如图 3.3‑15所示。可以看出输出q在输入cin的控制下进行自加一次直至加满到153d后自动清零并开始下一轮计数。这里之所以是153d,是因为我们将每一级计数器设置为10d,由于计数器从0开始加实际计数满值为9d也就是二进制的1001b,拼接起来就是1001_1001b,即为十进制的153。这部分的具体应用将在后面课程数码管的使用一讲中详细阐述。
    3.3-15.png
    图 3.3‑15 两级级联计数值为10的计数器功能仿真波形图
    本章以LPM类整数运算IP核中的LPM_COUNTER为例,了解了FPGA中IP核的相关技术知识并完成了一个基本的IP核生成、仿真以及调用的流程。请以此为基础自行完成生成其他IP核(此处推荐使用数字运算类IP核)并进行仿真以及板级验证。
    3.3.4 Quartus IIIP核参数的修
    需注意的是在Quartus II软件中是通过Tools→Mega Wizard Plug-In Manager 来启动 MegaWizard 插件管理器来对IP核进行相关操作,如图 3.3‑16所示。
    3.3-16.png
    图 3.3‑16 启动Mega Wizard插件管理器
    弹出图 3.3‑17对话框,这里有三个选项分别是新建一个定制IP核、编辑现有的IP核以及复制一个现有的定制IP核。这里先单击创建一个新的定制IP。
    3.3-17.png
    图 3.3‑17 Mega Wizard插件管理器启动界面
    在弹出的图 3.3‑18 MegaWizard插件管理器的参数设置界面中,在搜索框中输入counter即可显示出LPM_COUNTER选中,并将输出目录确定为工程文件夹下的ip文件夹,并以counter保存,单击Next。
    3.3-18.png
    图 3.3‑18 参数设置界面第二页
    以下操作就均与Quartus Prime中一致了。



    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

    GMT+8, 2024-11-21 18:23 , Processed in 0.113536 second(s), 35 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表