zoukankan      html  css  js  c++  java
  • FPGA编程—组合逻辑编码器等verilog实现

      FPGA编程—组合逻辑编码器等verilog实现本篇博客主要实现对组合逻辑电路的一些常用模块的实现。组合逻辑中,包括译码器,编码器,输入输出选择器,数值比较器,算法单元等。

       FPGA编程—组合逻辑编码器等verilog实现 先来实现编码器,最常用的8-3编码器,这里先讲一下要用到的case ,casex,casez三者的关系和区别。对于8-3编码器因为用到优先级编码,所以三者的区别。Casex中对于某些位呈现x或者z,对这些位比较就会忽略,不予考虑,而只关注其他位的比较结果。casez中对于某些位呈现高组态,对这些位的比较就会忽略,不予考虑,而只关注其他位的比较结果。而case是一种全比较型,逐一进行比较。在应用过程中不建议采用casex或者casez的形式,因为有些综合其不能对两者进行综合,所以建议采用case语句。这里在modelsim中采用casex形式对编码器进行编码。

      这里讲解一下verilog书写代码的格式,首先调用预编译命令`timescale命令,指定仿真时间单位和仿真时间精度,不可省略。

      Module(

        Input clk,

        Input rst_n,

        nput xxx,(这里加入其它输入信号)

        output xx(这里加入其它输出信号)

    );

        reg xxx;

      always@(posedge clk or negedge rst_n)

        begin

          if(rst_n)

            //这里加入要初始化的参数

          else if()

            //这里加入满足此条件的功能

          else()

        end

    assign 输出信号 = 满足要求的输出变量值;

    endmodule

        上述是简单的verilog结构,verilog语法有很多种,其实常用的不多,记住常用的语法就可以了。比如如下:

    localparam N = 20;

    parameter N = 20;

        上述两个参数的作用范围不一样,parameter定义的参数可以用于参数的传递,而localparam定义的的参数只能在module内使用。

    task

    begin

    //加入要执行的语句

    end

    endtask

        这里说一下task和function的区别,在面试的时候可能会被问到。

        task的结构定义需要在过程块的外部,不能定义在内部。task的调用必须在过程块内调用。task的定义可以定义有输入输出端口,也可以不用定义,task可以调用function和其他类的函数。

        function的结构定义也是不能定义在过程快的内部,而且function内部不能出现时延参数,#、@ 等。function只有input变量,不过可以通过参数名来传递一个返回值。

        所以上述两者的区别就是:

            task有输入输出端口,function只有输入端口,没有输出端口。

            task的调用必须通过输出端口来传递输出值,function是通过函数名来传递一个返回值。

            function中不能调用任务类函数,task可以调用function。

            function可以出现在过程块或者连续赋值语句中,task只能出现在过程块中。

            function只能与主模块共用一个仿真时间单位,其内部不能有其他时延参数参与,task中没有此限制。

        repeat();该语句执行重复命令,括号内填写重复的数字即可,如repeat (4) @(posedge clk),该语句的意思是重复执行clk上升沿4次。

    forever # (N/2) clk = !clk;

    forever语句是永远执行的意思,常常用于时钟信号的产生。

    initial

    begin

    //加入要执行的语句

    end

    代码实现部分可以参考 个人专博,网址:http://www.raymontec.com/

  • 相关阅读:
    108. Convert Sorted Array to Binary Search Tree
    How to check if one path is a child of another path?
    Why there is two completely different version of Reverse for List and IEnumerable?
    在Jenkins中集成Sonarqube
    如何查看sonarqube的版本 how to check the version of sonarqube
    Queue
    BFS广度优先 vs DFS深度优先 for Binary Tree
    Depth-first search and Breadth-first search 深度优先搜索和广度优先搜索
    102. Binary Tree Level Order Traversal 广度优先遍历
    How do I check if a type is a subtype OR the type of an object?
  • 原文地址:https://www.cnblogs.com/raymon-tec/p/5828034.html
Copyright © 2011-2022 走看看