• 基于FPGA的呼叫设备verilog开发


    欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程

    目录

    一、理论基础

    二、核心程序

    三、测试结果


    一、理论基础

           随着集成电路技术的发展,电子设计自动化(EDA)逐渐成为重要的设计手段,已经广泛应用于模拟与数字电路系统等许多领域。电子设计自动化是一种实现电子系统或电子产品自动化设计的技术,它与电子技术,微电子技术的发展密切相关,它吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机作为工作平台,促进了工程发展。EDA的一个重要特征就是使用硬件描述语言(HDL)来完成的设计文件,Verilog语言是经IEEE确认的标准硬件语言,在电子设计领域受到了广泛的接受。

    1.将按键编号,当某一路由(按键)呼叫时,能显示该路编号,且相应指示灯点亮;

    2.能在显示端发出声光报警信号,报警时间2s左右,可手动切除;

    3.可扩展至十六路呼叫器;

    4.可设计每一路相应声音报警不同;

    5.设计一存储功能,将同时按下的呼叫路由排序依次在输出端显示。

    二、核心程序

           当FPGA接收到16路控制信号的某路信号的时候,对应的输出显示使能信号,每个显示使能信号来控制对应的显示过程。其具体的设计代码如下:

    1. always @(posedge clk or negedge rst)
    2. begin
    3. if(!rst)
    4. begin
    5. led<=1'b0;
    6. num<=1'b0;
    7. bee<=1'b0;
    8. end
    9. else begin
    10. if(cnt<8'b11111111)
    11. begin
    12. led<=1'b1;
    13. num<=1'b1;
    14. bee<=1'b1;
    15. end
    16. if(cnt==8'b11111111||cnt==8'b00000000)
    17. begin
    18. led<=1'b0;
    19. num<=1'b0;
    20. bee<=1'b0;
    21. end
    22. end
    23. end

    手动切除声光报警信号模块

           上面的模块基本实现了警报信号的发送,但是在实践情况下警报信号应该可以手动的切除,否则就会影响正常的设备使用。其具体的设计构思为,当每路信号发送出控制信号的时候,发送显示使能信号,当切除信号发出的时候,警报信号马上切除。其主要代码如下:

    1. always @(posedge clk or negedge rst)
    2. begin
    3. if(!rst)
    4. begin
    5. cnt<=8'b00000000;
    6. end
    7. else begin
    8. if(en_able1==1'b0&&en_able2==1'b0)
    9. cnt<=8'b00000000;
    10. if(en_able1==1'b1&&en_able2==1'b1)
    11. cnt<=8'b00000000;
    12. if(en_able1==1'b1&&en_able2==1'b0)
    13. begin
    14. if(cnt==8'b11111111)
    15. cnt<=8'b11111111;
    16. else
    17. cnt<=cnt+1'b1;
    18. end
    19. if(en_able1==1'b0&&en_able2==1'b1)
    20. cnt<=8'b00000000;
    21. end
    22. end

    同时按下的呼叫路由排序依次在输出端显示模块

          前面我们讨论的都是只有一路信号发出信号的说明,现在我们要讨论当信号同时发出的时候,系统是如何工作的。并且实现信号编号的一次排序。这个模块的主要难点在于,系统为16路系统,那么当不同的信号发出控制使能信号的时候,其组合可能性是个天文数值。应此我们必学改变传统的设计思路。在这里,我们采用ROM来设计一个存储器来实现这个功能。

          我们将16路信号分为4个部分,例如1-4路信号的16种组合情况为一个模块。而后面的5-8,9-12,13-16的编号为就为在第一种的情况下加上4,8,12,从而实现同时显示编号的功能。

        我们首先来设计一个MIF文件来做为ROM的存储文件。其具体内容如下:

    DEPTH = 32;

    WIDTH = 16;

    ADDRESS_RADIX = HEX;

    DATA_RADIX = HEX;

    CONTENT

    BEGIN

    0 : 0000;

    1 : 0001;

    2 : 0020;

    3 : 0021;

    4 : 0300;

    5 : 0301;

    6 : 0320;

    7 : 0000;

    8 : 4000;

    9 : 4001;

    A : 4020;

    B : 4021;

    C : 4300;

    D : 4301;

    E : 4320;

    F : 4321;

    END ;

    其深度为32,宽度为16,其文件的内容如上。其每组信号的排序有16种情况,即0000,0001,0020,0021等等。然后利用QUARTUSII来设计ROM的IP核。

    三、测试结果

    其具体的仿真结论如下:

            从上面的显示过程中,当第3路信号发送信号的时候,那么对应的第三路LED信号显示灯亮,而且对应的编号number显示2,表示第三路信号,其对应的编号为0,1,2……15,表示第一路到第16路信号,应此从上面的仿真图可以看到,显示标号为2.此外,警报器发出声音,bee信号的每一路对应着不同的报警信号。从而验证了这个模块的正确性。

    当切除信号的发出的时候哦,切除使能信号enable2使警报信号结束。

          如图所示,当切除信号del发出一个脉冲的时候,LED显示灯,每路的编号信号以及BEE警报信号都马上停止,通过这个仿真图,我们基本验证了手动切除模块的正确性。  

           基于FPGA的16路呼叫器设计过程。对于设计部分。整个呼叫器的设计分为软、硬件两个部分。软件部分采用Verilog HDL硬件描述语言进行设计,硬件部分采用以555时基电路进行设计。设计完成后,将验证正确的顶层原理图文件下载到实验箱,与面包板上搭建的模拟电路相连,进行功能验证。

    A02-32

  • 相关阅读:
    项目部署与上线
    【七夕】是时候展现专属于程序员的“浪漫”了
    Python语言:函数的使用
    爬虫系统云平台部署与维护:利用Docker和Kubernetes优化运维
    LeetCode__无重复字符的最长子串
    Create Fillable PDF Crack
    【数据结构】顺序表的初始化和插入
    用python编写远程控制程序
    多容器SSM整合
    【数值计算方法】非线性方程(组)和最优化问题的计算方法:非线性方程式求根的二分法、迭代法、Newton 迭代法及其Python实现
  • 原文地址:https://blog.csdn.net/ccsss22/article/details/128085455